RNPermissionHandlerSiri.m 1.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. #import "RNPermissionHandlerSiri.h"
  2. @import Intents;
  3. @implementation RNPermissionHandlerSiri
  4. + (NSArray<NSString *> *)usageDescriptionKeys {
  5. return @[@"NSSiriUsageDescription"];
  6. }
  7. - (void)checkWithResolver:(void (^)(RNPermissionStatus status))resolve
  8. withRejecter:(void (__unused ^)(NSError *error))reject {
  9. if (@available(iOS 10.0, *)) {
  10. switch ([INPreferences siriAuthorizationStatus]) {
  11. case INSiriAuthorizationStatusNotDetermined:
  12. return resolve(RNPermissionStatusNotDetermined);
  13. case INSiriAuthorizationStatusRestricted:
  14. return resolve(RNPermissionStatusRestricted);
  15. case INSiriAuthorizationStatusDenied:
  16. return resolve(RNPermissionStatusDenied);
  17. case INSiriAuthorizationStatusAuthorized:
  18. return resolve(RNPermissionStatusAuthorized);
  19. }
  20. } else {
  21. resolve(RNPermissionStatusNotAvailable);
  22. }
  23. }
  24. - (void)requestWithOptions:(__unused NSDictionary * _Nullable)options
  25. withResolver:(void (^)(RNPermissionStatus status))resolve
  26. withRejecter:(void (^)(NSError *error))reject {
  27. if (@available(iOS 10.0, *)) {
  28. [INPreferences requestSiriAuthorization:^(__unused INSiriAuthorizationStatus status) {
  29. [self checkWithResolver:resolve withRejecter:reject];
  30. }];
  31. } else {
  32. resolve(RNPermissionStatusNotAvailable);
  33. }
  34. }
  35. @end