diff --git a/packages/image_picker/CHANGELOG.md b/packages/image_picker/CHANGELOG.md index 6a8a75a4b65f..bfc368b308af 100644 --- a/packages/image_picker/CHANGELOG.md +++ b/packages/image_picker/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.6.1+7 + +* Android: Fix ImagePickerPlugin#onCreate casting context which causes exception. + ## 0.6.1+6 * Define clang module for iOS 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 05e3d883e5e2..b495a8e1a33f 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 @@ -81,8 +81,11 @@ public void onActivitySaveInstanceState(Activity activity, Bundle outState) { @Override public void onActivityDestroyed(Activity activity) { - if (activity == registrar.activity()) { - ((Application) registrar.context()).unregisterActivityLifecycleCallbacks(this); + if (activity == registrar.activity() + && registrar.activity().getApplicationContext() != null) { + ((Application) registrar.activity().getApplicationContext()) + .unregisterActivityLifecycleCallbacks( + this); // Use getApplicationContext() to avoid casting failures } } @@ -90,9 +93,13 @@ public void onActivityDestroyed(Activity activity) { public void onActivityStopped(Activity activity) {} }; - if (this.registrar != null) { - ((Application) this.registrar.context()) - .registerActivityLifecycleCallbacks(this.activityLifecycleCallbacks); + if (this.registrar != null + && this.registrar.context() != null + && this.registrar.context().getApplicationContext() != null) { + ((Application) this.registrar.context().getApplicationContext()) + .registerActivityLifecycleCallbacks( + this + .activityLifecycleCallbacks); // Use getApplicationContext() to avoid casting failures. } } 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 e37fceb7fdea..94a81d3d3eac 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 @@ -109,6 +109,14 @@ public void onResiter_WhenAcitivityIsNull_ShouldNotCrash() { "No exception thrown when ImagePickerPlugin.registerWith ran with activity = null", true); } + @Test + public void onConstructor_WhenContextTypeIsActivity_ShouldNotCrash() { + when(mockRegistrar.context()).thenReturn(mockActivity); + new ImagePickerPlugin(mockRegistrar, mockImagePickerDelegate); + assertTrue( + "No exception thrown when ImagePickerPlugin() ran with context instanceof Activity", 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 1779edcad0fc..ce1b46c63366 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.6.1+6 +version: 0.6.1+7 flutter: plugin: