From 263065048cb3b81099fc3cf0503e2b180cb8db07 Mon Sep 17 00:00:00 2001 From: Marc Rousavy Date: Tue, 12 Dec 2023 12:00:29 +0100 Subject: [PATCH] fix: Fix `Only the original thread that created a view hierarchy can touch it's views` error (#2278) * fix: Fix `Only the original thread that created a view hierarchy can touch its views` error * fix: Also call `SurfaceHolder` method on UI Thread --- .../com/mrousavy/camera/core/PreviewView.kt | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/package/android/src/main/java/com/mrousavy/camera/core/PreviewView.kt b/package/android/src/main/java/com/mrousavy/camera/core/PreviewView.kt index d462abc..59336a4 100644 --- a/package/android/src/main/java/com/mrousavy/camera/core/PreviewView.kt +++ b/package/android/src/main/java/com/mrousavy/camera/core/PreviewView.kt @@ -9,6 +9,7 @@ import android.view.Gravity import android.view.SurfaceHolder import android.view.SurfaceView import android.widget.FrameLayout +import com.facebook.react.bridge.UiThreadUtil import com.mrousavy.camera.extensions.bigger import com.mrousavy.camera.extensions.getMaximumPreviewSize import com.mrousavy.camera.extensions.getPreviewTargetSize @@ -21,19 +22,21 @@ import kotlin.math.roundToInt class PreviewView(context: Context, callback: SurfaceHolder.Callback) : SurfaceView(context) { var size: Size = getMaximumPreviewSize() set(value) { - Log.i(TAG, "Resizing PreviewView to ${value.width} x ${value.height}...") - holder.setFixedSize(value.width, value.height) - requestLayout() - invalidate() field = value - } - var resizeMode: ResizeMode = ResizeMode.COVER - set(value) { - if (value != field) { + UiThreadUtil.runOnUiThread { + Log.i(TAG, "Resizing PreviewView to ${value.width} x ${value.height}...") + holder.setFixedSize(value.width, value.height) requestLayout() invalidate() } + } + var resizeMode: ResizeMode = ResizeMode.COVER + set(value) { field = value + UiThreadUtil.runOnUiThread { + requestLayout() + invalidate() + } } init {