@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,780 @@
|
|
|
1
|
+
package expo.modules.notifications.service
|
|
2
|
+
|
|
3
|
+
import android.app.PendingIntent
|
|
4
|
+
import android.content.BroadcastReceiver
|
|
5
|
+
import android.content.ComponentName
|
|
6
|
+
import android.content.Context
|
|
7
|
+
import android.content.Intent
|
|
8
|
+
import android.content.pm.ActivityInfo
|
|
9
|
+
import android.net.Uri
|
|
10
|
+
import android.os.*
|
|
11
|
+
import android.util.Log
|
|
12
|
+
import androidx.core.app.RemoteInput
|
|
13
|
+
import expo.modules.notifications.notifications.model.*
|
|
14
|
+
import expo.modules.notifications.service.delegates.ExpoCategoriesDelegate
|
|
15
|
+
import expo.modules.notifications.service.delegates.ExpoHandlingDelegate
|
|
16
|
+
import expo.modules.notifications.service.delegates.ExpoPresentationDelegate
|
|
17
|
+
import expo.modules.notifications.service.delegates.ExpoSchedulingDelegate
|
|
18
|
+
import expo.modules.notifications.service.interfaces.CategoriesDelegate
|
|
19
|
+
import expo.modules.notifications.service.interfaces.HandlingDelegate
|
|
20
|
+
import expo.modules.notifications.service.interfaces.PresentationDelegate
|
|
21
|
+
import expo.modules.notifications.service.interfaces.SchedulingDelegate
|
|
22
|
+
import kotlin.concurrent.thread
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Subclass of FirebaseMessagingService, central dispatcher for all the notifications-related actions.
|
|
26
|
+
*/
|
|
27
|
+
open class NotificationsService : BroadcastReceiver() {
|
|
28
|
+
companion object {
|
|
29
|
+
const val NOTIFICATION_EVENT_ACTION = "expo.modules.notifications.NOTIFICATION_EVENT"
|
|
30
|
+
val SETUP_ACTIONS = listOf(
|
|
31
|
+
Intent.ACTION_BOOT_COMPLETED,
|
|
32
|
+
Intent.ACTION_REBOOT,
|
|
33
|
+
Intent.ACTION_MY_PACKAGE_REPLACED,
|
|
34
|
+
"android.intent.action.QUICKBOOT_POWERON",
|
|
35
|
+
"com.htc.intent.action.QUICKBOOT_POWERON"
|
|
36
|
+
)
|
|
37
|
+
const val USER_TEXT_RESPONSE_KEY = "userTextResponse"
|
|
38
|
+
|
|
39
|
+
// Event types
|
|
40
|
+
private const val GET_ALL_DISPLAYED_TYPE = "getAllDisplayed"
|
|
41
|
+
private const val PRESENT_TYPE = "present"
|
|
42
|
+
private const val DISMISS_SELECTED_TYPE = "dismissSelected"
|
|
43
|
+
private const val DISMISS_ALL_TYPE = "dismissAll"
|
|
44
|
+
private const val RECEIVE_TYPE = "receive"
|
|
45
|
+
private const val RECEIVE_RESPONSE_TYPE = "receiveResponse"
|
|
46
|
+
private const val DROPPED_TYPE = "dropped"
|
|
47
|
+
private const val GET_CATEGORIES_TYPE = "getCategories"
|
|
48
|
+
private const val SET_CATEGORY_TYPE = "setCategory"
|
|
49
|
+
private const val DELETE_CATEGORY_TYPE = "deleteCategory"
|
|
50
|
+
private const val SCHEDULE_TYPE = "schedule"
|
|
51
|
+
private const val TRIGGER_TYPE = "trigger"
|
|
52
|
+
private const val GET_ALL_SCHEDULED_TYPE = "getAllScheduled"
|
|
53
|
+
private const val GET_SCHEDULED_TYPE = "getScheduled"
|
|
54
|
+
private const val REMOVE_SELECTED_TYPE = "removeSelected"
|
|
55
|
+
private const val REMOVE_ALL_TYPE = "removeAll"
|
|
56
|
+
|
|
57
|
+
// Messages parts
|
|
58
|
+
const val SUCCESS_CODE = 0
|
|
59
|
+
const val ERROR_CODE = 1
|
|
60
|
+
const val EVENT_TYPE_KEY = "type"
|
|
61
|
+
const val EXCEPTION_KEY = "exception"
|
|
62
|
+
const val RECEIVER_KEY = "receiver"
|
|
63
|
+
|
|
64
|
+
// Specific messages parts
|
|
65
|
+
const val NOTIFICATION_KEY = "notification"
|
|
66
|
+
const val NOTIFICATION_RESPONSE_KEY = "notificationResponse"
|
|
67
|
+
const val TEXT_INPUT_NOTIFICATION_RESPONSE_KEY = "textInputNotificationResponse"
|
|
68
|
+
const val SUCCEEDED_KEY = "succeeded"
|
|
69
|
+
const val IDENTIFIERS_KEY = "identifiers"
|
|
70
|
+
const val IDENTIFIER_KEY = "identifier"
|
|
71
|
+
const val NOTIFICATION_BEHAVIOR_KEY = "notificationBehavior"
|
|
72
|
+
const val NOTIFICATIONS_KEY = "notifications"
|
|
73
|
+
const val NOTIFICATION_CATEGORY_KEY = "notificationCategory"
|
|
74
|
+
const val NOTIFICATION_CATEGORIES_KEY = "notificationCategories"
|
|
75
|
+
const val NOTIFICATION_REQUEST_KEY = "notificationRequest"
|
|
76
|
+
const val NOTIFICATION_REQUESTS_KEY = "notificationRequests"
|
|
77
|
+
const val NOTIFICATION_ACTION_KEY = "notificationAction"
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* A helper function for dispatching a "fetch all displayed notifications" command to the service.
|
|
81
|
+
*
|
|
82
|
+
* @param context Context where to start the service.
|
|
83
|
+
* @param receiver A receiver to which send the notifications
|
|
84
|
+
*/
|
|
85
|
+
fun getAllPresented(context: Context, receiver: ResultReceiver? = null) {
|
|
86
|
+
doWork(
|
|
87
|
+
context,
|
|
88
|
+
Intent(NOTIFICATION_EVENT_ACTION, getUriBuilder().build()).also {
|
|
89
|
+
it.putExtra(EVENT_TYPE_KEY, GET_ALL_DISPLAYED_TYPE)
|
|
90
|
+
it.putExtra(RECEIVER_KEY, receiver)
|
|
91
|
+
}
|
|
92
|
+
)
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
/**
|
|
96
|
+
* A helper function for dispatching a "present notification" command to the service.
|
|
97
|
+
*
|
|
98
|
+
* @param context Context where to start the service.
|
|
99
|
+
* @param notification Notification to present
|
|
100
|
+
* @param behavior Allowed notification behavior
|
|
101
|
+
* @param receiver A receiver to which send the result of presenting the notification
|
|
102
|
+
*/
|
|
103
|
+
fun present(context: Context, notification: Notification, behavior: NotificationBehavior? = null, receiver: ResultReceiver? = null) {
|
|
104
|
+
val data = getUriBuilderForIdentifier(notification.notificationRequest.identifier).appendPath("present").build()
|
|
105
|
+
doWork(
|
|
106
|
+
context,
|
|
107
|
+
Intent(NOTIFICATION_EVENT_ACTION, data).also { intent ->
|
|
108
|
+
intent.putExtra(EVENT_TYPE_KEY, PRESENT_TYPE)
|
|
109
|
+
intent.putExtra(NOTIFICATION_KEY, notification)
|
|
110
|
+
intent.putExtra(NOTIFICATION_BEHAVIOR_KEY, behavior)
|
|
111
|
+
intent.putExtra(RECEIVER_KEY, receiver)
|
|
112
|
+
}
|
|
113
|
+
)
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
/**
|
|
117
|
+
* A helper function for dispatching a "notification received" command to the service.
|
|
118
|
+
*
|
|
119
|
+
* @param context Context where to start the service.
|
|
120
|
+
* @param notification Notification received
|
|
121
|
+
* @param receiver Result receiver
|
|
122
|
+
*/
|
|
123
|
+
fun receive(context: Context, notification: Notification, receiver: ResultReceiver? = null) {
|
|
124
|
+
val data = getUriBuilderForIdentifier(notification.notificationRequest.identifier).appendPath("receive").build()
|
|
125
|
+
doWork(
|
|
126
|
+
context,
|
|
127
|
+
Intent(NOTIFICATION_EVENT_ACTION, data).also { intent ->
|
|
128
|
+
intent.putExtra(EVENT_TYPE_KEY, RECEIVE_TYPE)
|
|
129
|
+
intent.putExtra(NOTIFICATION_KEY, notification)
|
|
130
|
+
intent.putExtra(RECEIVER_KEY, receiver)
|
|
131
|
+
}
|
|
132
|
+
)
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* A helper function for dispatching a "dismiss notification" command to the service.
|
|
137
|
+
*
|
|
138
|
+
* @param context Context where to start the service.
|
|
139
|
+
* @param identifier Notification identifier
|
|
140
|
+
* @param receiver A receiver to which send the result of the action
|
|
141
|
+
*/
|
|
142
|
+
fun dismiss(context: Context, identifiers: Array<String>, receiver: ResultReceiver? = null) {
|
|
143
|
+
val data = getUriBuilder().appendPath("dismiss").build()
|
|
144
|
+
doWork(
|
|
145
|
+
context,
|
|
146
|
+
Intent(NOTIFICATION_EVENT_ACTION, data).also { intent ->
|
|
147
|
+
intent.putExtra(EVENT_TYPE_KEY, DISMISS_SELECTED_TYPE)
|
|
148
|
+
intent.putExtra(IDENTIFIERS_KEY, identifiers)
|
|
149
|
+
intent.putExtra(RECEIVER_KEY, receiver)
|
|
150
|
+
}
|
|
151
|
+
)
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* A helper function for dispatching a "dismiss notification" command to the service.
|
|
156
|
+
*
|
|
157
|
+
* @param context Context where to start the service.
|
|
158
|
+
* @param receiver A receiver to which send the result of the action
|
|
159
|
+
*/
|
|
160
|
+
fun dismissAll(context: Context, receiver: ResultReceiver? = null) {
|
|
161
|
+
val data = getUriBuilder().appendPath("dismiss").build()
|
|
162
|
+
doWork(
|
|
163
|
+
context,
|
|
164
|
+
Intent(NOTIFICATION_EVENT_ACTION, data).also { intent ->
|
|
165
|
+
intent.putExtra(EVENT_TYPE_KEY, DISMISS_ALL_TYPE)
|
|
166
|
+
intent.putExtra(RECEIVER_KEY, receiver)
|
|
167
|
+
}
|
|
168
|
+
)
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* A helper function for dispatching a "notifications dropped" command to the service.
|
|
173
|
+
*
|
|
174
|
+
* @param context Context where to start the service.
|
|
175
|
+
*/
|
|
176
|
+
fun handleDropped(context: Context) {
|
|
177
|
+
doWork(
|
|
178
|
+
context,
|
|
179
|
+
Intent(NOTIFICATION_EVENT_ACTION).also { intent ->
|
|
180
|
+
intent.putExtra(EVENT_TYPE_KEY, DROPPED_TYPE)
|
|
181
|
+
}
|
|
182
|
+
)
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* A helper function for dispatching a "get notification categories" command to the service.
|
|
187
|
+
*
|
|
188
|
+
* @param context Context where to start the service.
|
|
189
|
+
*/
|
|
190
|
+
fun getCategories(context: Context, receiver: ResultReceiver? = null) {
|
|
191
|
+
doWork(
|
|
192
|
+
context,
|
|
193
|
+
Intent(
|
|
194
|
+
NOTIFICATION_EVENT_ACTION,
|
|
195
|
+
getUriBuilder()
|
|
196
|
+
.appendPath("categories")
|
|
197
|
+
.build()
|
|
198
|
+
).also {
|
|
199
|
+
it.putExtra(EVENT_TYPE_KEY, GET_CATEGORIES_TYPE)
|
|
200
|
+
it.putExtra(RECEIVER_KEY, receiver)
|
|
201
|
+
}
|
|
202
|
+
)
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
/**
|
|
206
|
+
* A helper function for dispatching a "set notification category" command to the service.
|
|
207
|
+
*
|
|
208
|
+
* @param context Context where to start the service.
|
|
209
|
+
* @param category Notification category to be set
|
|
210
|
+
*/
|
|
211
|
+
fun setCategory(context: Context, category: NotificationCategory, receiver: ResultReceiver? = null) {
|
|
212
|
+
doWork(
|
|
213
|
+
context,
|
|
214
|
+
Intent(
|
|
215
|
+
NOTIFICATION_EVENT_ACTION,
|
|
216
|
+
getUriBuilder()
|
|
217
|
+
.appendPath("categories")
|
|
218
|
+
.appendPath(category.identifier)
|
|
219
|
+
.build()
|
|
220
|
+
).also {
|
|
221
|
+
it.putExtra(EVENT_TYPE_KEY, SET_CATEGORY_TYPE)
|
|
222
|
+
it.putExtra(NOTIFICATION_CATEGORY_KEY, category as Parcelable)
|
|
223
|
+
it.putExtra(RECEIVER_KEY, receiver)
|
|
224
|
+
}
|
|
225
|
+
)
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
/**
|
|
229
|
+
* A helper function for dispatching a "delete notification category" command to the service.
|
|
230
|
+
*
|
|
231
|
+
* @param context Context where to start the service.
|
|
232
|
+
* @param identifier Category Identifier
|
|
233
|
+
*/
|
|
234
|
+
fun deleteCategory(context: Context, identifier: String, receiver: ResultReceiver? = null) {
|
|
235
|
+
doWork(
|
|
236
|
+
context,
|
|
237
|
+
Intent(
|
|
238
|
+
NOTIFICATION_EVENT_ACTION,
|
|
239
|
+
getUriBuilder()
|
|
240
|
+
.appendPath("categories")
|
|
241
|
+
.appendPath(identifier)
|
|
242
|
+
.build()
|
|
243
|
+
).also {
|
|
244
|
+
it.putExtra(EVENT_TYPE_KEY, DELETE_CATEGORY_TYPE)
|
|
245
|
+
it.putExtra(IDENTIFIER_KEY, identifier)
|
|
246
|
+
it.putExtra(RECEIVER_KEY, receiver)
|
|
247
|
+
}
|
|
248
|
+
)
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
/**
|
|
252
|
+
* Fetches all scheduled notifications asynchronously.
|
|
253
|
+
*
|
|
254
|
+
* @param context Context this is being called from
|
|
255
|
+
* @param resultReceiver Receiver to be called with the results
|
|
256
|
+
*/
|
|
257
|
+
fun getAllScheduledNotifications(context: Context, resultReceiver: ResultReceiver? = null) {
|
|
258
|
+
doWork(
|
|
259
|
+
context,
|
|
260
|
+
Intent(NOTIFICATION_EVENT_ACTION).also { intent ->
|
|
261
|
+
intent.putExtra(EVENT_TYPE_KEY, GET_ALL_SCHEDULED_TYPE)
|
|
262
|
+
intent.putExtra(RECEIVER_KEY, resultReceiver)
|
|
263
|
+
}
|
|
264
|
+
)
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
/**
|
|
268
|
+
* Fetches scheduled notification asynchronously.
|
|
269
|
+
*
|
|
270
|
+
* @param context Context this is being called from
|
|
271
|
+
* @param identifier Identifier of the notification to be fetched
|
|
272
|
+
* @param resultReceiver Receiver to be called with the results
|
|
273
|
+
*/
|
|
274
|
+
fun getScheduledNotification(context: Context, identifier: String, resultReceiver: ResultReceiver? = null) {
|
|
275
|
+
doWork(
|
|
276
|
+
context,
|
|
277
|
+
Intent(
|
|
278
|
+
NOTIFICATION_EVENT_ACTION,
|
|
279
|
+
getUriBuilder()
|
|
280
|
+
.appendPath("scheduled")
|
|
281
|
+
.appendPath(identifier)
|
|
282
|
+
.build()
|
|
283
|
+
).also { intent ->
|
|
284
|
+
intent.putExtra(EVENT_TYPE_KEY, GET_SCHEDULED_TYPE)
|
|
285
|
+
intent.putExtra(IDENTIFIER_KEY, identifier)
|
|
286
|
+
intent.putExtra(RECEIVER_KEY, resultReceiver)
|
|
287
|
+
}
|
|
288
|
+
)
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
/**
|
|
292
|
+
* Schedule notification asynchronously.
|
|
293
|
+
*
|
|
294
|
+
* @param context Context this is being called from
|
|
295
|
+
* @param notificationRequest Notification request to schedule
|
|
296
|
+
* @param resultReceiver Receiver to be called with the result
|
|
297
|
+
*/
|
|
298
|
+
fun schedule(context: Context, notificationRequest: NotificationRequest, resultReceiver: ResultReceiver? = null) {
|
|
299
|
+
doWork(
|
|
300
|
+
context,
|
|
301
|
+
Intent(
|
|
302
|
+
NOTIFICATION_EVENT_ACTION,
|
|
303
|
+
getUriBuilder()
|
|
304
|
+
.appendPath("scheduled")
|
|
305
|
+
.appendPath(notificationRequest.identifier)
|
|
306
|
+
.build()
|
|
307
|
+
).also { intent ->
|
|
308
|
+
intent.putExtra(EVENT_TYPE_KEY, SCHEDULE_TYPE)
|
|
309
|
+
intent.putExtra(NOTIFICATION_REQUEST_KEY, notificationRequest as Parcelable)
|
|
310
|
+
intent.putExtra(RECEIVER_KEY, resultReceiver)
|
|
311
|
+
}
|
|
312
|
+
)
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
/**
|
|
316
|
+
* Cancel selected scheduled notification and remove it from the storage asynchronously.
|
|
317
|
+
*
|
|
318
|
+
* @param context Context this is being called from
|
|
319
|
+
* @param identifier Identifier of the notification to be removed
|
|
320
|
+
* @param resultReceiver Receiver to be called with the result
|
|
321
|
+
*/
|
|
322
|
+
fun removeScheduledNotification(context: Context, identifier: String, resultReceiver: ResultReceiver? = null) =
|
|
323
|
+
removeScheduledNotifications(context, listOf(identifier), resultReceiver)
|
|
324
|
+
|
|
325
|
+
/**
|
|
326
|
+
* Cancel selected scheduled notifications and remove them from the storage asynchronously.
|
|
327
|
+
*
|
|
328
|
+
* @param context Context this is being called from
|
|
329
|
+
* @param identifiers Identifiers of selected notifications to be removed
|
|
330
|
+
* @param resultReceiver Receiver to be called with the result
|
|
331
|
+
*/
|
|
332
|
+
fun removeScheduledNotifications(context: Context, identifiers: Collection<String>, resultReceiver: ResultReceiver? = null) {
|
|
333
|
+
doWork(
|
|
334
|
+
context,
|
|
335
|
+
Intent(
|
|
336
|
+
NOTIFICATION_EVENT_ACTION,
|
|
337
|
+
getUriBuilder()
|
|
338
|
+
.appendPath("scheduled")
|
|
339
|
+
.build()
|
|
340
|
+
).also { intent ->
|
|
341
|
+
intent.putExtra(EVENT_TYPE_KEY, REMOVE_SELECTED_TYPE)
|
|
342
|
+
intent.putExtra(IDENTIFIERS_KEY, identifiers.toTypedArray())
|
|
343
|
+
intent.putExtra(RECEIVER_KEY, resultReceiver)
|
|
344
|
+
}
|
|
345
|
+
)
|
|
346
|
+
}
|
|
347
|
+
|
|
348
|
+
/**
|
|
349
|
+
* Cancel all scheduled notifications and remove them from the storage asynchronously.
|
|
350
|
+
*
|
|
351
|
+
* @param context Context this is being called from
|
|
352
|
+
* @param resultReceiver Receiver to be called with the result
|
|
353
|
+
*/
|
|
354
|
+
fun removeAllScheduledNotifications(context: Context, resultReceiver: ResultReceiver? = null) {
|
|
355
|
+
doWork(
|
|
356
|
+
context,
|
|
357
|
+
Intent(NOTIFICATION_EVENT_ACTION).also { intent ->
|
|
358
|
+
intent.putExtra(EVENT_TYPE_KEY, REMOVE_ALL_TYPE)
|
|
359
|
+
intent.putExtra(RECEIVER_KEY, resultReceiver)
|
|
360
|
+
}
|
|
361
|
+
)
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
/**
|
|
365
|
+
* Sends the intent to the best service to handle the {@link #NOTIFICATION_EVENT_ACTION} intent
|
|
366
|
+
* or handles the intent immediately if the service is already up.
|
|
367
|
+
*
|
|
368
|
+
* @param context Context where to start the service
|
|
369
|
+
* @param intent Intent to dispatch
|
|
370
|
+
*/
|
|
371
|
+
fun doWork(context: Context, intent: Intent) {
|
|
372
|
+
findDesignatedBroadcastReceiver(context, intent)?.let {
|
|
373
|
+
intent.component = ComponentName(it.packageName, it.name)
|
|
374
|
+
context.sendBroadcast(intent)
|
|
375
|
+
return
|
|
376
|
+
}
|
|
377
|
+
Log.e("expo-notifications", "No service capable of handling notifications found (intent = ${intent.action}). Ensure that you have configured your AndroidManifest.xml properly.")
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
protected fun getUriBuilder(): Uri.Builder {
|
|
381
|
+
return Uri.parse("expo-notifications://notifications/").buildUpon()
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
protected fun getUriBuilderForIdentifier(identifier: String): Uri.Builder {
|
|
385
|
+
return getUriBuilder().appendPath(identifier)
|
|
386
|
+
}
|
|
387
|
+
|
|
388
|
+
fun findDesignatedBroadcastReceiver(context: Context, intent: Intent): ActivityInfo? {
|
|
389
|
+
val searchIntent = Intent(intent.action).setPackage(context.packageName)
|
|
390
|
+
return context.packageManager.queryBroadcastReceivers(searchIntent, 0).firstOrNull()?.activityInfo
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
/**
|
|
394
|
+
* Creates and returns a pending intent that will trigger [NotificationsService],
|
|
395
|
+
* which hands off the work to this class. The intent triggers notification of the given identifier.
|
|
396
|
+
*
|
|
397
|
+
* @param context Context this is being called from
|
|
398
|
+
* @param identifier Notification identifier
|
|
399
|
+
* @return [PendingIntent] triggering [NotificationsService], triggering notification of given ID.
|
|
400
|
+
*/
|
|
401
|
+
fun createNotificationTrigger(context: Context, identifier: String): PendingIntent {
|
|
402
|
+
val intent = Intent(
|
|
403
|
+
NOTIFICATION_EVENT_ACTION,
|
|
404
|
+
getUriBuilder()
|
|
405
|
+
.appendPath("scheduled")
|
|
406
|
+
.appendPath(identifier)
|
|
407
|
+
.appendPath("trigger")
|
|
408
|
+
.build()
|
|
409
|
+
).also { intent ->
|
|
410
|
+
findDesignatedBroadcastReceiver(context, intent)?.let {
|
|
411
|
+
intent.component = ComponentName(it.packageName, it.name)
|
|
412
|
+
}
|
|
413
|
+
intent.putExtra(EVENT_TYPE_KEY, TRIGGER_TYPE)
|
|
414
|
+
intent.putExtra(IDENTIFIER_KEY, identifier)
|
|
415
|
+
}
|
|
416
|
+
|
|
417
|
+
// We're defaulting to the behaviour prior API 31 (mutable) even though Android recommends immutability
|
|
418
|
+
val mutableFlag = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) PendingIntent.FLAG_MUTABLE else 0
|
|
419
|
+
return PendingIntent.getBroadcast(
|
|
420
|
+
context,
|
|
421
|
+
intent.component?.className?.hashCode() ?: NotificationsService::class.java.hashCode(),
|
|
422
|
+
intent,
|
|
423
|
+
PendingIntent.FLAG_UPDATE_CURRENT or mutableFlag
|
|
424
|
+
)
|
|
425
|
+
}
|
|
426
|
+
|
|
427
|
+
/**
|
|
428
|
+
* Creates and returns a pending intent that will trigger [NotificationsService]'s "response received"
|
|
429
|
+
* event.
|
|
430
|
+
*
|
|
431
|
+
* @param context Context this is being called from
|
|
432
|
+
* @param notification Notification being responded to
|
|
433
|
+
* @param action Notification action being undertaken
|
|
434
|
+
* @return [PendingIntent] triggering [NotificationsService], triggering "response received" event
|
|
435
|
+
*/
|
|
436
|
+
fun createNotificationResponseIntent(context: Context, notification: Notification, action: NotificationAction): PendingIntent {
|
|
437
|
+
val intent = Intent(
|
|
438
|
+
NOTIFICATION_EVENT_ACTION,
|
|
439
|
+
getUriBuilder()
|
|
440
|
+
.appendPath(notification.notificationRequest.identifier)
|
|
441
|
+
.appendPath("actions")
|
|
442
|
+
.appendPath(action.identifier)
|
|
443
|
+
.build()
|
|
444
|
+
).also { intent ->
|
|
445
|
+
findDesignatedBroadcastReceiver(context, intent)?.let {
|
|
446
|
+
intent.component = ComponentName(it.packageName, it.name)
|
|
447
|
+
}
|
|
448
|
+
intent.putExtra(EVENT_TYPE_KEY, RECEIVE_RESPONSE_TYPE)
|
|
449
|
+
intent.putExtra(NOTIFICATION_KEY, notification)
|
|
450
|
+
intent.putExtra(NOTIFICATION_ACTION_KEY, action as Parcelable)
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
// Starting from Android 12,
|
|
454
|
+
// [notification trampolines](https://developer.android.com/about/versions/12/behavior-changes-12#identify-notification-trampolines)
|
|
455
|
+
// are not allowed. If the notification wants to open foreground app,
|
|
456
|
+
// we should use the dedicated Activity pendingIntent.
|
|
457
|
+
if (action.opensAppToForeground()) {
|
|
458
|
+
val notificationResponse = getNotificationResponseFromBroadcastIntent(intent)
|
|
459
|
+
return ExpoHandlingDelegate.createPendingIntentForOpeningApp(context, intent, notificationResponse)
|
|
460
|
+
}
|
|
461
|
+
|
|
462
|
+
// We're defaulting to the behaviour prior API 31 (mutable) even though Android recommends immutability
|
|
463
|
+
val mutableFlag = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) PendingIntent.FLAG_MUTABLE else 0
|
|
464
|
+
return PendingIntent.getBroadcast(
|
|
465
|
+
context,
|
|
466
|
+
intent.component?.className?.hashCode() ?: NotificationsService::class.java.hashCode(),
|
|
467
|
+
intent,
|
|
468
|
+
PendingIntent.FLAG_UPDATE_CURRENT or mutableFlag
|
|
469
|
+
)
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
/**
|
|
473
|
+
* Recreate an Intent from [createNotificationResponseIntent] extras
|
|
474
|
+
* for [NotificationForwarderActivity] to send broadcasts
|
|
475
|
+
*/
|
|
476
|
+
fun createNotificationResponseBroadcastIntent(context: Context, extras: Bundle?): Intent {
|
|
477
|
+
val notification = extras?.getParcelable<Notification>(NOTIFICATION_KEY)
|
|
478
|
+
val action = extras?.getParcelable<NotificationAction>(NOTIFICATION_ACTION_KEY)
|
|
479
|
+
if (notification == null || action == null) {
|
|
480
|
+
throw IllegalArgumentException("notification and action should not be null")
|
|
481
|
+
}
|
|
482
|
+
val backgroundAction = NotificationAction(action.identifier, action.title, false)
|
|
483
|
+
val intent = Intent(
|
|
484
|
+
NOTIFICATION_EVENT_ACTION,
|
|
485
|
+
getUriBuilder()
|
|
486
|
+
.appendPath(notification.notificationRequest.identifier)
|
|
487
|
+
.appendPath("actions")
|
|
488
|
+
.appendPath(backgroundAction.identifier)
|
|
489
|
+
.build()
|
|
490
|
+
).also { intent ->
|
|
491
|
+
findDesignatedBroadcastReceiver(context, intent)?.let {
|
|
492
|
+
intent.component = ComponentName(it.packageName, it.name)
|
|
493
|
+
}
|
|
494
|
+
intent.putExtra(EVENT_TYPE_KEY, RECEIVE_RESPONSE_TYPE)
|
|
495
|
+
intent.putExtra(NOTIFICATION_KEY, notification)
|
|
496
|
+
intent.putExtra(NOTIFICATION_ACTION_KEY, backgroundAction as Parcelable)
|
|
497
|
+
}
|
|
498
|
+
return intent
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
fun getNotificationResponseFromBroadcastIntent(intent: Intent): NotificationResponse {
|
|
502
|
+
val notification = intent.getParcelableExtra<Notification>(NOTIFICATION_KEY) ?: throw IllegalArgumentException("$NOTIFICATION_KEY not found in the intent extras.")
|
|
503
|
+
val action = intent.getParcelableExtra<NotificationAction>(NOTIFICATION_ACTION_KEY) ?: throw IllegalArgumentException("$NOTIFICATION_ACTION_KEY not found in the intent extras.")
|
|
504
|
+
val response = if (action is TextInputNotificationAction) {
|
|
505
|
+
val userText = action.placeholder ?: RemoteInput.getResultsFromIntent(intent)?.getString(USER_TEXT_RESPONSE_KEY) ?: ""
|
|
506
|
+
TextInputNotificationResponse(action, notification, userText)
|
|
507
|
+
} else {
|
|
508
|
+
NotificationResponse(action, notification)
|
|
509
|
+
}
|
|
510
|
+
return response
|
|
511
|
+
}
|
|
512
|
+
|
|
513
|
+
fun getNotificationResponseFromOpenIntent(intent: Intent): NotificationResponse? {
|
|
514
|
+
intent.getByteArrayExtra(NOTIFICATION_RESPONSE_KEY)?.let { return unmarshalObject(NotificationResponse.CREATOR, it) }
|
|
515
|
+
intent.getByteArrayExtra(TEXT_INPUT_NOTIFICATION_RESPONSE_KEY)?.let { return unmarshalObject(TextInputNotificationResponse.CREATOR, it) }
|
|
516
|
+
return null
|
|
517
|
+
}
|
|
518
|
+
|
|
519
|
+
// Class loader used in BaseBundle when unmarshalling notification extras
|
|
520
|
+
// cannot handle expo.modules.notifications.….NotificationResponse
|
|
521
|
+
// so we go around it by marshalling and unmarshalling the object ourselves.
|
|
522
|
+
fun setNotificationResponseToIntent(intent: Intent, notificationResponse: NotificationResponse) {
|
|
523
|
+
try {
|
|
524
|
+
val keyToPutResponseUnder = if (notificationResponse is TextInputNotificationResponse) {
|
|
525
|
+
TEXT_INPUT_NOTIFICATION_RESPONSE_KEY
|
|
526
|
+
} else {
|
|
527
|
+
NOTIFICATION_RESPONSE_KEY
|
|
528
|
+
}
|
|
529
|
+
intent.putExtra(keyToPutResponseUnder, marshalObject(notificationResponse))
|
|
530
|
+
} catch (e: Exception) {
|
|
531
|
+
// If we couldn't marshal the request, let's not fail the whole build process.
|
|
532
|
+
Log.e("expo-notifications", "Could not marshal notification response: ${notificationResponse.actionIdentifier}.")
|
|
533
|
+
e.printStackTrace()
|
|
534
|
+
}
|
|
535
|
+
}
|
|
536
|
+
|
|
537
|
+
/**
|
|
538
|
+
* Marshals [Parcelable] into to a byte array.
|
|
539
|
+
*
|
|
540
|
+
* @param notificationResponse Notification response to marshall
|
|
541
|
+
* @return Given request marshalled to a byte array or null if the process failed.
|
|
542
|
+
*/
|
|
543
|
+
private fun marshalObject(objectToMarshal: Parcelable): ByteArray? {
|
|
544
|
+
val parcel: Parcel = Parcel.obtain()
|
|
545
|
+
objectToMarshal.writeToParcel(parcel, 0)
|
|
546
|
+
val bytes: ByteArray = parcel.marshall()
|
|
547
|
+
parcel.recycle()
|
|
548
|
+
return bytes
|
|
549
|
+
}
|
|
550
|
+
|
|
551
|
+
/**
|
|
552
|
+
* UNmarshals [Parcelable] object from a byte array given a [Parcelable.Creator].
|
|
553
|
+
* @return Object instance or null if the process failed.
|
|
554
|
+
*/
|
|
555
|
+
private fun <T> unmarshalObject(creator: Parcelable.Creator<T>, byteArray: ByteArray?): T? {
|
|
556
|
+
byteArray?.let {
|
|
557
|
+
try {
|
|
558
|
+
val parcel = Parcel.obtain()
|
|
559
|
+
parcel.unmarshall(it, 0, it.size)
|
|
560
|
+
parcel.setDataPosition(0)
|
|
561
|
+
val unmarshaledObject = creator.createFromParcel(parcel)
|
|
562
|
+
parcel.recycle()
|
|
563
|
+
return unmarshaledObject
|
|
564
|
+
} catch (e: Exception) {
|
|
565
|
+
Log.e("expo-notifications", "Could not unmarshall NotificationResponse from Intent.extra.", e)
|
|
566
|
+
}
|
|
567
|
+
}
|
|
568
|
+
return null
|
|
569
|
+
}
|
|
570
|
+
}
|
|
571
|
+
|
|
572
|
+
protected open fun getPresentationDelegate(context: Context): PresentationDelegate =
|
|
573
|
+
ExpoPresentationDelegate(context)
|
|
574
|
+
|
|
575
|
+
protected open fun getHandlingDelegate(context: Context): HandlingDelegate =
|
|
576
|
+
ExpoHandlingDelegate(context)
|
|
577
|
+
|
|
578
|
+
protected open fun getCategoriesDelegate(context: Context): CategoriesDelegate =
|
|
579
|
+
ExpoCategoriesDelegate(context)
|
|
580
|
+
|
|
581
|
+
protected open fun getSchedulingDelegate(context: Context): SchedulingDelegate =
|
|
582
|
+
ExpoSchedulingDelegate(context)
|
|
583
|
+
|
|
584
|
+
override fun onReceive(context: Context, intent: Intent?) {
|
|
585
|
+
val pendingIntent = goAsync()
|
|
586
|
+
thread {
|
|
587
|
+
try {
|
|
588
|
+
handleIntent(context, intent)
|
|
589
|
+
} finally {
|
|
590
|
+
pendingIntent.finish()
|
|
591
|
+
}
|
|
592
|
+
}
|
|
593
|
+
}
|
|
594
|
+
|
|
595
|
+
open fun handleIntent(context: Context, intent: Intent?) {
|
|
596
|
+
Log.e("dupa", intent.toString())
|
|
597
|
+
if (intent != null && SETUP_ACTIONS.contains(intent.action)) {
|
|
598
|
+
onSetupScheduledNotifications(context, intent)
|
|
599
|
+
} else if (intent?.action === NOTIFICATION_EVENT_ACTION) {
|
|
600
|
+
val receiver: ResultReceiver? = intent.extras?.get(RECEIVER_KEY) as? ResultReceiver
|
|
601
|
+
try {
|
|
602
|
+
var resultData: Bundle? = null
|
|
603
|
+
when (val eventType = intent.getStringExtra(EVENT_TYPE_KEY)) {
|
|
604
|
+
GET_ALL_DISPLAYED_TYPE ->
|
|
605
|
+
resultData = onGetAllPresentedNotifications(context, intent)
|
|
606
|
+
|
|
607
|
+
RECEIVE_TYPE -> onReceiveNotification(context, intent)
|
|
608
|
+
|
|
609
|
+
RECEIVE_RESPONSE_TYPE -> onReceiveNotificationResponse(context, intent)
|
|
610
|
+
|
|
611
|
+
DROPPED_TYPE -> onNotificationsDropped(context, intent)
|
|
612
|
+
|
|
613
|
+
PRESENT_TYPE -> onPresentNotification(context, intent)
|
|
614
|
+
|
|
615
|
+
DISMISS_SELECTED_TYPE -> onDismissNotifications(context, intent)
|
|
616
|
+
|
|
617
|
+
DISMISS_ALL_TYPE -> onDismissAllNotifications(context, intent)
|
|
618
|
+
|
|
619
|
+
GET_CATEGORIES_TYPE ->
|
|
620
|
+
resultData = onGetCategories(context, intent)
|
|
621
|
+
|
|
622
|
+
SET_CATEGORY_TYPE ->
|
|
623
|
+
resultData = onSetCategory(context, intent)
|
|
624
|
+
|
|
625
|
+
DELETE_CATEGORY_TYPE ->
|
|
626
|
+
resultData = onDeleteCategory(context, intent)
|
|
627
|
+
|
|
628
|
+
GET_ALL_SCHEDULED_TYPE ->
|
|
629
|
+
resultData = onGetAllScheduledNotifications(context, intent)
|
|
630
|
+
|
|
631
|
+
GET_SCHEDULED_TYPE ->
|
|
632
|
+
resultData = onGetScheduledNotification(context, intent)
|
|
633
|
+
|
|
634
|
+
SCHEDULE_TYPE -> onScheduleNotification(context, intent)
|
|
635
|
+
|
|
636
|
+
REMOVE_SELECTED_TYPE -> onRemoveScheduledNotifications(context, intent)
|
|
637
|
+
|
|
638
|
+
REMOVE_ALL_TYPE -> onRemoveAllScheduledNotifications(context, intent)
|
|
639
|
+
|
|
640
|
+
TRIGGER_TYPE -> onNotificationTriggered(context, intent)
|
|
641
|
+
|
|
642
|
+
else -> throw IllegalArgumentException("Received event of unrecognized type: $eventType. Ignoring.")
|
|
643
|
+
}
|
|
644
|
+
|
|
645
|
+
// If we ended up here, the callbacks must have completed successfully
|
|
646
|
+
receiver?.send(SUCCESS_CODE, resultData)
|
|
647
|
+
} catch (e: Exception) {
|
|
648
|
+
Log.e("expo-notifications", "Action ${intent.action} failed: ${e.message}")
|
|
649
|
+
e.printStackTrace()
|
|
650
|
+
|
|
651
|
+
receiver?.send(ERROR_CODE, Bundle().also { it.putSerializable(EXCEPTION_KEY, e) })
|
|
652
|
+
}
|
|
653
|
+
} else {
|
|
654
|
+
throw IllegalArgumentException("Received intent of unrecognized action: ${intent?.action}. Ignoring.")
|
|
655
|
+
}
|
|
656
|
+
}
|
|
657
|
+
|
|
658
|
+
//region Presenting notifications
|
|
659
|
+
|
|
660
|
+
open fun onPresentNotification(context: Context, intent: Intent) =
|
|
661
|
+
getPresentationDelegate(context).presentNotification(
|
|
662
|
+
intent.extras?.getParcelable(NOTIFICATION_KEY)!!,
|
|
663
|
+
intent.extras?.getParcelable(NOTIFICATION_BEHAVIOR_KEY)
|
|
664
|
+
)
|
|
665
|
+
|
|
666
|
+
open fun onGetAllPresentedNotifications(context: Context, intent: Intent) =
|
|
667
|
+
Bundle().also {
|
|
668
|
+
it.putParcelableArrayList(
|
|
669
|
+
NOTIFICATIONS_KEY,
|
|
670
|
+
ArrayList(
|
|
671
|
+
getPresentationDelegate(context).getAllPresentedNotifications()
|
|
672
|
+
)
|
|
673
|
+
)
|
|
674
|
+
}
|
|
675
|
+
|
|
676
|
+
open fun onDismissNotifications(context: Context, intent: Intent) =
|
|
677
|
+
getPresentationDelegate(context).dismissNotifications(
|
|
678
|
+
intent.extras?.getStringArray(IDENTIFIERS_KEY)!!.asList()
|
|
679
|
+
)
|
|
680
|
+
|
|
681
|
+
open fun onDismissAllNotifications(context: Context, intent: Intent) =
|
|
682
|
+
getPresentationDelegate(context).dismissAllNotifications()
|
|
683
|
+
|
|
684
|
+
//endregion
|
|
685
|
+
|
|
686
|
+
//region Handling notifications
|
|
687
|
+
|
|
688
|
+
open fun onReceiveNotification(context: Context, intent: Intent) =
|
|
689
|
+
getHandlingDelegate(context).handleNotification(
|
|
690
|
+
intent.getParcelableExtra(NOTIFICATION_KEY)!!
|
|
691
|
+
)
|
|
692
|
+
|
|
693
|
+
open fun onReceiveNotificationResponse(context: Context, intent: Intent) {
|
|
694
|
+
val response = getNotificationResponseFromBroadcastIntent(intent)
|
|
695
|
+
getHandlingDelegate(context).handleNotificationResponse(response)
|
|
696
|
+
}
|
|
697
|
+
|
|
698
|
+
open fun onNotificationsDropped(context: Context, intent: Intent) =
|
|
699
|
+
getHandlingDelegate(context).handleNotificationsDropped()
|
|
700
|
+
|
|
701
|
+
//endregion
|
|
702
|
+
|
|
703
|
+
//region Category handling
|
|
704
|
+
|
|
705
|
+
open fun onGetCategories(context: Context, intent: Intent) =
|
|
706
|
+
Bundle().also {
|
|
707
|
+
it.putParcelableArrayList(
|
|
708
|
+
NOTIFICATION_CATEGORIES_KEY,
|
|
709
|
+
ArrayList(
|
|
710
|
+
getCategoriesDelegate(context).getCategories()
|
|
711
|
+
)
|
|
712
|
+
)
|
|
713
|
+
}
|
|
714
|
+
|
|
715
|
+
open fun onSetCategory(context: Context, intent: Intent) =
|
|
716
|
+
Bundle().also {
|
|
717
|
+
it.putParcelable(
|
|
718
|
+
NOTIFICATION_CATEGORY_KEY,
|
|
719
|
+
getCategoriesDelegate(context).setCategory(
|
|
720
|
+
intent.getParcelableExtra(NOTIFICATION_CATEGORY_KEY)!!
|
|
721
|
+
)
|
|
722
|
+
)
|
|
723
|
+
}
|
|
724
|
+
|
|
725
|
+
open fun onDeleteCategory(context: Context, intent: Intent) =
|
|
726
|
+
Bundle().also {
|
|
727
|
+
it.putBoolean(
|
|
728
|
+
SUCCEEDED_KEY,
|
|
729
|
+
getCategoriesDelegate(context).deleteCategory(
|
|
730
|
+
intent.extras?.getString(IDENTIFIER_KEY)!!
|
|
731
|
+
)
|
|
732
|
+
)
|
|
733
|
+
}
|
|
734
|
+
//endregion
|
|
735
|
+
|
|
736
|
+
//region Scheduling notifications
|
|
737
|
+
|
|
738
|
+
open fun onGetAllScheduledNotifications(context: Context, intent: Intent) =
|
|
739
|
+
Bundle().also {
|
|
740
|
+
it.putParcelableArrayList(
|
|
741
|
+
NOTIFICATION_REQUESTS_KEY,
|
|
742
|
+
ArrayList(
|
|
743
|
+
getSchedulingDelegate(context).getAllScheduledNotifications()
|
|
744
|
+
)
|
|
745
|
+
)
|
|
746
|
+
}
|
|
747
|
+
|
|
748
|
+
open fun onGetScheduledNotification(context: Context, intent: Intent) =
|
|
749
|
+
Bundle().also {
|
|
750
|
+
it.putParcelable(
|
|
751
|
+
NOTIFICATION_REQUEST_KEY,
|
|
752
|
+
getSchedulingDelegate(context).getScheduledNotification(
|
|
753
|
+
intent.extras?.getString(IDENTIFIER_KEY)!!
|
|
754
|
+
)
|
|
755
|
+
)
|
|
756
|
+
}
|
|
757
|
+
|
|
758
|
+
open fun onScheduleNotification(context: Context, intent: Intent) =
|
|
759
|
+
getSchedulingDelegate(context).scheduleNotification(
|
|
760
|
+
intent.extras?.getParcelable(NOTIFICATION_REQUEST_KEY)!!
|
|
761
|
+
)
|
|
762
|
+
|
|
763
|
+
open fun onNotificationTriggered(context: Context, intent: Intent) =
|
|
764
|
+
getSchedulingDelegate(context).triggerNotification(
|
|
765
|
+
intent.extras?.getString(IDENTIFIER_KEY)!!
|
|
766
|
+
)
|
|
767
|
+
|
|
768
|
+
open fun onRemoveScheduledNotifications(context: Context, intent: Intent) =
|
|
769
|
+
getSchedulingDelegate(context).removeScheduledNotifications(
|
|
770
|
+
intent.extras?.getStringArray(IDENTIFIERS_KEY)!!.asList()
|
|
771
|
+
)
|
|
772
|
+
|
|
773
|
+
open fun onRemoveAllScheduledNotifications(context: Context, intent: Intent) =
|
|
774
|
+
getSchedulingDelegate(context).removeAllScheduledNotifications()
|
|
775
|
+
|
|
776
|
+
open fun onSetupScheduledNotifications(context: Context, intent: Intent) =
|
|
777
|
+
getSchedulingDelegate(context).setupScheduledNotifications()
|
|
778
|
+
|
|
779
|
+
//endregion
|
|
780
|
+
}
|