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()