From 6a05eeac1c852db1cb38ac1923b2445e5c85a78e Mon Sep 17 00:00:00 2001 From: itsspriyansh Date: Sat, 24 Aug 2024 17:01:51 +0530 Subject: [PATCH] added default flow and minor refactor --- src/commands/android/constants.ts | 8 ++++- .../android/subcommands/connect/emulator.ts | 29 ++++++++++--------- .../android/subcommands/connect/index.ts | 27 +++++++++++++++-- 3 files changed, 46 insertions(+), 18 deletions(-) diff --git a/src/commands/android/constants.ts b/src/commands/android/constants.ts index 86a6520..88001df 100644 --- a/src/commands/android/constants.ts +++ b/src/commands/android/constants.ts @@ -42,7 +42,13 @@ export const AVAILABLE_SUBCOMMANDS: AvailableSubcommands = { }, { name: 'emulator', - description: 'Launch an Emulator Device' + description: 'Launch an Emulator Device', + cliConfigs: [{ + name: 'avd', + alias: [], + description: 'Name of the avd to launch', + usageHelp: 'avd_name' + }] } ] }, diff --git a/src/commands/android/subcommands/connect/emulator.ts b/src/commands/android/subcommands/connect/emulator.ts index 2ef94c0..7dda026 100644 --- a/src/commands/android/subcommands/connect/emulator.ts +++ b/src/commands/android/subcommands/connect/emulator.ts @@ -2,35 +2,37 @@ import colors from 'ansi-colors'; import inquirer from 'inquirer'; import Logger from '../../../../logger'; -import {symbols} from '../../../../utils'; import {launchAVD} from '../../adb'; import {Options, Platform} from '../../interfaces'; import {getBinaryLocation} from '../../utils/common'; import {execBinarySync} from '../../utils/sdk'; +import {showMissingBinaryHelp} from '../common'; export async function connectAVD(options: Options, sdkRoot: string, platform: Platform): Promise { try { const avdmanagerLocation = getBinaryLocation(sdkRoot, platform, 'avdmanager', true); if (avdmanagerLocation === '') { - Logger.log(` ${colors.red(symbols().fail)} ${colors.cyan('avdmanager')} binary not found.\n`); - Logger.log(`Run: ${colors.cyan('npx @nightwatch/mobile-helper android --standalone')} to setup missing requirements.`); - Logger.log(`(Remove the ${colors.gray('--standalone')} flag from the above command if setting up for testing.)\n`); + showMissingBinaryHelp('avdmanager'); return false; } - const availableAVDs = execBinarySync(avdmanagerLocation, 'avdmanager', platform, 'list avd -c'); - if (!availableAVDs) { - Logger.log(`${colors.red('No AVD installed!')}`); - Logger.log(`Run: ${colors.cyan('npx @nightwatch/mobile-helper android --mode emulator --standalone')} to setup emulator.`); - Logger.log(`(Remove the ${colors.gray('--standalone')} flag from the above command if setting up for testing.)\n`); + const installedAvds = execBinarySync(avdmanagerLocation, 'avdmanager', platform, 'list avd -c'); + if (installedAvds === null) { + Logger.log(`${colors.red('\nFailed to fetch installed AVDs.')} Please try again.\n`); + + return false; + } else if (installedAvds === '') { + Logger.log(`${colors.yellow('No installed AVD found.')}\n`); + Logger.log('To see the list of installed AVDs, run the following command:'); + Logger.log(colors.cyan(' npx @nightwatch/mobile-helper android list --avd\n')); return false; } - const availableAVDsList = availableAVDs.split('\n').filter(avd => avd !== ''); + const installedAVDList = installedAvds.split('\n').filter(avd => avd !== ''); - if (options.avd && !availableAVDsList.includes(options.avd as string)) { + if (options.avd && !installedAVDList.includes(options.avd as string)) { Logger.log(colors.yellow('Provided AVD not found!\n')); options.avd = ''; } @@ -40,16 +42,14 @@ export async function connectAVD(options: Options, sdkRoot: string, platform: Pl type: 'list', name: 'avdName', message: 'Select the AVD to connect:', - choices: availableAVDsList + choices: installedAVDList }); options.avd = avdAnswer.avdName; } Logger.log(); - Logger.log(`Launching ${options.avd}...`); const connectionStatus = await launchAVD(sdkRoot, platform, options.avd as string); - if (!connectionStatus) { return false; } @@ -62,3 +62,4 @@ export async function connectAVD(options: Options, sdkRoot: string, platform: Pl return false; } } + diff --git a/src/commands/android/subcommands/connect/index.ts b/src/commands/android/subcommands/connect/index.ts index b1404f5..35882fa 100644 --- a/src/commands/android/subcommands/connect/index.ts +++ b/src/commands/android/subcommands/connect/index.ts @@ -1,3 +1,6 @@ +import inquirer from 'inquirer'; + +import Logger from '../../../../logger'; import {Options, Platform} from '../../interfaces'; import {verifyOptions, showConnectedRealDevices} from '../common'; import {connectAVD} from './emulator'; @@ -9,18 +12,36 @@ export async function connect(options: Options, sdkRoot: string, platform: Platf return false; } - const subcommandFlag = verifyResult.subcommandFlag; + let subcommandFlag = verifyResult.subcommandFlag; if (subcommandFlag === '') { - // flag not passed by the user -- prompt user for the flag + subcommandFlag = await promptForFlag(); } if (subcommandFlag === 'wireless') { await showConnectedRealDevices(); return await connectWirelessAdb(sdkRoot, platform); - } else if (options.emulator) { + } else if (subcommandFlag === 'emulator') { return await connectAVD(options, sdkRoot, platform); } return false; } + +async function promptForFlag(): Promise { + const flagAnswer = await inquirer.prompt({ + type: 'list', + name: 'flag', + message: 'Select what do you want to connect:', + choices: ['Real device', 'Emulator'] + }); + Logger.log(); + + const flag = flagAnswer.flag; + if (flag === 'Real device') { + return 'wireless'; + } + + return 'emulator'; +} +