1import { ExpoConfig } from '@expo/config-types'; 2 3import { AndroidManifest, getMainActivityOrThrow } from './Manifest'; 4import { createAndroidManifestPlugin } from '../plugins/android-plugins'; 5 6export const SCREEN_ORIENTATION_ATTRIBUTE = 'android:screenOrientation'; 7 8export const withOrientation = createAndroidManifestPlugin( 9 setAndroidOrientation, 10 'withOrientation' 11); 12 13export function getOrientation(config: Pick<ExpoConfig, 'orientation'>) { 14 return typeof config.orientation === 'string' ? config.orientation : null; 15} 16 17export function setAndroidOrientation( 18 config: Pick<ExpoConfig, 'orientation'>, 19 androidManifest: AndroidManifest 20) { 21 const orientation = getOrientation(config); 22 // TODO: Remove this if we decide to remove any orientation configuration when not specified 23 if (!orientation) { 24 return androidManifest; 25 } 26 27 const mainActivity = getMainActivityOrThrow(androidManifest); 28 29 mainActivity.$[SCREEN_ORIENTATION_ATTRIBUTE] = 30 orientation !== 'default' ? orientation : 'unspecified'; 31 32 return androidManifest; 33} 34