From 6881bbe4c6f2ffeb57a8f34675196f638a4c8648 Mon Sep 17 00:00:00 2001 From: Andrea Bizzotto Date: Fri, 13 Apr 2018 10:10:48 +0100 Subject: [PATCH 1/5] Add checkCameraPermission method on iOS --- ios/Classes/SwiftSimplePermissionsPlugin.swift | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/ios/Classes/SwiftSimplePermissionsPlugin.swift b/ios/Classes/SwiftSimplePermissionsPlugin.swift index def8b28..51255fc 100644 --- a/ios/Classes/SwiftSimplePermissionsPlugin.swift +++ b/ios/Classes/SwiftSimplePermissionsPlugin.swift @@ -3,6 +3,18 @@ import UIKit import AVFoundation import CoreLocation +extension AVAuthorizationStatus : CustomStringConvertible { + + public var description: String { + switch self { + case .notDetermined: return "notDetermined" + case .restricted: return "restricted" + case .denied: return "denied" + case .authorized: return "authorized" + } + } +} + public class SwiftSimplePermissionsPlugin: NSObject, FlutterPlugin, CLLocationManagerDelegate { var whenInUse = false; var result: FlutterResult? = nil; @@ -19,6 +31,9 @@ public class SwiftSimplePermissionsPlugin: NSObject, FlutterPlugin, CLLocationMa let method = call.method; let dic = call.arguments as? [String: Any]; switch(method) { + case "checkCameraPermission": + let authStatus = AVCaptureDevice.authorizationStatus(for: AVMediaType.video) + result(authStatus.description) case "checkPermission": let permission = dic!["permission"] as! String; checkPermission(permission, result: result); From 3c138cffeb9207e55875c2cbb9104062d6ea41db Mon Sep 17 00:00:00 2001 From: Andrea Bizzotto Date: Fri, 13 Apr 2018 10:14:29 +0100 Subject: [PATCH 2/5] Add checkCameraPermission method to return CameraAuthorizationStatus --- lib/simple_permissions.dart | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/lib/simple_permissions.dart b/lib/simple_permissions.dart index 54b95b2..ce8182f 100644 --- a/lib/simple_permissions.dart +++ b/lib/simple_permissions.dart @@ -2,6 +2,13 @@ import 'dart:async'; import 'package:flutter/services.dart'; +enum CameraAuthorizationStatus { + notDetermined, + restricted, + denied, + authorized +} + class SimplePermissions { static const MethodChannel _channel = const MethodChannel('simple_permissions'); @@ -25,6 +32,17 @@ class SimplePermissions { static Future openSettings() { return _channel.invokeMethod("openSettings"); } + + static CameraAuthorizationStatus checkCameraPermission() async { + String authStatus = await _channel.invokeMethod("checkCameraPermission"); + switch (authStatus) { + case "notDetermined": return CameraAuthorizationStatus.notDetermined; + case "restricted": return CameraAuthorizationStatus.restricted; + case "denied": return CameraAuthorizationStatus.denied; + case "authorized": return CameraAuthorizationStatus.authorized; + } + } + } /// Enum of all available [Permission] From 5799f9417f33f37b077f33b2c54c201a34b44aa0 Mon Sep 17 00:00:00 2001 From: Andrea Bizzotto Date: Fri, 13 Apr 2018 10:25:56 +0100 Subject: [PATCH 3/5] Turn checkCameraPermission into a Future --- lib/simple_permissions.dart | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/lib/simple_permissions.dart b/lib/simple_permissions.dart index ce8182f..634f70a 100644 --- a/lib/simple_permissions.dart +++ b/lib/simple_permissions.dart @@ -32,15 +32,18 @@ class SimplePermissions { static Future openSettings() { return _channel.invokeMethod("openSettings"); } - - static CameraAuthorizationStatus checkCameraPermission() async { - String authStatus = await _channel.invokeMethod("checkCameraPermission"); - switch (authStatus) { - case "notDetermined": return CameraAuthorizationStatus.notDetermined; - case "restricted": return CameraAuthorizationStatus.restricted; - case "denied": return CameraAuthorizationStatus.denied; - case "authorized": return CameraAuthorizationStatus.authorized; - } + + static Future checkCameraPermission() async { + String authStatus = _channel.invokeMethod("checkCameraPermission"); + authStatus.then((authStatus) { + switch (authStatus) { + case "notDetermined": return CameraAuthorizationStatus.notDetermined; + case "restricted": return CameraAuthorizationStatus.restricted; + case "denied": return CameraAuthorizationStatus.denied; + case "authorized": return CameraAuthorizationStatus.authorized; + } + }); + return authStatus; } } From b3fdd8f44aa6f83174a67ead1e0c4239db6a276e Mon Sep 17 00:00:00 2001 From: Andrea Bizzotto Date: Fri, 13 Apr 2018 10:30:51 +0100 Subject: [PATCH 4/5] Fix type --- lib/simple_permissions.dart | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/simple_permissions.dart b/lib/simple_permissions.dart index 634f70a..83e1197 100644 --- a/lib/simple_permissions.dart +++ b/lib/simple_permissions.dart @@ -34,7 +34,7 @@ class SimplePermissions { } static Future checkCameraPermission() async { - String authStatus = _channel.invokeMethod("checkCameraPermission"); + var authStatus = _channel.invokeMethod("checkCameraPermission"); authStatus.then((authStatus) { switch (authStatus) { case "notDetermined": return CameraAuthorizationStatus.notDetermined; From 00404bd9a9ce4897fb3097080edbe0517de6f3c1 Mon Sep 17 00:00:00 2001 From: Andrea Bizzotto Date: Fri, 13 Apr 2018 10:50:36 +0100 Subject: [PATCH 5/5] Implement checkCameraPermission with await to make compiler happy --- lib/simple_permissions.dart | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/lib/simple_permissions.dart b/lib/simple_permissions.dart index 83e1197..97e5cce 100644 --- a/lib/simple_permissions.dart +++ b/lib/simple_permissions.dart @@ -9,6 +9,15 @@ enum CameraAuthorizationStatus { authorized } +CameraAuthorizationStatus authorizationStatus(String status) { + switch (status) { + case "notDetermined": return CameraAuthorizationStatus.notDetermined; + case "restricted": return CameraAuthorizationStatus.restricted; + case "denied": return CameraAuthorizationStatus.denied; + case "authorized": return CameraAuthorizationStatus.authorized; + } +} + class SimplePermissions { static const MethodChannel _channel = const MethodChannel('simple_permissions'); @@ -34,18 +43,9 @@ class SimplePermissions { } static Future checkCameraPermission() async { - var authStatus = _channel.invokeMethod("checkCameraPermission"); - authStatus.then((authStatus) { - switch (authStatus) { - case "notDetermined": return CameraAuthorizationStatus.notDetermined; - case "restricted": return CameraAuthorizationStatus.restricted; - case "denied": return CameraAuthorizationStatus.denied; - case "authorized": return CameraAuthorizationStatus.authorized; - } - }); - return authStatus; + String authStatus = await _channel.invokeMethod("checkCameraPermission"); + return Future.value(authorizationStatus(authStatus)); } - } /// Enum of all available [Permission]