From ed0d3a03291fa1b23101a0a8249139cc65af134d Mon Sep 17 00:00:00 2001 From: Amir Hardon Date: Fri, 22 Feb 2019 09:18:09 -0800 Subject: [PATCH] Don't register the Maps and Camera plugin for background FlutterViews. Background FlutterViews do not have an activity, the Maps and Camera plugins are foreground only and assumed and activity is available which can result in a crash when the plugin is registered by a background FlutterView. We workaround by just not registering the plugins if there is no activity. Similar to https://github.com/flutter/plugins/pull/1125 --- packages/camera/CHANGELOG.md | 4 ++++ .../main/java/io/flutter/plugins/camera/CameraPlugin.java | 5 +++++ packages/camera/pubspec.yaml | 2 +- packages/google_maps_flutter/CHANGELOG.md | 4 ++++ .../java/io/flutter/plugins/googlemaps/GoogleMapsPlugin.java | 5 +++++ packages/google_maps_flutter/pubspec.yaml | 2 +- 6 files changed, 20 insertions(+), 2 deletions(-) diff --git a/packages/camera/CHANGELOG.md b/packages/camera/CHANGELOG.md index d5b86843ef47..c29670baaae0 100644 --- a/packages/camera/CHANGELOG.md +++ b/packages/camera/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.4.0+3 + +* Fixed a crash when the plugin is registered by a background FlutterView. + ## 0.4.0+2 * Fix orientation of captured photos when camera is used for the first time on Android. diff --git a/packages/camera/android/src/main/java/io/flutter/plugins/camera/CameraPlugin.java b/packages/camera/android/src/main/java/io/flutter/plugins/camera/CameraPlugin.java index 4612f2bbb8a5..8cdc95e19790 100644 --- a/packages/camera/android/src/main/java/io/flutter/plugins/camera/CameraPlugin.java +++ b/packages/camera/android/src/main/java/io/flutter/plugins/camera/CameraPlugin.java @@ -137,6 +137,11 @@ public void onActivityDestroyed(Activity activity) {} } public static void registerWith(Registrar registrar) { + if (registrar.activity() == null) { + // When a background flutter view tries to register the plugin, the registrar has no activity. + // We stop the registration process as this plugin is foreground only. + return; + } final MethodChannel channel = new MethodChannel(registrar.messenger(), "plugins.flutter.io/camera"); diff --git a/packages/camera/pubspec.yaml b/packages/camera/pubspec.yaml index 6f560124bae0..dcbff327f044 100644 --- a/packages/camera/pubspec.yaml +++ b/packages/camera/pubspec.yaml @@ -2,7 +2,7 @@ name: camera description: A Flutter plugin for getting information about and controlling the camera on Android and iOS. Supports previewing the camera feed, capturing images, capturing video, and streaming image buffers to dart. -version: 0.4.0+2 +version: 0.4.0+3 authors: - Flutter Team - Luigi Agosti diff --git a/packages/google_maps_flutter/CHANGELOG.md b/packages/google_maps_flutter/CHANGELOG.md index d6c1c7025c89..dc62d4968476 100644 --- a/packages/google_maps_flutter/CHANGELOG.md +++ b/packages/google_maps_flutter/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.2.0+4 + +* Fixed a crash when the plugin is registered by a background FlutterView. + ## 0.2.0+3 * Fixed a memory leak on Android - the map was not properly disposed. diff --git a/packages/google_maps_flutter/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapsPlugin.java b/packages/google_maps_flutter/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapsPlugin.java index e0cf092c1835..aced16772d50 100644 --- a/packages/google_maps_flutter/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapsPlugin.java +++ b/packages/google_maps_flutter/android/src/main/java/io/flutter/plugins/googlemaps/GoogleMapsPlugin.java @@ -27,6 +27,11 @@ public class GoogleMapsPlugin implements Application.ActivityLifecycleCallbacks private final int registrarActivityHashCode; public static void registerWith(Registrar registrar) { + if (registrar.activity() == null) { + // When a background flutter view tries to register the plugin, the registrar has no activity. + // We stop the registration process as this plugin is foreground only. + return; + } final GoogleMapsPlugin plugin = new GoogleMapsPlugin(registrar); registrar.activity().getApplication().registerActivityLifecycleCallbacks(plugin); registrar diff --git a/packages/google_maps_flutter/pubspec.yaml b/packages/google_maps_flutter/pubspec.yaml index cbeedc3248ee..5b6463040e97 100644 --- a/packages/google_maps_flutter/pubspec.yaml +++ b/packages/google_maps_flutter/pubspec.yaml @@ -2,7 +2,7 @@ name: google_maps_flutter description: A Flutter plugin for integrating Google Maps in iOS and Android applications. author: Flutter Team homepage: https://github.com/flutter/plugins/tree/master/packages/google_maps_flutter -version: 0.2.0+3 +version: 0.2.0+4 dependencies: flutter: