1082815dcSEvan Baconimport { ExpoConfig } from '@expo/config-types';
2082815dcSEvan Bacon
3082815dcSEvan Baconimport {
4082815dcSEvan Bacon  addMetaDataItemToMainApplication,
5082815dcSEvan Bacon  addUsesLibraryItemToMainApplication,
6082815dcSEvan Bacon  AndroidManifest,
7082815dcSEvan Bacon  getMainApplicationOrThrow,
8082815dcSEvan Bacon  removeMetaDataItemFromMainApplication,
9082815dcSEvan Bacon  removeUsesLibraryItemFromMainApplication,
10082815dcSEvan Bacon} from './Manifest';
11*8a424bebSJames Ideimport { createAndroidManifestPlugin } from '../plugins/android-plugins';
12082815dcSEvan Bacon
13082815dcSEvan Baconconst META_API_KEY = 'com.google.android.geo.API_KEY';
14082815dcSEvan Baconconst LIB_HTTP = 'org.apache.http.legacy';
15082815dcSEvan Bacon
16082815dcSEvan Baconexport const withGoogleMapsApiKey = createAndroidManifestPlugin(
17082815dcSEvan Bacon  setGoogleMapsApiKey,
18082815dcSEvan Bacon  'withGoogleMapsApiKey'
19082815dcSEvan Bacon);
20082815dcSEvan Bacon
21082815dcSEvan Baconexport function getGoogleMapsApiKey(config: Pick<ExpoConfig, 'android'>) {
22082815dcSEvan Bacon  return config.android?.config?.googleMaps?.apiKey ?? null;
23082815dcSEvan Bacon}
24082815dcSEvan Bacon
25082815dcSEvan Baconexport function setGoogleMapsApiKey(
26082815dcSEvan Bacon  config: Pick<ExpoConfig, 'android'>,
27082815dcSEvan Bacon  androidManifest: AndroidManifest
28082815dcSEvan Bacon) {
29082815dcSEvan Bacon  const apiKey = getGoogleMapsApiKey(config);
30082815dcSEvan Bacon  const mainApplication = getMainApplicationOrThrow(androidManifest);
31082815dcSEvan Bacon
32082815dcSEvan Bacon  if (apiKey) {
33082815dcSEvan Bacon    // If the item exists, add it back
34082815dcSEvan Bacon    addMetaDataItemToMainApplication(mainApplication, META_API_KEY, apiKey);
35082815dcSEvan Bacon    addUsesLibraryItemToMainApplication(mainApplication, {
36082815dcSEvan Bacon      name: LIB_HTTP,
37082815dcSEvan Bacon      required: false,
38082815dcSEvan Bacon    });
39082815dcSEvan Bacon  } else {
40082815dcSEvan Bacon    // Remove any existing item
41082815dcSEvan Bacon    removeMetaDataItemFromMainApplication(mainApplication, META_API_KEY);
42082815dcSEvan Bacon    removeUsesLibraryItemFromMainApplication(mainApplication, LIB_HTTP);
43082815dcSEvan Bacon  }
44082815dcSEvan Bacon
45082815dcSEvan Bacon  return androidManifest;
46082815dcSEvan Bacon}
47