send supportsRestart flag when starting an app (#4513)
* send supportsRestart flag when starting an app * remove unused imports * review comments
This commit is contained in:
parent
187ff00294
commit
b6c3ae37f6
@ -388,6 +388,9 @@ class AndroidDevice extends Device {
|
||||
);
|
||||
}
|
||||
|
||||
@override
|
||||
bool get supportsRestart => true;
|
||||
|
||||
@override
|
||||
Future<bool> restartApp(
|
||||
ApplicationPackage package,
|
||||
|
@ -284,7 +284,7 @@ class AppDomain extends Domain {
|
||||
Future<Map<String, dynamic>> start(Map<String, dynamic> args) async {
|
||||
String deviceId = _getStringArg(args, 'deviceId', 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 mode = _getStringArg(args, 'mode');
|
||||
String target = _getStringArg(args, 'target');
|
||||
@ -325,8 +325,9 @@ class AppDomain extends Domain {
|
||||
AppInstance app = new AppInstance(_getNextAppId(), runner);
|
||||
_apps.add(app);
|
||||
_sendAppEvent(app, 'start', <String, dynamic>{
|
||||
'deviceId': deviceId,
|
||||
'directory': projectDirectory,
|
||||
'deviceId': deviceId
|
||||
'supportsRestart': device.supportsRestart
|
||||
});
|
||||
|
||||
Completer<int> observatoryPortCompleter;
|
||||
@ -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 {
|
||||
@ -585,17 +591,18 @@ class _AppRunLogger extends Logger {
|
||||
|
||||
AppDomain domain;
|
||||
final AppInstance app;
|
||||
int _nextProgressId = 0;
|
||||
|
||||
@override
|
||||
void printError(String message, [StackTrace stackTrace]) {
|
||||
if (stackTrace != null) {
|
||||
domain?._sendAppEvent(app, 'log', <String, dynamic>{
|
||||
_sendLogEvent(<String, dynamic>{
|
||||
'log': message,
|
||||
'stackTrace': stackTrace.toString(),
|
||||
'error': true
|
||||
});
|
||||
} else {
|
||||
domain?._sendAppEvent(app, 'log', <String, dynamic>{
|
||||
_sendLogEvent(<String, dynamic>{
|
||||
'log': message,
|
||||
'error': true
|
||||
});
|
||||
@ -604,7 +611,7 @@ class _AppRunLogger extends Logger {
|
||||
|
||||
@override
|
||||
void printStatus(String message, { bool emphasis: false, bool newline: true }) {
|
||||
domain?._sendAppEvent(app, 'log', <String, dynamic>{ 'log': message });
|
||||
_sendLogEvent(<String, dynamic>{ 'log': message });
|
||||
}
|
||||
|
||||
@override
|
||||
@ -612,13 +619,52 @@ class _AppRunLogger extends Logger {
|
||||
|
||||
@override
|
||||
Status startProgress(String message) {
|
||||
printStatus(message);
|
||||
return new Status();
|
||||
int id = _nextProgressId++;
|
||||
|
||||
_sendLogEvent(<String, dynamic>{
|
||||
'log': message,
|
||||
'progress': true,
|
||||
'id': id.toString()
|
||||
});
|
||||
|
||||
return new _AppLoggerStatus(this, id);
|
||||
}
|
||||
|
||||
void close() {
|
||||
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 {
|
||||
|
@ -189,6 +189,8 @@ abstract class Device {
|
||||
Map<String, dynamic> platformArgs
|
||||
});
|
||||
|
||||
bool get supportsRestart => false;
|
||||
|
||||
/// Restart the given app; the application will already have been launched with
|
||||
/// [startApp].
|
||||
Future<bool> restartApp(
|
||||
@ -196,7 +198,9 @@ abstract class Device {
|
||||
LaunchResult result, {
|
||||
String mainPath,
|
||||
Observatory observatory
|
||||
});
|
||||
}) async {
|
||||
throw 'unsupported';
|
||||
}
|
||||
|
||||
/// Stop an app package on the current device.
|
||||
Future<bool> stopApp(ApplicationPackage app);
|
||||
|
@ -12,7 +12,6 @@ import '../base/process.dart';
|
||||
import '../build_info.dart';
|
||||
import '../device.dart';
|
||||
import '../globals.dart';
|
||||
import '../observatory.dart';
|
||||
import 'mac.dart';
|
||||
|
||||
const String _ideviceinstallerInstructions =
|
||||
@ -213,21 +212,6 @@ class IOSDevice extends Device {
|
||||
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
|
||||
Future<bool> stopApp(ApplicationPackage app) async {
|
||||
// Currently we don't have a way to stop an app running on iOS.
|
||||
|
@ -16,7 +16,6 @@ import '../build_info.dart';
|
||||
import '../device.dart';
|
||||
import '../flx.dart' as flx;
|
||||
import '../globals.dart';
|
||||
import '../observatory.dart';
|
||||
import '../protocol_discovery.dart';
|
||||
import 'mac.dart';
|
||||
|
||||
@ -574,21 +573,6 @@ class IOSSimulator extends Device {
|
||||
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
|
||||
Future<bool> stopApp(ApplicationPackage app) async {
|
||||
// Currently we don't have a way to stop an app running on iOS.
|
||||
@ -780,7 +764,7 @@ class _IOSSimulatorLogReader extends DeviceLogReader {
|
||||
if (_lastLine != null) {
|
||||
int repeat = int.parse(multi.group(1));
|
||||
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);
|
||||
}
|
||||
} else {
|
||||
|
@ -243,8 +243,10 @@ class RunAndStayResident {
|
||||
// F1, help
|
||||
_printHelp();
|
||||
} else if (lower == 'r' || code == AnsiTerminal.KEY_F5) {
|
||||
// F5, restart
|
||||
restart();
|
||||
if (device.supportsRestart) {
|
||||
// F5, restart
|
||||
restart();
|
||||
}
|
||||
} else if (lower == 'q' || code == AnsiTerminal.KEY_F10) {
|
||||
// F10, exit
|
||||
_stopApp();
|
||||
@ -287,7 +289,8 @@ class RunAndStayResident {
|
||||
}
|
||||
|
||||
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() {
|
||||
|
@ -5,5 +5,3 @@ path: lib/main.dart
|
||||
flutter:
|
||||
# The starting route for the app.
|
||||
route:
|
||||
# Additional args for the flutter run command.
|
||||
args:
|
||||
|
Loading…
x
Reference in New Issue
Block a user