ReactNativePermissions.m 3.0KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. //
  2. // ReactNativePermissions.m
  3. // ReactNativePermissions
  4. //
  5. // Created by Yonah Forst on 18/02/16.
  6. // Copyright © 2016 Yonah Forst. All rights reserved.
  7. //
  8. @import Contacts;
  9. #import "ReactNativePermissions.h"
  10. #import "RCTBridge.h"
  11. #import "RCTConvert.h"
  12. #import "RCTEventDispatcher.h"
  13. #import "RCTConvert+RNPermissionsStatus.h"
  14. #import "PermissionsChecker.h"
  15. #import "PermissionsAsker.h"
  16. @interface ReactNativePermissions()
  17. @end
  18. @implementation ReactNativePermissions
  19. RCT_EXPORT_MODULE();
  20. @synthesize bridge = _bridge;
  21. #pragma mark Initialization
  22. - (instancetype)init
  23. {
  24. if (self = [super init]) {
  25. }
  26. return self;
  27. }
  28. - (NSDictionary *)constantsToExport
  29. {
  30. return @{ @"PermissionTypes" : @[
  31. @"location",
  32. @"camera",
  33. @"microphone",
  34. @"photo",
  35. @"contacts",
  36. @"event",
  37. @"reminder",
  38. @"bluetooth",
  39. @"notification",
  40. @"backgroundRefresh",
  41. ]};
  42. };
  43. RCT_REMAP_METHOD(canOpenSettings, canOpenSettings:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
  44. {
  45. resolve(@([PermissionsChecker canOpenSettings]));
  46. }
  47. RCT_EXPORT_METHOD(openSettings)
  48. {
  49. [PermissionsChecker openSettings];
  50. }
  51. RCT_REMAP_METHOD(getPermissionStatus, getPermissionStatus:(NSString *)permission resolve:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
  52. {
  53. SEL s = NSSelectorFromString(permission);
  54. RNPermissionsStatus status = (RNPermissionsStatus)[PermissionsChecker performSelector:s];
  55. resolve([self stringForStatus:status]);
  56. }
  57. RCT_EXPORT_METHOD(requestLocation:(NSString *)type)
  58. {
  59. [[PermissionsAsker sharedInstance] location:type];
  60. }
  61. RCT_REMAP_METHOD(requestNotification, requestNotification:(NSArray *)typeStrings resolve:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)
  62. {
  63. UIUserNotificationType types;
  64. if ([typeStrings containsObject:@"alert"])
  65. types = types | UIUserNotificationTypeAlert;
  66. if ([typeStrings containsObject:@"badge"])
  67. types = types | UIUserNotificationTypeBadge;
  68. if ([typeStrings containsObject:@"sound"])
  69. types = types | UIUserNotificationTypeSound;
  70. [[PermissionsAsker sharedInstance] notification:types completionHandler:^(RNPermissionsStatus status) {
  71. resolve([self stringForStatus:status]);
  72. }];
  73. }
  74. RCT_EXPORT_METHOD(requestBluetooth) {
  75. [[PermissionsAsker sharedInstance] bluetooth];
  76. }
  77. - (NSString *)stringForStatus:(RNPermissionsStatus) status{
  78. switch (status) {
  79. case RNPermissionsStatusAuthorized:
  80. return @"authorized";
  81. case RNPermissionsStatusDenied:
  82. return @"denied";
  83. case RNPermissionsStatusRestricted:
  84. return @"restricted";
  85. case RNPermissionsStatusUndetermined:
  86. default:
  87. return @"undetermined";
  88. }
  89. }
  90. @end