import { ExpoConfig } from '@expo/config-types'; import { AndroidManifest, getMainActivityOrThrow } from './Manifest'; import { ConfigPlugin } from '../Plugin.types'; import { withAndroidManifest } from '../plugins/android-plugins'; const ANDROID_WINDOW_SOFT_INPUT_MODE = 'android:windowSoftInputMode'; const MAPPING: Record = { pan: 'adjustPan', resize: 'adjustResize', }; export const withWindowSoftInputMode: ConfigPlugin = (config) => { return withAndroidManifest(config, async (config) => { config.modResults = setWindowSoftInputModeMode(config, config.modResults); return config; }); }; export function setWindowSoftInputModeMode( config: Pick, androidManifest: AndroidManifest ) { const app = getMainActivityOrThrow(androidManifest); app.$[ANDROID_WINDOW_SOFT_INPUT_MODE] = getWindowSoftInputModeMode(config); return androidManifest; } export function getWindowSoftInputModeMode(config: Pick) { const value = config.android?.softwareKeyboardLayoutMode; if (!value) { // Default to `adjustResize` or `resize`. return 'adjustResize'; } return MAPPING[value] ?? value; }