Unverified Commit 48f4ff6d authored by Danny Tuppeny's avatar Danny Tuppeny Committed by GitHub

Ensure errors launching emulators are exposed to the daemon (#18446)

parent 03b5b1c0
...@@ -11,7 +11,6 @@ import '../android/android_workflow.dart'; ...@@ -11,7 +11,6 @@ import '../android/android_workflow.dart';
import '../base/file_system.dart'; import '../base/file_system.dart';
import '../base/process.dart'; import '../base/process.dart';
import '../emulator.dart'; import '../emulator.dart';
import '../globals.dart';
import 'android_sdk.dart'; import 'android_sdk.dart';
class AndroidEmulators extends EmulatorDiscovery { class AndroidEmulators extends EmulatorDiscovery {
...@@ -41,22 +40,20 @@ class AndroidEmulator extends Emulator { ...@@ -41,22 +40,20 @@ class AndroidEmulator extends Emulator {
String get label => _properties['avd.ini.displayname']; String get label => _properties['avd.ini.displayname'];
@override @override
Future<bool> launch() async { Future<void> launch() async {
final Future<bool> launchResult = final Future<void> launchResult =
runAsync(<String>[getEmulatorPath(), '-avd', id]) runAsync(<String>[getEmulatorPath(), '-avd', id])
.then((RunResult runResult) { .then((RunResult runResult) {
if (runResult.exitCode != 0) { if (runResult.exitCode != 0) {
printError('$runResult'); throw '$runResult';
return false;
} }
return true;
}); });
// emulator continues running on a successful launch so if we // emulator continues running on a successful launch so if we
// haven't quit within 3 seconds we assume that's a success and just // haven't quit within 3 seconds we assume that's a success and just
// return. // return.
return Future.any<bool>(<Future<bool>>[ return Future.any<void>(<Future<void>>[
launchResult, launchResult,
new Future<void>.delayed(const Duration(seconds: 3)).then((_) => true) new Future<void>.delayed(const Duration(seconds: 3))
]); ]);
} }
} }
......
...@@ -49,7 +49,7 @@ class EmulatorsCommand extends FlutterCommand { ...@@ -49,7 +49,7 @@ class EmulatorsCommand extends FlutterCommand {
} }
} }
Future<Null> _launchEmulator(String id) async { Future<void> _launchEmulator(String id) async {
final List<Emulator> emulators = final List<Emulator> emulators =
await emulatorManager.getEmulatorsMatching(id); await emulatorManager.getEmulatorsMatching(id);
...@@ -61,11 +61,16 @@ class EmulatorsCommand extends FlutterCommand { ...@@ -61,11 +61,16 @@ class EmulatorsCommand extends FlutterCommand {
"More than one emulator matches '$id':", "More than one emulator matches '$id':",
); );
} else { } else {
await emulators.first.launch(); try {
await emulators.first.launch();
}
catch (e) {
printError(e);
}
} }
} }
Future<Null> _listEmulators(String searchText) async { Future<void> _listEmulators(String searchText) async {
final List<Emulator> emulators = searchText == null final List<Emulator> emulators = searchText == null
? await emulatorManager.getAllAvailableEmulators() ? await emulatorManager.getAllAvailableEmulators()
: await emulatorManager.getEmulatorsMatching(searchText); : await emulatorManager.getEmulatorsMatching(searchText);
......
...@@ -95,7 +95,7 @@ abstract class Emulator { ...@@ -95,7 +95,7 @@ abstract class Emulator {
return id == other.id; return id == other.id;
} }
Future<bool> launch(); Future<void> launch();
@override @override
String toString() => name; String toString() => name;
......
...@@ -36,8 +36,8 @@ class IOSEmulator extends Emulator { ...@@ -36,8 +36,8 @@ class IOSEmulator extends Emulator {
String get label => null; String get label => null;
@override @override
Future<bool> launch() async { Future<void> launch() async {
Future<bool> launchSimulator(List<String> additionalArgs) async { Future<void> launchSimulator(List<String> additionalArgs) async {
final List<String> args = <String>['open'] final List<String> args = <String>['open']
.followedBy(additionalArgs) .followedBy(additionalArgs)
.followedBy(<String>['-a', getSimulatorPath()]); .followedBy(<String>['-a', getSimulatorPath()]);
......
...@@ -62,7 +62,7 @@ class _MockEmulator extends Emulator { ...@@ -62,7 +62,7 @@ class _MockEmulator extends Emulator {
final String label; final String label;
@override @override
Future<bool> launch() { Future<void> launch() {
throw new UnimplementedError('Not implemented in Mock'); throw new UnimplementedError('Not implemented in Mock');
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment