From 18aec793921417b5f042121b6a3f908c70731745 Mon Sep 17 00:00:00 2001 From: Paul Vrugt Date: Wed, 30 May 2018 12:09:38 +0200 Subject: [PATCH 1/3] fixed bindable IsScanning property to be settable multiple times --- .../CameraAccess/CameraAnalyzer.cs | 23 ++++++++++++++----- .../ZXingSurfaceView.cs | 3 +++ 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/Source/ZXing.Net.Mobile.Android/CameraAccess/CameraAnalyzer.cs b/Source/ZXing.Net.Mobile.Android/CameraAccess/CameraAnalyzer.cs index 1a7ea7c8a..bdbe10a5e 100644 --- a/Source/ZXing.Net.Mobile.Android/CameraAccess/CameraAnalyzer.cs +++ b/Source/ZXing.Net.Mobile.Android/CameraAccess/CameraAnalyzer.cs @@ -14,6 +14,7 @@ public class CameraAnalyzer private DateTime _lastPreviewAnalysis = DateTime.UtcNow; private bool _wasScanned; IScannerSessionHost _scannerHost; + private bool _cameraSetup; public CameraAnalyzer(SurfaceView surfaceView, IScannerSessionHost scannerHost) { @@ -41,15 +42,23 @@ public void ResumeAnalysis() public void ShutdownCamera() { - IsAnalyzing = false; - _cameraEventListener.OnPreviewFrameReady -= HandleOnPreviewFrameReady; - _cameraController.ShutdownCamera(); + if (_cameraSetup) + { + IsAnalyzing = false; + _cameraEventListener.OnPreviewFrameReady -= HandleOnPreviewFrameReady; + _cameraController.ShutdownCamera(); + _cameraSetup = false; + } } public void SetupCamera() { - _cameraEventListener.OnPreviewFrameReady += HandleOnPreviewFrameReady; - _cameraController.SetupCamera(); + if (!_cameraSetup) + { + _cameraEventListener.OnPreviewFrameReady += HandleOnPreviewFrameReady; + _cameraController.SetupCamera(); + _cameraSetup = true; + } } public void AutoFocus() @@ -64,7 +73,9 @@ public void AutoFocus(int x, int y) public void RefreshCamera() { - _cameraController.RefreshCamera(); + //only refresh the camera if it is actually setup + if(_cameraSetup) + _cameraController.RefreshCamera(); } private bool CanAnalyzeFrame diff --git a/Source/ZXing.Net.Mobile.Android/ZXingSurfaceView.cs b/Source/ZXing.Net.Mobile.Android/ZXingSurfaceView.cs index 6e4130a04..4c7d53e2e 100644 --- a/Source/ZXing.Net.Mobile.Android/ZXingSurfaceView.cs +++ b/Source/ZXing.Net.Mobile.Android/ZXingSurfaceView.cs @@ -98,6 +98,9 @@ public void AutoFocus(int x, int y) public void StartScanning(Action scanResultCallback, MobileBarcodeScanningOptions options = null) { + //make sure the camera is setup + _cameraAnalyzer.SetupCamera(); + ScanningOptions = options ?? MobileBarcodeScanningOptions.Default; _cameraAnalyzer.BarcodeFound += (sender, result) => From ab0c58c2093e885150b475315fd17e45f7dab702 Mon Sep 17 00:00:00 2001 From: Paul Vrugt Date: Wed, 30 May 2018 15:31:08 +0200 Subject: [PATCH 2/3] avoid duplicate camera setup --- Source/ZXing.Net.Mobile.Android/ZXingSurfaceView.cs | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/Source/ZXing.Net.Mobile.Android/ZXingSurfaceView.cs b/Source/ZXing.Net.Mobile.Android/ZXingSurfaceView.cs index 4c7d53e2e..8258a76cd 100644 --- a/Source/ZXing.Net.Mobile.Android/ZXingSurfaceView.cs +++ b/Source/ZXing.Net.Mobile.Android/ZXingSurfaceView.cs @@ -40,11 +40,13 @@ private void Init() public async void SurfaceCreated(ISurfaceHolder holder) { - await ZXing.Net.Mobile.Android.PermissionsHandler.PermissionRequestTask; - - _cameraAnalyzer.SetupCamera(); - - _surfaceCreated = true; + //avoid duplicate setups, forcing the camera to be setup even when the camera was not scanning (this can happen when resuming the app) + if (!_surfaceCreated) + { + await ZXing.Net.Mobile.Android.PermissionsHandler.PermissionRequestTask; + _cameraAnalyzer.SetupCamera(); + _surfaceCreated = true; + } } public async void SurfaceChanged(ISurfaceHolder holder, Format format, int wx, int hx) From 97107ea3b09705f13538d869fdfabb819441cb89 Mon Sep 17 00:00:00 2001 From: Carola Nouws Date: Wed, 26 Sep 2018 13:36:02 +0200 Subject: [PATCH 3/3] Set visibility to fix freeze bug on android 7 --- Source/ZXing.Net.Mobile.Android/ZXingSurfaceView.cs | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Source/ZXing.Net.Mobile.Android/ZXingSurfaceView.cs b/Source/ZXing.Net.Mobile.Android/ZXingSurfaceView.cs index 8258a76cd..ad7b5cf2e 100644 --- a/Source/ZXing.Net.Mobile.Android/ZXingSurfaceView.cs +++ b/Source/ZXing.Net.Mobile.Android/ZXingSurfaceView.cs @@ -100,6 +100,9 @@ public void AutoFocus(int x, int y) public void StartScanning(Action scanResultCallback, MobileBarcodeScanningOptions options = null) { + //fix Android 7 bug: camera freezes because surfacedestroyed function isn't always called correct, the old surfaceview was still visible. + this.Visibility = ViewStates.Visible; + //make sure the camera is setup _cameraAnalyzer.SetupCamera(); @@ -115,6 +118,8 @@ public void StartScanning(Action scanResultCallback, MobileBarcodeScanni public void StopScanning() { _cameraAnalyzer.ShutdownCamera(); + //fix Android 7 bug: camera freezes because surfacedestroyed function isn't always called correct, the old surfaceview was still visible. + this.Visibility = ViewStates.Gone; } public void PauseAnalysis()