1import { ExpoConfig } from 'expo/config';
2import { AndroidConfig, ConfigPlugin, withAndroidManifest } from 'expo/config-plugins';
3
4const {
5  addMetaDataItemToMainApplication,
6  getMainApplicationOrThrow,
7  removeMetaDataItemFromMainApplication,
8} = AndroidConfig.Manifest;
9
10const META_BRANCH_KEY = 'io.branch.sdk.BranchKey';
11
12export const withBranchAndroid: ConfigPlugin = (config) => {
13  return withAndroidManifest(config, (config) => {
14    config.modResults = setBranchApiKey(config, config.modResults);
15    return config;
16  });
17};
18
19export function getBranchApiKey(config: ExpoConfig) {
20  return config.android?.config?.branch?.apiKey ?? null;
21}
22
23export function setBranchApiKey(
24  config: ExpoConfig,
25  androidManifest: AndroidConfig.Manifest.AndroidManifest
26) {
27  const apiKey = getBranchApiKey(config);
28
29  const mainApplication = getMainApplicationOrThrow(androidManifest);
30
31  if (apiKey) {
32    // If the item exists, add it back
33    addMetaDataItemToMainApplication(mainApplication, META_BRANCH_KEY, apiKey);
34  } else {
35    // Remove any existing item
36    removeMetaDataItemFromMainApplication(mainApplication, META_BRANCH_KEY);
37  }
38  return androidManifest;
39}
40