18d307f52SEvan Baconimport { AndroidAppIdResolver } from './AndroidAppIdResolver';
28d307f52SEvan Baconimport { AndroidDeviceManager } from './AndroidDeviceManager';
38d307f52SEvan Baconimport { Device } from './adb';
48d307f52SEvan Baconimport { startAdbReverseAsync } from './adbReverse';
5*8a424bebSJames Ideimport { AppIdResolver } from '../AppIdResolver';
6*8a424bebSJames Ideimport { BaseOpenInCustomProps, BaseResolveDeviceProps, PlatformManager } from '../PlatformManager';
78d307f52SEvan Bacon
88d307f52SEvan Baconinterface AndroidOpenInCustomProps extends BaseOpenInCustomProps {
98d307f52SEvan Bacon  launchActivity?: string;
108d307f52SEvan Bacon}
118d307f52SEvan Bacon
128d307f52SEvan Baconexport class AndroidPlatformManager extends PlatformManager<Device, AndroidOpenInCustomProps> {
138d307f52SEvan Bacon  constructor(
148d307f52SEvan Bacon    protected projectRoot: string,
158d307f52SEvan Bacon    protected port: number,
168d307f52SEvan Bacon    options: {
178d307f52SEvan Bacon      /** Get the base URL for the dev server hosting this platform manager. */
188d307f52SEvan Bacon      getDevServerUrl: () => string | null;
19212e3a1aSEric Samelson      /** Expo Go URL */
20212e3a1aSEric Samelson      getExpoGoUrl: () => string;
21212e3a1aSEric Samelson      /** Get redirect URL for native disambiguation. */
22212e3a1aSEric Samelson      getRedirectUrl: () => string | null;
238d307f52SEvan Bacon      /** Dev Client URL. */
248d307f52SEvan Bacon      getCustomRuntimeUrl: (props?: { scheme?: string }) => string | null;
258d307f52SEvan Bacon    }
268d307f52SEvan Bacon  ) {
278d307f52SEvan Bacon    super(projectRoot, {
288d307f52SEvan Bacon      platform: 'android',
298d307f52SEvan Bacon      ...options,
308d307f52SEvan Bacon      resolveDeviceAsync: AndroidDeviceManager.resolveAsync,
318d307f52SEvan Bacon    });
328d307f52SEvan Bacon  }
338d307f52SEvan Bacon
348d307f52SEvan Bacon  async openAsync(
358d307f52SEvan Bacon    options:
368d307f52SEvan Bacon      | { runtime: 'expo' | 'web' }
378d307f52SEvan Bacon      | { runtime: 'custom'; props?: Partial<AndroidOpenInCustomProps> },
388d307f52SEvan Bacon    resolveSettings?: Partial<BaseResolveDeviceProps<Device>>
398d307f52SEvan Bacon  ): Promise<{ url: string }> {
408d307f52SEvan Bacon    await startAdbReverseAsync([this.port]);
418d307f52SEvan Bacon    return super.openAsync(options, resolveSettings);
428d307f52SEvan Bacon  }
438d307f52SEvan Bacon
448d307f52SEvan Bacon  _getAppIdResolver(): AppIdResolver {
458d307f52SEvan Bacon    return new AndroidAppIdResolver(this.projectRoot);
468d307f52SEvan Bacon  }
478d307f52SEvan Bacon
488d307f52SEvan Bacon  _resolveAlternativeLaunchUrl(
498d307f52SEvan Bacon    applicationId: string,
508d307f52SEvan Bacon    props?: Partial<AndroidOpenInCustomProps>
518d307f52SEvan Bacon  ): string {
528d307f52SEvan Bacon    return props?.launchActivity ?? `${applicationId}/.MainActivity`;
538d307f52SEvan Bacon  }
548d307f52SEvan Bacon}
55