1*3d6e487dSEvan Baconimport { AndroidConfig } from '@expo/config-plugins';
2*3d6e487dSEvan Bacon
3*3d6e487dSEvan Baconimport { AndroidAppIdResolver } from '../../start/platforms/android/AndroidAppIdResolver';
4*3d6e487dSEvan Baconimport { CommandError } from '../../utils/errors';
5*3d6e487dSEvan Bacon
6*3d6e487dSEvan Baconexport interface LaunchProps {
7*3d6e487dSEvan Bacon  packageName: string;
8*3d6e487dSEvan Bacon  mainActivity: string;
9*3d6e487dSEvan Bacon  launchActivity: string;
10*3d6e487dSEvan Bacon}
11*3d6e487dSEvan Bacon
12*3d6e487dSEvan Baconasync function getMainActivityAsync(projectRoot: string): Promise<string> {
13*3d6e487dSEvan Bacon  const filePath = await AndroidConfig.Paths.getAndroidManifestAsync(projectRoot);
14*3d6e487dSEvan Bacon  const androidManifest = await AndroidConfig.Manifest.readAndroidManifestAsync(filePath);
15*3d6e487dSEvan Bacon
16*3d6e487dSEvan Bacon  // Assert MainActivity defined.
17*3d6e487dSEvan Bacon  const activity = await AndroidConfig.Manifest.getRunnableActivity(androidManifest);
18*3d6e487dSEvan Bacon  if (!activity) {
19*3d6e487dSEvan Bacon    throw new CommandError(
20*3d6e487dSEvan Bacon      'ANDROID_MALFORMED',
21*3d6e487dSEvan Bacon      `${filePath} is missing a runnable activity element.`
22*3d6e487dSEvan Bacon    );
23*3d6e487dSEvan Bacon  }
24*3d6e487dSEvan Bacon  // Often this is ".MainActivity"
25*3d6e487dSEvan Bacon  return activity.$['android:name'];
26*3d6e487dSEvan Bacon}
27*3d6e487dSEvan Bacon
28*3d6e487dSEvan Baconexport async function resolveLaunchPropsAsync(projectRoot: string): Promise<LaunchProps> {
29*3d6e487dSEvan Bacon  // Often this is ".MainActivity"
30*3d6e487dSEvan Bacon  const mainActivity = await getMainActivityAsync(projectRoot);
31*3d6e487dSEvan Bacon
32*3d6e487dSEvan Bacon  const packageName = await new AndroidAppIdResolver(projectRoot).getAppIdFromNativeAsync();
33*3d6e487dSEvan Bacon  const launchActivity = `${packageName}/${mainActivity}`;
34*3d6e487dSEvan Bacon
35*3d6e487dSEvan Bacon  return {
36*3d6e487dSEvan Bacon    mainActivity,
37*3d6e487dSEvan Bacon    launchActivity,
38*3d6e487dSEvan Bacon    packageName,
39*3d6e487dSEvan Bacon  };
40*3d6e487dSEvan Bacon}
41