{"version":3,"file":"UserInterfaceStyle.js","sourceRoot":"","sources":["../../src/android/UserInterfaceStyle.ts"],"names":[],"mappings":";;;;;;;;;AAGA,gEAA2F;AAC3F,qEAAuD;AACvD,yCAAqE;AAExD,QAAA,wBAAwB,GAAG,uBAAuB,CAAC;AAEnD,QAAA,wBAAwB,GAAG;;;;;;;;;;;CAWvC,CAAC;AAEW,QAAA,kBAAkB,GAAG,6CAA2B,CAC3D,wBAAwB,EACxB,oBAAoB,CACrB,CAAC;AAEW,QAAA,sBAAsB,GAAiB,MAAM,CAAC,EAAE;IAC3D,OAAO,kCAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE;QACvC,IAAI,MAAM,CAAC,UAAU,CAAC,QAAQ,KAAK,MAAM,EAAE;YACzC,MAAM,CAAC,UAAU,CAAC,QAAQ,GAAG,qCAAqC,CAChE,MAAM,EACN,MAAM,CAAC,UAAU,CAAC,QAAQ,CAC3B,CAAC;SACH;aAAM;YACL,iBAAiB,CAAC,iBAAiB,CACjC,4BAA4B,EAC5B,8DAA8D,CAC/D,CAAC;SACH;QACD,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF,SAAgB,qBAAqB,CACnC,MAA0D;;IAE1D,yBAAO,MAAM,CAAC,OAAO,0CAAE,kBAAkB,mCAAI,MAAM,CAAC,kBAAkB,mCAAI,IAAI,CAAC;AACjF,CAAC;AAJD,sDAIC;AAED,SAAgB,wBAAwB,CACtC,MAA0D,EAC1D,eAAgC;IAEhC,MAAM,kBAAkB,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;IACzD,uFAAuF;IACvF,IAAI,CAAC,kBAAkB,EAAE;QACvB,OAAO,eAAe,CAAC;KACxB;IAED,MAAM,YAAY,GAAG,iCAAsB,CAAC,eAAe,CAAC,CAAC;IAC7D,YAAY,CAAC,CAAC,CAAC,gCAAwB,CAAC;QACtC,uDAAuD,CAAC;IAE1D,OAAO,eAAe,CAAC;AACzB,CAAC;AAfD,4DAeC;AAED,SAAgB,qCAAqC,CACnD,MAA0D,EAC1D,YAAoB;;IAEpB,MAAM,kBAAkB,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;IACzD,IAAI,CAAC,kBAAkB,EAAE;QACvB,OAAO,YAAY,CAAC;KACrB;IAED,qGAAqG;IACrG,UAAI,YAAY,CAAC,KAAK,CAAC,wBAAwB,CAAC,0CAAE,MAAM,EAAE;QACxD,OAAO,YAAY,CAAC;KACrB;IAED,MAAM,uBAAuB,GAAG,cAAc,CAAC,YAAY,EAAE;QAC3D,wBAAwB;QACxB,mCAAmC;KACpC,CAAC,CAAC;IAEH,MAAM,OAAO,GAAG,IAAI,MAAM,CAAC,mDAAmD,CAAC,CAAC;IAChF,OAAO,uBAAuB,CAAC,OAAO,CAAC,OAAO,EAAE,gCAAwB,CAAC,CAAC;AAC5E,CAAC;AArBD,sFAqBC;AAED,wDAAwD;AACxD,SAAS,cAAc,CAAC,UAAkB,EAAE,WAAqB;IAC/D,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,+BAA+B,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC;IAC7F,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE;QACpC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;YACpC,MAAM,eAAe,GAAG,UAAU,UAAU,GAAG,CAAC;YAChD,KAAK,CAAC,MAAM,CAAC,+BAA+B,GAAG,CAAC,EAAE,CAAC,EAAE,eAAe,CAAC,CAAC;SACvE;KACF;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC","sourcesContent":["import { ExpoConfig } from '@expo/config-types';\n\nimport { ConfigPlugin } from '../Plugin.types';\nimport { createAndroidManifestPlugin, withMainActivity } from '../plugins/android-plugins';\nimport * as WarningAggregator from '../utils/warnings';\nimport { AndroidManifest, getMainActivityOrThrow } from './Manifest';\n\nexport const CONFIG_CHANGES_ATTRIBUTE = 'android:configChanges';\n\nexport const ON_CONFIGURATION_CHANGED = `\npublic class MainActivity extends ReactActivity {\n\n // Added automatically by Expo Config\n @Override\n public void onConfigurationChanged(Configuration newConfig) {\n super.onConfigurationChanged(newConfig);\n Intent intent = new Intent(\"onConfigurationChanged\");\n intent.putExtra(\"newConfig\", newConfig);\n sendBroadcast(intent);\n }\n`;\n\nexport const withUiModeManifest = createAndroidManifestPlugin(\n setUiModeAndroidManifest,\n 'withUiModeManifest'\n);\n\nexport const withUiModeMainActivity: ConfigPlugin = config => {\n return withMainActivity(config, config => {\n if (config.modResults.language === 'java') {\n config.modResults.contents = addOnConfigurationChangedMainActivity(\n config,\n config.modResults.contents\n );\n } else {\n WarningAggregator.addWarningAndroid(\n 'android-userInterfaceStyle',\n `Cannot automatically configure MainActivity if it's not java`\n );\n }\n return config;\n });\n};\n\nexport function getUserInterfaceStyle(\n config: Pick\n): string | null {\n return config.android?.userInterfaceStyle ?? config.userInterfaceStyle ?? null;\n}\n\nexport function setUiModeAndroidManifest(\n config: Pick,\n androidManifest: AndroidManifest\n) {\n const userInterfaceStyle = getUserInterfaceStyle(config);\n // TODO: Remove this if we decide to remove any uiMode configuration when not specified\n if (!userInterfaceStyle) {\n return androidManifest;\n }\n\n const mainActivity = getMainActivityOrThrow(androidManifest);\n mainActivity.$[CONFIG_CHANGES_ATTRIBUTE] =\n 'keyboard|keyboardHidden|orientation|screenSize|uiMode';\n\n return androidManifest;\n}\n\nexport function addOnConfigurationChangedMainActivity(\n config: Pick,\n mainActivity: string\n): string {\n const userInterfaceStyle = getUserInterfaceStyle(config);\n if (!userInterfaceStyle) {\n return mainActivity;\n }\n\n // Cruzan: this is not ideal, but I'm not sure of a better way to handle writing to MainActivity.java\n if (mainActivity.match(`onConfigurationChanged`)?.length) {\n return mainActivity;\n }\n\n const MainActivityWithImports = addJavaImports(mainActivity, [\n 'android.content.Intent',\n 'android.content.res.Configuration',\n ]);\n\n const pattern = new RegExp(`public class MainActivity extends ReactActivity {`);\n return MainActivityWithImports.replace(pattern, ON_CONFIGURATION_CHANGED);\n}\n\n// TODO: we should have a generic utility for doing this\nfunction addJavaImports(javaSource: string, javaImports: string[]): string {\n const lines = javaSource.split('\\n');\n const lineIndexWithPackageDeclaration = lines.findIndex(line => line.match(/^package .*;$/));\n for (const javaImport of javaImports) {\n if (!javaSource.includes(javaImport)) {\n const importStatement = `import ${javaImport};`;\n lines.splice(lineIndexWithPackageDeclaration + 1, 0, importStatement);\n }\n }\n return lines.join('\\n');\n}\n"]}