From cae142f6c0358fb92b8c5535fadc44338e3c2af7 Mon Sep 17 00:00:00 2001 From: Kirollos Morkos Date: Fri, 29 Jun 2018 12:38:37 -0400 Subject: [PATCH 1/3] Unregister the activity lifecycle callbacks when disposing the camera --- .../flutter/plugins/camera/CameraPlugin.java | 91 ++++++++++--------- 1 file changed, 50 insertions(+), 41 deletions(-) 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 1d4bedefbbf4..4b2d1cc7b19c 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 @@ -65,6 +65,7 @@ public class CameraPlugin implements MethodCallHandler { private Camera camera; private Activity activity; private Registrar registrar; + private Application.ActivityLifecycleCallbacks activityLifecycleCallbacks; // The code to run after requesting camera permissions. private Runnable cameraPermissionContinuation; private boolean requestingPermission; @@ -76,53 +77,56 @@ private CameraPlugin(Registrar registrar, FlutterView view, Activity activity) { registrar.addRequestPermissionsResultListener(new CameraRequestPermissionsListener()); - activity - .getApplication() - .registerActivityLifecycleCallbacks( - new Application.ActivityLifecycleCallbacks() { - @Override - public void onActivityCreated(Activity activity, Bundle savedInstanceState) {} + this.activityLifecycleCallbacks = new Application.ActivityLifecycleCallbacks() { + @Override + public void onActivityCreated(Activity activity, Bundle savedInstanceState) {} - @Override - public void onActivityStarted(Activity activity) {} + @Override + public void onActivityStarted(Activity activity) {} - @Override - public void onActivityResumed(Activity activity) { - if (requestingPermission) { - requestingPermission = false; - return; - } - if (activity == CameraPlugin.this.activity) { - if (camera != null) { - camera.open(null); - } - } - } + @Override + public void onActivityResumed(Activity activity) { + if (requestingPermission) { + requestingPermission = false; + return; + } + if (activity == CameraPlugin.this.activity) { + if (camera != null) { + camera.open(null); + } + } + } - @Override - public void onActivityPaused(Activity activity) { - if (activity == CameraPlugin.this.activity) { - if (camera != null) { - camera.close(); - } - } - } + @Override + public void onActivityPaused(Activity activity) { + if (activity == CameraPlugin.this.activity) { + if (camera != null) { + camera.close(); + } + } + } - @Override - public void onActivityStopped(Activity activity) { - if (activity == CameraPlugin.this.activity) { - if (camera != null) { - camera.close(); - } - } - } + @Override + public void onActivityStopped(Activity activity) { + if (activity == CameraPlugin.this.activity) { + if (camera != null) { + camera.close(); + } + } + } - @Override - public void onActivitySaveInstanceState(Activity activity, Bundle outState) {} + @Override + public void onActivitySaveInstanceState(Activity activity, Bundle outState) {} - @Override - public void onActivityDestroyed(Activity activity) {} - }); + @Override + public void onActivityDestroyed(Activity activity) {} + }; + + activity + .getApplication() + .registerActivityLifecycleCallbacks( + this.activityLifecycleCallbacks + ); } public static void registerWith(Registrar registrar) { @@ -204,6 +208,11 @@ public void onMethodCall(MethodCall call, final Result result) { if (camera != null) { camera.dispose(); } + if (this.activity != null && this.activityLifecycleCallbacks != null) { + this.activity + .getApplication() + .unregisterActivityLifecycleCallbacks(this.activityLifecycleCallbacks); + } result.success(null); break; } From eb1aa361bd705b307c05665e3624f2435ac6120e Mon Sep 17 00:00:00 2001 From: Kirollos Morkos Date: Fri, 29 Jun 2018 12:56:25 -0400 Subject: [PATCH 2/3] Fix formatting --- .../flutter/plugins/camera/CameraPlugin.java | 85 +++++++++---------- 1 file changed, 41 insertions(+), 44 deletions(-) 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 4b2d1cc7b19c..71ba912420ec 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 @@ -77,56 +77,53 @@ private CameraPlugin(Registrar registrar, FlutterView view, Activity activity) { registrar.addRequestPermissionsResultListener(new CameraRequestPermissionsListener()); - this.activityLifecycleCallbacks = new Application.ActivityLifecycleCallbacks() { - @Override - public void onActivityCreated(Activity activity, Bundle savedInstanceState) {} - - @Override - public void onActivityStarted(Activity activity) {} - - @Override - public void onActivityResumed(Activity activity) { - if (requestingPermission) { - requestingPermission = false; - return; - } - if (activity == CameraPlugin.this.activity) { - if (camera != null) { - camera.open(null); + this.activityLifecycleCallbacks = + new Application.ActivityLifecycleCallbacks() { + @Override + public void onActivityCreated(Activity activity, Bundle savedInstanceState) {} + + @Override + public void onActivityStarted(Activity activity) {} + + @Override + public void onActivityResumed(Activity activity) { + if (requestingPermission) { + requestingPermission = false; + return; + } + if (activity == CameraPlugin.this.activity) { + if (camera != null) { + camera.open(null); + } + } } - } - } - @Override - public void onActivityPaused(Activity activity) { - if (activity == CameraPlugin.this.activity) { - if (camera != null) { - camera.close(); + @Override + public void onActivityPaused(Activity activity) { + if (activity == CameraPlugin.this.activity) { + if (camera != null) { + camera.close(); + } + } } - } - } - @Override - public void onActivityStopped(Activity activity) { - if (activity == CameraPlugin.this.activity) { - if (camera != null) { - camera.close(); + @Override + public void onActivityStopped(Activity activity) { + if (activity == CameraPlugin.this.activity) { + if (camera != null) { + camera.close(); + } + } } - } - } - @Override - public void onActivitySaveInstanceState(Activity activity, Bundle outState) {} + @Override + public void onActivitySaveInstanceState(Activity activity, Bundle outState) {} - @Override - public void onActivityDestroyed(Activity activity) {} - }; + @Override + public void onActivityDestroyed(Activity activity) {} + }; - activity - .getApplication() - .registerActivityLifecycleCallbacks( - this.activityLifecycleCallbacks - ); + activity.getApplication().registerActivityLifecycleCallbacks(this.activityLifecycleCallbacks); } public static void registerWith(Registrar registrar) { @@ -210,8 +207,8 @@ public void onMethodCall(MethodCall call, final Result result) { } if (this.activity != null && this.activityLifecycleCallbacks != null) { this.activity - .getApplication() - .unregisterActivityLifecycleCallbacks(this.activityLifecycleCallbacks); + .getApplication() + .unregisterActivityLifecycleCallbacks(this.activityLifecycleCallbacks); } result.success(null); break; From f934e9975f4434446198434982524669fd40f36b Mon Sep 17 00:00:00 2001 From: Kirollos Morkos Date: Thu, 27 Sep 2018 17:43:25 -0400 Subject: [PATCH 3/3] Move registerActivityLifecycleCallbacks call to initialize method --- .../main/java/io/flutter/plugins/camera/CameraPlugin.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) 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 71ba912420ec..7cd827b3cf04 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 @@ -122,8 +122,6 @@ public void onActivitySaveInstanceState(Activity activity, Bundle outState) {} @Override public void onActivityDestroyed(Activity activity) {} }; - - activity.getApplication().registerActivityLifecycleCallbacks(this.activityLifecycleCallbacks); } public static void registerWith(Registrar registrar) { @@ -182,6 +180,9 @@ public void onMethodCall(MethodCall call, final Result result) { camera.close(); } camera = new Camera(cameraName, resolutionPreset, result); + this.activity + .getApplication() + .registerActivityLifecycleCallbacks(this.activityLifecycleCallbacks); break; } case "takePicture": @@ -382,7 +383,8 @@ private void computeBestPreviewAndRecordingSize( } else { previewSize = goodEnough.get(0); - // Video capture size should not be greater than 1080 because MediaRecorder cannot handle higher resolutions. + // Video capture size should not be greater than 1080 because MediaRecorder cannot handle + // higher resolutions. videoSize = goodEnough.get(0); for (int i = goodEnough.size() - 1; i >= 0; i--) { if (goodEnough.get(i).getHeight() <= 1080) {