1// Copyright 2016-present 650 Industries. All rights reserved. 2 3#import <ABI49_0_0EXBarCodeScanner/ABI49_0_0EXBarCodeCameraRequester.h> 4#import <ABI49_0_0ExpoModulesCore/ABI49_0_0EXDefines.h> 5#import <ABI49_0_0ExpoModulesCore/ABI49_0_0EXPermissionsInterface.h> 6 7#import <AVFoundation/AVFoundation.h> 8 9 10@implementation ABI49_0_0EXBareCodeCameraRequester 11 12+ (NSString *)permissionType { 13 return @"camera"; 14} 15 16- (NSDictionary *)getPermissions 17{ 18 AVAuthorizationStatus systemStatus; 19 ABI49_0_0EXPermissionStatus status; 20 NSString *cameraUsageDescription = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"NSCameraUsageDescription"]; 21 if (!cameraUsageDescription) { 22 ABI49_0_0EXFatal(ABI49_0_0EXErrorWithMessage(@"This app is missing 'NSCameraUsageDescription', so video services will fail. Add this entry to your bundle's Info.plist.")); 23 systemStatus = AVAuthorizationStatusDenied; 24 } else { 25 systemStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo]; 26 } 27 switch (systemStatus) { 28 case AVAuthorizationStatusAuthorized: 29 status = ABI49_0_0EXPermissionStatusGranted; 30 break; 31 case AVAuthorizationStatusDenied: 32 case AVAuthorizationStatusRestricted: 33 status = ABI49_0_0EXPermissionStatusDenied; 34 break; 35 case AVAuthorizationStatusNotDetermined: 36 status = ABI49_0_0EXPermissionStatusUndetermined; 37 break; 38 } 39 return @{ 40 @"status": @(status) 41 }; 42} 43 44- (void)requestPermissionsWithResolver:(ABI49_0_0EXPromiseResolveBlock)resolve rejecter:(ABI49_0_0EXPromiseRejectBlock)reject 45{ 46 ABI49_0_0EX_WEAKIFY(self) 47 [AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^(BOOL granted) { 48 ABI49_0_0EX_STRONGIFY(self) 49 resolve([self getPermissions]); 50 }]; 51} 52 53@end 54