1082815dcSEvan Baconimport { ExpoConfig } from '@expo/config-types'; 2082815dcSEvan Bacon 3*8a424bebSJames Ideimport { AndroidManifest, getMainActivityOrThrow } from './Manifest'; 4082815dcSEvan Baconimport { ConfigPlugin } from '../Plugin.types'; 5082815dcSEvan Baconimport { withAndroidManifest } from '../plugins/android-plugins'; 6082815dcSEvan Bacon 7082815dcSEvan Baconconst ANDROID_WINDOW_SOFT_INPUT_MODE = 'android:windowSoftInputMode'; 8082815dcSEvan Bacon 9082815dcSEvan Baconconst MAPPING: Record<string, string> = { 10082815dcSEvan Bacon pan: 'adjustPan', 11082815dcSEvan Bacon resize: 'adjustResize', 12082815dcSEvan Bacon}; 13082815dcSEvan Bacon 14082815dcSEvan Baconexport const withWindowSoftInputMode: ConfigPlugin = (config) => { 15082815dcSEvan Bacon return withAndroidManifest(config, async (config) => { 16082815dcSEvan Bacon config.modResults = setWindowSoftInputModeMode(config, config.modResults); 17082815dcSEvan Bacon return config; 18082815dcSEvan Bacon }); 19082815dcSEvan Bacon}; 20082815dcSEvan Bacon 21082815dcSEvan Baconexport function setWindowSoftInputModeMode( 22082815dcSEvan Bacon config: Pick<ExpoConfig, 'android' | 'userInterfaceStyle'>, 23082815dcSEvan Bacon androidManifest: AndroidManifest 24082815dcSEvan Bacon) { 25082815dcSEvan Bacon const app = getMainActivityOrThrow(androidManifest); 26082815dcSEvan Bacon app.$[ANDROID_WINDOW_SOFT_INPUT_MODE] = getWindowSoftInputModeMode(config); 27082815dcSEvan Bacon return androidManifest; 28082815dcSEvan Bacon} 29082815dcSEvan Bacon 30082815dcSEvan Baconexport function getWindowSoftInputModeMode(config: Pick<ExpoConfig, 'android'>) { 31082815dcSEvan Bacon const value = config.android?.softwareKeyboardLayoutMode; 32082815dcSEvan Bacon 33082815dcSEvan Bacon if (!value) { 34082815dcSEvan Bacon // Default to `adjustResize` or `resize`. 35082815dcSEvan Bacon return 'adjustResize'; 36082815dcSEvan Bacon } 37082815dcSEvan Bacon return MAPPING[value] ?? value; 38082815dcSEvan Bacon} 39