// Copyright 2018-present 650 Industries. All rights reserved. #import #import #import #import #import @interface EXNotificationPermissionsModule () @property (nonatomic, weak) id permissionsManager; @property (nonatomic, strong) EXUserFacingNotificationsPermissionsRequester *requester; @property (nonatomic, strong) EXLegacyRemoteNotificationPermissionRequester *legacyRemoteNotificationsRequester; @end @implementation EXNotificationPermissionsModule EX_EXPORT_MODULE(ExpoNotificationPermissionsModule); - (instancetype)init { if (self = [super init]) { _requester = [[EXUserFacingNotificationsPermissionsRequester alloc] initWithMethodQueue:self.methodQueue]; } return self; } # pragma mark - Exported methods EX_EXPORT_METHOD_AS(getPermissionsAsync, getPermissionsAsync:(EXPromiseResolveBlock)resolve rejecter:(EXPromiseRejectBlock)reject) { [EXPermissionsMethodsDelegate getPermissionWithPermissionsManager:_permissionsManager withRequester:[EXUserFacingNotificationsPermissionsRequester class] resolve:resolve reject:reject]; } EX_EXPORT_METHOD_AS(requestPermissionsAsync, requestPermissionsAsync:(NSDictionary *)requestedPermissions requester:(EXPromiseResolveBlock)resolve rejecter:(EXPromiseRejectBlock)reject) { [EXUserFacingNotificationsPermissionsRequester setRequestedPermissions:requestedPermissions]; [EXPermissionsMethodsDelegate askForPermissionWithPermissionsManager:_permissionsManager withRequester:[EXUserFacingNotificationsPermissionsRequester class] resolve:resolve reject:reject]; } # pragma mark - EXModuleRegistryConsumer - (void)setModuleRegistry:(EXModuleRegistry *)moduleRegistry { _permissionsManager = [moduleRegistry getModuleImplementingProtocol:@protocol(EXPermissionsInterface)]; if (!_legacyRemoteNotificationsRequester) { // TODO: Remove once we deprecate and remove "notifications" permission type _legacyRemoteNotificationsRequester = [[EXLegacyRemoteNotificationPermissionRequester alloc] initWithUserNotificationPermissionRequester:_requester permissionPublisher:[moduleRegistry getSingletonModuleForName:@"RemoteNotificationPermissionPublisher"] withMethodQueue:self.methodQueue]; } [EXPermissionsMethodsDelegate registerRequesters:@[_requester, _legacyRemoteNotificationsRequester] withPermissionsManager:_permissionsManager]; } @end