1import { ExpoConfig } from '@expo/config-types';
2
3import { createAndroidManifestPlugin } from '../plugins/android-plugins';
4import { AndroidManifest, getMainApplication, StringBoolean } from './Manifest';
5
6export const withAllowBackup = createAndroidManifestPlugin(setAllowBackup, 'withAllowBackup');
7
8export function getAllowBackup(config: Pick<ExpoConfig, 'android'>) {
9  // Defaults to true.
10  // https://docs.expo.dev/versions/latest/config/app/#allowbackup
11  return config.android?.allowBackup ?? true;
12}
13
14export function setAllowBackup(
15  config: Pick<ExpoConfig, 'android'>,
16  androidManifest: AndroidManifest
17) {
18  const allowBackup = getAllowBackup(config);
19
20  const mainApplication = getMainApplication(androidManifest);
21  if (mainApplication?.$) {
22    mainApplication.$['android:allowBackup'] = String(allowBackup) as StringBoolean;
23  }
24
25  return androidManifest;
26}
27
28export function getAllowBackupFromManifest(androidManifest: AndroidManifest): boolean | null {
29  const mainApplication = getMainApplication(androidManifest);
30
31  if (mainApplication?.$) {
32    return String(mainApplication.$['android:allowBackup']) === 'true';
33  }
34
35  return null;
36}
37