diff --git a/packages/image_picker/image_picker/CHANGELOG.md b/packages/image_picker/image_picker/CHANGELOG.md index fc3d5c156a17..391e073a827e 100644 --- a/packages/image_picker/image_picker/CHANGELOG.md +++ b/packages/image_picker/image_picker/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.7.4 + +* Fix [#78625](https://github.com/flutter/flutter/issues/78625) + ## 0.7.3 * Endorse image_picker_for_web diff --git a/packages/image_picker/image_picker/android/src/main/java/io/flutter/plugins/imagepicker/ImagePickerPlugin.java b/packages/image_picker/image_picker/android/src/main/java/io/flutter/plugins/imagepicker/ImagePickerPlugin.java index 98b64101bed7..a4c97b8291c8 100644 --- a/packages/image_picker/image_picker/android/src/main/java/io/flutter/plugins/imagepicker/ImagePickerPlugin.java +++ b/packages/image_picker/image_picker/android/src/main/java/io/flutter/plugins/imagepicker/ImagePickerPlugin.java @@ -29,68 +29,6 @@ public class ImagePickerPlugin implements MethodChannel.MethodCallHandler, FlutterPlugin, ActivityAware { - private class LifeCycleObserver - implements Application.ActivityLifecycleCallbacks, DefaultLifecycleObserver { - private final Activity thisActivity; - - LifeCycleObserver(Activity activity) { - this.thisActivity = activity; - } - - @Override - public void onCreate(@NonNull LifecycleOwner owner) {} - - @Override - public void onStart(@NonNull LifecycleOwner owner) {} - - @Override - public void onResume(@NonNull LifecycleOwner owner) {} - - @Override - public void onPause(@NonNull LifecycleOwner owner) {} - - @Override - public void onStop(@NonNull LifecycleOwner owner) { - onActivityStopped(thisActivity); - } - - @Override - public void onDestroy(@NonNull LifecycleOwner owner) { - onActivityDestroyed(thisActivity); - } - - @Override - public void onActivityCreated(Activity activity, Bundle savedInstanceState) {} - - @Override - public void onActivityStarted(Activity activity) {} - - @Override - public void onActivityResumed(Activity activity) {} - - @Override - public void onActivityPaused(Activity activity) {} - - @Override - public void onActivitySaveInstanceState(Activity activity, Bundle outState) {} - - @Override - public void onActivityDestroyed(Activity activity) { - if (thisActivity == activity && activity.getApplicationContext() != null) { - ((Application) activity.getApplicationContext()) - .unregisterActivityLifecycleCallbacks( - this); // Use getApplicationContext() to avoid casting failures - } - } - - @Override - public void onActivityStopped(Activity activity) { - if (thisActivity == activity) { - delegate.saveStateBeforeResult(); - } - } - } - static final String METHOD_CALL_IMAGE = "pickImage"; static final String METHOD_CALL_VIDEO = "pickVideo"; private static final String METHOD_CALL_RETRIEVE = "retrieve"; @@ -109,7 +47,8 @@ public void onActivityStopped(Activity activity) { private Activity activity; // This is null when not using v2 embedding; private Lifecycle lifecycle; - private LifeCycleObserver observer; + private DefaultLifecycleObserver observer; + private Application.ActivityLifecycleCallbacks lifecycleCallbacks; @SuppressWarnings("deprecation") public static void registerWith(io.flutter.plugin.common.PluginRegistry.Registrar registrar) { @@ -188,10 +127,69 @@ private void setup( this.delegate = constructDelegate(activity); channel = new MethodChannel(messenger, CHANNEL); channel.setMethodCallHandler(this); - observer = new LifeCycleObserver(activity); + + lifecycleCallbacks = + new Application.ActivityLifecycleCallbacks() { + @Override + public void onActivityCreated(Activity activity, Bundle savedInstanceState) {} + + @Override + public void onActivityStarted(Activity activity) {} + + @Override + public void onActivityResumed(Activity activity) {} + + @Override + public void onActivityPaused(Activity activity) {} + + @Override + public void onActivitySaveInstanceState(Activity activity, Bundle outState) {} + + @Override + public void onActivityDestroyed(Activity currActivity) { + if (activity == currActivity && currActivity.getApplicationContext() != null) { + ((Application) currActivity.getApplicationContext()) + .unregisterActivityLifecycleCallbacks( + this); // Use getApplicationContext() to avoid casting failures + } + } + + @Override + public void onActivityStopped(Activity currActivity) { + if (activity == currActivity) { + delegate.saveStateBeforeResult(); + } + } + }; + + observer = + new DefaultLifecycleObserver() { + @Override + public void onCreate(@NonNull LifecycleOwner owner) {} + + @Override + public void onStart(@NonNull LifecycleOwner owner) {} + + @Override + public void onResume(@NonNull LifecycleOwner owner) {} + + @Override + public void onPause(@NonNull LifecycleOwner owner) {} + + @Override + public void onStop(@NonNull LifecycleOwner owner) { + lifecycleCallbacks.onActivityStopped(activity); + } + + @Override + public void onDestroy(@NonNull LifecycleOwner owner) { + lifecycleCallbacks.onActivityDestroyed(activity); + } + }; + if (registrar != null) { // V1 embedding setup for activity listeners. - application.registerActivityLifecycleCallbacks(observer); + application.registerActivityLifecycleCallbacks(lifecycleCallbacks); registrar.addActivityResultListener(delegate); registrar.addRequestPermissionsResultListener(delegate); } else { @@ -212,7 +210,7 @@ private void tearDown() { delegate = null; channel.setMethodCallHandler(null); channel = null; - application.unregisterActivityLifecycleCallbacks(observer); + application.unregisterActivityLifecycleCallbacks(lifecycleCallbacks); application = null; } diff --git a/packages/image_picker/image_picker/pubspec.yaml b/packages/image_picker/image_picker/pubspec.yaml index 0018e87ab437..5c2e5740c2a5 100755 --- a/packages/image_picker/image_picker/pubspec.yaml +++ b/packages/image_picker/image_picker/pubspec.yaml @@ -2,7 +2,7 @@ name: image_picker description: Flutter plugin for selecting images from the Android and iOS image library, and taking new pictures with the camera. homepage: https://github.com/flutter/plugins/tree/master/packages/image_picker/image_picker -version: 0.7.3 +version: 0.7.4 flutter: plugin: