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
|
@override
|
||||||
Future<bool> restartApp(
|
Future<bool> restartApp(
|
||||||
ApplicationPackage package,
|
ApplicationPackage package,
|
||||||
|
@ -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 {
|
|||||||
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 {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
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 {
|
|||||||
|
|
||||||
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 {
|
|||||||
|
|
||||||
@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 {
|
|||||||
|
|
||||||
@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 {
|
|||||||
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 {
|
|||||||
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';
|
|||||||
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 {
|
|||||||
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';
|
|||||||
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 {
|
|||||||
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 {
|
|||||||
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 {
|
|||||||
// F1, help
|
// F1, help
|
||||||
_printHelp();
|
_printHelp();
|
||||||
} else if (lower == 'r' || code == AnsiTerminal.KEY_F5) {
|
} else if (lower == 'r' || code == AnsiTerminal.KEY_F5) {
|
||||||
// F5, restart
|
if (device.supportsRestart) {
|
||||||
restart();
|
// F5, 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 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
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
|
|||||||
flutter:
|
flutter:
|
||||||
# The starting route for the app.
|
# The starting route for the app.
|
||||||
route:
|
route:
|
||||||
# Additional args for the flutter run command.
|
|
||||||
args:
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user