1 | // Copyright 2016-present 650 Industries. All rights reserved.
|
2 |
|
3 | #import <EXCamera/EXCameraPermissionRequester.h>
|
4 | #import <UMCore/UMDefines.h>
|
5 | #import <UMPermissionsInterface/UMPermissionsInterface.h>
|
6 |
|
7 | #import <AVFoundation/AVFoundation.h>
|
8 |
|
9 |
|
10 | @implementation EXCameraPermissionRequester
|
11 |
|
12 | + (NSString *)permissionType {
|
13 | return @"camera";
|
14 | }
|
15 |
|
16 | - (NSDictionary *)getPermissions
|
17 | {
|
18 | AVAuthorizationStatus systemStatus;
|
19 | UMPermissionStatus status;
|
20 | NSString *cameraUsageDescription = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"NSCameraUsageDescription"];
|
21 | NSString *microphoneUsageDescription = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"NSMicrophoneUsageDescription"];
|
22 | if (!(cameraUsageDescription && microphoneUsageDescription)) {
|
23 | UMFatal(UMErrorWithMessage(@"This app is missing either NSCameraUsageDescription or NSMicrophoneUsageDescription, so audio/video services will fail. Add one of these entries to your bundle's Info.plist."));
|
24 | systemStatus = AVAuthorizationStatusDenied;
|
25 | } else {
|
26 | systemStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
|
27 | }
|
28 | switch (systemStatus) {
|
29 | case AVAuthorizationStatusAuthorized:
|
30 | status = UMPermissionStatusGranted;
|
31 | break;
|
32 | case AVAuthorizationStatusDenied:
|
33 | case AVAuthorizationStatusRestricted:
|
34 | status = UMPermissionStatusDenied;
|
35 | break;
|
36 | case AVAuthorizationStatusNotDetermined:
|
37 | status = UMPermissionStatusUndetermined;
|
38 | break;
|
39 | }
|
40 | return @{
|
41 | @"status": @(status)
|
42 | };
|
43 | }
|
44 |
|
45 | - (void)requestPermissionsWithResolver:(UMPromiseResolveBlock)resolve rejecter:(UMPromiseRejectBlock)reject
|
46 | {
|
47 | UM_WEAKIFY(self)
|
48 | [AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^(BOOL granted) {
|
49 | UM_STRONGIFY(self)
|
50 | resolve([self getPermissions]);
|
51 | }];
|
52 | }
|
53 |
|
54 | @end
|