UNPKG

1.82 kBPlain TextView Raw
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