1 // Copyright 2018-present 650 Industries. All rights reserved.
2 
3 #import <Foundation/Foundation.h>
4 #import <ExpoModulesCore/EXModuleRegistry.h>
5 
6 // Many headers of permissions requesters have refs to `UMPromise*Block` without importing
7 // the header declaring it, so we fix it here, but this definitely needs to be removed.
8 #import <ExpoModulesCore/EXUnimodulesCompat.h>
9 
10 typedef enum EXPermissionStatus {
11   EXPermissionStatusDenied,
12   EXPermissionStatusGranted,
13   EXPermissionStatusUndetermined,
14 } EXPermissionStatus;
15 
16 
17 @protocol EXPermissionsRequester <NSObject>
18 
19 + (NSString *)permissionType;
20 
21 - (void)requestPermissionsWithResolver:(EXPromiseResolveBlock)resolve rejecter:(EXPromiseRejectBlock)reject;
22 
23 - (NSDictionary *)getPermissions;
24 
25 @end
26 
27 @protocol EXPermissionsInterface
28 
29 - (void)registerRequesters:(NSArray<id<EXPermissionsRequester>> *)newRequesters;
30 
31 - (void)getPermissionUsingRequesterClass:(Class)requesterClass
32                                  resolve:(EXPromiseResolveBlock)resolve
33                                   reject:(EXPromiseRejectBlock)reject;
34 
35 - (BOOL)hasGrantedPermissionUsingRequesterClass:(Class)requesterClass;
36 
37 - (void)askForPermissionUsingRequesterClass:(Class)requesterClass
38                                     resolve:(EXPromiseResolveBlock)resolve
39                                      reject:(EXPromiseRejectBlock)reject;
40 
41 - (id<EXPermissionsRequester>)getPermissionRequesterForType:(NSString *)type;
42 
43 @end
44