@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
package/android/src/main/java/expo/modules/notifications/notifications/NotificationManager.java
ADDED
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
package expo.modules.notifications.notifications;
|
|
2
|
+
|
|
3
|
+
import expo.modules.core.interfaces.SingletonModule;
|
|
4
|
+
|
|
5
|
+
import java.lang.ref.WeakReference;
|
|
6
|
+
import java.util.ArrayList;
|
|
7
|
+
import java.util.Collection;
|
|
8
|
+
import java.util.Iterator;
|
|
9
|
+
import java.util.WeakHashMap;
|
|
10
|
+
|
|
11
|
+
import expo.modules.notifications.notifications.interfaces.NotificationListener;
|
|
12
|
+
import expo.modules.notifications.notifications.model.Notification;
|
|
13
|
+
import expo.modules.notifications.notifications.model.NotificationResponse;
|
|
14
|
+
import expo.modules.notifications.service.delegates.ExpoHandlingDelegate;
|
|
15
|
+
|
|
16
|
+
public class NotificationManager implements SingletonModule, expo.modules.notifications.notifications.interfaces.NotificationManager {
|
|
17
|
+
private static final String SINGLETON_NAME = "NotificationManager";
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* A weak map of listeners -> reference. Used to check quickly whether given listener
|
|
21
|
+
* is already registered and to iterate over on new token.
|
|
22
|
+
*/
|
|
23
|
+
private WeakHashMap<NotificationListener, WeakReference<NotificationListener>> mListenerReferenceMap;
|
|
24
|
+
private Collection<NotificationResponse> mPendingNotificationResponses = new ArrayList<>();
|
|
25
|
+
|
|
26
|
+
public NotificationManager() {
|
|
27
|
+
mListenerReferenceMap = new WeakHashMap<>();
|
|
28
|
+
|
|
29
|
+
// Registers this singleton instance in static ExpoHandlingDelegate listeners collection.
|
|
30
|
+
// Since it doesn't hold strong reference to the object this should be safe.
|
|
31
|
+
ExpoHandlingDelegate.Companion.addListener(this);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
@Override
|
|
35
|
+
public String getName() {
|
|
36
|
+
return SINGLETON_NAME;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Registers a {@link NotificationListener} by adding a {@link WeakReference} to
|
|
41
|
+
* the {@link NotificationManager#mListenerReferenceMap} map.
|
|
42
|
+
*
|
|
43
|
+
* @param listener Listener to be notified of new messages.
|
|
44
|
+
*/
|
|
45
|
+
@Override
|
|
46
|
+
public void addListener(NotificationListener listener) {
|
|
47
|
+
// Check if the listener is already registered
|
|
48
|
+
if (!mListenerReferenceMap.containsKey(listener)) {
|
|
49
|
+
WeakReference<NotificationListener> listenerReference = new WeakReference<>(listener);
|
|
50
|
+
mListenerReferenceMap.put(listener, listenerReference);
|
|
51
|
+
if (!mPendingNotificationResponses.isEmpty()) {
|
|
52
|
+
for (NotificationResponse pendingResponse : mPendingNotificationResponses) {
|
|
53
|
+
listener.onNotificationResponseReceived(pendingResponse);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Unregisters a {@link NotificationListener} by removing the {@link WeakReference} to the listener
|
|
61
|
+
* from the {@link NotificationManager#mListenerReferenceMap} map.
|
|
62
|
+
*
|
|
63
|
+
* @param listener Listener previously registered with {@link NotificationManager#addListener(NotificationListener)}.
|
|
64
|
+
*/
|
|
65
|
+
@Override
|
|
66
|
+
public void removeListener(NotificationListener listener) {
|
|
67
|
+
mListenerReferenceMap.remove(listener);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Used by {@link expo.modules.notifications.service.delegates.ExpoSchedulingDelegate} to notify of new messages.
|
|
72
|
+
* Calls {@link NotificationListener#onNotificationReceived(Notification)} on all values
|
|
73
|
+
* of {@link NotificationManager#mListenerReferenceMap}.
|
|
74
|
+
*
|
|
75
|
+
* @param notification Notification received
|
|
76
|
+
*/
|
|
77
|
+
public void onNotificationReceived(Notification notification) {
|
|
78
|
+
for (WeakReference<NotificationListener> listenerReference : mListenerReferenceMap.values()) {
|
|
79
|
+
NotificationListener listener = listenerReference.get();
|
|
80
|
+
if (listener != null) {
|
|
81
|
+
listener.onNotificationReceived(notification);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* Used by {@link expo.modules.notifications.service.delegates.ExpoSchedulingDelegate} to notify of new notification responses.
|
|
88
|
+
* Calls {@link NotificationListener#onNotificationResponseReceived(NotificationResponse)} on all values
|
|
89
|
+
* of {@link NotificationManager#mListenerReferenceMap}.
|
|
90
|
+
*
|
|
91
|
+
* @param response Notification response received
|
|
92
|
+
*/
|
|
93
|
+
public void onNotificationResponseReceived(NotificationResponse response) {
|
|
94
|
+
if (mListenerReferenceMap.isEmpty()) {
|
|
95
|
+
mPendingNotificationResponses.add(response);
|
|
96
|
+
} else {
|
|
97
|
+
for (WeakReference<NotificationListener> listenerReference : mListenerReferenceMap.values()) {
|
|
98
|
+
NotificationListener listener = listenerReference.get();
|
|
99
|
+
if (listener != null) {
|
|
100
|
+
listener.onNotificationResponseReceived(response);
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* Used by {@link expo.modules.notifications.service.delegates.ExpoSchedulingDelegate} to notify of message deletion event.
|
|
108
|
+
* Calls {@link NotificationListener#onNotificationsDropped()} on all values
|
|
109
|
+
* of {@link NotificationManager#mListenerReferenceMap}.
|
|
110
|
+
*/
|
|
111
|
+
public void onNotificationsDropped() {
|
|
112
|
+
for (WeakReference<NotificationListener> listenerReference : mListenerReferenceMap.values()) {
|
|
113
|
+
NotificationListener listener = listenerReference.get();
|
|
114
|
+
if (listener != null) {
|
|
115
|
+
listener.onNotificationsDropped();
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
package/android/src/main/java/expo/modules/notifications/notifications/NotificationSerializer.java
ADDED
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
package expo.modules.notifications.notifications;
|
|
2
|
+
|
|
3
|
+
import android.os.Build;
|
|
4
|
+
import android.os.Bundle;
|
|
5
|
+
|
|
6
|
+
import androidx.annotation.NonNull;
|
|
7
|
+
import androidx.annotation.Nullable;
|
|
8
|
+
|
|
9
|
+
import org.json.JSONArray;
|
|
10
|
+
import org.json.JSONObject;
|
|
11
|
+
import expo.modules.core.arguments.MapArguments;
|
|
12
|
+
|
|
13
|
+
import java.util.ArrayList;
|
|
14
|
+
import java.util.HashMap;
|
|
15
|
+
import java.util.Iterator;
|
|
16
|
+
import java.util.List;
|
|
17
|
+
import java.util.Map;
|
|
18
|
+
import java.util.Set;
|
|
19
|
+
|
|
20
|
+
import expo.modules.notifications.notifications.interfaces.NotificationTrigger;
|
|
21
|
+
import expo.modules.notifications.notifications.model.Notification;
|
|
22
|
+
import expo.modules.notifications.notifications.model.NotificationAction;
|
|
23
|
+
import expo.modules.notifications.notifications.model.NotificationCategory;
|
|
24
|
+
import expo.modules.notifications.notifications.model.NotificationContent;
|
|
25
|
+
import expo.modules.notifications.notifications.model.NotificationRequest;
|
|
26
|
+
import expo.modules.notifications.notifications.model.NotificationResponse;
|
|
27
|
+
import expo.modules.notifications.notifications.model.TextInputNotificationAction;
|
|
28
|
+
import expo.modules.notifications.notifications.model.TextInputNotificationResponse;
|
|
29
|
+
import expo.modules.notifications.notifications.model.triggers.FirebaseNotificationTrigger;
|
|
30
|
+
|
|
31
|
+
import expo.modules.notifications.notifications.triggers.ChannelAwareTrigger;
|
|
32
|
+
import expo.modules.notifications.notifications.triggers.DailyTrigger;
|
|
33
|
+
import expo.modules.notifications.notifications.triggers.DateTrigger;
|
|
34
|
+
import expo.modules.notifications.notifications.triggers.TimeIntervalTrigger;
|
|
35
|
+
import expo.modules.notifications.notifications.triggers.WeeklyTrigger;
|
|
36
|
+
import expo.modules.notifications.notifications.triggers.YearlyTrigger;
|
|
37
|
+
|
|
38
|
+
public class NotificationSerializer {
|
|
39
|
+
public static Bundle toBundle(NotificationResponse response) {
|
|
40
|
+
Bundle serializedResponse = new Bundle();
|
|
41
|
+
serializedResponse.putString("actionIdentifier", response.getActionIdentifier());
|
|
42
|
+
serializedResponse.putBundle("notification", toBundle(response.getNotification()));
|
|
43
|
+
if (response instanceof TextInputNotificationResponse) {
|
|
44
|
+
serializedResponse.putString("userText", ((TextInputNotificationResponse) response).getUserText());
|
|
45
|
+
}
|
|
46
|
+
return serializedResponse;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
public static Bundle toBundle(Notification notification) {
|
|
50
|
+
Bundle serializedNotification = new Bundle();
|
|
51
|
+
serializedNotification.putBundle("request", toBundle(notification.getNotificationRequest()));
|
|
52
|
+
serializedNotification.putLong("date", notification.getDate().getTime());
|
|
53
|
+
return serializedNotification;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
public static Bundle toBundle(NotificationRequest request) {
|
|
57
|
+
Bundle serializedRequest = new Bundle();
|
|
58
|
+
serializedRequest.putString("identifier", request.getIdentifier());
|
|
59
|
+
serializedRequest.putBundle("content", toBundle(request.getContent()));
|
|
60
|
+
serializedRequest.putBundle("trigger", toBundle(request.getTrigger()));
|
|
61
|
+
return serializedRequest;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
public static Bundle toBundle(NotificationContent content) {
|
|
65
|
+
Bundle serializedContent = new Bundle();
|
|
66
|
+
serializedContent.putString("title", content.getTitle());
|
|
67
|
+
serializedContent.putString("subtitle", content.getSubtitle());
|
|
68
|
+
serializedContent.putString("body", content.getText());
|
|
69
|
+
if (content.getColor() != null) {
|
|
70
|
+
serializedContent.putString("color", String.format("#%08X", content.getColor().intValue()));
|
|
71
|
+
}
|
|
72
|
+
serializedContent.putBundle("data", toBundle(content.getBody()));
|
|
73
|
+
if (content.getBadgeCount() != null) {
|
|
74
|
+
serializedContent.putInt("badge", content.getBadgeCount().intValue());
|
|
75
|
+
} else {
|
|
76
|
+
serializedContent.putString("badge", null);
|
|
77
|
+
}
|
|
78
|
+
if (content.shouldPlayDefaultSound()) {
|
|
79
|
+
serializedContent.putString("sound", "default");
|
|
80
|
+
} else if (content.getSound() != null) {
|
|
81
|
+
serializedContent.putString("sound", "custom");
|
|
82
|
+
} else {
|
|
83
|
+
serializedContent.putString("sound", null);
|
|
84
|
+
}
|
|
85
|
+
if (content.getPriority() != null) {
|
|
86
|
+
serializedContent.putString("priority", content.getPriority().getEnumValue());
|
|
87
|
+
}
|
|
88
|
+
if (content.getVibrationPattern() != null) {
|
|
89
|
+
double[] serializedVibrationPattern = new double[content.getVibrationPattern().length];
|
|
90
|
+
for (int i = 0; i < serializedVibrationPattern.length; i++) {
|
|
91
|
+
serializedVibrationPattern[i] = content.getVibrationPattern()[i];
|
|
92
|
+
}
|
|
93
|
+
serializedContent.putDoubleArray("vibrationPattern", serializedVibrationPattern);
|
|
94
|
+
}
|
|
95
|
+
serializedContent.putBoolean("autoDismiss", content.isAutoDismiss());
|
|
96
|
+
if (content.getCategoryId() != null) {
|
|
97
|
+
serializedContent.putString("categoryIdentifier", content.getCategoryId());
|
|
98
|
+
}
|
|
99
|
+
serializedContent.putBoolean("sticky", content.isSticky());
|
|
100
|
+
return serializedContent;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
public static Bundle toBundle(@Nullable JSONObject notification) {
|
|
104
|
+
if (notification == null) {
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
Map<String, Object> notificationMap = new HashMap<>(notification.length());
|
|
108
|
+
Iterator<String> keyIterator = notification.keys();
|
|
109
|
+
while (keyIterator.hasNext()) {
|
|
110
|
+
String key = keyIterator.next();
|
|
111
|
+
Object value = notification.opt(key);
|
|
112
|
+
if (value instanceof JSONObject) {
|
|
113
|
+
notificationMap.put(key, toBundle((JSONObject) value));
|
|
114
|
+
} else if (value instanceof JSONArray) {
|
|
115
|
+
notificationMap.put(key, toList((JSONArray) value));
|
|
116
|
+
} else if (JSONObject.NULL.equals(value)) {
|
|
117
|
+
notificationMap.put(key, null);
|
|
118
|
+
} else {
|
|
119
|
+
notificationMap.put(key, value);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
try {
|
|
123
|
+
return new MapArguments(notificationMap).toBundle();
|
|
124
|
+
} catch (NullPointerException e) {
|
|
125
|
+
// If a NullPointerException was thrown it most probably means
|
|
126
|
+
// that @unimodules/core is at < 5.1.1 where we introduced
|
|
127
|
+
// support for null values in MapArguments' map). Let's go through
|
|
128
|
+
// the map and remove the null values to be backwards compatible.
|
|
129
|
+
|
|
130
|
+
Set<String> keySet = notificationMap.keySet();
|
|
131
|
+
for (String key : keySet) {
|
|
132
|
+
if (notificationMap.get(key) == null) {
|
|
133
|
+
notificationMap.remove(key);
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
return new MapArguments(notificationMap).toBundle();
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
private static List<Object> toList(JSONArray array) {
|
|
141
|
+
List<Object> result = new ArrayList<>(array.length());
|
|
142
|
+
for (int i = 0; i < array.length(); i++) {
|
|
143
|
+
if (array.isNull(i)) {
|
|
144
|
+
result.add(null);
|
|
145
|
+
} else if (array.optJSONObject(i) != null) {
|
|
146
|
+
result.add(toBundle(array.optJSONObject(i)));
|
|
147
|
+
} else if (array.optJSONArray(i) != null) {
|
|
148
|
+
result.add(toList(array.optJSONArray(i)));
|
|
149
|
+
} else {
|
|
150
|
+
result.add(array.opt(i));
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
return result;
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
private static Bundle toBundle(@Nullable NotificationTrigger trigger) {
|
|
157
|
+
if (trigger == null) {
|
|
158
|
+
return null;
|
|
159
|
+
}
|
|
160
|
+
Bundle bundle = new Bundle();
|
|
161
|
+
if (trigger instanceof FirebaseNotificationTrigger) {
|
|
162
|
+
bundle.putString("type", "push");
|
|
163
|
+
bundle.putBundle("remoteMessage", RemoteMessageSerializer.toBundle(((FirebaseNotificationTrigger) trigger).getRemoteMessage()));
|
|
164
|
+
} else if (trigger instanceof TimeIntervalTrigger) {
|
|
165
|
+
bundle.putString("type", "timeInterval");
|
|
166
|
+
bundle.putBoolean("repeats", ((TimeIntervalTrigger) trigger).isRepeating());
|
|
167
|
+
bundle.putLong("seconds", ((TimeIntervalTrigger) trigger).getTimeInterval());
|
|
168
|
+
} else if (trigger instanceof DateTrigger) {
|
|
169
|
+
bundle.putString("type", "date");
|
|
170
|
+
bundle.putBoolean("repeats", false);
|
|
171
|
+
bundle.putLong("value", ((DateTrigger) trigger).getTriggerDate().getTime());
|
|
172
|
+
} else if (trigger instanceof DailyTrigger) {
|
|
173
|
+
bundle.putString("type", "daily");
|
|
174
|
+
bundle.putInt("hour", ((DailyTrigger) trigger).getHour());
|
|
175
|
+
bundle.putInt("minute", ((DailyTrigger) trigger).getMinute());
|
|
176
|
+
} else if (trigger instanceof WeeklyTrigger) {
|
|
177
|
+
bundle.putString("type", "weekly");
|
|
178
|
+
bundle.putInt("weekday", ((WeeklyTrigger) trigger).getWeekday());
|
|
179
|
+
bundle.putInt("hour", ((WeeklyTrigger) trigger).getHour());
|
|
180
|
+
bundle.putInt("minute", ((WeeklyTrigger) trigger).getMinute());
|
|
181
|
+
} else if (trigger instanceof YearlyTrigger) {
|
|
182
|
+
bundle.putString("type", "yearly");
|
|
183
|
+
bundle.putInt("day", ((YearlyTrigger) trigger).getDay());
|
|
184
|
+
bundle.putInt("month", ((YearlyTrigger) trigger).getMonth());
|
|
185
|
+
bundle.putInt("hour", ((YearlyTrigger) trigger).getHour());
|
|
186
|
+
bundle.putInt("minute", ((YearlyTrigger) trigger).getMinute());
|
|
187
|
+
} else {
|
|
188
|
+
bundle.putString("type", "unknown");
|
|
189
|
+
}
|
|
190
|
+
bundle.putString("channelId", getChannelId(trigger));
|
|
191
|
+
|
|
192
|
+
return bundle;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
@Nullable
|
|
196
|
+
private static String getChannelId(NotificationTrigger trigger) {
|
|
197
|
+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
|
198
|
+
return trigger.getNotificationChannel();
|
|
199
|
+
}
|
|
200
|
+
return null;
|
|
201
|
+
}
|
|
202
|
+
}
|
package/android/src/main/java/expo/modules/notifications/notifications/RemoteMessageSerializer.java
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
package expo.modules.notifications.notifications;
|
|
2
|
+
|
|
3
|
+
import android.os.Bundle;
|
|
4
|
+
|
|
5
|
+
import com.google.firebase.messaging.RemoteMessage;
|
|
6
|
+
|
|
7
|
+
import java.util.Map;
|
|
8
|
+
|
|
9
|
+
import androidx.annotation.Nullable;
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Serializes all the information available in {@link RemoteMessage}
|
|
13
|
+
* to {@link Bundle}.
|
|
14
|
+
*/
|
|
15
|
+
public class RemoteMessageSerializer {
|
|
16
|
+
/**
|
|
17
|
+
* Serializes all the information available in {@link RemoteMessage}
|
|
18
|
+
*
|
|
19
|
+
* @param message {@link RemoteMessage} to serialize
|
|
20
|
+
* @return Serialized message
|
|
21
|
+
*/
|
|
22
|
+
public static Bundle toBundle(RemoteMessage message) {
|
|
23
|
+
Bundle serializedMessage = new Bundle();
|
|
24
|
+
serializedMessage.putString("collapseKey", message.getCollapseKey());
|
|
25
|
+
serializedMessage.putBundle("data", toBundle(message.getData()));
|
|
26
|
+
serializedMessage.putString("from", message.getFrom());
|
|
27
|
+
serializedMessage.putString("messageId", message.getMessageId());
|
|
28
|
+
serializedMessage.putString("messageType", message.getMessageType());
|
|
29
|
+
serializedMessage.putBundle("notification", toBundle(message.getNotification()));
|
|
30
|
+
serializedMessage.putInt("originalPriority", message.getOriginalPriority());
|
|
31
|
+
serializedMessage.putInt("priority", message.getPriority());
|
|
32
|
+
serializedMessage.putLong("sentTime", message.getSentTime());
|
|
33
|
+
serializedMessage.putString("to", message.getTo());
|
|
34
|
+
serializedMessage.putInt("ttl", message.getTtl());
|
|
35
|
+
return serializedMessage;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
private static Bundle toBundle(Map<String, String> data) {
|
|
39
|
+
Bundle serializedData = new Bundle();
|
|
40
|
+
for (Map.Entry<String, String> dataEntry : data.entrySet()) {
|
|
41
|
+
serializedData.putString(dataEntry.getKey(), dataEntry.getValue());
|
|
42
|
+
}
|
|
43
|
+
return serializedData;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
private static Bundle toBundle(@Nullable RemoteMessage.Notification notification) {
|
|
47
|
+
if (notification == null) {
|
|
48
|
+
return null;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
Bundle serializedNotification = new Bundle();
|
|
52
|
+
serializedNotification.putString("body", notification.getBody());
|
|
53
|
+
serializedNotification.putStringArray("bodyLocalizationArgs", notification.getBodyLocalizationArgs());
|
|
54
|
+
serializedNotification.putString("bodyLocalizationKey", notification.getBodyLocalizationKey());
|
|
55
|
+
serializedNotification.putString("channelId", notification.getChannelId());
|
|
56
|
+
serializedNotification.putString("clickAction", notification.getClickAction());
|
|
57
|
+
serializedNotification.putString("color", notification.getColor());
|
|
58
|
+
serializedNotification.putBoolean("usesDefaultLightSettings", notification.getDefaultLightSettings());
|
|
59
|
+
serializedNotification.putBoolean("usesDefaultSound", notification.getDefaultSound());
|
|
60
|
+
serializedNotification.putBoolean("usesDefaultVibrateSettings", notification.getDefaultVibrateSettings());
|
|
61
|
+
if (notification.getEventTime() != null) {
|
|
62
|
+
serializedNotification.putLong("eventTime", notification.getEventTime());
|
|
63
|
+
} else {
|
|
64
|
+
serializedNotification.putString("eventTime", null);
|
|
65
|
+
}
|
|
66
|
+
serializedNotification.putString("icon", notification.getIcon());
|
|
67
|
+
if (notification.getImageUrl() != null) {
|
|
68
|
+
serializedNotification.putString("imageUrl", notification.getImageUrl().toString());
|
|
69
|
+
} else {
|
|
70
|
+
serializedNotification.putString("imageUrl", null);
|
|
71
|
+
}
|
|
72
|
+
serializedNotification.putIntArray("lightSettings", notification.getLightSettings());
|
|
73
|
+
if (notification.getLink() != null) {
|
|
74
|
+
serializedNotification.putString("link", notification.getLink().toString());
|
|
75
|
+
} else {
|
|
76
|
+
serializedNotification.putString("link", null);
|
|
77
|
+
}
|
|
78
|
+
serializedNotification.putBoolean("localOnly", notification.getLocalOnly());
|
|
79
|
+
if (notification.getNotificationCount() != null) {
|
|
80
|
+
serializedNotification.putInt("notificationCount", notification.getNotificationCount());
|
|
81
|
+
} else {
|
|
82
|
+
serializedNotification.putString("notificationCount", null);
|
|
83
|
+
}
|
|
84
|
+
if (notification.getNotificationPriority() != null) {
|
|
85
|
+
serializedNotification.putInt("notificationPriority", notification.getNotificationPriority());
|
|
86
|
+
} else {
|
|
87
|
+
serializedNotification.putString("notificationPriority", null);
|
|
88
|
+
}
|
|
89
|
+
serializedNotification.putString("sound", notification.getSound());
|
|
90
|
+
serializedNotification.putBoolean("sticky", notification.getSticky());
|
|
91
|
+
serializedNotification.putString("tag", notification.getTag());
|
|
92
|
+
serializedNotification.putString("ticker", notification.getTicker());
|
|
93
|
+
serializedNotification.putString("title", notification.getTitle());
|
|
94
|
+
serializedNotification.putStringArray("titleLocalizationArgs", notification.getTitleLocalizationArgs());
|
|
95
|
+
serializedNotification.putString("titleLocalizationKey", notification.getTitleLocalizationKey());
|
|
96
|
+
serializedNotification.putLongArray("vibrateTimings", notification.getVibrateTimings());
|
|
97
|
+
if (notification.getVisibility() != null) {
|
|
98
|
+
serializedNotification.putInt("visibility", notification.getVisibility());
|
|
99
|
+
} else {
|
|
100
|
+
serializedNotification.putString("visibility", null);
|
|
101
|
+
}
|
|
102
|
+
return serializedNotification;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
package expo.modules.notifications.notifications;
|
|
2
|
+
|
|
3
|
+
import android.content.ContentResolver;
|
|
4
|
+
import android.content.Context;
|
|
5
|
+
import android.net.Uri;
|
|
6
|
+
import android.provider.Settings;
|
|
7
|
+
|
|
8
|
+
import androidx.annotation.Nullable;
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* A shared logic between ContentBuilders ({@link ArgumentsNotificationContentBuilder}
|
|
12
|
+
* and {@link JSONNotificationContentBuilder}) for resolving sounds based on the "sound" property.
|
|
13
|
+
*/
|
|
14
|
+
public class SoundResolver {
|
|
15
|
+
private Context mContext;
|
|
16
|
+
|
|
17
|
+
public SoundResolver(Context context) {
|
|
18
|
+
mContext = context;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* For given filename tries to resolve a raw resource by basename.
|
|
23
|
+
*
|
|
24
|
+
* @param filename A sound's filename
|
|
25
|
+
* @return null if there was no sound found for the filename or a {@link Uri} to the raw resource
|
|
26
|
+
* if one could be found.
|
|
27
|
+
*/
|
|
28
|
+
@Nullable
|
|
29
|
+
public Uri resolve(@Nullable String filename) {
|
|
30
|
+
if (filename == null || filename.length() == 0) {
|
|
31
|
+
return null;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
String packageName = mContext.getPackageName();
|
|
35
|
+
String resourceName = filenameToBasename(filename);
|
|
36
|
+
int resourceId = mContext.getResources().getIdentifier(resourceName, "raw", packageName);
|
|
37
|
+
// If resourceId is 0, then the resource does not exist.
|
|
38
|
+
// Returning null falls back to using a default sound.
|
|
39
|
+
if (resourceId != 0) {
|
|
40
|
+
return new Uri.Builder()
|
|
41
|
+
.scheme(ContentResolver.SCHEME_ANDROID_RESOURCE)
|
|
42
|
+
.authority(packageName)
|
|
43
|
+
.appendPath("raw")
|
|
44
|
+
.appendPath(resourceName)
|
|
45
|
+
.build();
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
return Settings.System.DEFAULT_NOTIFICATION_URI;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
private String filenameToBasename(String filename) {
|
|
52
|
+
if (!filename.contains(".")) {
|
|
53
|
+
return filename;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
return filename.substring(0, filename.lastIndexOf('.'));
|
|
57
|
+
}
|
|
58
|
+
}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
package expo.modules.notifications.notifications.background;
|
|
2
|
+
|
|
3
|
+
import android.app.job.JobParameters;
|
|
4
|
+
import android.app.job.JobService;
|
|
5
|
+
import android.content.Context;
|
|
6
|
+
import android.os.Bundle;
|
|
7
|
+
import android.os.PersistableBundle;
|
|
8
|
+
import android.util.Log;
|
|
9
|
+
|
|
10
|
+
import org.json.JSONException;
|
|
11
|
+
import org.json.JSONObject;
|
|
12
|
+
|
|
13
|
+
import java.util.Collections;
|
|
14
|
+
import java.util.List;
|
|
15
|
+
import java.util.Map;
|
|
16
|
+
|
|
17
|
+
import expo.modules.notifications.notifications.NotificationSerializer;
|
|
18
|
+
import expo.modules.notifications.service.delegates.FirebaseMessagingDelegate;
|
|
19
|
+
import expo.modules.interfaces.taskManager.TaskConsumer;
|
|
20
|
+
import expo.modules.interfaces.taskManager.TaskConsumerInterface;
|
|
21
|
+
import expo.modules.interfaces.taskManager.TaskExecutionCallback;
|
|
22
|
+
import expo.modules.interfaces.taskManager.TaskInterface;
|
|
23
|
+
import expo.modules.interfaces.taskManager.TaskManagerUtilsInterface;
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Represents a task to be run when the app is receives a remote push
|
|
27
|
+
* notification. Map of current tasks is maintained in {@link FirebaseMessagingDelegate}.
|
|
28
|
+
*/
|
|
29
|
+
public class BackgroundRemoteNotificationTaskConsumer extends TaskConsumer implements TaskConsumerInterface {
|
|
30
|
+
private static final String TAG = BackgroundRemoteNotificationTaskConsumer.class.getSimpleName();
|
|
31
|
+
private static final String NOTIFICATION_KEY = "notification";
|
|
32
|
+
|
|
33
|
+
private TaskInterface mTask;
|
|
34
|
+
|
|
35
|
+
public BackgroundRemoteNotificationTaskConsumer(Context context, TaskManagerUtilsInterface taskManagerUtils) {
|
|
36
|
+
super(context, taskManagerUtils);
|
|
37
|
+
FirebaseMessagingDelegate.Companion.addBackgroundTaskConsumer(this);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
//region TaskConsumerInterface
|
|
41
|
+
|
|
42
|
+
@Override
|
|
43
|
+
public String taskType() {
|
|
44
|
+
return "remote-notification";
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
@Override
|
|
48
|
+
public void didRegister(TaskInterface task) {
|
|
49
|
+
mTask = task;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
@Override
|
|
53
|
+
public void didUnregister() {
|
|
54
|
+
mTask = null;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
public void scheduleJob(Bundle bundle) {
|
|
58
|
+
Context context = getContext();
|
|
59
|
+
|
|
60
|
+
if (context != null && mTask != null) {
|
|
61
|
+
PersistableBundle data = new PersistableBundle();
|
|
62
|
+
// Bundles are not persistable, so let's convert to a JSON string
|
|
63
|
+
data.putString(NOTIFICATION_KEY, bundleToJson(bundle).toString());
|
|
64
|
+
getTaskManagerUtils().scheduleJob(context, mTask, Collections.singletonList(data));
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
@Override
|
|
69
|
+
public boolean didExecuteJob(final JobService jobService, final JobParameters params) {
|
|
70
|
+
if (mTask == null) {
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
List<PersistableBundle> data = getTaskManagerUtils().extractDataFromJobParams(params);
|
|
75
|
+
|
|
76
|
+
for (PersistableBundle item : data) {
|
|
77
|
+
Bundle bundle = new Bundle();
|
|
78
|
+
bundle.putBundle(NOTIFICATION_KEY, jsonStringToBundle(item.getString(NOTIFICATION_KEY)));
|
|
79
|
+
mTask.execute(bundle, null, new TaskExecutionCallback() {
|
|
80
|
+
@Override
|
|
81
|
+
public void onFinished(Map<String, Object> response) {
|
|
82
|
+
jobService.jobFinished(params, false);
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// Returning `true` indicates that the job is still running, but in async mode.
|
|
88
|
+
// In that case we're obligated to call `jobService.jobFinished` as soon as the async block finishes.
|
|
89
|
+
return true;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
//endregion
|
|
93
|
+
//region private methods
|
|
94
|
+
|
|
95
|
+
private static JSONObject bundleToJson(Bundle bundle) {
|
|
96
|
+
JSONObject json = new JSONObject();
|
|
97
|
+
for (String key : bundle.keySet()) {
|
|
98
|
+
try {
|
|
99
|
+
if (bundle.get(key) instanceof Bundle) {
|
|
100
|
+
json.put(key, bundleToJson((Bundle) bundle.get(key)));
|
|
101
|
+
} else {
|
|
102
|
+
json.put(key, JSONObject.wrap(bundle.get(key)));
|
|
103
|
+
}
|
|
104
|
+
} catch(JSONException e) {
|
|
105
|
+
Log.e("expo-notifications", "Could not create JSON object from notification bundle. " + e.getMessage());
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return json;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
private static Bundle jsonStringToBundle(String jsonString) {
|
|
112
|
+
Bundle bundle = new Bundle();
|
|
113
|
+
try {
|
|
114
|
+
JSONObject jsonObject = new JSONObject(jsonString);
|
|
115
|
+
bundle = NotificationSerializer.toBundle(jsonObject);
|
|
116
|
+
} catch (JSONException e) {
|
|
117
|
+
Log.e("expo-notifications", "Could not parse notification from JSON string. " + e.getMessage());
|
|
118
|
+
}
|
|
119
|
+
return bundle;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
//endregion
|
|
123
|
+
}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
package expo.modules.notifications.notifications.background
|
|
2
|
+
|
|
3
|
+
import expo.modules.interfaces.taskManager.TaskManagerInterface
|
|
4
|
+
import expo.modules.kotlin.modules.Module
|
|
5
|
+
import expo.modules.kotlin.modules.ModuleDefinition
|
|
6
|
+
import expo.modules.notifications.ModuleNotFoundException
|
|
7
|
+
|
|
8
|
+
class ExpoBackgroundNotificationTasksModule : Module() {
|
|
9
|
+
private lateinit var taskManager: TaskManagerInterface
|
|
10
|
+
|
|
11
|
+
override fun definition() = ModuleDefinition {
|
|
12
|
+
Name("ExpoBackgroundNotificationTasksModule")
|
|
13
|
+
OnCreate {
|
|
14
|
+
taskManager = appContext.legacyModule()
|
|
15
|
+
?: throw ModuleNotFoundException(TaskManagerInterface::class)
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
AsyncFunction("registerTaskAsync") { taskName: String ->
|
|
19
|
+
taskManager.registerTask(
|
|
20
|
+
taskName,
|
|
21
|
+
BackgroundRemoteNotificationTaskConsumer::class.java,
|
|
22
|
+
emptyMap()
|
|
23
|
+
)
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
AsyncFunction("unregisterTaskAsync") { taskName: String ->
|
|
27
|
+
taskManager.unregisterTask(
|
|
28
|
+
taskName,
|
|
29
|
+
BackgroundRemoteNotificationTaskConsumer::class.java
|
|
30
|
+
)
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|