From 1dbe37c7751e6ca1b9b7c39797b0c0d845696282 Mon Sep 17 00:00:00 2001 From: Guy Kogus Date: Tue, 20 Apr 2021 19:07:51 +0200 Subject: [PATCH 1/2] Fix getting camera permissions --- ios/Classes/QRView.swift | 10 +++++++--- lib/src/qr_code_scanner.dart | 8 ++------ 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/ios/Classes/QRView.swift b/ios/Classes/QRView.swift index 20cedc8..971be1d 100644 --- a/ios/Classes/QRView.swift +++ b/ios/Classes/QRView.swift @@ -125,7 +125,11 @@ public class QRView:NSObject,FlutterPlatformView { arguments.forEach { arg in allowedBarcodeTypes.append( QRCodeTypes[arg]!) } - MTBBarcodeScanner.requestCameraPermission(success: { permissionGranted in + MTBBarcodeScanner.requestCameraPermission(success: { [weak self] permissionGranted in + guard let self = self else { return } + + self.channel.invokeMethod("onPermissionSet", arguments: permissionGranted) + if permissionGranted { do { try self.scanner?.startScanning(with: self.cameraFacing, resultBlock: { [weak self] codes in @@ -169,8 +173,8 @@ public class QRView:NSObject,FlutterPlatformView { }) } catch { - let error = FlutterError(code: "unknown-error", message: "Unable to start scanning", details: nil) - return result(error) + let scanError = FlutterError(code: "unknown-error", message: "Unable to start scanning", details: error) + result(scanError) } } else { let error = FlutterError(code: "cameraPermission", message: "Permission denied to access the camera", details: nil) diff --git a/lib/src/qr_code_scanner.dart b/lib/src/qr_code_scanner.dart index 67ee443..e716705 100644 --- a/lib/src/qr_code_scanner.dart +++ b/lib/src/qr_code_scanner.dart @@ -199,13 +199,9 @@ class QRViewController { case 'onPermissionSet': await getSystemFeatures(); // if we have no permission all features will not be avaible if (call.arguments != null) { - if (call.arguments as bool) { - _hasPermissions = true; - } else { - _hasPermissions = false; - } + _hasPermissions = call.arguments as bool; if (onPermissionSet != null) { - onPermissionSet(this, call.arguments as bool); + onPermissionSet(this, _hasPermissions); } } break; From 334f85e2aace68fb95a5c09fba19ae970bcb4af2 Mon Sep 17 00:00:00 2001 From: Guy Kogus Date: Wed, 21 Apr 2021 10:15:41 +0200 Subject: [PATCH 2/2] Fix getting camera permissions - Android --- .../net/touchcapture/qr/flutterqr/QRView.kt | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/android/src/main/kotlin/net/touchcapture/qr/flutterqr/QRView.kt b/android/src/main/kotlin/net/touchcapture/qr/flutterqr/QRView.kt index c7355b3..b3d736c 100644 --- a/android/src/main/kotlin/net/touchcapture/qr/flutterqr/QRView.kt +++ b/android/src/main/kotlin/net/touchcapture/qr/flutterqr/QRView.kt @@ -215,6 +215,8 @@ class QRView(messenger: BinaryMessenger, id: Int, private val params: HashMap?, result: MethodChannel.Result) { val allowedBarcodeTypes = mutableListOf() try { + checkAndRequestPermission(result) + arguments?.forEach { allowedBarcodeTypes.add(BarcodeFormat.values()[it]) } @@ -255,16 +257,22 @@ class QRView(messenger: BinaryMessenger, id: Int, private val params: HashMap= Build.VERSION_CODES.M -> { - Shared.activity?.requestPermissions( - arrayOf(Manifest.permission.CAMERA), - Shared.CAMERA_REQUEST_ID) + if (Shared.activity?.checkSelfPermission(Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) { + permissionGranted = true + channel.invokeMethod("onPermissionSet", true) + } else { + Shared.activity?.requestPermissions( + arrayOf(Manifest.permission.CAMERA), + Shared.CAMERA_REQUEST_ID) + } } else -> { result?.error("cameraPermission", "Platform Version to low for camera permission check", null)