1082815dcSEvan Baconimport { ExpoConfig } from '@expo/config-types';
2082815dcSEvan Bacon
3082815dcSEvan Baconimport { AndroidManifest, getMainApplication, StringBoolean } from './Manifest';
4*8a424bebSJames Ideimport { createAndroidManifestPlugin } from '../plugins/android-plugins';
5082815dcSEvan Bacon
6082815dcSEvan Baconexport const withAllowBackup = createAndroidManifestPlugin(setAllowBackup, 'withAllowBackup');
7082815dcSEvan Bacon
8082815dcSEvan Baconexport function getAllowBackup(config: Pick<ExpoConfig, 'android'>) {
9082815dcSEvan Bacon  // Defaults to true.
10082815dcSEvan Bacon  // https://docs.expo.dev/versions/latest/config/app/#allowbackup
11082815dcSEvan Bacon  return config.android?.allowBackup ?? true;
12082815dcSEvan Bacon}
13082815dcSEvan Bacon
14082815dcSEvan Baconexport function setAllowBackup(
15082815dcSEvan Bacon  config: Pick<ExpoConfig, 'android'>,
16082815dcSEvan Bacon  androidManifest: AndroidManifest
17082815dcSEvan Bacon) {
18082815dcSEvan Bacon  const allowBackup = getAllowBackup(config);
19082815dcSEvan Bacon
20082815dcSEvan Bacon  const mainApplication = getMainApplication(androidManifest);
21082815dcSEvan Bacon  if (mainApplication?.$) {
22082815dcSEvan Bacon    mainApplication.$['android:allowBackup'] = String(allowBackup) as StringBoolean;
23082815dcSEvan Bacon  }
24082815dcSEvan Bacon
25082815dcSEvan Bacon  return androidManifest;
26082815dcSEvan Bacon}
27082815dcSEvan Bacon
28082815dcSEvan Baconexport function getAllowBackupFromManifest(androidManifest: AndroidManifest): boolean | null {
29082815dcSEvan Bacon  const mainApplication = getMainApplication(androidManifest);
30082815dcSEvan Bacon
31082815dcSEvan Bacon  if (mainApplication?.$) {
32082815dcSEvan Bacon    return String(mainApplication.$['android:allowBackup']) === 'true';
33082815dcSEvan Bacon  }
34082815dcSEvan Bacon
35082815dcSEvan Bacon  return null;
36082815dcSEvan Bacon}
37