|
@@ -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
|
|