Commit b6c3ae37 authored by Devon Carew's avatar Devon Carew Committed by GitHub

send supportsRestart flag when starting an app (#4513)

* send supportsRestart flag when starting an app

* remove unused imports

* review comments
parent 187ff002
...@@ -388,6 +388,9 @@ class AndroidDevice extends Device { ...@@ -388,6 +388,9 @@ class AndroidDevice extends Device {
); );
} }
@override
bool get supportsRestart => true;
@override @override
Future<bool> restartApp( Future<bool> restartApp(
ApplicationPackage package, ApplicationPackage package,
......
...@@ -284,7 +284,7 @@ class AppDomain extends Domain { ...@@ -284,7 +284,7 @@ class AppDomain extends Domain {
Future<Map<String, dynamic>> start(Map<String, dynamic> args) async { Future<Map<String, dynamic>> start(Map<String, dynamic> args) async {
String deviceId = _getStringArg(args, 'deviceId', required: true); String deviceId = _getStringArg(args, 'deviceId', required: true);
String projectDirectory = _getStringArg(args, 'projectDirectory', required: true); String projectDirectory = _getStringArg(args, 'projectDirectory', required: true);
bool startPaused = _getBoolArg(args, 'startPaused'); bool startPaused = _getBoolArg(args, 'startPaused') ?? false;
String route = _getStringArg(args, 'route'); String route = _getStringArg(args, 'route');
String mode = _getStringArg(args, 'mode'); String mode = _getStringArg(args, 'mode');
String target = _getStringArg(args, 'target'); String target = _getStringArg(args, 'target');
...@@ -325,8 +325,9 @@ class AppDomain extends Domain { ...@@ -325,8 +325,9 @@ class AppDomain extends Domain {
AppInstance app = new AppInstance(_getNextAppId(), runner); AppInstance app = new AppInstance(_getNextAppId(), runner);
_apps.add(app); _apps.add(app);
_sendAppEvent(app, 'start', <String, dynamic>{ _sendAppEvent(app, 'start', <String, dynamic>{
'deviceId': deviceId,
'directory': projectDirectory, 'directory': projectDirectory,
'deviceId': deviceId 'supportsRestart': device.supportsRestart
}); });
Completer<int> observatoryPortCompleter; Completer<int> observatoryPortCompleter;
...@@ -349,7 +350,12 @@ class AppDomain extends Domain { ...@@ -349,7 +350,12 @@ class AppDomain extends Domain {
}); });
}); });
return <String, dynamic>{ 'appId': app.id }; return <String, dynamic>{
'appId': app.id,
'deviceId': deviceId,
'directory': projectDirectory,
'supportsRestart': device.supportsRestart
};
} }
Future<bool> restart(Map<String, dynamic> args) async { Future<bool> restart(Map<String, dynamic> args) async {
...@@ -585,17 +591,18 @@ class _AppRunLogger extends Logger { ...@@ -585,17 +591,18 @@ class _AppRunLogger extends Logger {
AppDomain domain; AppDomain domain;
final AppInstance app; final AppInstance app;
int _nextProgressId = 0;
@override @override
void printError(String message, [StackTrace stackTrace]) { void printError(String message, [StackTrace stackTrace]) {
if (stackTrace != null) { if (stackTrace != null) {
domain?._sendAppEvent(app, 'log', <String, dynamic>{ _sendLogEvent(<String, dynamic>{
'log': message, 'log': message,
'stackTrace': stackTrace.toString(), 'stackTrace': stackTrace.toString(),
'error': true 'error': true
}); });
} else { } else {
domain?._sendAppEvent(app, 'log', <String, dynamic>{ _sendLogEvent(<String, dynamic>{
'log': message, 'log': message,
'error': true 'error': true
}); });
...@@ -604,7 +611,7 @@ class _AppRunLogger extends Logger { ...@@ -604,7 +611,7 @@ class _AppRunLogger extends Logger {
@override @override
void printStatus(String message, { bool emphasis: false, bool newline: true }) { void printStatus(String message, { bool emphasis: false, bool newline: true }) {
domain?._sendAppEvent(app, 'log', <String, dynamic>{ 'log': message }); _sendLogEvent(<String, dynamic>{ 'log': message });
} }
@override @override
...@@ -612,13 +619,52 @@ class _AppRunLogger extends Logger { ...@@ -612,13 +619,52 @@ class _AppRunLogger extends Logger {
@override @override
Status startProgress(String message) { Status startProgress(String message) {
printStatus(message); int id = _nextProgressId++;
return new Status();
_sendLogEvent(<String, dynamic>{
'log': message,
'progress': true,
'id': id.toString()
});
return new _AppLoggerStatus(this, id);
} }
void close() { void close() {
domain = null; domain = null;
} }
void _sendLogEvent(Map<String, dynamic> event) {
if (domain == null)
printStatus('event sent after app closed: $event');
else
domain._sendAppEvent(app, 'log', event);
}
}
class _AppLoggerStatus implements Status {
_AppLoggerStatus(this.logger, this.id);
final _AppRunLogger logger;
final int id;
@override
void stop({ bool showElapsedTime: false }) {
_sendFinished();
}
@override
void cancel() {
_sendFinished();
}
void _sendFinished() {
logger._sendLogEvent(<String, dynamic>{
'progress': true,
'id': id.toString(),
'finished': true
});
}
} }
class LogMessage { class LogMessage {
......
...@@ -189,6 +189,8 @@ abstract class Device { ...@@ -189,6 +189,8 @@ abstract class Device {
Map<String, dynamic> platformArgs Map<String, dynamic> platformArgs
}); });
bool get supportsRestart => false;
/// Restart the given app; the application will already have been launched with /// Restart the given app; the application will already have been launched with
/// [startApp]. /// [startApp].
Future<bool> restartApp( Future<bool> restartApp(
...@@ -196,7 +198,9 @@ abstract class Device { ...@@ -196,7 +198,9 @@ abstract class Device {
LaunchResult result, { LaunchResult result, {
String mainPath, String mainPath,
Observatory observatory Observatory observatory
}); }) async {
throw 'unsupported';
}
/// Stop an app package on the current device. /// Stop an app package on the current device.
Future<bool> stopApp(ApplicationPackage app); Future<bool> stopApp(ApplicationPackage app);
......
...@@ -12,7 +12,6 @@ import '../base/process.dart'; ...@@ -12,7 +12,6 @@ import '../base/process.dart';
import '../build_info.dart'; import '../build_info.dart';
import '../device.dart'; import '../device.dart';
import '../globals.dart'; import '../globals.dart';
import '../observatory.dart';
import 'mac.dart'; import 'mac.dart';
const String _ideviceinstallerInstructions = const String _ideviceinstallerInstructions =
...@@ -213,21 +212,6 @@ class IOSDevice extends Device { ...@@ -213,21 +212,6 @@ class IOSDevice extends Device {
return new LaunchResult.succeeded(); return new LaunchResult.succeeded();
} }
@override
Future<bool> restartApp(
ApplicationPackage package,
LaunchResult result, {
String mainPath,
Observatory observatory
}) async {
return observatory.isolateReload(observatory.firstIsolateId).then((Response response) {
return true;
}).catchError((dynamic error) {
printError('Error restarting app: $error');
return false;
});
}
@override @override
Future<bool> stopApp(ApplicationPackage app) async { Future<bool> stopApp(ApplicationPackage app) async {
// Currently we don't have a way to stop an app running on iOS. // Currently we don't have a way to stop an app running on iOS.
......
...@@ -16,7 +16,6 @@ import '../build_info.dart'; ...@@ -16,7 +16,6 @@ import '../build_info.dart';
import '../device.dart'; import '../device.dart';
import '../flx.dart' as flx; import '../flx.dart' as flx;
import '../globals.dart'; import '../globals.dart';
import '../observatory.dart';
import '../protocol_discovery.dart'; import '../protocol_discovery.dart';
import 'mac.dart'; import 'mac.dart';
...@@ -574,21 +573,6 @@ class IOSSimulator extends Device { ...@@ -574,21 +573,6 @@ class IOSSimulator extends Device {
return (await flx.build(precompiledSnapshot: true)) == 0; return (await flx.build(precompiledSnapshot: true)) == 0;
} }
@override
Future<bool> restartApp(
ApplicationPackage package,
LaunchResult result, {
String mainPath,
Observatory observatory
}) {
return observatory.isolateReload(observatory.firstIsolateId).then((Response response) {
return true;
}).catchError((dynamic error) {
printError('Error restarting app: $error');
return false;
});
}
@override @override
Future<bool> stopApp(ApplicationPackage app) async { Future<bool> stopApp(ApplicationPackage app) async {
// Currently we don't have a way to stop an app running on iOS. // Currently we don't have a way to stop an app running on iOS.
...@@ -780,7 +764,7 @@ class _IOSSimulatorLogReader extends DeviceLogReader { ...@@ -780,7 +764,7 @@ class _IOSSimulatorLogReader extends DeviceLogReader {
if (_lastLine != null) { if (_lastLine != null) {
int repeat = int.parse(multi.group(1)); int repeat = int.parse(multi.group(1));
repeat = math.max(0, math.min(100, repeat)); repeat = math.max(0, math.min(100, repeat));
for (int i = 0; i < repeat; i++) for (int i = 1; i < repeat; i++)
_linesController.add(_lastLine); _linesController.add(_lastLine);
} }
} else { } else {
......
...@@ -243,8 +243,10 @@ class RunAndStayResident { ...@@ -243,8 +243,10 @@ class RunAndStayResident {
// F1, help // F1, help
_printHelp(); _printHelp();
} else if (lower == 'r' || code == AnsiTerminal.KEY_F5) { } else if (lower == 'r' || code == AnsiTerminal.KEY_F5) {
if (device.supportsRestart) {
// F5, restart // F5, restart
restart(); restart();
}
} else if (lower == 'q' || code == AnsiTerminal.KEY_F10) { } else if (lower == 'q' || code == AnsiTerminal.KEY_F10) {
// F10, exit // F10, exit
_stopApp(); _stopApp();
...@@ -287,7 +289,8 @@ class RunAndStayResident { ...@@ -287,7 +289,8 @@ class RunAndStayResident {
} }
void _printHelp() { void _printHelp() {
printStatus('Type "h" or F1 for help, "r" or F5 to restart the app, and "q", F10, or ctrl-c to quit.'); String restartText = device.supportsRestart ? ', "r" or F5 to restart the app,' : '';
printStatus('Type "h" or F1 for help$restartText and "q", F10, or ctrl-c to quit.');
} }
void _stopLogger() { void _stopLogger() {
......
...@@ -5,5 +5,3 @@ path: lib/main.dart ...@@ -5,5 +5,3 @@ path: lib/main.dart
flutter: flutter:
# The starting route for the app. # The starting route for the app.
route: route:
# Additional args for the flutter run command.
args:
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