1// Copyright 2016-present 650 Industries. All rights reserved. 2 3#import <EXBarCodeScanner/EXBarCodeCameraRequester.h> 4#import <ExpoModulesCore/EXDefines.h> 5#import <ExpoModulesCore/EXPermissionsInterface.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 EXPermissionStatus status; 20 NSString *cameraUsageDescription = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"NSCameraUsageDescription"]; 21 if (!cameraUsageDescription) { 22 EXFatal(EXErrorWithMessage(@"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 = EXPermissionStatusGranted; 30 break; 31 case AVAuthorizationStatusDenied: 32 case AVAuthorizationStatusRestricted: 33 status = EXPermissionStatusDenied; 34 break; 35 case AVAuthorizationStatusNotDetermined: 36 status = EXPermissionStatusUndetermined; 37 break; 38 } 39 return @{ 40 @"status": @(status) 41 }; 42} 43 44- (void)requestPermissionsWithResolver:(EXPromiseResolveBlock)resolve rejecter:(EXPromiseRejectBlock)reject 45{ 46 EX_WEAKIFY(self) 47 [AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^(BOOL granted) { 48 EX_STRONGIFY(self) 49 resolve([self getPermissions]); 50 }]; 51} 52 53@end 54