1 line
13 KiB
Plaintext
1 line
13 KiB
Plaintext
{"version":3,"file":"Styles.xml.js","sourceRoot":"","sources":["../../src/android/Styles.xml.ts"],"names":[],"mappings":"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","sourcesContent":["import path from 'path';\nimport { Element } from 'xml-js';\n\nimport { Color } from '../SplashScreenConfig';\nimport { SplashScreenStatusBarStyle, SplashScreenStatusBarStyleType } from '../constants';\nimport {\n readXmlFile,\n writeXmlFile,\n mergeXmlElements,\n xmlElementsEqual,\n writeXmlFileOrRemoveFileUponNoResources,\n} from '../xml-manipulation';\n\nconst STYLES_XML_FILE_PATH = './res/values/styles.xml';\nconst STYLES_V23_XML_FILE_PATH = './res/values-v23/styles.xml';\nconst STYLES_DARK_V23_XML_FILE_PATH = './res/values-night-v23/styles.xml';\n\nconst STYLE_NAME = 'Theme.App.SplashScreen';\nfunction configureStyle(\n xml: Element,\n {\n statusBarHidden,\n statusBarStyle,\n addStatusBarBackgroundColor,\n }: {\n statusBarHidden?: boolean;\n statusBarStyle?: SplashScreenStatusBarStyleType;\n addStatusBarBackgroundColor?: boolean;\n }\n): Element {\n let idx = 0;\n const result = mergeXmlElements(xml, {\n elements: [\n {\n name: 'resources',\n elements: [\n {\n name: 'style',\n attributes: {\n name: STYLE_NAME,\n parent: 'Theme.AppCompat.Light.NoActionBar',\n },\n elements: [\n {\n idx: idx++,\n comment: ` Below line is handled by '@expo/configure-splash-screen' command and it's discouraged to modify it manually `,\n },\n {\n idx: idx++,\n name: 'item',\n attributes: {\n name: 'android:windowBackground',\n },\n elements: [\n {\n text: '@drawable/splashscreen',\n },\n ],\n },\n {\n idx: statusBarHidden === undefined ? undefined : idx++,\n deletionFlag: statusBarHidden === undefined,\n name: 'item',\n attributes: {\n name: 'android:windowFullscreen',\n },\n elements: [{ text: String(statusBarHidden) }],\n },\n {\n idx:\n statusBarStyle === undefined ||\n statusBarStyle === SplashScreenStatusBarStyle.DEFAULT\n ? undefined\n : idx++,\n deletionFlag:\n statusBarStyle === undefined ||\n statusBarStyle === SplashScreenStatusBarStyle.DEFAULT,\n name: 'item',\n attributes: {\n name: 'android:windowLightStatusBar',\n },\n elements: [\n {\n text:\n statusBarStyle === SplashScreenStatusBarStyle.LIGHT_CONTENT\n ? 'false'\n : statusBarStyle === SplashScreenStatusBarStyle.DARK_CONTENT\n ? 'true'\n : '',\n },\n ],\n },\n {\n idx: addStatusBarBackgroundColor ? idx++ : undefined,\n deletionFlag: !addStatusBarBackgroundColor,\n name: 'item',\n attributes: {\n name: 'android:statusBarColor',\n },\n elements: [{ text: '@color/splashscreen_statusbar_color' }],\n },\n {\n comment: ` Customize your splash screen theme here `,\n },\n ],\n },\n ],\n },\n ],\n });\n return result;\n}\n\n/**\n * Compares two subparts (`style` elements with STYLE_NAME name attribute) of given elements disregarding comments\n */\nfunction areStyleElementsEqual(a: Element, b: Element): boolean {\n const styleA = a.elements?.[0].elements?.find(\n ({ name, attributes }) => name === 'style' && attributes?.name === STYLE_NAME\n );\n const styleB = b.elements?.[0].elements?.find(\n ({ name, attributes }) => name === 'style' && attributes?.name === STYLE_NAME\n );\n\n return !!styleA && !!styleB && xmlElementsEqual(styleA, styleB, { disregardComments: true });\n}\n\n/**\n * Removes `style` element with STYLE_NAME name attribute from given element.\n * Function assumes that the structure of the input `element` is correct (`element.elements[name = resources].elements[name = style, attributes.name = STYLE_NAME]`).\n */\nfunction removeStyleElement(element: Element): Element {\n const resources = element.elements?.find(el => el.name === 'resources');\n const idxToBeRemoved =\n resources?.elements?.findIndex(\n el => el.name === 'style' && el.attributes?.name === STYLE_NAME\n ) ?? -1;\n if (idxToBeRemoved !== -1) {\n // eslint-disable-next-line no-unused-expressions\n resources?.elements?.splice(idxToBeRemoved, 1);\n }\n return element;\n}\n\n/**\n * Creates proper element structure with single `style` element disregarding all other styles.\n * Use to create more specific configuration file, but preserving previous attributes.\n * Function assumes that the structure of the input `element` is correct (`element.elements[name = resources].elements[name = style, attributes.name = STYLE_NAME]`).\n */\nfunction elementWithStyleElement(element: Element): Element | undefined {\n const result = { ...element };\n const resources = element.elements?.find(el => el.name === 'resources');\n if (!resources) {\n return;\n }\n const styleElement = resources?.elements?.find(\n el => el.name === 'style' && el.attributes?.name === STYLE_NAME\n );\n if (!styleElement) {\n return;\n }\n result.elements = [{ ...resources, elements: [styleElement] }];\n return result;\n}\n\n/**\n * @param androidMainPath Path to the main directory containing code and resources in Android project. In general that would be `android/app/src/main`.\n */\nexport default async function configureStylesXml(\n androidMainPath: string,\n config: {\n statusBar?: {\n style?: SplashScreenStatusBarStyleType;\n hidden?: boolean;\n backgroundColor?: Color;\n };\n darkMode?: {\n statusBar?: {\n style?: SplashScreenStatusBarStyleType;\n };\n };\n } = {}\n) {\n const statusBarStyle = config.statusBar?.style ?? SplashScreenStatusBarStyle.DEFAULT;\n const statusBarHidden = config.statusBar?.hidden;\n const darkModeStatusBarStyle = config.darkMode?.statusBar?.style;\n const addStatusBarBackgroundColor = Boolean(config.statusBar?.backgroundColor);\n\n if (darkModeStatusBarStyle && !statusBarStyle) {\n throw new Error(\n `'darkModeStatusBarStyle' is available only if 'statusBarStyle' is provided as well.`\n );\n }\n\n const filePath = path.resolve(androidMainPath, STYLES_XML_FILE_PATH);\n const v23FilePath = path.resolve(androidMainPath, STYLES_V23_XML_FILE_PATH);\n const v23DarkFilePath = path.resolve(androidMainPath, STYLES_DARK_V23_XML_FILE_PATH);\n\n const xmlContent = await readXmlFile(filePath);\n const contentWithSingleStyle = elementWithStyleElement(xmlContent);\n const v23XmlContent = await readXmlFile(v23FilePath, contentWithSingleStyle);\n const v23DarkXmlContent = await readXmlFile(v23DarkFilePath, contentWithSingleStyle);\n\n const configuredXmlContent = configureStyle(xmlContent, {\n statusBarHidden,\n addStatusBarBackgroundColor,\n });\n const configuredV23XmlContent = configureStyle(v23XmlContent, {\n statusBarHidden,\n statusBarStyle,\n addStatusBarBackgroundColor,\n });\n const configuredV23DarkXmlContent = configureStyle(v23DarkXmlContent, {\n statusBarHidden,\n statusBarStyle: darkModeStatusBarStyle ?? statusBarStyle,\n addStatusBarBackgroundColor,\n });\n\n if (areStyleElementsEqual(configuredV23DarkXmlContent, configuredV23XmlContent)) {\n await writeXmlFileOrRemoveFileUponNoResources(\n v23DarkFilePath,\n removeStyleElement(configuredV23DarkXmlContent)\n );\n } else {\n await writeXmlFile(v23DarkFilePath, configuredV23DarkXmlContent);\n }\n\n if (areStyleElementsEqual(configuredV23XmlContent, configuredXmlContent)) {\n await writeXmlFileOrRemoveFileUponNoResources(\n v23FilePath,\n removeStyleElement(configuredV23XmlContent)\n );\n } else {\n await writeXmlFile(v23FilePath, configuredV23XmlContent);\n }\n\n await writeXmlFile(filePath, configuredXmlContent);\n}\n"]} |