diff --git a/packages/image_picker/CHANGELOG.md b/packages/image_picker/CHANGELOG.md index f2ffce005561..b7a9538fc714 100644 --- a/packages/image_picker/CHANGELOG.md +++ b/packages/image_picker/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.5.0+3 + +* Fixed am Android crash when Image Picker is registered without an activity. + ## 0.5.0+2 * Log a more detailed warning at build time about the previous AndroidX diff --git a/packages/image_picker/android/src/main/java/io/flutter/plugins/imagepicker/ImagePickerPlugin.java b/packages/image_picker/android/src/main/java/io/flutter/plugins/imagepicker/ImagePickerPlugin.java index 36b44fc7e745..7e736b082df1 100644 --- a/packages/image_picker/android/src/main/java/io/flutter/plugins/imagepicker/ImagePickerPlugin.java +++ b/packages/image_picker/android/src/main/java/io/flutter/plugins/imagepicker/ImagePickerPlugin.java @@ -21,6 +21,11 @@ public class ImagePickerPlugin implements MethodChannel.MethodCallHandler { private final ImagePickerDelegate delegate; public static void registerWith(PluginRegistry.Registrar registrar) { + if (registrar.activity() == null) { + // If a background flutter view tries to register the plugin, there will be no activity from the registrar, + // we stop the registering process immediately because the ImagePicker requires an activity. + return; + } final MethodChannel channel = new MethodChannel(registrar.messenger(), CHANNEL); final File externalFilesDirectory = diff --git a/packages/image_picker/example/android/app/src/test/java/io/flutter/plugins/imagepicker/ImagePickerPluginTest.java b/packages/image_picker/example/android/app/src/test/java/io/flutter/plugins/imagepicker/ImagePickerPluginTest.java index e2f2e9d1c178..23c888643c63 100644 --- a/packages/image_picker/example/android/app/src/test/java/io/flutter/plugins/imagepicker/ImagePickerPluginTest.java +++ b/packages/image_picker/example/android/app/src/test/java/io/flutter/plugins/imagepicker/ImagePickerPluginTest.java @@ -1,5 +1,6 @@ package io.flutter.plugins.imagepicker; +import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyZeroInteractions; import static org.mockito.Mockito.when; @@ -95,6 +96,14 @@ public void onMethodCall_WhenSourceIsCamera_InvokesTakeImageWithCamera() { verifyZeroInteractions(mockResult); } + @Test + public void onResiter_WhenAcitivityIsNull_ShouldNotCrash() { + when(mockRegistrar.activity()).thenReturn(null); + ImagePickerPlugin.registerWith((mockRegistrar)); + assertTrue( + "No exception thrown when ImagePickerPlugin.registerWith ran with activity = null", true); + } + private MethodCall buildMethodCall(final int source) { final Map arguments = new HashMap<>(); arguments.put("source", source); diff --git a/packages/image_picker/pubspec.yaml b/packages/image_picker/pubspec.yaml index 607956edea58..226c9f1d5ae7 100755 --- a/packages/image_picker/pubspec.yaml +++ b/packages/image_picker/pubspec.yaml @@ -5,7 +5,7 @@ authors: - Flutter Team - Rhodes Davis Jr. homepage: https://github.com/flutter/plugins/tree/master/packages/image_picker -version: 0.5.0+2 +version: 0.5.0+3 flutter: plugin: