From 2e398a035904b50feabba3dc65f0ff711dc68f48 Mon Sep 17 00:00:00 2001 From: Sander Roest Date: Tue, 12 Jan 2021 14:37:13 +0100 Subject: [PATCH 1/5] call invokeMethod on the main thread --- .../java/io/flutter/plugins/camera/DartMessenger.java | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/camera/camera/android/src/main/java/io/flutter/plugins/camera/DartMessenger.java b/packages/camera/camera/android/src/main/java/io/flutter/plugins/camera/DartMessenger.java index 2fee13816b51..a9ef444ff3f8 100644 --- a/packages/camera/camera/android/src/main/java/io/flutter/plugins/camera/DartMessenger.java +++ b/packages/camera/camera/android/src/main/java/io/flutter/plugins/camera/DartMessenger.java @@ -1,5 +1,7 @@ package io.flutter.plugins.camera; +import android.os.Handler; +import android.os.Looper; import android.text.TextUtils; import androidx.annotation.Nullable; import io.flutter.plugin.common.BinaryMessenger; @@ -64,6 +66,11 @@ void send(EventType eventType, Map args) { if (channel == null) { return; } - channel.invokeMethod(eventType.toString().toLowerCase(), args); + new Handler(Looper.getMainLooper()).post(new Runnable () { + @Override + public void run () { + channel.invokeMethod(eventType.toString().toLowerCase(), args); + } + }); } } From 3bacd2b74b77695647c8ebc51c9250fd2013d8e4 Mon Sep 17 00:00:00 2001 From: Sander Roest Date: Thu, 21 Jan 2021 16:34:01 +0100 Subject: [PATCH 2/5] apply fix that resolves crash when the caller is not running on the main thread --- .../io/flutter/plugins/camera/DartMessenger.java | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/packages/camera/camera/android/src/main/java/io/flutter/plugins/camera/DartMessenger.java b/packages/camera/camera/android/src/main/java/io/flutter/plugins/camera/DartMessenger.java index 5681f723ed80..235c424e0640 100644 --- a/packages/camera/camera/android/src/main/java/io/flutter/plugins/camera/DartMessenger.java +++ b/packages/camera/camera/android/src/main/java/io/flutter/plugins/camera/DartMessenger.java @@ -4,6 +4,8 @@ package io.flutter.plugins.camera; +import android.os.Handler; +import android.os.Looper; import android.text.TextUtils; import androidx.annotation.Nullable; import io.flutter.embedding.engine.systemchannels.PlatformChannel; @@ -104,7 +106,12 @@ void send(CameraEventType eventType, Map args) { if (cameraChannel == null) { return; } - cameraChannel.invokeMethod(eventType.method, args); + new Handler(Looper.getMainLooper()).post(new Runnable () { + @Override + public void run () { + cameraChannel.invokeMethod(eventType.method, args); + } + }); } void send(DeviceEventType eventType) { @@ -115,6 +122,11 @@ void send(DeviceEventType eventType, Map args) { if (deviceChannel == null) { return; } - deviceChannel.invokeMethod(eventType.method, args); + new Handler(Looper.getMainLooper()).post(new Runnable () { + @Override + public void run () { + deviceChannel.invokeMethod(eventType.method, args); + } + }); } } From ca3977d9e4e7238486d9a1292f8811804a0128fa Mon Sep 17 00:00:00 2001 From: Sander Roest Date: Thu, 21 Jan 2021 16:35:30 +0100 Subject: [PATCH 3/5] format according google rules => pub global run flutter_plugin_tools format --plugins camera --- .../flutter/plugins/camera/DartMessenger.java | 28 +++++++++++-------- 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/packages/camera/camera/android/src/main/java/io/flutter/plugins/camera/DartMessenger.java b/packages/camera/camera/android/src/main/java/io/flutter/plugins/camera/DartMessenger.java index 235c424e0640..3892452892d9 100644 --- a/packages/camera/camera/android/src/main/java/io/flutter/plugins/camera/DartMessenger.java +++ b/packages/camera/camera/android/src/main/java/io/flutter/plugins/camera/DartMessenger.java @@ -106,12 +106,14 @@ void send(CameraEventType eventType, Map args) { if (cameraChannel == null) { return; } - new Handler(Looper.getMainLooper()).post(new Runnable () { - @Override - public void run () { - cameraChannel.invokeMethod(eventType.method, args); - } - }); + new Handler(Looper.getMainLooper()) + .post( + new Runnable() { + @Override + public void run() { + cameraChannel.invokeMethod(eventType.method, args); + } + }); } void send(DeviceEventType eventType) { @@ -122,11 +124,13 @@ void send(DeviceEventType eventType, Map args) { if (deviceChannel == null) { return; } - new Handler(Looper.getMainLooper()).post(new Runnable () { - @Override - public void run () { - deviceChannel.invokeMethod(eventType.method, args); - } - }); + new Handler(Looper.getMainLooper()) + .post( + new Runnable() { + @Override + public void run() { + deviceChannel.invokeMethod(eventType.method, args); + } + }); } } From f25b64a5b19a8a8bf758faca0ecaa13d0839abf7 Mon Sep 17 00:00:00 2001 From: Sander Roest Date: Thu, 21 Jan 2021 16:47:12 +0100 Subject: [PATCH 4/5] Increase version, add info to CHANGELOG.md --- packages/camera/camera/CHANGELOG.md | 4 ++++ packages/camera/camera/pubspec.yaml | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/packages/camera/camera/CHANGELOG.md b/packages/camera/camera/CHANGELOG.md index 55145ffc82e7..ae1e2102751b 100644 --- a/packages/camera/camera/CHANGELOG.md +++ b/packages/camera/camera/CHANGELOG.md @@ -1,3 +1,7 @@ +## 0.7.0+1 + +* Fix issue: [camera] [crash] Methods marked with @UiThread must be executed on the main thread #72340 + ## 0.7.0 * BREAKING CHANGE: `CameraValue.aspectRatio` now returns `width / height` rather than `height / width`. [(commit)](https://github.com/flutter/plugins/commit/100c7470d4066b1d0f8f7e4ec6d7c943e736f970) diff --git a/packages/camera/camera/pubspec.yaml b/packages/camera/camera/pubspec.yaml index b0ebb9c16361..b406ce5ba64f 100644 --- a/packages/camera/camera/pubspec.yaml +++ b/packages/camera/camera/pubspec.yaml @@ -2,7 +2,7 @@ name: camera description: A Flutter plugin for getting information about and controlling the camera on Android and iOS. Supports previewing the camera feed, capturing images, capturing video, and streaming image buffers to dart. -version: 0.7.0 +version: 0.7.0+1 homepage: https://github.com/flutter/plugins/tree/master/packages/camera/camera dependencies: From cc146e2bf3f4907c69083df743a366c1c22cc1c9 Mon Sep 17 00:00:00 2001 From: Sander Roest Date: Thu, 21 Jan 2021 17:49:07 +0100 Subject: [PATCH 5/5] Change message in CHANGELOG.md to be more descriptive --- packages/camera/camera/CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/camera/camera/CHANGELOG.md b/packages/camera/camera/CHANGELOG.md index ae1e2102751b..cc734737182f 100644 --- a/packages/camera/camera/CHANGELOG.md +++ b/packages/camera/camera/CHANGELOG.md @@ -1,6 +1,6 @@ ## 0.7.0+1 -* Fix issue: [camera] [crash] Methods marked with @UiThread must be executed on the main thread #72340 +* Ensure communication from JAVA to Dart is done on the main UI thread. ## 0.7.0