1// Copyright 2016-present 650 Industries. All rights reserved. 2 3#import <EXBarCodeScanner/EXBarCodeCameraRequester.h> 4#import <UMCore/UMDefines.h> 5#import <UMPermissionsInterface/UMPermissionsInterface.h> 6 7#import <AVFoundation/AVFoundation.h> 8 9 10@implementation EXBareCodeCameraRequester 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 both 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 55