1284d4840SŁukasz Kosmaty// Copyright 2016-present 650 Industries. All rights reserved. 2284d4840SŁukasz Kosmaty 3284d4840SŁukasz Kosmaty#import <EXBarCodeScanner/EXBarCodeCameraRequester.h> 4*314e850cSTomasz Sapeta#import <ExpoModulesCore/EXDefines.h> 5fb3d99c5STomasz Sapeta#import <ExpoModulesCore/EXPermissionsInterface.h> 6284d4840SŁukasz Kosmaty 7284d4840SŁukasz Kosmaty#import <AVFoundation/AVFoundation.h> 8284d4840SŁukasz Kosmaty 9284d4840SŁukasz Kosmaty 10284d4840SŁukasz Kosmaty@implementation EXBareCodeCameraRequester 11284d4840SŁukasz Kosmaty 12284d4840SŁukasz Kosmaty+ (NSString *)permissionType { 13284d4840SŁukasz Kosmaty return @"camera"; 14284d4840SŁukasz Kosmaty} 15284d4840SŁukasz Kosmaty 16284d4840SŁukasz Kosmaty- (NSDictionary *)getPermissions 17284d4840SŁukasz Kosmaty{ 18284d4840SŁukasz Kosmaty AVAuthorizationStatus systemStatus; 19fb3d99c5STomasz Sapeta EXPermissionStatus status; 20284d4840SŁukasz Kosmaty NSString *cameraUsageDescription = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"NSCameraUsageDescription"]; 21ec877ef8Sandy if (!cameraUsageDescription) { 22*314e850cSTomasz Sapeta EXFatal(EXErrorWithMessage(@"This app is missing 'NSCameraUsageDescription', so video services will fail. Add this entry to your bundle's Info.plist.")); 23284d4840SŁukasz Kosmaty systemStatus = AVAuthorizationStatusDenied; 24284d4840SŁukasz Kosmaty } else { 25284d4840SŁukasz Kosmaty systemStatus = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo]; 26284d4840SŁukasz Kosmaty } 27284d4840SŁukasz Kosmaty switch (systemStatus) { 28284d4840SŁukasz Kosmaty case AVAuthorizationStatusAuthorized: 29fb3d99c5STomasz Sapeta status = EXPermissionStatusGranted; 30284d4840SŁukasz Kosmaty break; 31284d4840SŁukasz Kosmaty case AVAuthorizationStatusDenied: 32284d4840SŁukasz Kosmaty case AVAuthorizationStatusRestricted: 33fb3d99c5STomasz Sapeta status = EXPermissionStatusDenied; 34284d4840SŁukasz Kosmaty break; 35284d4840SŁukasz Kosmaty case AVAuthorizationStatusNotDetermined: 36fb3d99c5STomasz Sapeta status = EXPermissionStatusUndetermined; 37284d4840SŁukasz Kosmaty break; 38284d4840SŁukasz Kosmaty } 39284d4840SŁukasz Kosmaty return @{ 40284d4840SŁukasz Kosmaty @"status": @(status) 41284d4840SŁukasz Kosmaty }; 42284d4840SŁukasz Kosmaty} 43284d4840SŁukasz Kosmaty 44*314e850cSTomasz Sapeta- (void)requestPermissionsWithResolver:(EXPromiseResolveBlock)resolve rejecter:(EXPromiseRejectBlock)reject 45284d4840SŁukasz Kosmaty{ 46*314e850cSTomasz Sapeta EX_WEAKIFY(self) 47284d4840SŁukasz Kosmaty [AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^(BOOL granted) { 48*314e850cSTomasz Sapeta EX_STRONGIFY(self) 49284d4840SŁukasz Kosmaty resolve([self getPermissions]); 50284d4840SŁukasz Kosmaty }]; 51284d4840SŁukasz Kosmaty} 52284d4840SŁukasz Kosmaty 53284d4840SŁukasz Kosmaty@end 54