1// Copyright 2016-present 650 Industries. All rights reserved. 2 3#import <EXAV/EXAudioRecordingPermissionRequester.h> 4#import <ExpoModulesCore/EXDefines.h> 5 6#import <AVFoundation/AVFoundation.h> 7 8@implementation EXAudioRecordingPermissionRequester 9 10+ (NSString *)permissionType 11{ 12 return @"audioRecording"; 13} 14 15- (NSDictionary *)getPermissions 16{ 17 AVAudioSessionRecordPermission systemStatus; 18 EXPermissionStatus status; 19 20 NSString *microphoneUsageDescription = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"NSMicrophoneUsageDescription"]; 21 if (!microphoneUsageDescription) { 22 EXFatal(EXErrorWithMessage(@"This app is missing NSMicrophoneUsageDescription, so audio services will fail. Add one of these keys to your bundle's Info.plist.")); 23 systemStatus = AVAudioSessionRecordPermissionDenied; 24 } else { 25 systemStatus = [[AVAudioSession sharedInstance] recordPermission]; 26 } 27 switch (systemStatus) { 28 case AVAudioSessionRecordPermissionGranted: 29 status = EXPermissionStatusGranted; 30 break; 31 case AVAudioSessionRecordPermissionDenied: 32 status = EXPermissionStatusDenied; 33 break; 34 case AVAudioSessionRecordPermissionUndetermined: 35 status = EXPermissionStatusUndetermined; 36 break; 37 } 38 39 return @{ 40 @"status": @(status) 41 }; 42} 43 44- (void)requestPermissionsWithResolver:(EXPromiseResolveBlock)resolve rejecter:(EXPromiseRejectBlock)reject 45{ 46 EX_WEAKIFY(self) 47 [[AVAudioSession sharedInstance] requestRecordPermission:^(BOOL granted) { 48 EX_STRONGIFY(self) 49 resolve([self getPermissions]); 50 }]; 51} 52 53@end 54