Skip to content
This repository was archived by the owner on Feb 22, 2023. It is now read-only.
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions packages/image_picker/image_picker/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
## 0.7.4

* Fix [#78625](https://github.com/flutter/flutter/issues/78625)

## 0.7.3

* Endorse image_picker_for_web
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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";
Expand All @@ -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) {
Expand Down Expand Up @@ -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 {
Expand All @@ -212,7 +210,7 @@ private void tearDown() {
delegate = null;
channel.setMethodCallHandler(null);
channel = null;
application.unregisterActivityLifecycleCallbacks(observer);
application.unregisterActivityLifecycleCallbacks(lifecycleCallbacks);
application = null;
}

Expand Down
2 changes: 1 addition & 1 deletion packages/image_picker/image_picker/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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:
Expand Down