| 
				
			 | 
			
			
				@@ -104,6 +104,10 @@ RCT_ENUM_CONVERTER(RNPermission, (@{ 
			 | 
		
	
		
			
			| 
				104
			 | 
			
				104
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				105
			 | 
			
				105
			 | 
			
			
				 @end 
			 | 
		
	
		
			
			| 
				106
			 | 
			
				106
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				
			 | 
			
				107
			 | 
			
			
				+@interface RNPermissions () 
			 | 
		
	
		
			
			| 
				
			 | 
			
				108
			 | 
			
			
				+@property (nonatomic, strong) NSMutableDictionary<NSString *, id<RNPermissionHandler>>  *_Nonnull handlers; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				109
			 | 
			
			
				+@end 
			 | 
		
	
		
			
			| 
				
			 | 
			
				110
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				107
			 | 
			
				111
			 | 
			
			
				 @implementation RNPermissions 
			 | 
		
	
		
			
			| 
				108
			 | 
			
				112
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				109
			 | 
			
				113
			 | 
			
			
				 RCT_EXPORT_MODULE(); 
			 | 
		
	
	
		
			
			| 
				
			 | 
			
			
				@@ -225,6 +229,18 @@ RCT_EXPORT_MODULE(); 
			 | 
		
	
		
			
			| 
				225
			 | 
			
				229
			 | 
			
			
				   } 
			 | 
		
	
		
			
			| 
				226
			 | 
			
				230
			 | 
			
			
				 } 
			 | 
		
	
		
			
			| 
				227
			 | 
			
				231
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				
			 | 
			
				232
			 | 
			
			
				+- (NSString *)insertHandler:(id<RNPermissionHandler>)handler { 
			 | 
		
	
		
			
			| 
				
			 | 
			
				233
			 | 
			
			
				+    if(_handlers == nil){ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				234
			 | 
			
			
				+        _handlers = [NSMutableDictionary new]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				235
			 | 
			
			
				+    } 
			 | 
		
	
		
			
			| 
				
			 | 
			
				236
			 | 
			
			
				+     
			 | 
		
	
		
			
			| 
				
			 | 
			
				237
			 | 
			
			
				+    NSString *randomId = [[NSUUID UUID] UUIDString]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				238
			 | 
			
			
				+     
			 | 
		
	
		
			
			| 
				
			 | 
			
				239
			 | 
			
			
				+    [_handlers setObject:handler forKey:randomId]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				240
			 | 
			
			
				+     
			 | 
		
	
		
			
			| 
				
			 | 
			
				241
			 | 
			
			
				+    return randomId; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				242
			 | 
			
			
				+} 
			 | 
		
	
		
			
			| 
				
			 | 
			
				243
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				228
			 | 
			
				244
			 | 
			
			
				 + (bool)isFlaggedAsRequested:(NSString * _Nonnull)handlerId { 
			 | 
		
	
		
			
			| 
				229
			 | 
			
				245
			 | 
			
			
				   NSArray<NSString *> *requested = [[NSUserDefaults standardUserDefaults] arrayForKey:SETTING_KEY]; 
			 | 
		
	
		
			
			| 
				230
			 | 
			
				246
			 | 
			
			
				   return requested == nil ? false : [requested containsObject:handlerId]; 
			 | 
		
	
	
		
			
			| 
				
			 | 
			
			
				@@ -271,13 +287,19 @@ RCT_REMAP_METHOD(check, 
			 | 
		
	
		
			
			| 
				271
			 | 
			
				287
			 | 
			
			
				                  rejecter:(RCTPromiseRejectBlock)reject) { 
			 | 
		
	
		
			
			| 
				272
			 | 
			
				288
			 | 
			
			
				   id<RNPermissionHandler> handler = [self handlerForPermission:permission]; 
			 | 
		
	
		
			
			| 
				273
			 | 
			
				289
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				
			 | 
			
				290
			 | 
			
			
				+  NSString *randomId = [self insertHandler: handler]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				291
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				274
			 | 
			
				292
			 | 
			
			
				   [handler checkWithResolver:^(RNPermissionStatus status) { 
			 | 
		
	
		
			
			| 
				275
			 | 
			
				293
			 | 
			
			
				     NSString *strStatus = [self stringForStatus:status]; 
			 | 
		
	
		
			
			| 
				276
			 | 
			
				294
			 | 
			
			
				     NSLog(@"[react-native-permissions] %@ permission checked: %@", [[handler class] handlerUniqueId], strStatus); 
			 | 
		
	
		
			
			| 
				277
			 | 
			
				295
			 | 
			
			
				     resolve(strStatus); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				296
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				297
			 | 
			
			
				+    [self.handlers removeObjectForKey:randomId]; 
			 | 
		
	
		
			
			| 
				278
			 | 
			
				298
			 | 
			
			
				   } rejecter:^(NSError *error) { 
			 | 
		
	
		
			
			| 
				279
			 | 
			
				299
			 | 
			
			
				     NSLog(@"[react-native-permissions] %@ permission failed: %@", [[handler class] handlerUniqueId], error.localizedDescription); 
			 | 
		
	
		
			
			| 
				280
			 | 
			
				300
			 | 
			
			
				     reject([NSString stringWithFormat:@"%ld", (long)error.code], error.localizedDescription, error); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				301
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				302
			 | 
			
			
				+    [self.handlers removeObjectForKey:randomId]; 
			 | 
		
	
		
			
			| 
				281
			 | 
			
				303
			 | 
			
			
				   }]; 
			 | 
		
	
		
			
			| 
				282
			 | 
			
				304
			 | 
			
			
				 } 
			 | 
		
	
		
			
			| 
				283
			 | 
			
				305
			 | 
			
			
				  
			 | 
		
	
	
		
			
			| 
				
			 | 
			
			
				@@ -287,13 +309,19 @@ RCT_REMAP_METHOD(request, 
			 | 
		
	
		
			
			| 
				287
			 | 
			
				309
			 | 
			
			
				                  rejecter:(RCTPromiseRejectBlock)reject) { 
			 | 
		
	
		
			
			| 
				288
			 | 
			
				310
			 | 
			
			
				   id<RNPermissionHandler> handler = [self handlerForPermission:permission]; 
			 | 
		
	
		
			
			| 
				289
			 | 
			
				311
			 | 
			
			
				  
			 | 
		
	
		
			
			| 
				
			 | 
			
				312
			 | 
			
			
				+  NSString *randomId = [self insertHandler: handler]; 
			 | 
		
	
		
			
			| 
				
			 | 
			
				313
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				290
			 | 
			
				314
			 | 
			
			
				   [handler requestWithResolver:^(RNPermissionStatus status) { 
			 | 
		
	
		
			
			| 
				291
			 | 
			
				315
			 | 
			
			
				     NSString *strStatus = [self stringForStatus:status]; 
			 | 
		
	
		
			
			| 
				292
			 | 
			
				316
			 | 
			
			
				     NSLog(@"[react-native-permissions] %@ permission checked: %@", [[handler class] handlerUniqueId], strStatus); 
			 | 
		
	
		
			
			| 
				293
			 | 
			
				317
			 | 
			
			
				     resolve(strStatus); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				318
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				319
			 | 
			
			
				+    [self.handlers removeObjectForKey:randomId]; 
			 | 
		
	
		
			
			| 
				294
			 | 
			
				320
			 | 
			
			
				   } rejecter:^(NSError *error) { 
			 | 
		
	
		
			
			| 
				295
			 | 
			
				321
			 | 
			
			
				     NSLog(@"[react-native-permissions] %@ permission failed: %@", [[handler class] handlerUniqueId], error.localizedDescription); 
			 | 
		
	
		
			
			| 
				296
			 | 
			
				322
			 | 
			
			
				     reject([NSString stringWithFormat:@"%ld", (long)error.code], error.localizedDescription, error); 
			 | 
		
	
		
			
			| 
				
			 | 
			
				323
			 | 
			
			
				+ 
			 | 
		
	
		
			
			| 
				
			 | 
			
				324
			 | 
			
			
				+    [self.handlers removeObjectForKey:randomId]; 
			 | 
		
	
		
			
			| 
				297
			 | 
			
				325
			 | 
			
			
				   }]; 
			 | 
		
	
		
			
			| 
				298
			 | 
			
				326
			 | 
			
			
				 } 
			 | 
		
	
		
			
			| 
				299
			 | 
			
				327
			 | 
			
			
				  
			 |