1// Copyright 2016-present 650 Industries. All rights reserved. 2 3#import <EXCamera/EXCameraCameraPermissionRequester.h> 4#import <ExpoModulesCore/EXDefines.h> 5#import <ExpoModulesCore/EXPermissionsInterface.h> 6 7#import <AVFoundation/AVFoundation.h> 8 9 10@implementation EXCameraCameraPermissionRequester 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 22 if (!cameraUsageDescription) { 23 EXFatal(EXErrorWithMessage(@"This app is missing NSCameraUsageDescription, so video services will fail. Add this entry 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 = EXPermissionStatusGranted; 31 break; 32 case AVAuthorizationStatusDenied: 33 case AVAuthorizationStatusRestricted: 34 status = EXPermissionStatusDenied; 35 break; 36 case AVAuthorizationStatusNotDetermined: 37 status = EXPermissionStatusUndetermined; 38 break; 39 } 40 return @{ 41 @"status": @(status) 42 }; 43} 44 45- (void)requestPermissionsWithResolver:(EXPromiseResolveBlock)resolve rejecter:(EXPromiseRejectBlock)reject 46{ 47 EX_WEAKIFY(self) 48 [AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^(BOOL granted) { 49 EX_STRONGIFY(self) 50 resolve([self getPermissions]); 51 }]; 52} 53 54@end 55