1// Copyright 2018-present 650 Industries. All rights reserved. 2 3#import <EXNotifications/EXNotificationPermissionsModule.h> 4 5#import <ExpoModulesCore/EXPermissionsInterface.h> 6#import <ExpoModulesCore/EXPermissionsMethodsDelegate.h> 7 8#import <EXNotifications/EXLegacyRemoteNotificationPermissionRequester.h> 9#import <EXNotifications/EXUserFacingNotificationsPermissionsRequester.h> 10 11@interface EXNotificationPermissionsModule () 12 13@property (nonatomic, weak) id<EXPermissionsInterface> permissionsManager; 14@property (nonatomic, strong) EXUserFacingNotificationsPermissionsRequester *requester; 15@property (nonatomic, strong) EXLegacyRemoteNotificationPermissionRequester *legacyRemoteNotificationsRequester; 16 17@end 18 19@implementation EXNotificationPermissionsModule 20 21EX_EXPORT_MODULE(ExpoNotificationPermissionsModule); 22 23- (instancetype)init 24{ 25 if (self = [super init]) { 26 _requester = [[EXUserFacingNotificationsPermissionsRequester alloc] initWithMethodQueue:self.methodQueue]; 27 } 28 return self; 29} 30 31# pragma mark - Exported methods 32 33EX_EXPORT_METHOD_AS(getPermissionsAsync, 34 getPermissionsAsync:(EXPromiseResolveBlock)resolve 35 rejecter:(EXPromiseRejectBlock)reject) 36{ 37 [EXPermissionsMethodsDelegate getPermissionWithPermissionsManager:_permissionsManager 38 withRequester:[EXUserFacingNotificationsPermissionsRequester class] 39 resolve:resolve 40 reject:reject]; 41} 42 43EX_EXPORT_METHOD_AS(requestPermissionsAsync, 44 requestPermissionsAsync:(NSDictionary *)requestedPermissions 45 requester:(EXPromiseResolveBlock)resolve 46 rejecter:(EXPromiseRejectBlock)reject) 47{ 48 [EXUserFacingNotificationsPermissionsRequester setRequestedPermissions:requestedPermissions]; 49 [EXPermissionsMethodsDelegate askForPermissionWithPermissionsManager:_permissionsManager 50 withRequester:[EXUserFacingNotificationsPermissionsRequester class] 51 resolve:resolve 52 reject:reject]; 53} 54 55# pragma mark - EXModuleRegistryConsumer 56 57- (void)setModuleRegistry:(EXModuleRegistry *)moduleRegistry { 58 _permissionsManager = [moduleRegistry getModuleImplementingProtocol:@protocol(EXPermissionsInterface)]; 59 if (!_legacyRemoteNotificationsRequester) { 60 // TODO: Remove once we deprecate and remove "notifications" permission type 61 _legacyRemoteNotificationsRequester = [[EXLegacyRemoteNotificationPermissionRequester alloc] initWithUserNotificationPermissionRequester:_requester permissionPublisher:[moduleRegistry getSingletonModuleForName:@"RemoteNotificationPermissionPublisher"] withMethodQueue:self.methodQueue]; 62 } 63 [EXPermissionsMethodsDelegate registerRequesters:@[_requester, _legacyRemoteNotificationsRequester] 64 withPermissionsManager:_permissionsManager]; 65} 66 67@end 68