Unverified Commit 891036c9 authored by Jonah Williams's avatar Jonah Williams Committed by GitHub

Prevent calls to view.uiIsolate.flutterExit on devices which do not support it (#26201)

parent e4fb4fe2
...@@ -184,6 +184,7 @@ abstract class PollingDeviceDiscovery extends DeviceDiscovery { ...@@ -184,6 +184,7 @@ abstract class PollingDeviceDiscovery extends DeviceDiscovery {
} }
abstract class Device { abstract class Device {
Device(this.id); Device(this.id);
final String id; final String id;
...@@ -276,11 +277,17 @@ abstract class Device { ...@@ -276,11 +277,17 @@ abstract class Device {
/// Whether this device implements support for hot restart. /// Whether this device implements support for hot restart.
bool get supportsHotRestart => true; bool get supportsHotRestart => true;
/// Stop an app package on the current device. /// Whether flutter applications running on this device can be terminated
Future<bool> stopApp(ApplicationPackage app); /// from the vmservice.
bool get supportsStopApp => true;
/// Whether the device supports taking screenshots of a running flutter
/// application.
bool get supportsScreenshot => false; bool get supportsScreenshot => false;
/// Stop an app package on the current device.
Future<bool> stopApp(ApplicationPackage app);
Future<void> takeScreenshot(File outputFile) => Future<void>.error('unimplemented'); Future<void> takeScreenshot(File outputFile) => Future<void>.error('unimplemented');
@override @override
......
...@@ -150,6 +150,9 @@ class FuchsiaDevice extends Device { ...@@ -150,6 +150,9 @@ class FuchsiaDevice extends Device {
@override @override
bool get supportsHotRestart => false; bool get supportsHotRestart => false;
@override
bool get supportsStopApp => false;
@override @override
final String name; final String name;
......
...@@ -109,6 +109,9 @@ class FlutterDevice { ...@@ -109,6 +109,9 @@ class FlutterDevice {
} }
Future<void> stopApps() async { Future<void> stopApps() async {
if (!device.supportsStopApp) {
return;
}
final List<FlutterView> flutterViews = views; final List<FlutterView> flutterViews = views;
if (flutterViews == null || flutterViews.isEmpty) if (flutterViews == null || flutterViews.isEmpty)
return; return;
......
...@@ -36,6 +36,15 @@ void main() { ...@@ -36,6 +36,15 @@ void main() {
expect(names.length, 1); expect(names.length, 1);
expect(names.first, 'lilia-shore-only-last'); expect(names.first, 'lilia-shore-only-last');
}); });
test('default capabilities', () async {
final FuchsiaDevice device = FuchsiaDevice('123');
expect(device.supportsHotReload, true);
expect(device.supportsHotRestart, false);
expect(device.supportsStopApp, false);
expect(await device.stopApp(null), false);
});
}); });
group('displays friendly error when', () { group('displays friendly error when', () {
......
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