Skip to content

Commit

Permalink
added default flow and minor refactor
Browse files Browse the repository at this point in the history
  • Loading branch information
itsspriyansh committed Aug 24, 2024
1 parent afd7b99 commit 6a05eea
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 18 deletions.
8 changes: 7 additions & 1 deletion src/commands/android/constants.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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'
}]
}
]
},
Expand Down
29 changes: 15 additions & 14 deletions src/commands/android/subcommands/connect/emulator.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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<boolean> {
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 = '';
}
Expand All @@ -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;
}
Expand All @@ -62,3 +62,4 @@ export async function connectAVD(options: Options, sdkRoot: string, platform: Pl
return false;
}
}

27 changes: 24 additions & 3 deletions src/commands/android/subcommands/connect/index.ts
Original file line number Diff line number Diff line change
@@ -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';
Expand All @@ -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<string> {
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';
}

0 comments on commit 6a05eea

Please sign in to comment.