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