@amazon-devices/expo-notifications 2.0.9000000000-rn-83
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.js +2 -0
- package/CHANGELOG.md +478 -0
- package/LICENSE +7 -0
- package/README.kepler.md +3 -0
- package/README.md +2003 -0
- package/THIRD_PARTY_NOTICES.txt +4 -0
- package/android/build.gradle +125 -0
- package/android/src/main/AndroidManifest.xml +39 -0
- package/android/src/main/java/expo/modules/notifications/Exceptions.kt +22 -0
- package/android/src/main/java/expo/modules/notifications/NotificationsPackage.java +34 -0
- package/android/src/main/java/expo/modules/notifications/Utils.kt +19 -0
- package/android/src/main/java/expo/modules/notifications/badge/BadgeHelper.kt +24 -0
- package/android/src/main/java/expo/modules/notifications/badge/BadgeModule.kt +22 -0
- package/android/src/main/java/expo/modules/notifications/notifications/ArgumentsNotificationContentBuilder.java +149 -0
- package/android/src/main/java/expo/modules/notifications/notifications/JSONNotificationContentBuilder.java +203 -0
- package/android/src/main/java/expo/modules/notifications/notifications/NotificationManager.java +119 -0
- package/android/src/main/java/expo/modules/notifications/notifications/NotificationSerializer.java +202 -0
- package/android/src/main/java/expo/modules/notifications/notifications/RemoteMessageSerializer.java +104 -0
- package/android/src/main/java/expo/modules/notifications/notifications/SoundResolver.java +58 -0
- package/android/src/main/java/expo/modules/notifications/notifications/background/BackgroundRemoteNotificationTaskConsumer.java +123 -0
- package/android/src/main/java/expo/modules/notifications/notifications/background/ExpoBackgroundNotificationTasksModule.kt +33 -0
- package/android/src/main/java/expo/modules/notifications/notifications/categories/ExpoNotificationCategoriesModule.kt +149 -0
- package/android/src/main/java/expo/modules/notifications/notifications/categories/serializers/ExpoNotificationsCategoriesSerializer.java +67 -0
- package/android/src/main/java/expo/modules/notifications/notifications/categories/serializers/NotificationsCategoriesSerializer.java +11 -0
- package/android/src/main/java/expo/modules/notifications/notifications/channels/AbstractNotificationsChannelsProvider.java +81 -0
- package/android/src/main/java/expo/modules/notifications/notifications/channels/AndroidXNotificationsChannelsProvider.java +38 -0
- package/android/src/main/java/expo/modules/notifications/notifications/channels/InvalidVibrationPatternException.java +14 -0
- package/android/src/main/java/expo/modules/notifications/notifications/channels/NotificationChannelGroupManagerModule.kt +70 -0
- package/android/src/main/java/expo/modules/notifications/notifications/channels/NotificationChannelManagerModule.kt +83 -0
- package/android/src/main/java/expo/modules/notifications/notifications/channels/NotificationsChannelsProvider.java +13 -0
- package/android/src/main/java/expo/modules/notifications/notifications/channels/managers/AndroidXNotificationsChannelGroupManager.java +67 -0
- package/android/src/main/java/expo/modules/notifications/notifications/channels/managers/AndroidXNotificationsChannelManager.java +196 -0
- package/android/src/main/java/expo/modules/notifications/notifications/channels/managers/NotificationsChannelGroupManager.java +28 -0
- package/android/src/main/java/expo/modules/notifications/notifications/channels/managers/NotificationsChannelManager.java +28 -0
- package/android/src/main/java/expo/modules/notifications/notifications/channels/serializers/ExpoNotificationsChannelGroupSerializer.java +55 -0
- package/android/src/main/java/expo/modules/notifications/notifications/channels/serializers/ExpoNotificationsChannelSerializer.java +101 -0
- package/android/src/main/java/expo/modules/notifications/notifications/channels/serializers/NotificationsChannelGroupSerializer.java +20 -0
- package/android/src/main/java/expo/modules/notifications/notifications/channels/serializers/NotificationsChannelSerializer.java +35 -0
- package/android/src/main/java/expo/modules/notifications/notifications/emitting/NotificationsEmitter.kt +78 -0
- package/android/src/main/java/expo/modules/notifications/notifications/enums/AudioContentType.java +45 -0
- package/android/src/main/java/expo/modules/notifications/notifications/enums/AudioUsage.java +55 -0
- package/android/src/main/java/expo/modules/notifications/notifications/enums/NotificationImportance.java +48 -0
- package/android/src/main/java/expo/modules/notifications/notifications/enums/NotificationPriority.java +51 -0
- package/android/src/main/java/expo/modules/notifications/notifications/enums/NotificationVisibility.java +44 -0
- package/android/src/main/java/expo/modules/notifications/notifications/handling/NotificationsHandler.kt +127 -0
- package/android/src/main/java/expo/modules/notifications/notifications/handling/SingleNotificationHandlerTask.java +131 -0
- package/android/src/main/java/expo/modules/notifications/notifications/interfaces/NotificationBuilder.java +35 -0
- package/android/src/main/java/expo/modules/notifications/notifications/interfaces/NotificationListener.java +37 -0
- package/android/src/main/java/expo/modules/notifications/notifications/interfaces/NotificationManager.java +22 -0
- package/android/src/main/java/expo/modules/notifications/notifications/interfaces/NotificationPresentationEffect.java +11 -0
- package/android/src/main/java/expo/modules/notifications/notifications/interfaces/NotificationPresentationEffectsManager.java +7 -0
- package/android/src/main/java/expo/modules/notifications/notifications/interfaces/NotificationTrigger.java +19 -0
- package/android/src/main/java/expo/modules/notifications/notifications/interfaces/SchedulableNotificationTrigger.java +20 -0
- package/android/src/main/java/expo/modules/notifications/notifications/model/Notification.java +59 -0
- package/android/src/main/java/expo/modules/notifications/notifications/model/NotificationAction.java +63 -0
- package/android/src/main/java/expo/modules/notifications/notifications/model/NotificationBehavior.java +84 -0
- package/android/src/main/java/expo/modules/notifications/notifications/model/NotificationCategory.java +61 -0
- package/android/src/main/java/expo/modules/notifications/notifications/model/NotificationContent.java +356 -0
- package/android/src/main/java/expo/modules/notifications/notifications/model/NotificationRequest.java +66 -0
- package/android/src/main/java/expo/modules/notifications/notifications/model/NotificationResponse.java +60 -0
- package/android/src/main/java/expo/modules/notifications/notifications/model/TextInputNotificationAction.java +42 -0
- package/android/src/main/java/expo/modules/notifications/notifications/model/TextInputNotificationResponse.java +42 -0
- package/android/src/main/java/expo/modules/notifications/notifications/model/triggers/FirebaseNotificationTrigger.java +61 -0
- package/android/src/main/java/expo/modules/notifications/notifications/presentation/ExpoNotificationPresentationEffectsManager.java +63 -0
- package/android/src/main/java/expo/modules/notifications/notifications/presentation/ExpoNotificationPresentationModule.kt +113 -0
- package/android/src/main/java/expo/modules/notifications/notifications/presentation/builders/BaseNotificationBuilder.java +50 -0
- package/android/src/main/java/expo/modules/notifications/notifications/presentation/builders/CategoryAwareNotificationBuilder.java +80 -0
- package/android/src/main/java/expo/modules/notifications/notifications/presentation/builders/ChannelAwareNotificationBuilder.java +135 -0
- package/android/src/main/java/expo/modules/notifications/notifications/presentation/builders/ExpoNotificationBuilder.java +295 -0
- package/android/src/main/java/expo/modules/notifications/notifications/presentation/effects/BaseNotificationEffect.java +53 -0
- package/android/src/main/java/expo/modules/notifications/notifications/scheduling/NotificationScheduler.kt +235 -0
- package/android/src/main/java/expo/modules/notifications/notifications/triggers/ChannelAwareTrigger.java +49 -0
- package/android/src/main/java/expo/modules/notifications/notifications/triggers/DailyTrigger.java +76 -0
- package/android/src/main/java/expo/modules/notifications/notifications/triggers/DateTrigger.java +64 -0
- package/android/src/main/java/expo/modules/notifications/notifications/triggers/TimeIntervalTrigger.java +87 -0
- package/android/src/main/java/expo/modules/notifications/notifications/triggers/WeeklyTrigger.java +85 -0
- package/android/src/main/java/expo/modules/notifications/notifications/triggers/YearlyTrigger.java +94 -0
- package/android/src/main/java/expo/modules/notifications/permissions/NotificationPermissionsModule.kt +124 -0
- package/android/src/main/java/expo/modules/notifications/serverregistration/InstallationId.java +134 -0
- package/android/src/main/java/expo/modules/notifications/serverregistration/RegistrationInfo.kt +24 -0
- package/android/src/main/java/expo/modules/notifications/serverregistration/ServerRegistrationModule.kt +32 -0
- package/android/src/main/java/expo/modules/notifications/service/ExpoFirebaseMessagingService.kt +15 -0
- package/android/src/main/java/expo/modules/notifications/service/NotificationForwarderActivity.kt +33 -0
- package/android/src/main/java/expo/modules/notifications/service/NotificationsService.kt +780 -0
- package/android/src/main/java/expo/modules/notifications/service/delegates/Base64Serialization.kt +33 -0
- package/android/src/main/java/expo/modules/notifications/service/delegates/ExpoCategoriesDelegate.kt +21 -0
- package/android/src/main/java/expo/modules/notifications/service/delegates/ExpoHandlingDelegate.kt +146 -0
- package/android/src/main/java/expo/modules/notifications/service/delegates/ExpoPresentationDelegate.kt +193 -0
- package/android/src/main/java/expo/modules/notifications/service/delegates/ExpoSchedulingDelegate.kt +117 -0
- package/android/src/main/java/expo/modules/notifications/service/delegates/FirebaseMessagingDelegate.kt +126 -0
- package/android/src/main/java/expo/modules/notifications/service/delegates/SharedPreferencesNotificationCategoriesStore.kt +106 -0
- package/android/src/main/java/expo/modules/notifications/service/delegates/SharedPreferencesNotificationsStore.kt +119 -0
- package/android/src/main/java/expo/modules/notifications/service/interfaces/CategoriesDelegate.kt +14 -0
- package/android/src/main/java/expo/modules/notifications/service/interfaces/FirebaseMessagingDelegate.kt +20 -0
- package/android/src/main/java/expo/modules/notifications/service/interfaces/HandlingDelegate.kt +10 -0
- package/android/src/main/java/expo/modules/notifications/service/interfaces/PresentationDelegate.kt +11 -0
- package/android/src/main/java/expo/modules/notifications/service/interfaces/SchedulingDelegate.kt +13 -0
- package/android/src/main/java/expo/modules/notifications/tokens/PushTokenManager.java +88 -0
- package/android/src/main/java/expo/modules/notifications/tokens/PushTokenModule.kt +91 -0
- package/android/src/main/java/expo/modules/notifications/tokens/interfaces/FirebaseTokenListener.java +16 -0
- package/android/src/main/java/expo/modules/notifications/tokens/interfaces/PushTokenListener.java +14 -0
- package/android/src/main/java/expo/modules/notifications/tokens/interfaces/PushTokenManager.java +22 -0
- package/android/src/main/res/values/strings.xml +4 -0
- package/app.plugin.js +1 -0
- package/build/BackgroundNotificationTasksModule.d.ts +4 -0
- package/build/BackgroundNotificationTasksModule.d.ts.map +1 -0
- package/build/BackgroundNotificationTasksModule.js +7 -0
- package/build/BackgroundNotificationTasksModule.js.map +1 -0
- package/build/BackgroundNotificationTasksModule.kepler.d.ts +3 -0
- package/build/BackgroundNotificationTasksModule.kepler.d.ts.map +1 -0
- package/build/BackgroundNotificationTasksModule.kepler.js +9 -0
- package/build/BackgroundNotificationTasksModule.kepler.js.map +1 -0
- package/build/BackgroundNotificationTasksModule.native.d.ts +4 -0
- package/build/BackgroundNotificationTasksModule.native.d.ts.map +1 -0
- package/build/BackgroundNotificationTasksModule.native.js +3 -0
- package/build/BackgroundNotificationTasksModule.native.js.map +1 -0
- package/build/BackgroundNotificationTasksModule.types.d.ts +11 -0
- package/build/BackgroundNotificationTasksModule.types.d.ts.map +1 -0
- package/build/BackgroundNotificationTasksModule.types.js +7 -0
- package/build/BackgroundNotificationTasksModule.types.js.map +1 -0
- package/build/BackgroundNotificationTasksModule.web.d.ts +6 -0
- package/build/BackgroundNotificationTasksModule.web.d.ts.map +1 -0
- package/build/BackgroundNotificationTasksModule.web.js +9 -0
- package/build/BackgroundNotificationTasksModule.web.js.map +1 -0
- package/build/BadgeModule.d.ts +4 -0
- package/build/BadgeModule.d.ts.map +1 -0
- package/build/BadgeModule.js +5 -0
- package/build/BadgeModule.js.map +1 -0
- package/build/BadgeModule.kepler.d.ts +3 -0
- package/build/BadgeModule.kepler.d.ts.map +1 -0
- package/build/BadgeModule.kepler.js +9 -0
- package/build/BadgeModule.kepler.js.map +1 -0
- package/build/BadgeModule.native.d.ts +4 -0
- package/build/BadgeModule.native.d.ts.map +1 -0
- package/build/BadgeModule.native.js +12 -0
- package/build/BadgeModule.native.js.map +1 -0
- package/build/BadgeModule.types.d.ts +10 -0
- package/build/BadgeModule.types.d.ts.map +1 -0
- package/build/BadgeModule.types.js +2 -0
- package/build/BadgeModule.types.js.map +1 -0
- package/build/BadgeModule.web.d.ts +4 -0
- package/build/BadgeModule.web.d.ts.map +1 -0
- package/build/BadgeModule.web.js +26 -0
- package/build/BadgeModule.web.js.map +1 -0
- package/build/DevicePushTokenAutoRegistration.fx.d.ts +15 -0
- package/build/DevicePushTokenAutoRegistration.fx.d.ts.map +1 -0
- package/build/DevicePushTokenAutoRegistration.fx.js +87 -0
- package/build/DevicePushTokenAutoRegistration.fx.js.map +1 -0
- package/build/NotificationCategoriesModule.d.ts +4 -0
- package/build/NotificationCategoriesModule.d.ts.map +1 -0
- package/build/NotificationCategoriesModule.js +13 -0
- package/build/NotificationCategoriesModule.js.map +1 -0
- package/build/NotificationCategoriesModule.kepler.d.ts +3 -0
- package/build/NotificationCategoriesModule.kepler.d.ts.map +1 -0
- package/build/NotificationCategoriesModule.kepler.js +10 -0
- package/build/NotificationCategoriesModule.kepler.js.map +1 -0
- package/build/NotificationCategoriesModule.native.d.ts +4 -0
- package/build/NotificationCategoriesModule.native.d.ts.map +1 -0
- package/build/NotificationCategoriesModule.native.js +3 -0
- package/build/NotificationCategoriesModule.native.js.map +1 -0
- package/build/NotificationCategoriesModule.types.d.ts +17 -0
- package/build/NotificationCategoriesModule.types.d.ts.map +1 -0
- package/build/NotificationCategoriesModule.types.js +2 -0
- package/build/NotificationCategoriesModule.types.js.map +1 -0
- package/build/NotificationCategoriesModule.web.d.ts +8 -0
- package/build/NotificationCategoriesModule.web.d.ts.map +1 -0
- package/build/NotificationCategoriesModule.web.js +12 -0
- package/build/NotificationCategoriesModule.web.js.map +1 -0
- package/build/NotificationChannelGroupManager.d.ts +4 -0
- package/build/NotificationChannelGroupManager.d.ts.map +1 -0
- package/build/NotificationChannelGroupManager.js +5 -0
- package/build/NotificationChannelGroupManager.js.map +1 -0
- package/build/NotificationChannelGroupManager.kepler.d.ts +3 -0
- package/build/NotificationChannelGroupManager.kepler.d.ts.map +1 -0
- package/build/NotificationChannelGroupManager.kepler.js +9 -0
- package/build/NotificationChannelGroupManager.kepler.js.map +1 -0
- package/build/NotificationChannelGroupManager.native.d.ts +4 -0
- package/build/NotificationChannelGroupManager.native.d.ts.map +1 -0
- package/build/NotificationChannelGroupManager.native.js +3 -0
- package/build/NotificationChannelGroupManager.native.js.map +1 -0
- package/build/NotificationChannelGroupManager.types.d.ts +28 -0
- package/build/NotificationChannelGroupManager.types.d.ts.map +1 -0
- package/build/NotificationChannelGroupManager.types.js +2 -0
- package/build/NotificationChannelGroupManager.types.js.map +1 -0
- package/build/NotificationChannelManager.d.ts +4 -0
- package/build/NotificationChannelManager.d.ts.map +1 -0
- package/build/NotificationChannelManager.js +5 -0
- package/build/NotificationChannelManager.js.map +1 -0
- package/build/NotificationChannelManager.kepler.d.ts +3 -0
- package/build/NotificationChannelManager.kepler.d.ts.map +1 -0
- package/build/NotificationChannelManager.kepler.js +9 -0
- package/build/NotificationChannelManager.kepler.js.map +1 -0
- package/build/NotificationChannelManager.native.d.ts +4 -0
- package/build/NotificationChannelManager.native.d.ts.map +1 -0
- package/build/NotificationChannelManager.native.js +3 -0
- package/build/NotificationChannelManager.native.js.map +1 -0
- package/build/NotificationChannelManager.types.d.ts +91 -0
- package/build/NotificationChannelManager.types.d.ts.map +1 -0
- package/build/NotificationChannelManager.types.js +53 -0
- package/build/NotificationChannelManager.types.js.map +1 -0
- package/build/NotificationPermissions.d.ts +56 -0
- package/build/NotificationPermissions.d.ts.map +1 -0
- package/build/NotificationPermissions.js +79 -0
- package/build/NotificationPermissions.js.map +1 -0
- package/build/NotificationPermissions.types.d.ts +94 -0
- package/build/NotificationPermissions.types.d.ts.map +1 -0
- package/build/NotificationPermissions.types.js +21 -0
- package/build/NotificationPermissions.types.js.map +1 -0
- package/build/NotificationPermissionsModule.d.ts +4 -0
- package/build/NotificationPermissionsModule.d.ts.map +1 -0
- package/build/NotificationPermissionsModule.js +67 -0
- package/build/NotificationPermissionsModule.js.map +1 -0
- package/build/NotificationPermissionsModule.kepler.d.ts +3 -0
- package/build/NotificationPermissionsModule.kepler.d.ts.map +1 -0
- package/build/NotificationPermissionsModule.kepler.js +9 -0
- package/build/NotificationPermissionsModule.kepler.js.map +1 -0
- package/build/NotificationPermissionsModule.native.d.ts +4 -0
- package/build/NotificationPermissionsModule.native.d.ts.map +1 -0
- package/build/NotificationPermissionsModule.native.js +3 -0
- package/build/NotificationPermissionsModule.native.js.map +1 -0
- package/build/NotificationPermissionsModule.types.d.ts +7 -0
- package/build/NotificationPermissionsModule.types.d.ts.map +1 -0
- package/build/NotificationPermissionsModule.types.js +2 -0
- package/build/NotificationPermissionsModule.types.js.map +1 -0
- package/build/NotificationPresenterModule.d.ts +4 -0
- package/build/NotificationPresenterModule.d.ts.map +1 -0
- package/build/NotificationPresenterModule.js +5 -0
- package/build/NotificationPresenterModule.js.map +1 -0
- package/build/NotificationPresenterModule.kepler.d.ts +4 -0
- package/build/NotificationPresenterModule.kepler.d.ts.map +1 -0
- package/build/NotificationPresenterModule.kepler.js +55 -0
- package/build/NotificationPresenterModule.kepler.js.map +1 -0
- package/build/NotificationPresenterModule.native.d.ts +4 -0
- package/build/NotificationPresenterModule.native.d.ts.map +1 -0
- package/build/NotificationPresenterModule.native.js +3 -0
- package/build/NotificationPresenterModule.native.js.map +1 -0
- package/build/NotificationPresenterModule.types.d.ts +9 -0
- package/build/NotificationPresenterModule.types.d.ts.map +1 -0
- package/build/NotificationPresenterModule.types.js +2 -0
- package/build/NotificationPresenterModule.types.js.map +1 -0
- package/build/NotificationScheduler.d.ts +4 -0
- package/build/NotificationScheduler.d.ts.map +1 -0
- package/build/NotificationScheduler.js +5 -0
- package/build/NotificationScheduler.js.map +1 -0
- package/build/NotificationScheduler.kepler.d.ts +4 -0
- package/build/NotificationScheduler.kepler.d.ts.map +1 -0
- package/build/NotificationScheduler.kepler.js +50 -0
- package/build/NotificationScheduler.kepler.js.map +1 -0
- package/build/NotificationScheduler.native.d.ts +4 -0
- package/build/NotificationScheduler.native.d.ts.map +1 -0
- package/build/NotificationScheduler.native.js +3 -0
- package/build/NotificationScheduler.native.js.map +1 -0
- package/build/NotificationScheduler.types.d.ts +65 -0
- package/build/NotificationScheduler.types.d.ts.map +1 -0
- package/build/NotificationScheduler.types.js +2 -0
- package/build/NotificationScheduler.types.js.map +1 -0
- package/build/Notifications.types.d.ts +666 -0
- package/build/Notifications.types.d.ts.map +1 -0
- package/build/Notifications.types.js +12 -0
- package/build/Notifications.types.js.map +1 -0
- package/build/NotificationsEmitter.d.ts +75 -0
- package/build/NotificationsEmitter.d.ts.map +1 -0
- package/build/NotificationsEmitter.js +95 -0
- package/build/NotificationsEmitter.js.map +1 -0
- package/build/NotificationsEmitterModule.d.ts +4 -0
- package/build/NotificationsEmitterModule.d.ts.map +1 -0
- package/build/NotificationsEmitterModule.js +12 -0
- package/build/NotificationsEmitterModule.js.map +1 -0
- package/build/NotificationsEmitterModule.kepler.d.ts +3 -0
- package/build/NotificationsEmitterModule.kepler.d.ts.map +1 -0
- package/build/NotificationsEmitterModule.kepler.js +9 -0
- package/build/NotificationsEmitterModule.kepler.js.map +1 -0
- package/build/NotificationsEmitterModule.native.d.ts +4 -0
- package/build/NotificationsEmitterModule.native.d.ts.map +1 -0
- package/build/NotificationsEmitterModule.native.js +3 -0
- package/build/NotificationsEmitterModule.native.js.map +1 -0
- package/build/NotificationsEmitterModule.types.d.ts +6 -0
- package/build/NotificationsEmitterModule.types.d.ts.map +1 -0
- package/build/NotificationsEmitterModule.types.js +2 -0
- package/build/NotificationsEmitterModule.types.js.map +1 -0
- package/build/NotificationsHandler.d.ts +60 -0
- package/build/NotificationsHandler.d.ts.map +1 -0
- package/build/NotificationsHandler.js +72 -0
- package/build/NotificationsHandler.js.map +1 -0
- package/build/NotificationsHandlerModule.d.ts +4 -0
- package/build/NotificationsHandlerModule.d.ts.map +1 -0
- package/build/NotificationsHandlerModule.js +12 -0
- package/build/NotificationsHandlerModule.js.map +1 -0
- package/build/NotificationsHandlerModule.kepler.d.ts +3 -0
- package/build/NotificationsHandlerModule.kepler.d.ts.map +1 -0
- package/build/NotificationsHandlerModule.kepler.js +9 -0
- package/build/NotificationsHandlerModule.kepler.js.map +1 -0
- package/build/NotificationsHandlerModule.native.d.ts +4 -0
- package/build/NotificationsHandlerModule.native.d.ts.map +1 -0
- package/build/NotificationsHandlerModule.native.js +3 -0
- package/build/NotificationsHandlerModule.native.js.map +1 -0
- package/build/NotificationsHandlerModule.types.d.ts +6 -0
- package/build/NotificationsHandlerModule.types.d.ts.map +1 -0
- package/build/NotificationsHandlerModule.types.js +2 -0
- package/build/NotificationsHandlerModule.types.js.map +1 -0
- package/build/PushTokenManager.d.ts +4 -0
- package/build/PushTokenManager.d.ts.map +1 -0
- package/build/PushTokenManager.js +12 -0
- package/build/PushTokenManager.js.map +1 -0
- package/build/PushTokenManager.kepler.d.ts +3 -0
- package/build/PushTokenManager.kepler.d.ts.map +1 -0
- package/build/PushTokenManager.kepler.js +9 -0
- package/build/PushTokenManager.kepler.js.map +1 -0
- package/build/PushTokenManager.native.d.ts +4 -0
- package/build/PushTokenManager.native.d.ts.map +1 -0
- package/build/PushTokenManager.native.js +3 -0
- package/build/PushTokenManager.native.js.map +1 -0
- package/build/PushTokenManager.types.d.ts +6 -0
- package/build/PushTokenManager.types.d.ts.map +1 -0
- package/build/PushTokenManager.types.js +2 -0
- package/build/PushTokenManager.types.js.map +1 -0
- package/build/ServerRegistrationModule.d.ts +4 -0
- package/build/ServerRegistrationModule.d.ts.map +1 -0
- package/build/ServerRegistrationModule.js +5 -0
- package/build/ServerRegistrationModule.js.map +1 -0
- package/build/ServerRegistrationModule.kepler.d.ts +3 -0
- package/build/ServerRegistrationModule.kepler.d.ts.map +1 -0
- package/build/ServerRegistrationModule.kepler.js +9 -0
- package/build/ServerRegistrationModule.kepler.js.map +1 -0
- package/build/ServerRegistrationModule.native.d.ts +4 -0
- package/build/ServerRegistrationModule.native.d.ts.map +1 -0
- package/build/ServerRegistrationModule.native.js +3 -0
- package/build/ServerRegistrationModule.native.js.map +1 -0
- package/build/ServerRegistrationModule.types.d.ts +7 -0
- package/build/ServerRegistrationModule.types.d.ts.map +1 -0
- package/build/ServerRegistrationModule.types.js +2 -0
- package/build/ServerRegistrationModule.types.js.map +1 -0
- package/build/ServerRegistrationModule.web.d.ts +4 -0
- package/build/ServerRegistrationModule.web.d.ts.map +1 -0
- package/build/ServerRegistrationModule.web.js +50 -0
- package/build/ServerRegistrationModule.web.js.map +1 -0
- package/build/TokenEmitter.d.ts +42 -0
- package/build/TokenEmitter.d.ts.map +1 -0
- package/build/TokenEmitter.js +44 -0
- package/build/TokenEmitter.js.map +1 -0
- package/build/Tokens.types.d.ts +99 -0
- package/build/Tokens.types.d.ts.map +1 -0
- package/build/Tokens.types.js +2 -0
- package/build/Tokens.types.js.map +1 -0
- package/build/cancelAllScheduledNotificationsAsync.d.ts +7 -0
- package/build/cancelAllScheduledNotificationsAsync.d.ts.map +1 -0
- package/build/cancelAllScheduledNotificationsAsync.js +14 -0
- package/build/cancelAllScheduledNotificationsAsync.js.map +1 -0
- package/build/cancelScheduledNotificationAsync.d.ts +22 -0
- package/build/cancelScheduledNotificationAsync.d.ts.map +1 -0
- package/build/cancelScheduledNotificationAsync.js +29 -0
- package/build/cancelScheduledNotificationAsync.js.map +1 -0
- package/build/deleteNotificationCategoryAsync.d.ts +11 -0
- package/build/deleteNotificationCategoryAsync.d.ts.map +1 -0
- package/build/deleteNotificationCategoryAsync.js +19 -0
- package/build/deleteNotificationCategoryAsync.js.map +1 -0
- package/build/deleteNotificationChannelAsync.android.d.ts +2 -0
- package/build/deleteNotificationChannelAsync.android.d.ts.map +1 -0
- package/build/deleteNotificationChannelAsync.android.js +9 -0
- package/build/deleteNotificationChannelAsync.android.js.map +1 -0
- package/build/deleteNotificationChannelAsync.d.ts +9 -0
- package/build/deleteNotificationChannelAsync.d.ts.map +1 -0
- package/build/deleteNotificationChannelAsync.js +11 -0
- package/build/deleteNotificationChannelAsync.js.map +1 -0
- package/build/deleteNotificationChannelGroupAsync.android.d.ts +2 -0
- package/build/deleteNotificationChannelGroupAsync.android.d.ts.map +1 -0
- package/build/deleteNotificationChannelGroupAsync.android.js +9 -0
- package/build/deleteNotificationChannelGroupAsync.android.js.map +1 -0
- package/build/deleteNotificationChannelGroupAsync.d.ts +9 -0
- package/build/deleteNotificationChannelGroupAsync.d.ts.map +1 -0
- package/build/deleteNotificationChannelGroupAsync.js +11 -0
- package/build/deleteNotificationChannelGroupAsync.js.map +1 -0
- package/build/dismissAllNotificationsAsync.d.ts +7 -0
- package/build/dismissAllNotificationsAsync.d.ts.map +1 -0
- package/build/dismissAllNotificationsAsync.js +14 -0
- package/build/dismissAllNotificationsAsync.js.map +1 -0
- package/build/dismissNotificationAsync.d.ts +8 -0
- package/build/dismissNotificationAsync.d.ts.map +1 -0
- package/build/dismissNotificationAsync.js +15 -0
- package/build/dismissNotificationAsync.js.map +1 -0
- package/build/getAllScheduledNotificationsAsync.d.ts +8 -0
- package/build/getAllScheduledNotificationsAsync.d.ts.map +1 -0
- package/build/getAllScheduledNotificationsAsync.js +14 -0
- package/build/getAllScheduledNotificationsAsync.js.map +1 -0
- package/build/getBadgeCountAsync.d.ts +8 -0
- package/build/getBadgeCountAsync.d.ts.map +1 -0
- package/build/getBadgeCountAsync.js +15 -0
- package/build/getBadgeCountAsync.js.map +1 -0
- package/build/getDevicePushTokenAsync.d.ts +8 -0
- package/build/getDevicePushTokenAsync.d.ts.map +1 -0
- package/build/getDevicePushTokenAsync.js +27 -0
- package/build/getDevicePushTokenAsync.js.map +1 -0
- package/build/getDevicePushTokenAsync.web.d.ts +3 -0
- package/build/getDevicePushTokenAsync.web.d.ts.map +1 -0
- package/build/getDevicePushTokenAsync.web.js +84 -0
- package/build/getDevicePushTokenAsync.web.js.map +1 -0
- package/build/getExpoPushTokenAsync.d.ts +40 -0
- package/build/getExpoPushTokenAsync.d.ts.map +1 -0
- package/build/getExpoPushTokenAsync.js +177 -0
- package/build/getExpoPushTokenAsync.js.map +1 -0
- package/build/getNextTriggerDateAsync.d.ts +26 -0
- package/build/getNextTriggerDateAsync.d.ts.map +1 -0
- package/build/getNextTriggerDateAsync.js +33 -0
- package/build/getNextTriggerDateAsync.js.map +1 -0
- package/build/getNotificationCategoriesAsync.d.ts +11 -0
- package/build/getNotificationCategoriesAsync.d.ts.map +1 -0
- package/build/getNotificationCategoriesAsync.js +18 -0
- package/build/getNotificationCategoriesAsync.js.map +1 -0
- package/build/getNotificationChannelAsync.android.d.ts +3 -0
- package/build/getNotificationChannelAsync.android.d.ts.map +1 -0
- package/build/getNotificationChannelAsync.android.js +9 -0
- package/build/getNotificationChannelAsync.android.js.map +1 -0
- package/build/getNotificationChannelAsync.d.ts +11 -0
- package/build/getNotificationChannelAsync.d.ts.map +1 -0
- package/build/getNotificationChannelAsync.js +13 -0
- package/build/getNotificationChannelAsync.js.map +1 -0
- package/build/getNotificationChannelGroupAsync.android.d.ts +3 -0
- package/build/getNotificationChannelGroupAsync.android.d.ts.map +1 -0
- package/build/getNotificationChannelGroupAsync.android.js +9 -0
- package/build/getNotificationChannelGroupAsync.android.js.map +1 -0
- package/build/getNotificationChannelGroupAsync.d.ts +12 -0
- package/build/getNotificationChannelGroupAsync.d.ts.map +1 -0
- package/build/getNotificationChannelGroupAsync.js +14 -0
- package/build/getNotificationChannelGroupAsync.js.map +1 -0
- package/build/getNotificationChannelGroupsAsync.android.d.ts +3 -0
- package/build/getNotificationChannelGroupsAsync.android.d.ts.map +1 -0
- package/build/getNotificationChannelGroupsAsync.android.js +9 -0
- package/build/getNotificationChannelGroupsAsync.android.js.map +1 -0
- package/build/getNotificationChannelGroupsAsync.d.ts +10 -0
- package/build/getNotificationChannelGroupsAsync.d.ts.map +1 -0
- package/build/getNotificationChannelGroupsAsync.js +12 -0
- package/build/getNotificationChannelGroupsAsync.js.map +1 -0
- package/build/getNotificationChannelsAsync.android.d.ts +3 -0
- package/build/getNotificationChannelsAsync.android.d.ts.map +1 -0
- package/build/getNotificationChannelsAsync.android.js +9 -0
- package/build/getNotificationChannelsAsync.android.js.map +1 -0
- package/build/getNotificationChannelsAsync.d.ts +10 -0
- package/build/getNotificationChannelsAsync.d.ts.map +1 -0
- package/build/getNotificationChannelsAsync.js +12 -0
- package/build/getNotificationChannelsAsync.js.map +1 -0
- package/build/getPresentedNotificationsAsync.d.ts +9 -0
- package/build/getPresentedNotificationsAsync.d.ts.map +1 -0
- package/build/getPresentedNotificationsAsync.js +15 -0
- package/build/getPresentedNotificationsAsync.js.map +1 -0
- package/build/index.d.ts +39 -0
- package/build/index.d.ts.map +1 -0
- package/build/index.js +39 -0
- package/build/index.js.map +1 -0
- package/build/kepler/NotificationContent.d.ts +43 -0
- package/build/kepler/NotificationContent.d.ts.map +1 -0
- package/build/kepler/NotificationContent.js +96 -0
- package/build/kepler/NotificationContent.js.map +1 -0
- package/build/kepler/index.d.ts +3 -0
- package/build/kepler/index.d.ts.map +1 -0
- package/build/kepler/index.js +15 -0
- package/build/kepler/index.js.map +1 -0
- package/build/kepler/native-notification-manager.d.ts +3 -0
- package/build/kepler/native-notification-manager.d.ts.map +1 -0
- package/build/kepler/native-notification-manager.js +10 -0
- package/build/kepler/native-notification-manager.js.map +1 -0
- package/build/kepler/types/NotificationManagerTypes.d.ts +373 -0
- package/build/kepler/types/NotificationManagerTypes.d.ts.map +1 -0
- package/build/kepler/types/NotificationManagerTypes.js +279 -0
- package/build/kepler/types/NotificationManagerTypes.js.map +1 -0
- package/build/kepler/types/index.d.ts +3 -0
- package/build/kepler/types/index.d.ts.map +1 -0
- package/build/kepler/types/index.js +15 -0
- package/build/kepler/types/index.js.map +1 -0
- package/build/presentNotificationAsync.d.ts +11 -0
- package/build/presentNotificationAsync.d.ts.map +1 -0
- package/build/presentNotificationAsync.js +22 -0
- package/build/presentNotificationAsync.js.map +1 -0
- package/build/registerTaskAsync.d.ts +29 -0
- package/build/registerTaskAsync.d.ts.map +1 -0
- package/build/registerTaskAsync.js +37 -0
- package/build/registerTaskAsync.js.map +1 -0
- package/build/scheduleNotificationAsync.d.ts +60 -0
- package/build/scheduleNotificationAsync.d.ts.map +1 -0
- package/build/scheduleNotificationAsync.js +261 -0
- package/build/scheduleNotificationAsync.js.map +1 -0
- package/build/setBadgeCountAsync.d.ts +19 -0
- package/build/setBadgeCountAsync.d.ts.map +1 -0
- package/build/setBadgeCountAsync.js +19 -0
- package/build/setBadgeCountAsync.js.map +1 -0
- package/build/setNotificationCategoryAsync.d.ts +15 -0
- package/build/setNotificationCategoryAsync.d.ts.map +1 -0
- package/build/setNotificationCategoryAsync.js +22 -0
- package/build/setNotificationCategoryAsync.js.map +1 -0
- package/build/setNotificationChannelAsync.android.d.ts +3 -0
- package/build/setNotificationChannelAsync.android.d.ts.map +1 -0
- package/build/setNotificationChannelAsync.android.js +9 -0
- package/build/setNotificationChannelAsync.android.js.map +1 -0
- package/build/setNotificationChannelAsync.d.ts +22 -0
- package/build/setNotificationChannelAsync.d.ts.map +1 -0
- package/build/setNotificationChannelAsync.js +24 -0
- package/build/setNotificationChannelAsync.js.map +1 -0
- package/build/setNotificationChannelGroupAsync.android.d.ts +3 -0
- package/build/setNotificationChannelGroupAsync.android.d.ts.map +1 -0
- package/build/setNotificationChannelGroupAsync.android.js +9 -0
- package/build/setNotificationChannelGroupAsync.android.js.map +1 -0
- package/build/setNotificationChannelGroupAsync.d.ts +12 -0
- package/build/setNotificationChannelGroupAsync.d.ts.map +1 -0
- package/build/setNotificationChannelGroupAsync.js +14 -0
- package/build/setNotificationChannelGroupAsync.js.map +1 -0
- package/build/unregisterForNotificationsAsync.d.ts +2 -0
- package/build/unregisterForNotificationsAsync.d.ts.map +1 -0
- package/build/unregisterForNotificationsAsync.js +10 -0
- package/build/unregisterForNotificationsAsync.js.map +1 -0
- package/build/unregisterTaskAsync.d.ts +7 -0
- package/build/unregisterTaskAsync.d.ts.map +1 -0
- package/build/unregisterTaskAsync.js +15 -0
- package/build/unregisterTaskAsync.js.map +1 -0
- package/build/useLastNotificationResponse.d.ts +38 -0
- package/build/useLastNotificationResponse.d.ts.map +1 -0
- package/build/useLastNotificationResponse.js +63 -0
- package/build/useLastNotificationResponse.js.map +1 -0
- package/build/utils/keplerUuidUtils.d.ts +5 -0
- package/build/utils/keplerUuidUtils.d.ts.map +1 -0
- package/build/utils/keplerUuidUtils.js +15 -0
- package/build/utils/keplerUuidUtils.js.map +1 -0
- package/build/utils/updateDevicePushTokenAsync.d.ts +3 -0
- package/build/utils/updateDevicePushTokenAsync.d.ts.map +1 -0
- package/build/utils/updateDevicePushTokenAsync.js +115 -0
- package/build/utils/updateDevicePushTokenAsync.js.map +1 -0
- package/expo-module.config.json +20 -0
- package/ios/EXNotifications/Building/EXNotificationBuilder.h +19 -0
- package/ios/EXNotifications/Building/EXNotificationBuilder.m +91 -0
- package/ios/EXNotifications/EXBadgeModule.h +11 -0
- package/ios/EXNotifications/EXBadgeModule.m +36 -0
- package/ios/EXNotifications/EXServerRegistrationModule.h +19 -0
- package/ios/EXNotifications/EXServerRegistrationModule.m +194 -0
- package/ios/EXNotifications/Notifications/Background/EXBackgroundNotificationTasksModule.h +16 -0
- package/ios/EXNotifications/Notifications/Background/EXBackgroundNotificationTasksModule.m +62 -0
- package/ios/EXNotifications/Notifications/Background/EXBackgroundRemoteNotificationConsumer.h +14 -0
- package/ios/EXNotifications/Notifications/Background/EXBackgroundRemoteNotificationConsumer.m +51 -0
- package/ios/EXNotifications/Notifications/Categories/EXNotificationCategoriesModule.h +25 -0
- package/ios/EXNotifications/Notifications/Categories/EXNotificationCategoriesModule.m +217 -0
- package/ios/EXNotifications/Notifications/EXNotificationCenterDelegate.h +29 -0
- package/ios/EXNotifications/Notifications/EXNotificationCenterDelegate.m +209 -0
- package/ios/EXNotifications/Notifications/EXNotificationSerializer.h +16 -0
- package/ios/EXNotifications/Notifications/EXNotificationSerializer.m +232 -0
- package/ios/EXNotifications/Notifications/EXNotificationsDelegate.h +27 -0
- package/ios/EXNotifications/Notifications/Emitter/EXNotificationsEmitter.h +17 -0
- package/ios/EXNotifications/Notifications/Emitter/EXNotificationsEmitter.m +114 -0
- package/ios/EXNotifications/Notifications/Handler/EXNotificationsHandlerModule.h +12 -0
- package/ios/EXNotifications/Notifications/Handler/EXNotificationsHandlerModule.m +109 -0
- package/ios/EXNotifications/Notifications/Handler/EXSingleNotificationHandlerTask.h +33 -0
- package/ios/EXNotifications/Notifications/Handler/EXSingleNotificationHandlerTask.m +124 -0
- package/ios/EXNotifications/Notifications/NSDictionary+EXNotificationsVerifyingClass.h +7 -0
- package/ios/EXNotifications/Notifications/NSDictionary+EXNotificationsVerifyingClass.m +19 -0
- package/ios/EXNotifications/Notifications/Presenting/EXNotificationPresentationModule.h +13 -0
- package/ios/EXNotifications/Notifications/Presenting/EXNotificationPresentationModule.m +124 -0
- package/ios/EXNotifications/Notifications/Scheduling/EXNotificationSchedulerModule.h +21 -0
- package/ios/EXNotifications/Notifications/Scheduling/EXNotificationSchedulerModule.m +263 -0
- package/ios/EXNotifications/Permissions/EXLegacyRemoteNotificationPermissionRequester.h +13 -0
- package/ios/EXNotifications/Permissions/EXLegacyRemoteNotificationPermissionRequester.m +135 -0
- package/ios/EXNotifications/Permissions/EXNotificationPermissionsModule.h +8 -0
- package/ios/EXNotifications/Permissions/EXNotificationPermissionsModule.m +67 -0
- package/ios/EXNotifications/Permissions/EXRemoteNotificationPermissionSingletonModule.h +29 -0
- package/ios/EXNotifications/Permissions/EXRemoteNotificationPermissionSingletonModule.m +68 -0
- package/ios/EXNotifications/Permissions/EXUserFacingNotificationsPermissionsRequester.h +15 -0
- package/ios/EXNotifications/Permissions/EXUserFacingNotificationsPermissionsRequester.m +202 -0
- package/ios/EXNotifications/PushToken/EXPushTokenListener.h +14 -0
- package/ios/EXNotifications/PushToken/EXPushTokenManager.h +24 -0
- package/ios/EXNotifications/PushToken/EXPushTokenManager.m +63 -0
- package/ios/EXNotifications/PushToken/EXPushTokenModule.h +9 -0
- package/ios/EXNotifications/PushToken/EXPushTokenModule.m +154 -0
- package/ios/EXNotifications.podspec +25 -0
- package/package.json +67 -0
- package/plugin/build/withNotifications.d.ts +28 -0
- package/plugin/build/withNotifications.js +12 -0
- package/plugin/build/withNotificationsAndroid.d.ts +42 -0
- package/plugin/build/withNotificationsAndroid.js +184 -0
- package/plugin/build/withNotificationsIOS.d.ts +14 -0
- package/plugin/build/withNotificationsIOS.js +58 -0
- package/plugin/jest.config.js +1 -0
- package/plugin/src/withNotifications.ts +40 -0
- package/plugin/src/withNotificationsAndroid.ts +239 -0
- package/plugin/src/withNotificationsIOS.ts +78 -0
- package/plugin/tsconfig.json +9 -0
- package/src/BackgroundNotificationTasksModule.kepler.ts +8 -0
- package/src/BackgroundNotificationTasksModule.native.ts +7 -0
- package/src/BackgroundNotificationTasksModule.ts +8 -0
- package/src/BackgroundNotificationTasksModule.types.ts +12 -0
- package/src/BackgroundNotificationTasksModule.web.ts +8 -0
- package/src/BadgeModule.kepler.ts +8 -0
- package/src/BadgeModule.native.ts +15 -0
- package/src/BadgeModule.ts +6 -0
- package/src/BadgeModule.types.ts +11 -0
- package/src/BadgeModule.web.ts +28 -0
- package/src/DevicePushTokenAutoRegistration.fx.ts +119 -0
- package/src/NotificationCategoriesModule.kepler.ts +10 -0
- package/src/NotificationCategoriesModule.native.ts +7 -0
- package/src/NotificationCategoriesModule.ts +15 -0
- package/src/NotificationCategoriesModule.types.ts +22 -0
- package/src/NotificationCategoriesModule.web.ts +17 -0
- package/src/NotificationChannelGroupManager.kepler.ts +8 -0
- package/src/NotificationChannelGroupManager.native.ts +7 -0
- package/src/NotificationChannelGroupManager.ts +6 -0
- package/src/NotificationChannelGroupManager.types.ts +34 -0
- package/src/NotificationChannelManager.kepler.ts +8 -0
- package/src/NotificationChannelManager.native.ts +5 -0
- package/src/NotificationChannelManager.ts +6 -0
- package/src/NotificationChannelManager.types.ts +115 -0
- package/src/NotificationPermissions.ts +91 -0
- package/src/NotificationPermissions.types.ts +102 -0
- package/src/NotificationPermissionsModule.kepler.ts +8 -0
- package/src/NotificationPermissionsModule.native.ts +7 -0
- package/src/NotificationPermissionsModule.ts +83 -0
- package/src/NotificationPermissionsModule.types.ts +13 -0
- package/src/NotificationPresenterModule.kepler.ts +67 -0
- package/src/NotificationPresenterModule.native.ts +5 -0
- package/src/NotificationPresenterModule.ts +6 -0
- package/src/NotificationPresenterModule.types.ts +13 -0
- package/src/NotificationScheduler.kepler.ts +63 -0
- package/src/NotificationScheduler.native.ts +5 -0
- package/src/NotificationScheduler.ts +6 -0
- package/src/NotificationScheduler.types.ts +89 -0
- package/src/Notifications.types.ts +722 -0
- package/src/NotificationsEmitter.ts +111 -0
- package/src/NotificationsEmitterModule.kepler.ts +8 -0
- package/src/NotificationsEmitterModule.native.ts +5 -0
- package/src/NotificationsEmitterModule.ts +17 -0
- package/src/NotificationsEmitterModule.types.ts +7 -0
- package/src/NotificationsHandler.ts +120 -0
- package/src/NotificationsHandlerModule.kepler.ts +8 -0
- package/src/NotificationsHandlerModule.native.ts +5 -0
- package/src/NotificationsHandlerModule.ts +17 -0
- package/src/NotificationsHandlerModule.types.ts +10 -0
- package/src/PushTokenManager.kepler.ts +8 -0
- package/src/PushTokenManager.native.ts +5 -0
- package/src/PushTokenManager.ts +17 -0
- package/src/PushTokenManager.types.ts +6 -0
- package/src/ServerRegistrationModule.kepler.ts +8 -0
- package/src/ServerRegistrationModule.native.ts +7 -0
- package/src/ServerRegistrationModule.ts +6 -0
- package/src/ServerRegistrationModule.types.ts +7 -0
- package/src/ServerRegistrationModule.web.ts +56 -0
- package/src/TokenEmitter.ts +56 -0
- package/src/Tokens.types.ts +110 -0
- package/src/cancelAllScheduledNotificationsAsync.ts +16 -0
- package/src/cancelScheduledNotificationAsync.ts +31 -0
- package/src/deleteNotificationCategoryAsync.ts +23 -0
- package/src/deleteNotificationChannelAsync.android.ts +11 -0
- package/src/deleteNotificationChannelAsync.ts +10 -0
- package/src/deleteNotificationChannelGroupAsync.android.ts +11 -0
- package/src/deleteNotificationChannelGroupAsync.ts +10 -0
- package/src/dismissAllNotificationsAsync.ts +16 -0
- package/src/dismissNotificationAsync.ts +19 -0
- package/src/getAllScheduledNotificationsAsync.ts +17 -0
- package/src/getBadgeCountAsync.ts +17 -0
- package/src/getDevicePushTokenAsync.ts +31 -0
- package/src/getDevicePushTokenAsync.web.ts +122 -0
- package/src/getExpoPushTokenAsync.ts +238 -0
- package/src/getNextTriggerDateAsync.ts +38 -0
- package/src/getNotificationCategoriesAsync.ts +21 -0
- package/src/getNotificationChannelAsync.android.ts +13 -0
- package/src/getNotificationChannelAsync.ts +16 -0
- package/src/getNotificationChannelGroupAsync.android.ts +14 -0
- package/src/getNotificationChannelGroupAsync.ts +17 -0
- package/src/getNotificationChannelGroupsAsync.android.ts +13 -0
- package/src/getNotificationChannelGroupsAsync.ts +15 -0
- package/src/getNotificationChannelsAsync.android.ts +11 -0
- package/src/getNotificationChannelsAsync.ts +13 -0
- package/src/getPresentedNotificationsAsync.ts +18 -0
- package/src/index.ts +38 -0
- package/src/kepler/NotificationContent.ts +119 -0
- package/src/kepler/index.ts +16 -0
- package/src/kepler/native-notification-manager.ts +10 -0
- package/src/kepler/types/NotificationManagerTypes.ts +508 -0
- package/src/kepler/types/index.ts +16 -0
- package/src/presentNotificationAsync.ts +32 -0
- package/src/registerTaskAsync.ts +39 -0
- package/src/scheduleNotificationAsync.ts +335 -0
- package/src/setBadgeCountAsync.ts +32 -0
- package/src/setNotificationCategoryAsync.ts +37 -0
- package/src/setNotificationChannelAsync.android.ts +15 -0
- package/src/setNotificationChannelAsync.ts +28 -0
- package/src/setNotificationChannelGroupAsync.android.ts +18 -0
- package/src/setNotificationChannelGroupAsync.ts +21 -0
- package/src/unregisterForNotificationsAsync.ts +11 -0
- package/src/unregisterTaskAsync.ts +17 -0
- package/src/useLastNotificationResponse.ts +70 -0
- package/src/utils/keplerUuidUtils.ts +29 -0
- package/src/utils/updateDevicePushTokenAsync.ts +147 -0
- package/tsconfig.json +9 -0
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
package expo.modules.notifications.notifications.presentation.builders;
|
|
2
|
+
|
|
3
|
+
import android.app.Notification;
|
|
4
|
+
import android.content.Context;
|
|
5
|
+
import android.content.pm.ApplicationInfo;
|
|
6
|
+
import android.content.pm.PackageManager;
|
|
7
|
+
import android.content.res.Resources;
|
|
8
|
+
import android.graphics.Bitmap;
|
|
9
|
+
import android.graphics.BitmapFactory;
|
|
10
|
+
import android.os.Build;
|
|
11
|
+
import android.os.Bundle;
|
|
12
|
+
import android.os.Parcel;
|
|
13
|
+
import android.provider.Settings;
|
|
14
|
+
import android.util.Log;
|
|
15
|
+
|
|
16
|
+
import androidx.annotation.Nullable;
|
|
17
|
+
import androidx.core.app.NotificationCompat;
|
|
18
|
+
import expo.modules.notifications.notifications.enums.NotificationPriority;
|
|
19
|
+
import expo.modules.notifications.notifications.interfaces.NotificationBuilder;
|
|
20
|
+
import expo.modules.notifications.notifications.model.NotificationAction;
|
|
21
|
+
import expo.modules.notifications.notifications.model.NotificationContent;
|
|
22
|
+
import expo.modules.notifications.notifications.model.NotificationRequest;
|
|
23
|
+
import expo.modules.notifications.service.NotificationsService;
|
|
24
|
+
|
|
25
|
+
import static expo.modules.notifications.notifications.model.NotificationResponse.DEFAULT_ACTION_IDENTIFIER;
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
* {@link NotificationBuilder} interpreting a JSON request object.
|
|
29
|
+
*/
|
|
30
|
+
public class ExpoNotificationBuilder extends ChannelAwareNotificationBuilder {
|
|
31
|
+
public static final String META_DATA_DEFAULT_ICON_KEY = "expo.modules.notifications.default_notification_icon";
|
|
32
|
+
public static final String META_DATA_LARGE_ICON_KEY = "expo.modules.notifications.large_notification_icon";
|
|
33
|
+
public static final String META_DATA_DEFAULT_COLOR_KEY = "expo.modules.notifications.default_notification_color";
|
|
34
|
+
public static final String EXTRAS_MARSHALLED_NOTIFICATION_REQUEST_KEY = "expo.notification_request";
|
|
35
|
+
private static final String EXTRAS_BODY_KEY = "body";
|
|
36
|
+
|
|
37
|
+
private static final long[] NO_VIBRATE_PATTERN = new long[]{0, 0};
|
|
38
|
+
|
|
39
|
+
public ExpoNotificationBuilder(Context context) {
|
|
40
|
+
super(context);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
protected NotificationCompat.Builder createBuilder() {
|
|
44
|
+
NotificationCompat.Builder builder = super.createBuilder();
|
|
45
|
+
builder.setSmallIcon(getIcon());
|
|
46
|
+
builder.setLargeIcon(getLargeIcon());
|
|
47
|
+
builder.setPriority(getPriority());
|
|
48
|
+
|
|
49
|
+
NotificationContent content = getNotificationContent();
|
|
50
|
+
|
|
51
|
+
builder.setAutoCancel(content.isAutoDismiss());
|
|
52
|
+
builder.setOngoing(content.isSticky());
|
|
53
|
+
|
|
54
|
+
builder.setContentTitle(content.getTitle());
|
|
55
|
+
builder.setContentText(content.getText());
|
|
56
|
+
builder.setSubText(content.getSubtitle());
|
|
57
|
+
// Sets the text/contentText as the bigText to allow the notification to be expanded and the
|
|
58
|
+
// entire text to be viewed.
|
|
59
|
+
builder.setStyle(new NotificationCompat.BigTextStyle().bigText(content.getText()));
|
|
60
|
+
|
|
61
|
+
Number notificationColor = getColor();
|
|
62
|
+
if (notificationColor != null) {
|
|
63
|
+
builder.setColor(notificationColor.intValue());
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
boolean shouldPlayDefaultSound = shouldPlaySound() && content.shouldPlayDefaultSound();
|
|
67
|
+
if (shouldPlayDefaultSound && shouldVibrate()) {
|
|
68
|
+
builder.setDefaults(NotificationCompat.DEFAULT_ALL); // set sound, vibration and lights
|
|
69
|
+
} else if (shouldVibrate()) {
|
|
70
|
+
builder.setDefaults(NotificationCompat.DEFAULT_VIBRATE);
|
|
71
|
+
} else if (shouldPlayDefaultSound) {
|
|
72
|
+
builder.setDefaults(NotificationCompat.DEFAULT_SOUND);
|
|
73
|
+
} else {
|
|
74
|
+
// Notification will not vibrate or play sound, regardless of channel
|
|
75
|
+
builder.setSilent(true);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
if (shouldPlaySound() && content.getSound() != null) {
|
|
79
|
+
builder.setSound(content.getSound());
|
|
80
|
+
} else if (shouldPlayDefaultSound) {
|
|
81
|
+
builder.setSound(Settings.System.DEFAULT_NOTIFICATION_URI);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
long[] vibrationPatternOverride = content.getVibrationPattern();
|
|
85
|
+
if (shouldVibrate() && vibrationPatternOverride != null) {
|
|
86
|
+
builder.setVibrate(vibrationPatternOverride);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
if (content.getBody() != null) {
|
|
90
|
+
// Add body - JSON data - to extras
|
|
91
|
+
Bundle extras = builder.getExtras();
|
|
92
|
+
extras.putString(EXTRAS_BODY_KEY, content.getBody().toString());
|
|
93
|
+
builder.setExtras(extras);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
// Save the notification request in extras for later usage
|
|
97
|
+
// eg. in ExpoPresentationDelegate when we fetch active notifications.
|
|
98
|
+
// Otherwise we'd have to create expo.Notification from android.Notification
|
|
99
|
+
// and deal with two-way interpreting.
|
|
100
|
+
Bundle requestExtras = new Bundle();
|
|
101
|
+
// Class loader used in BaseBundle when unmarshalling notification extras
|
|
102
|
+
// cannot handle expo.modules.notifications.….NotificationRequest
|
|
103
|
+
// so we go around it by marshalling and unmarshalling the object ourselves.
|
|
104
|
+
requestExtras.putByteArray(EXTRAS_MARSHALLED_NOTIFICATION_REQUEST_KEY, marshallNotificationRequest(getNotification().getNotificationRequest()));
|
|
105
|
+
builder.addExtras(requestExtras);
|
|
106
|
+
|
|
107
|
+
NotificationAction defaultAction = new NotificationAction(DEFAULT_ACTION_IDENTIFIER, null, true);
|
|
108
|
+
builder.setContentIntent(NotificationsService.Companion.createNotificationResponseIntent(getContext(), getNotification(), defaultAction));
|
|
109
|
+
|
|
110
|
+
return builder;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
@Override
|
|
114
|
+
public Notification build() {
|
|
115
|
+
return createBuilder().build();
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Marshalls {@link NotificationRequest} into to a byte array.
|
|
120
|
+
*
|
|
121
|
+
* @param request Notification request to marshall
|
|
122
|
+
* @return Given request marshalled to a byte array or null if the process failed.
|
|
123
|
+
*/
|
|
124
|
+
@Nullable
|
|
125
|
+
protected byte[] marshallNotificationRequest(NotificationRequest request) {
|
|
126
|
+
try {
|
|
127
|
+
Parcel parcel = Parcel.obtain();
|
|
128
|
+
request.writeToParcel(parcel, 0);
|
|
129
|
+
byte[] bytes = parcel.marshall();
|
|
130
|
+
parcel.recycle();
|
|
131
|
+
return bytes;
|
|
132
|
+
} catch (Exception e) {
|
|
133
|
+
// If we couldn't marshall the request, let's not fail the whole build process.
|
|
134
|
+
// The request is only used to extract source request when fetching displayed notifications.
|
|
135
|
+
Log.e("expo-notifications", String.format("Could not marshalled notification request: %s.", request.getIdentifier()));
|
|
136
|
+
e.printStackTrace();
|
|
137
|
+
return null;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
/**
|
|
142
|
+
* Notification should play a sound if and only if:
|
|
143
|
+
* - behavior is not set or allows sound AND
|
|
144
|
+
* - notification request doesn't explicitly set "sound" to false.
|
|
145
|
+
* <p>
|
|
146
|
+
* This way a notification can set "sound" to false to disable sound,
|
|
147
|
+
* and we always honor the allowedBehavior, if set.
|
|
148
|
+
*
|
|
149
|
+
* @return Whether the notification should play a sound.
|
|
150
|
+
*/
|
|
151
|
+
private boolean shouldPlaySound() {
|
|
152
|
+
boolean behaviorAllowsSound = getNotificationBehavior() == null || getNotificationBehavior().shouldPlaySound();
|
|
153
|
+
|
|
154
|
+
NotificationContent content = getNotificationContent();
|
|
155
|
+
boolean contentAllowsSound = content.shouldPlayDefaultSound() || content.getSound() != null;
|
|
156
|
+
|
|
157
|
+
return behaviorAllowsSound && contentAllowsSound;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
/**
|
|
161
|
+
* Notification should vibrate if and only if:
|
|
162
|
+
* - behavior is not set or allows sound AND
|
|
163
|
+
* - notification request doesn't explicitly set "vibrate" to false.
|
|
164
|
+
* <p>
|
|
165
|
+
* This way a notification can set "vibrate" to false to disable vibration.
|
|
166
|
+
*
|
|
167
|
+
* @return Whether the notification should vibrate.
|
|
168
|
+
*/
|
|
169
|
+
private boolean shouldVibrate() {
|
|
170
|
+
boolean behaviorAllowsVibration = getNotificationBehavior() == null || getNotificationBehavior().shouldPlaySound();
|
|
171
|
+
|
|
172
|
+
NotificationContent content = getNotificationContent();
|
|
173
|
+
boolean contentAllowsVibration = content.shouldUseDefaultVibrationPattern() || content.getVibrationPattern() != null;
|
|
174
|
+
|
|
175
|
+
return behaviorAllowsVibration && contentAllowsVibration;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* When setting the priority we want to honor both behavior set by the current
|
|
180
|
+
* notification handler and the preset priority (in that order of significance).
|
|
181
|
+
* <p>
|
|
182
|
+
* We do this by returning:
|
|
183
|
+
* - if behavior defines a priority: the priority,
|
|
184
|
+
* - if the notification should be shown: high priority (or max, if requested in the notification),
|
|
185
|
+
* - if the notification should not be shown: default priority (or lower, if requested in the notification).
|
|
186
|
+
* <p>
|
|
187
|
+
* This way we allow full customization to the developers.
|
|
188
|
+
*
|
|
189
|
+
* @return Priority of the notification, one of NotificationCompat.PRIORITY_*
|
|
190
|
+
*/
|
|
191
|
+
private int getPriority() {
|
|
192
|
+
NotificationPriority requestPriority = getNotificationContent().getPriority();
|
|
193
|
+
|
|
194
|
+
// If we know of a behavior guideline, let's honor it...
|
|
195
|
+
if (getNotificationBehavior() != null) {
|
|
196
|
+
// ...by using the priority override...
|
|
197
|
+
NotificationPriority priorityOverride = getNotificationBehavior().getPriorityOverride();
|
|
198
|
+
if (priorityOverride != null) {
|
|
199
|
+
return priorityOverride.getNativeValue();
|
|
200
|
+
}
|
|
201
|
+
|
|
202
|
+
// ...or by setting min/max values for priority:
|
|
203
|
+
// If the notification has no priority set, let's pick a neutral value and depend solely on the behavior.
|
|
204
|
+
int requestPriorityValue =
|
|
205
|
+
requestPriority != null
|
|
206
|
+
? requestPriority.getNativeValue()
|
|
207
|
+
: NotificationPriority.DEFAULT.getNativeValue();
|
|
208
|
+
|
|
209
|
+
// TODO (barthap): This is going to be a dead code upon removing presentNotificationAsync()
|
|
210
|
+
// shouldShowAlert() will always be false here.
|
|
211
|
+
if (getNotificationBehavior().shouldShowAlert()) {
|
|
212
|
+
// Display as a heads-up notification, as per the behavior
|
|
213
|
+
// while also allowing making the priority higher.
|
|
214
|
+
return Math.max(NotificationCompat.PRIORITY_HIGH, requestPriorityValue);
|
|
215
|
+
} else {
|
|
216
|
+
// Do not display as a heads-up notification, but show in the notification tray
|
|
217
|
+
// as per the behavior, while also allowing making the priority lower.
|
|
218
|
+
return Math.min(NotificationCompat.PRIORITY_DEFAULT, requestPriorityValue);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
// No behavior is set, the only source of priority can be the request.
|
|
223
|
+
if (requestPriority != null) {
|
|
224
|
+
return requestPriority.getNativeValue();
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
// By default let's show the notification
|
|
228
|
+
return NotificationCompat.PRIORITY_HIGH;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
/**
|
|
232
|
+
* The method first tries to get the large icon from the manifest's meta-data {@link #META_DATA_DEFAULT_ICON_KEY}.
|
|
233
|
+
* If a custom setting is not found, the method falls back to null.
|
|
234
|
+
*
|
|
235
|
+
* @return Bitmap containing larger icon or null if a custom settings was not provided.
|
|
236
|
+
*/
|
|
237
|
+
@Nullable
|
|
238
|
+
protected Bitmap getLargeIcon() {
|
|
239
|
+
try {
|
|
240
|
+
ApplicationInfo ai = getContext().getPackageManager().getApplicationInfo(getContext().getPackageName(), PackageManager.GET_META_DATA);
|
|
241
|
+
if (ai.metaData.containsKey(META_DATA_LARGE_ICON_KEY)) {
|
|
242
|
+
int resourceId = ai.metaData.getInt(META_DATA_LARGE_ICON_KEY);
|
|
243
|
+
return BitmapFactory.decodeResource(getContext().getResources(), resourceId);
|
|
244
|
+
}
|
|
245
|
+
} catch (PackageManager.NameNotFoundException | ClassCastException e) {
|
|
246
|
+
Log.e("expo-notifications", "Could not have fetched large notification icon.");
|
|
247
|
+
}
|
|
248
|
+
return null;
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
/**
|
|
252
|
+
* The method first tries to get the icon from the manifest's meta-data {@link #META_DATA_DEFAULT_ICON_KEY}.
|
|
253
|
+
* If a custom setting is not found, the method falls back to using app icon.
|
|
254
|
+
*
|
|
255
|
+
* @return Resource ID for icon that should be used as a notification icon.
|
|
256
|
+
*/
|
|
257
|
+
protected int getIcon() {
|
|
258
|
+
try {
|
|
259
|
+
ApplicationInfo ai = getContext().getPackageManager().getApplicationInfo(getContext().getPackageName(), PackageManager.GET_META_DATA);
|
|
260
|
+
if (ai.metaData.containsKey(META_DATA_DEFAULT_ICON_KEY)) {
|
|
261
|
+
return ai.metaData.getInt(META_DATA_DEFAULT_ICON_KEY);
|
|
262
|
+
}
|
|
263
|
+
} catch (PackageManager.NameNotFoundException | ClassCastException e) {
|
|
264
|
+
Log.e("expo-notifications", "Could not have fetched default notification icon.");
|
|
265
|
+
}
|
|
266
|
+
return getContext().getApplicationInfo().icon;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
/**
|
|
270
|
+
* The method responsible for finding and returning a custom color used to color the notification icon.
|
|
271
|
+
* It first tries to use a custom color defined in notification content, then it tries to fetch color
|
|
272
|
+
* from resources (based on manifest's meta-data). If not found, returns null.
|
|
273
|
+
*
|
|
274
|
+
* @return A {@link Number}, if a custom color should be used for notification icon
|
|
275
|
+
* or null if the default should be used.
|
|
276
|
+
*/
|
|
277
|
+
@Nullable
|
|
278
|
+
protected Number getColor() {
|
|
279
|
+
if (getNotificationContent().getColor() != null) {
|
|
280
|
+
return getNotificationContent().getColor();
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
try {
|
|
284
|
+
ApplicationInfo ai = getContext().getPackageManager().getApplicationInfo(getContext().getPackageName(), PackageManager.GET_META_DATA);
|
|
285
|
+
if (ai.metaData.containsKey(META_DATA_DEFAULT_COLOR_KEY)) {
|
|
286
|
+
return getContext().getResources().getColor(ai.metaData.getInt(META_DATA_DEFAULT_COLOR_KEY), null);
|
|
287
|
+
}
|
|
288
|
+
} catch (PackageManager.NameNotFoundException | Resources.NotFoundException | ClassCastException e) {
|
|
289
|
+
Log.e("expo-notifications", "Could not have fetched default notification color.");
|
|
290
|
+
}
|
|
291
|
+
|
|
292
|
+
// No custom color
|
|
293
|
+
return null;
|
|
294
|
+
}
|
|
295
|
+
}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
package expo.modules.notifications.notifications.presentation.effects;
|
|
2
|
+
|
|
3
|
+
import android.app.Notification;
|
|
4
|
+
import android.content.Context;
|
|
5
|
+
|
|
6
|
+
import expo.modules.core.ModuleRegistry;
|
|
7
|
+
import expo.modules.core.interfaces.InternalModule;
|
|
8
|
+
|
|
9
|
+
import java.util.Collections;
|
|
10
|
+
import java.util.List;
|
|
11
|
+
|
|
12
|
+
import androidx.annotation.Nullable;
|
|
13
|
+
import expo.modules.notifications.notifications.interfaces.NotificationPresentationEffect;
|
|
14
|
+
import expo.modules.notifications.notifications.interfaces.NotificationPresentationEffectsManager;
|
|
15
|
+
|
|
16
|
+
public abstract class BaseNotificationEffect implements InternalModule, NotificationPresentationEffect {
|
|
17
|
+
private Context mContext;
|
|
18
|
+
private NotificationPresentationEffectsManager mManager;
|
|
19
|
+
|
|
20
|
+
public BaseNotificationEffect(Context context) {
|
|
21
|
+
mContext = context;
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
protected Context getContext() {
|
|
25
|
+
return mContext;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
@Override
|
|
29
|
+
public List<? extends Class> getExportedInterfaces() {
|
|
30
|
+
return Collections.singletonList(getClass());
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
@Override
|
|
34
|
+
public void onCreate(ModuleRegistry moduleRegistry) {
|
|
35
|
+
mManager = moduleRegistry.getModule(NotificationPresentationEffectsManager.class);
|
|
36
|
+
mManager.addEffect(this);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
@Override
|
|
40
|
+
public void onDestroy() {
|
|
41
|
+
mManager.removeEffect(this);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
@Override
|
|
45
|
+
public boolean onNotificationPresented(@Nullable String tag, int id, Notification notification) {
|
|
46
|
+
return false;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
@Override
|
|
50
|
+
public boolean onNotificationPresentationFailed(@Nullable String tag, int id, Notification notification) {
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
package expo.modules.notifications.notifications.scheduling
|
|
2
|
+
|
|
3
|
+
import android.content.Context
|
|
4
|
+
import android.os.Bundle
|
|
5
|
+
import android.os.Handler
|
|
6
|
+
import android.os.Looper
|
|
7
|
+
import expo.modules.core.arguments.ReadableArguments
|
|
8
|
+
import expo.modules.core.errors.InvalidArgumentException
|
|
9
|
+
import expo.modules.kotlin.Promise
|
|
10
|
+
import expo.modules.kotlin.exception.Exceptions
|
|
11
|
+
import expo.modules.kotlin.modules.Module
|
|
12
|
+
import expo.modules.kotlin.modules.ModuleDefinition
|
|
13
|
+
import expo.modules.notifications.ResultReceiverBody
|
|
14
|
+
import expo.modules.notifications.createDefaultResultReceiver
|
|
15
|
+
import expo.modules.notifications.notifications.ArgumentsNotificationContentBuilder
|
|
16
|
+
import expo.modules.notifications.notifications.NotificationSerializer
|
|
17
|
+
import expo.modules.notifications.notifications.interfaces.NotificationTrigger
|
|
18
|
+
import expo.modules.notifications.notifications.interfaces.SchedulableNotificationTrigger
|
|
19
|
+
import expo.modules.notifications.notifications.model.NotificationContent
|
|
20
|
+
import expo.modules.notifications.notifications.model.NotificationRequest
|
|
21
|
+
import expo.modules.notifications.notifications.triggers.ChannelAwareTrigger
|
|
22
|
+
import expo.modules.notifications.notifications.triggers.DailyTrigger
|
|
23
|
+
import expo.modules.notifications.notifications.triggers.DateTrigger
|
|
24
|
+
import expo.modules.notifications.notifications.triggers.TimeIntervalTrigger
|
|
25
|
+
import expo.modules.notifications.notifications.triggers.WeeklyTrigger
|
|
26
|
+
import expo.modules.notifications.notifications.triggers.YearlyTrigger
|
|
27
|
+
import expo.modules.notifications.service.NotificationsService
|
|
28
|
+
import expo.modules.notifications.service.NotificationsService.Companion.getAllScheduledNotifications
|
|
29
|
+
import expo.modules.notifications.service.NotificationsService.Companion.removeAllScheduledNotifications
|
|
30
|
+
import expo.modules.notifications.service.NotificationsService.Companion.removeScheduledNotification
|
|
31
|
+
import expo.modules.notifications.service.NotificationsService.Companion.schedule
|
|
32
|
+
|
|
33
|
+
open class NotificationScheduler : Module() {
|
|
34
|
+
protected open val schedulingContext: Context
|
|
35
|
+
get() = appContext.reactContext ?: throw Exceptions.ReactContextLost()
|
|
36
|
+
|
|
37
|
+
private val handler = Handler(Looper.getMainLooper())
|
|
38
|
+
|
|
39
|
+
protected fun createResultReceiver(body: ResultReceiverBody) =
|
|
40
|
+
createDefaultResultReceiver(handler, body)
|
|
41
|
+
|
|
42
|
+
override fun definition() = ModuleDefinition {
|
|
43
|
+
Name("ExpoNotificationScheduler")
|
|
44
|
+
|
|
45
|
+
AsyncFunction("getAllScheduledNotificationsAsync") { promise: Promise ->
|
|
46
|
+
getAllScheduledNotifications(
|
|
47
|
+
schedulingContext,
|
|
48
|
+
createResultReceiver { resultCode: Int, resultData: Bundle? ->
|
|
49
|
+
if (resultCode == NotificationsService.SUCCESS_CODE) {
|
|
50
|
+
val requests = resultData?.getParcelableArrayList<NotificationRequest>(NotificationsService.NOTIFICATION_REQUESTS_KEY)
|
|
51
|
+
if (requests == null) {
|
|
52
|
+
promise.reject("ERR_NOTIFICATIONS_FAILED_TO_FETCH", "Failed to fetch scheduled notifications.", null)
|
|
53
|
+
} else {
|
|
54
|
+
promise.resolve(serializeScheduledNotificationRequests(requests))
|
|
55
|
+
}
|
|
56
|
+
} else {
|
|
57
|
+
val e = resultData?.getSerializable(NotificationsService.EXCEPTION_KEY) as Exception
|
|
58
|
+
promise.reject("ERR_NOTIFICATIONS_FAILED_TO_FETCH", "Failed to fetch scheduled notifications.", e)
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
)
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
AsyncFunction("scheduleNotificationAsync") { identifier: String, notificationContentMap: ReadableArguments, triggerParams: ReadableArguments?, promise: Promise ->
|
|
65
|
+
try {
|
|
66
|
+
val content = ArgumentsNotificationContentBuilder(schedulingContext).setPayload(notificationContentMap).build()
|
|
67
|
+
val request = createNotificationRequest(
|
|
68
|
+
identifier,
|
|
69
|
+
content,
|
|
70
|
+
triggerFromParams(triggerParams)
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
schedule(
|
|
74
|
+
schedulingContext,
|
|
75
|
+
request,
|
|
76
|
+
createResultReceiver { resultCode: Int, resultData: Bundle? ->
|
|
77
|
+
if (resultCode == NotificationsService.SUCCESS_CODE) {
|
|
78
|
+
promise.resolve(identifier)
|
|
79
|
+
} else {
|
|
80
|
+
val e = resultData?.getSerializable(NotificationsService.EXCEPTION_KEY) as? Exception
|
|
81
|
+
promise.reject("ERR_NOTIFICATIONS_FAILED_TO_SCHEDULE", "Failed to schedule the notification. ${e?.message}", e)
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
)
|
|
85
|
+
} catch (e: InvalidArgumentException) {
|
|
86
|
+
promise.reject("ERR_NOTIFICATIONS_FAILED_TO_SCHEDULE", "Failed to schedule the notification. ${e.message}", e)
|
|
87
|
+
} catch (e: NullPointerException) {
|
|
88
|
+
promise.reject("ERR_NOTIFICATIONS_FAILED_TO_SCHEDULE", "Failed to schedule the notification. Encountered unexpected null value. ${e.message}", e)
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
AsyncFunction("cancelScheduledNotificationAsync", this@NotificationScheduler::cancelScheduledNotificationAsync)
|
|
93
|
+
|
|
94
|
+
AsyncFunction("cancelAllScheduledNotificationsAsync", this@NotificationScheduler::cancelAllScheduledNotificationsAsync)
|
|
95
|
+
|
|
96
|
+
AsyncFunction("getNextTriggerDateAsync") { triggerParams: ReadableArguments?, promise: Promise ->
|
|
97
|
+
try {
|
|
98
|
+
val trigger = triggerFromParams(triggerParams)
|
|
99
|
+
if (trigger is SchedulableNotificationTrigger) {
|
|
100
|
+
val nextTriggerDate = trigger.nextTriggerDate()
|
|
101
|
+
if (nextTriggerDate == null) {
|
|
102
|
+
promise.resolve(null)
|
|
103
|
+
} else {
|
|
104
|
+
promise.resolve(nextTriggerDate.time.toDouble())
|
|
105
|
+
}
|
|
106
|
+
} else {
|
|
107
|
+
val triggerDescription = if (trigger == null) "null" else trigger.javaClass.name
|
|
108
|
+
val message = String.format("It is not possible to get next trigger date for triggers other than calendar-based. Provided trigger resulted in %s trigger.", triggerDescription)
|
|
109
|
+
promise.reject("ERR_NOTIFICATIONS_INVALID_CALENDAR_TRIGGER", message, null)
|
|
110
|
+
}
|
|
111
|
+
} catch (e: InvalidArgumentException) {
|
|
112
|
+
promise.reject("ERR_NOTIFICATIONS_FAILED_TO_GET_NEXT_TRIGGER_DATE", "Failed to get next trigger date for the trigger. ${e.message}", e)
|
|
113
|
+
} catch (e: NullPointerException) {
|
|
114
|
+
promise.reject("ERR_NOTIFICATIONS_FAILED_TO_GET_NEXT_TRIGGER_DATE", "Failed to get next trigger date for the trigger. Encountered unexpected null value. ${e.message}", e)
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
open fun cancelScheduledNotificationAsync(identifier: String, promise: Promise) {
|
|
120
|
+
removeScheduledNotification(
|
|
121
|
+
schedulingContext,
|
|
122
|
+
identifier,
|
|
123
|
+
createResultReceiver { resultCode: Int, resultData: Bundle? ->
|
|
124
|
+
if (resultCode == NotificationsService.SUCCESS_CODE) {
|
|
125
|
+
promise.resolve(null)
|
|
126
|
+
} else {
|
|
127
|
+
val e = resultData?.getSerializable(NotificationsService.EXCEPTION_KEY) as? Exception
|
|
128
|
+
promise.reject("ERR_NOTIFICATIONS_FAILED_TO_CANCEL", "Failed to cancel notification.", e)
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
)
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
open fun cancelAllScheduledNotificationsAsync(promise: Promise) {
|
|
135
|
+
removeAllScheduledNotifications(
|
|
136
|
+
schedulingContext,
|
|
137
|
+
createResultReceiver { resultCode: Int, resultData: Bundle? ->
|
|
138
|
+
if (resultCode == NotificationsService.SUCCESS_CODE) {
|
|
139
|
+
promise.resolve(null)
|
|
140
|
+
} else {
|
|
141
|
+
val e = resultData?.getSerializable(NotificationsService.EXCEPTION_KEY) as? Exception
|
|
142
|
+
promise.reject("ERR_NOTIFICATIONS_FAILED_TO_CANCEL", "Failed to cancel all notifications.", e)
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
)
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
@Throws(InvalidArgumentException::class)
|
|
149
|
+
protected fun triggerFromParams(params: ReadableArguments?): NotificationTrigger? {
|
|
150
|
+
if (params == null) {
|
|
151
|
+
return null
|
|
152
|
+
}
|
|
153
|
+
val channelId = params.getString("channelId", null)
|
|
154
|
+
return when (val type = params.getString("type")) {
|
|
155
|
+
"timeInterval" -> {
|
|
156
|
+
val seconds = params["seconds"] as? Number
|
|
157
|
+
?: throw InvalidArgumentException("Invalid value provided as interval of trigger.")
|
|
158
|
+
|
|
159
|
+
TimeIntervalTrigger(seconds.toLong(), params.getBoolean("repeats"), channelId)
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
"date" -> {
|
|
163
|
+
val timestamp = params["timestamp"] as? Number
|
|
164
|
+
?: throw InvalidArgumentException("Invalid value provided as date of trigger.")
|
|
165
|
+
|
|
166
|
+
DateTrigger(timestamp.toLong(), channelId)
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
"daily" -> {
|
|
170
|
+
val hour = params["hour"] as? Number
|
|
171
|
+
val minute = params["minute"] as? Number
|
|
172
|
+
|
|
173
|
+
if (hour == null || minute == null) {
|
|
174
|
+
throw InvalidArgumentException("Invalid value(s) provided for daily trigger.")
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
DailyTrigger(
|
|
178
|
+
hour.toInt(),
|
|
179
|
+
minute.toInt(),
|
|
180
|
+
channelId
|
|
181
|
+
)
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
"weekly" -> {
|
|
185
|
+
val weekday = params["weekday"] as? Number
|
|
186
|
+
val hour = params["hour"] as? Number
|
|
187
|
+
val minute = params["minute"] as? Number
|
|
188
|
+
|
|
189
|
+
if (weekday == null || hour == null || minute == null) {
|
|
190
|
+
throw InvalidArgumentException("Invalid value(s) provided for weekly trigger.")
|
|
191
|
+
}
|
|
192
|
+
WeeklyTrigger(
|
|
193
|
+
weekday.toInt(),
|
|
194
|
+
hour.toInt(),
|
|
195
|
+
minute.toInt(),
|
|
196
|
+
channelId
|
|
197
|
+
)
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
"yearly" -> {
|
|
201
|
+
val day = params["day"] as? Number
|
|
202
|
+
val month = params["month"] as? Number
|
|
203
|
+
val hour = params["hour"] as? Number
|
|
204
|
+
val minute = params["minute"] as? Number
|
|
205
|
+
|
|
206
|
+
if (day == null || month == null || hour == null || minute == null) {
|
|
207
|
+
throw InvalidArgumentException("Invalid value(s) provided for yearly trigger.")
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
YearlyTrigger(
|
|
211
|
+
day.toInt(),
|
|
212
|
+
month.toInt(),
|
|
213
|
+
hour.toInt(),
|
|
214
|
+
minute.toInt(),
|
|
215
|
+
channelId
|
|
216
|
+
)
|
|
217
|
+
}
|
|
218
|
+
|
|
219
|
+
"channel" -> ChannelAwareTrigger(channelId)
|
|
220
|
+
else -> throw InvalidArgumentException("Trigger of type: $type is not supported on Android.")
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
protected open fun createNotificationRequest(
|
|
225
|
+
identifier: String,
|
|
226
|
+
content: NotificationContent,
|
|
227
|
+
notificationTrigger: NotificationTrigger?
|
|
228
|
+
): NotificationRequest {
|
|
229
|
+
return NotificationRequest(identifier, content, notificationTrigger)
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
protected open fun serializeScheduledNotificationRequests(requests: Collection<NotificationRequest>): List<Bundle> {
|
|
233
|
+
return requests.map(NotificationSerializer::toBundle)
|
|
234
|
+
}
|
|
235
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
package expo.modules.notifications.notifications.triggers;
|
|
2
|
+
|
|
3
|
+
import android.os.Parcel;
|
|
4
|
+
|
|
5
|
+
import java.io.Serializable;
|
|
6
|
+
|
|
7
|
+
import androidx.annotation.Nullable;
|
|
8
|
+
import expo.modules.notifications.notifications.interfaces.NotificationTrigger;
|
|
9
|
+
|
|
10
|
+
public class ChannelAwareTrigger implements NotificationTrigger, Serializable {
|
|
11
|
+
@Nullable
|
|
12
|
+
private String mChannelId;
|
|
13
|
+
|
|
14
|
+
public ChannelAwareTrigger(@Nullable String channelId) {
|
|
15
|
+
mChannelId = channelId;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
public ChannelAwareTrigger(Parcel in) {
|
|
19
|
+
mChannelId = in.readString();
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
@Override
|
|
23
|
+
public int describeContents() {
|
|
24
|
+
return 0;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
@Override
|
|
28
|
+
public void writeToParcel(Parcel parcel, int i) {
|
|
29
|
+
parcel.writeString(mChannelId);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
@Nullable
|
|
33
|
+
@Override
|
|
34
|
+
public String getNotificationChannel() {
|
|
35
|
+
return mChannelId;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
public static final Creator<ChannelAwareTrigger> CREATOR = new Creator<ChannelAwareTrigger>() {
|
|
39
|
+
@Override
|
|
40
|
+
public ChannelAwareTrigger createFromParcel(Parcel in) {
|
|
41
|
+
return new ChannelAwareTrigger(in);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
@Override
|
|
45
|
+
public ChannelAwareTrigger[] newArray(int size) {
|
|
46
|
+
return new ChannelAwareTrigger[size];
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
}
|