1import chalk from 'chalk'; 2 3import * as Log from '../../log'; 4 5/** An abstract class for interacting with a native device. */ 6export abstract class DeviceManager<IDevice> { 7 constructor(public device: IDevice) {} 8 9 abstract get name(): string; 10 11 abstract get identifier(): string; 12 13 logOpeningUrl(url: string) { 14 Log.log(chalk`\u203A Opening {underline ${url}} on {bold ${this.name}}`); 15 } 16 17 abstract startAsync(): Promise<IDevice>; 18 19 abstract getAppVersionAsync(applicationId: string): Promise<string | null>; 20 21 abstract installAppAsync(binaryPath: string): Promise<void>; 22 23 abstract uninstallAppAsync(applicationId: string): Promise<void>; 24 25 abstract isAppInstalledAsync(applicationId: string): Promise<boolean>; 26 27 abstract openUrlAsync(url: string): Promise<void>; 28 29 abstract activateWindowAsync(): Promise<void>; 30 31 abstract ensureExpoGoAsync(sdkVersion?: string): Promise<boolean>; 32} 33