@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.
Files changed (686) hide show
  1. package/.eslintrc.js +2 -0
  2. package/CHANGELOG.md +478 -0
  3. package/LICENSE +7 -0
  4. package/README.kepler.md +3 -0
  5. package/README.md +2003 -0
  6. package/THIRD_PARTY_NOTICES.txt +4 -0
  7. package/android/build.gradle +125 -0
  8. package/android/src/main/AndroidManifest.xml +39 -0
  9. package/android/src/main/java/expo/modules/notifications/Exceptions.kt +22 -0
  10. package/android/src/main/java/expo/modules/notifications/NotificationsPackage.java +34 -0
  11. package/android/src/main/java/expo/modules/notifications/Utils.kt +19 -0
  12. package/android/src/main/java/expo/modules/notifications/badge/BadgeHelper.kt +24 -0
  13. package/android/src/main/java/expo/modules/notifications/badge/BadgeModule.kt +22 -0
  14. package/android/src/main/java/expo/modules/notifications/notifications/ArgumentsNotificationContentBuilder.java +149 -0
  15. package/android/src/main/java/expo/modules/notifications/notifications/JSONNotificationContentBuilder.java +203 -0
  16. package/android/src/main/java/expo/modules/notifications/notifications/NotificationManager.java +119 -0
  17. package/android/src/main/java/expo/modules/notifications/notifications/NotificationSerializer.java +202 -0
  18. package/android/src/main/java/expo/modules/notifications/notifications/RemoteMessageSerializer.java +104 -0
  19. package/android/src/main/java/expo/modules/notifications/notifications/SoundResolver.java +58 -0
  20. package/android/src/main/java/expo/modules/notifications/notifications/background/BackgroundRemoteNotificationTaskConsumer.java +123 -0
  21. package/android/src/main/java/expo/modules/notifications/notifications/background/ExpoBackgroundNotificationTasksModule.kt +33 -0
  22. package/android/src/main/java/expo/modules/notifications/notifications/categories/ExpoNotificationCategoriesModule.kt +149 -0
  23. package/android/src/main/java/expo/modules/notifications/notifications/categories/serializers/ExpoNotificationsCategoriesSerializer.java +67 -0
  24. package/android/src/main/java/expo/modules/notifications/notifications/categories/serializers/NotificationsCategoriesSerializer.java +11 -0
  25. package/android/src/main/java/expo/modules/notifications/notifications/channels/AbstractNotificationsChannelsProvider.java +81 -0
  26. package/android/src/main/java/expo/modules/notifications/notifications/channels/AndroidXNotificationsChannelsProvider.java +38 -0
  27. package/android/src/main/java/expo/modules/notifications/notifications/channels/InvalidVibrationPatternException.java +14 -0
  28. package/android/src/main/java/expo/modules/notifications/notifications/channels/NotificationChannelGroupManagerModule.kt +70 -0
  29. package/android/src/main/java/expo/modules/notifications/notifications/channels/NotificationChannelManagerModule.kt +83 -0
  30. package/android/src/main/java/expo/modules/notifications/notifications/channels/NotificationsChannelsProvider.java +13 -0
  31. package/android/src/main/java/expo/modules/notifications/notifications/channels/managers/AndroidXNotificationsChannelGroupManager.java +67 -0
  32. package/android/src/main/java/expo/modules/notifications/notifications/channels/managers/AndroidXNotificationsChannelManager.java +196 -0
  33. package/android/src/main/java/expo/modules/notifications/notifications/channels/managers/NotificationsChannelGroupManager.java +28 -0
  34. package/android/src/main/java/expo/modules/notifications/notifications/channels/managers/NotificationsChannelManager.java +28 -0
  35. package/android/src/main/java/expo/modules/notifications/notifications/channels/serializers/ExpoNotificationsChannelGroupSerializer.java +55 -0
  36. package/android/src/main/java/expo/modules/notifications/notifications/channels/serializers/ExpoNotificationsChannelSerializer.java +101 -0
  37. package/android/src/main/java/expo/modules/notifications/notifications/channels/serializers/NotificationsChannelGroupSerializer.java +20 -0
  38. package/android/src/main/java/expo/modules/notifications/notifications/channels/serializers/NotificationsChannelSerializer.java +35 -0
  39. package/android/src/main/java/expo/modules/notifications/notifications/emitting/NotificationsEmitter.kt +78 -0
  40. package/android/src/main/java/expo/modules/notifications/notifications/enums/AudioContentType.java +45 -0
  41. package/android/src/main/java/expo/modules/notifications/notifications/enums/AudioUsage.java +55 -0
  42. package/android/src/main/java/expo/modules/notifications/notifications/enums/NotificationImportance.java +48 -0
  43. package/android/src/main/java/expo/modules/notifications/notifications/enums/NotificationPriority.java +51 -0
  44. package/android/src/main/java/expo/modules/notifications/notifications/enums/NotificationVisibility.java +44 -0
  45. package/android/src/main/java/expo/modules/notifications/notifications/handling/NotificationsHandler.kt +127 -0
  46. package/android/src/main/java/expo/modules/notifications/notifications/handling/SingleNotificationHandlerTask.java +131 -0
  47. package/android/src/main/java/expo/modules/notifications/notifications/interfaces/NotificationBuilder.java +35 -0
  48. package/android/src/main/java/expo/modules/notifications/notifications/interfaces/NotificationListener.java +37 -0
  49. package/android/src/main/java/expo/modules/notifications/notifications/interfaces/NotificationManager.java +22 -0
  50. package/android/src/main/java/expo/modules/notifications/notifications/interfaces/NotificationPresentationEffect.java +11 -0
  51. package/android/src/main/java/expo/modules/notifications/notifications/interfaces/NotificationPresentationEffectsManager.java +7 -0
  52. package/android/src/main/java/expo/modules/notifications/notifications/interfaces/NotificationTrigger.java +19 -0
  53. package/android/src/main/java/expo/modules/notifications/notifications/interfaces/SchedulableNotificationTrigger.java +20 -0
  54. package/android/src/main/java/expo/modules/notifications/notifications/model/Notification.java +59 -0
  55. package/android/src/main/java/expo/modules/notifications/notifications/model/NotificationAction.java +63 -0
  56. package/android/src/main/java/expo/modules/notifications/notifications/model/NotificationBehavior.java +84 -0
  57. package/android/src/main/java/expo/modules/notifications/notifications/model/NotificationCategory.java +61 -0
  58. package/android/src/main/java/expo/modules/notifications/notifications/model/NotificationContent.java +356 -0
  59. package/android/src/main/java/expo/modules/notifications/notifications/model/NotificationRequest.java +66 -0
  60. package/android/src/main/java/expo/modules/notifications/notifications/model/NotificationResponse.java +60 -0
  61. package/android/src/main/java/expo/modules/notifications/notifications/model/TextInputNotificationAction.java +42 -0
  62. package/android/src/main/java/expo/modules/notifications/notifications/model/TextInputNotificationResponse.java +42 -0
  63. package/android/src/main/java/expo/modules/notifications/notifications/model/triggers/FirebaseNotificationTrigger.java +61 -0
  64. package/android/src/main/java/expo/modules/notifications/notifications/presentation/ExpoNotificationPresentationEffectsManager.java +63 -0
  65. package/android/src/main/java/expo/modules/notifications/notifications/presentation/ExpoNotificationPresentationModule.kt +113 -0
  66. package/android/src/main/java/expo/modules/notifications/notifications/presentation/builders/BaseNotificationBuilder.java +50 -0
  67. package/android/src/main/java/expo/modules/notifications/notifications/presentation/builders/CategoryAwareNotificationBuilder.java +80 -0
  68. package/android/src/main/java/expo/modules/notifications/notifications/presentation/builders/ChannelAwareNotificationBuilder.java +135 -0
  69. package/android/src/main/java/expo/modules/notifications/notifications/presentation/builders/ExpoNotificationBuilder.java +295 -0
  70. package/android/src/main/java/expo/modules/notifications/notifications/presentation/effects/BaseNotificationEffect.java +53 -0
  71. package/android/src/main/java/expo/modules/notifications/notifications/scheduling/NotificationScheduler.kt +235 -0
  72. package/android/src/main/java/expo/modules/notifications/notifications/triggers/ChannelAwareTrigger.java +49 -0
  73. package/android/src/main/java/expo/modules/notifications/notifications/triggers/DailyTrigger.java +76 -0
  74. package/android/src/main/java/expo/modules/notifications/notifications/triggers/DateTrigger.java +64 -0
  75. package/android/src/main/java/expo/modules/notifications/notifications/triggers/TimeIntervalTrigger.java +87 -0
  76. package/android/src/main/java/expo/modules/notifications/notifications/triggers/WeeklyTrigger.java +85 -0
  77. package/android/src/main/java/expo/modules/notifications/notifications/triggers/YearlyTrigger.java +94 -0
  78. package/android/src/main/java/expo/modules/notifications/permissions/NotificationPermissionsModule.kt +124 -0
  79. package/android/src/main/java/expo/modules/notifications/serverregistration/InstallationId.java +134 -0
  80. package/android/src/main/java/expo/modules/notifications/serverregistration/RegistrationInfo.kt +24 -0
  81. package/android/src/main/java/expo/modules/notifications/serverregistration/ServerRegistrationModule.kt +32 -0
  82. package/android/src/main/java/expo/modules/notifications/service/ExpoFirebaseMessagingService.kt +15 -0
  83. package/android/src/main/java/expo/modules/notifications/service/NotificationForwarderActivity.kt +33 -0
  84. package/android/src/main/java/expo/modules/notifications/service/NotificationsService.kt +780 -0
  85. package/android/src/main/java/expo/modules/notifications/service/delegates/Base64Serialization.kt +33 -0
  86. package/android/src/main/java/expo/modules/notifications/service/delegates/ExpoCategoriesDelegate.kt +21 -0
  87. package/android/src/main/java/expo/modules/notifications/service/delegates/ExpoHandlingDelegate.kt +146 -0
  88. package/android/src/main/java/expo/modules/notifications/service/delegates/ExpoPresentationDelegate.kt +193 -0
  89. package/android/src/main/java/expo/modules/notifications/service/delegates/ExpoSchedulingDelegate.kt +117 -0
  90. package/android/src/main/java/expo/modules/notifications/service/delegates/FirebaseMessagingDelegate.kt +126 -0
  91. package/android/src/main/java/expo/modules/notifications/service/delegates/SharedPreferencesNotificationCategoriesStore.kt +106 -0
  92. package/android/src/main/java/expo/modules/notifications/service/delegates/SharedPreferencesNotificationsStore.kt +119 -0
  93. package/android/src/main/java/expo/modules/notifications/service/interfaces/CategoriesDelegate.kt +14 -0
  94. package/android/src/main/java/expo/modules/notifications/service/interfaces/FirebaseMessagingDelegate.kt +20 -0
  95. package/android/src/main/java/expo/modules/notifications/service/interfaces/HandlingDelegate.kt +10 -0
  96. package/android/src/main/java/expo/modules/notifications/service/interfaces/PresentationDelegate.kt +11 -0
  97. package/android/src/main/java/expo/modules/notifications/service/interfaces/SchedulingDelegate.kt +13 -0
  98. package/android/src/main/java/expo/modules/notifications/tokens/PushTokenManager.java +88 -0
  99. package/android/src/main/java/expo/modules/notifications/tokens/PushTokenModule.kt +91 -0
  100. package/android/src/main/java/expo/modules/notifications/tokens/interfaces/FirebaseTokenListener.java +16 -0
  101. package/android/src/main/java/expo/modules/notifications/tokens/interfaces/PushTokenListener.java +14 -0
  102. package/android/src/main/java/expo/modules/notifications/tokens/interfaces/PushTokenManager.java +22 -0
  103. package/android/src/main/res/values/strings.xml +4 -0
  104. package/app.plugin.js +1 -0
  105. package/build/BackgroundNotificationTasksModule.d.ts +4 -0
  106. package/build/BackgroundNotificationTasksModule.d.ts.map +1 -0
  107. package/build/BackgroundNotificationTasksModule.js +7 -0
  108. package/build/BackgroundNotificationTasksModule.js.map +1 -0
  109. package/build/BackgroundNotificationTasksModule.kepler.d.ts +3 -0
  110. package/build/BackgroundNotificationTasksModule.kepler.d.ts.map +1 -0
  111. package/build/BackgroundNotificationTasksModule.kepler.js +9 -0
  112. package/build/BackgroundNotificationTasksModule.kepler.js.map +1 -0
  113. package/build/BackgroundNotificationTasksModule.native.d.ts +4 -0
  114. package/build/BackgroundNotificationTasksModule.native.d.ts.map +1 -0
  115. package/build/BackgroundNotificationTasksModule.native.js +3 -0
  116. package/build/BackgroundNotificationTasksModule.native.js.map +1 -0
  117. package/build/BackgroundNotificationTasksModule.types.d.ts +11 -0
  118. package/build/BackgroundNotificationTasksModule.types.d.ts.map +1 -0
  119. package/build/BackgroundNotificationTasksModule.types.js +7 -0
  120. package/build/BackgroundNotificationTasksModule.types.js.map +1 -0
  121. package/build/BackgroundNotificationTasksModule.web.d.ts +6 -0
  122. package/build/BackgroundNotificationTasksModule.web.d.ts.map +1 -0
  123. package/build/BackgroundNotificationTasksModule.web.js +9 -0
  124. package/build/BackgroundNotificationTasksModule.web.js.map +1 -0
  125. package/build/BadgeModule.d.ts +4 -0
  126. package/build/BadgeModule.d.ts.map +1 -0
  127. package/build/BadgeModule.js +5 -0
  128. package/build/BadgeModule.js.map +1 -0
  129. package/build/BadgeModule.kepler.d.ts +3 -0
  130. package/build/BadgeModule.kepler.d.ts.map +1 -0
  131. package/build/BadgeModule.kepler.js +9 -0
  132. package/build/BadgeModule.kepler.js.map +1 -0
  133. package/build/BadgeModule.native.d.ts +4 -0
  134. package/build/BadgeModule.native.d.ts.map +1 -0
  135. package/build/BadgeModule.native.js +12 -0
  136. package/build/BadgeModule.native.js.map +1 -0
  137. package/build/BadgeModule.types.d.ts +10 -0
  138. package/build/BadgeModule.types.d.ts.map +1 -0
  139. package/build/BadgeModule.types.js +2 -0
  140. package/build/BadgeModule.types.js.map +1 -0
  141. package/build/BadgeModule.web.d.ts +4 -0
  142. package/build/BadgeModule.web.d.ts.map +1 -0
  143. package/build/BadgeModule.web.js +26 -0
  144. package/build/BadgeModule.web.js.map +1 -0
  145. package/build/DevicePushTokenAutoRegistration.fx.d.ts +15 -0
  146. package/build/DevicePushTokenAutoRegistration.fx.d.ts.map +1 -0
  147. package/build/DevicePushTokenAutoRegistration.fx.js +87 -0
  148. package/build/DevicePushTokenAutoRegistration.fx.js.map +1 -0
  149. package/build/NotificationCategoriesModule.d.ts +4 -0
  150. package/build/NotificationCategoriesModule.d.ts.map +1 -0
  151. package/build/NotificationCategoriesModule.js +13 -0
  152. package/build/NotificationCategoriesModule.js.map +1 -0
  153. package/build/NotificationCategoriesModule.kepler.d.ts +3 -0
  154. package/build/NotificationCategoriesModule.kepler.d.ts.map +1 -0
  155. package/build/NotificationCategoriesModule.kepler.js +10 -0
  156. package/build/NotificationCategoriesModule.kepler.js.map +1 -0
  157. package/build/NotificationCategoriesModule.native.d.ts +4 -0
  158. package/build/NotificationCategoriesModule.native.d.ts.map +1 -0
  159. package/build/NotificationCategoriesModule.native.js +3 -0
  160. package/build/NotificationCategoriesModule.native.js.map +1 -0
  161. package/build/NotificationCategoriesModule.types.d.ts +17 -0
  162. package/build/NotificationCategoriesModule.types.d.ts.map +1 -0
  163. package/build/NotificationCategoriesModule.types.js +2 -0
  164. package/build/NotificationCategoriesModule.types.js.map +1 -0
  165. package/build/NotificationCategoriesModule.web.d.ts +8 -0
  166. package/build/NotificationCategoriesModule.web.d.ts.map +1 -0
  167. package/build/NotificationCategoriesModule.web.js +12 -0
  168. package/build/NotificationCategoriesModule.web.js.map +1 -0
  169. package/build/NotificationChannelGroupManager.d.ts +4 -0
  170. package/build/NotificationChannelGroupManager.d.ts.map +1 -0
  171. package/build/NotificationChannelGroupManager.js +5 -0
  172. package/build/NotificationChannelGroupManager.js.map +1 -0
  173. package/build/NotificationChannelGroupManager.kepler.d.ts +3 -0
  174. package/build/NotificationChannelGroupManager.kepler.d.ts.map +1 -0
  175. package/build/NotificationChannelGroupManager.kepler.js +9 -0
  176. package/build/NotificationChannelGroupManager.kepler.js.map +1 -0
  177. package/build/NotificationChannelGroupManager.native.d.ts +4 -0
  178. package/build/NotificationChannelGroupManager.native.d.ts.map +1 -0
  179. package/build/NotificationChannelGroupManager.native.js +3 -0
  180. package/build/NotificationChannelGroupManager.native.js.map +1 -0
  181. package/build/NotificationChannelGroupManager.types.d.ts +28 -0
  182. package/build/NotificationChannelGroupManager.types.d.ts.map +1 -0
  183. package/build/NotificationChannelGroupManager.types.js +2 -0
  184. package/build/NotificationChannelGroupManager.types.js.map +1 -0
  185. package/build/NotificationChannelManager.d.ts +4 -0
  186. package/build/NotificationChannelManager.d.ts.map +1 -0
  187. package/build/NotificationChannelManager.js +5 -0
  188. package/build/NotificationChannelManager.js.map +1 -0
  189. package/build/NotificationChannelManager.kepler.d.ts +3 -0
  190. package/build/NotificationChannelManager.kepler.d.ts.map +1 -0
  191. package/build/NotificationChannelManager.kepler.js +9 -0
  192. package/build/NotificationChannelManager.kepler.js.map +1 -0
  193. package/build/NotificationChannelManager.native.d.ts +4 -0
  194. package/build/NotificationChannelManager.native.d.ts.map +1 -0
  195. package/build/NotificationChannelManager.native.js +3 -0
  196. package/build/NotificationChannelManager.native.js.map +1 -0
  197. package/build/NotificationChannelManager.types.d.ts +91 -0
  198. package/build/NotificationChannelManager.types.d.ts.map +1 -0
  199. package/build/NotificationChannelManager.types.js +53 -0
  200. package/build/NotificationChannelManager.types.js.map +1 -0
  201. package/build/NotificationPermissions.d.ts +56 -0
  202. package/build/NotificationPermissions.d.ts.map +1 -0
  203. package/build/NotificationPermissions.js +79 -0
  204. package/build/NotificationPermissions.js.map +1 -0
  205. package/build/NotificationPermissions.types.d.ts +94 -0
  206. package/build/NotificationPermissions.types.d.ts.map +1 -0
  207. package/build/NotificationPermissions.types.js +21 -0
  208. package/build/NotificationPermissions.types.js.map +1 -0
  209. package/build/NotificationPermissionsModule.d.ts +4 -0
  210. package/build/NotificationPermissionsModule.d.ts.map +1 -0
  211. package/build/NotificationPermissionsModule.js +67 -0
  212. package/build/NotificationPermissionsModule.js.map +1 -0
  213. package/build/NotificationPermissionsModule.kepler.d.ts +3 -0
  214. package/build/NotificationPermissionsModule.kepler.d.ts.map +1 -0
  215. package/build/NotificationPermissionsModule.kepler.js +9 -0
  216. package/build/NotificationPermissionsModule.kepler.js.map +1 -0
  217. package/build/NotificationPermissionsModule.native.d.ts +4 -0
  218. package/build/NotificationPermissionsModule.native.d.ts.map +1 -0
  219. package/build/NotificationPermissionsModule.native.js +3 -0
  220. package/build/NotificationPermissionsModule.native.js.map +1 -0
  221. package/build/NotificationPermissionsModule.types.d.ts +7 -0
  222. package/build/NotificationPermissionsModule.types.d.ts.map +1 -0
  223. package/build/NotificationPermissionsModule.types.js +2 -0
  224. package/build/NotificationPermissionsModule.types.js.map +1 -0
  225. package/build/NotificationPresenterModule.d.ts +4 -0
  226. package/build/NotificationPresenterModule.d.ts.map +1 -0
  227. package/build/NotificationPresenterModule.js +5 -0
  228. package/build/NotificationPresenterModule.js.map +1 -0
  229. package/build/NotificationPresenterModule.kepler.d.ts +4 -0
  230. package/build/NotificationPresenterModule.kepler.d.ts.map +1 -0
  231. package/build/NotificationPresenterModule.kepler.js +55 -0
  232. package/build/NotificationPresenterModule.kepler.js.map +1 -0
  233. package/build/NotificationPresenterModule.native.d.ts +4 -0
  234. package/build/NotificationPresenterModule.native.d.ts.map +1 -0
  235. package/build/NotificationPresenterModule.native.js +3 -0
  236. package/build/NotificationPresenterModule.native.js.map +1 -0
  237. package/build/NotificationPresenterModule.types.d.ts +9 -0
  238. package/build/NotificationPresenterModule.types.d.ts.map +1 -0
  239. package/build/NotificationPresenterModule.types.js +2 -0
  240. package/build/NotificationPresenterModule.types.js.map +1 -0
  241. package/build/NotificationScheduler.d.ts +4 -0
  242. package/build/NotificationScheduler.d.ts.map +1 -0
  243. package/build/NotificationScheduler.js +5 -0
  244. package/build/NotificationScheduler.js.map +1 -0
  245. package/build/NotificationScheduler.kepler.d.ts +4 -0
  246. package/build/NotificationScheduler.kepler.d.ts.map +1 -0
  247. package/build/NotificationScheduler.kepler.js +50 -0
  248. package/build/NotificationScheduler.kepler.js.map +1 -0
  249. package/build/NotificationScheduler.native.d.ts +4 -0
  250. package/build/NotificationScheduler.native.d.ts.map +1 -0
  251. package/build/NotificationScheduler.native.js +3 -0
  252. package/build/NotificationScheduler.native.js.map +1 -0
  253. package/build/NotificationScheduler.types.d.ts +65 -0
  254. package/build/NotificationScheduler.types.d.ts.map +1 -0
  255. package/build/NotificationScheduler.types.js +2 -0
  256. package/build/NotificationScheduler.types.js.map +1 -0
  257. package/build/Notifications.types.d.ts +666 -0
  258. package/build/Notifications.types.d.ts.map +1 -0
  259. package/build/Notifications.types.js +12 -0
  260. package/build/Notifications.types.js.map +1 -0
  261. package/build/NotificationsEmitter.d.ts +75 -0
  262. package/build/NotificationsEmitter.d.ts.map +1 -0
  263. package/build/NotificationsEmitter.js +95 -0
  264. package/build/NotificationsEmitter.js.map +1 -0
  265. package/build/NotificationsEmitterModule.d.ts +4 -0
  266. package/build/NotificationsEmitterModule.d.ts.map +1 -0
  267. package/build/NotificationsEmitterModule.js +12 -0
  268. package/build/NotificationsEmitterModule.js.map +1 -0
  269. package/build/NotificationsEmitterModule.kepler.d.ts +3 -0
  270. package/build/NotificationsEmitterModule.kepler.d.ts.map +1 -0
  271. package/build/NotificationsEmitterModule.kepler.js +9 -0
  272. package/build/NotificationsEmitterModule.kepler.js.map +1 -0
  273. package/build/NotificationsEmitterModule.native.d.ts +4 -0
  274. package/build/NotificationsEmitterModule.native.d.ts.map +1 -0
  275. package/build/NotificationsEmitterModule.native.js +3 -0
  276. package/build/NotificationsEmitterModule.native.js.map +1 -0
  277. package/build/NotificationsEmitterModule.types.d.ts +6 -0
  278. package/build/NotificationsEmitterModule.types.d.ts.map +1 -0
  279. package/build/NotificationsEmitterModule.types.js +2 -0
  280. package/build/NotificationsEmitterModule.types.js.map +1 -0
  281. package/build/NotificationsHandler.d.ts +60 -0
  282. package/build/NotificationsHandler.d.ts.map +1 -0
  283. package/build/NotificationsHandler.js +72 -0
  284. package/build/NotificationsHandler.js.map +1 -0
  285. package/build/NotificationsHandlerModule.d.ts +4 -0
  286. package/build/NotificationsHandlerModule.d.ts.map +1 -0
  287. package/build/NotificationsHandlerModule.js +12 -0
  288. package/build/NotificationsHandlerModule.js.map +1 -0
  289. package/build/NotificationsHandlerModule.kepler.d.ts +3 -0
  290. package/build/NotificationsHandlerModule.kepler.d.ts.map +1 -0
  291. package/build/NotificationsHandlerModule.kepler.js +9 -0
  292. package/build/NotificationsHandlerModule.kepler.js.map +1 -0
  293. package/build/NotificationsHandlerModule.native.d.ts +4 -0
  294. package/build/NotificationsHandlerModule.native.d.ts.map +1 -0
  295. package/build/NotificationsHandlerModule.native.js +3 -0
  296. package/build/NotificationsHandlerModule.native.js.map +1 -0
  297. package/build/NotificationsHandlerModule.types.d.ts +6 -0
  298. package/build/NotificationsHandlerModule.types.d.ts.map +1 -0
  299. package/build/NotificationsHandlerModule.types.js +2 -0
  300. package/build/NotificationsHandlerModule.types.js.map +1 -0
  301. package/build/PushTokenManager.d.ts +4 -0
  302. package/build/PushTokenManager.d.ts.map +1 -0
  303. package/build/PushTokenManager.js +12 -0
  304. package/build/PushTokenManager.js.map +1 -0
  305. package/build/PushTokenManager.kepler.d.ts +3 -0
  306. package/build/PushTokenManager.kepler.d.ts.map +1 -0
  307. package/build/PushTokenManager.kepler.js +9 -0
  308. package/build/PushTokenManager.kepler.js.map +1 -0
  309. package/build/PushTokenManager.native.d.ts +4 -0
  310. package/build/PushTokenManager.native.d.ts.map +1 -0
  311. package/build/PushTokenManager.native.js +3 -0
  312. package/build/PushTokenManager.native.js.map +1 -0
  313. package/build/PushTokenManager.types.d.ts +6 -0
  314. package/build/PushTokenManager.types.d.ts.map +1 -0
  315. package/build/PushTokenManager.types.js +2 -0
  316. package/build/PushTokenManager.types.js.map +1 -0
  317. package/build/ServerRegistrationModule.d.ts +4 -0
  318. package/build/ServerRegistrationModule.d.ts.map +1 -0
  319. package/build/ServerRegistrationModule.js +5 -0
  320. package/build/ServerRegistrationModule.js.map +1 -0
  321. package/build/ServerRegistrationModule.kepler.d.ts +3 -0
  322. package/build/ServerRegistrationModule.kepler.d.ts.map +1 -0
  323. package/build/ServerRegistrationModule.kepler.js +9 -0
  324. package/build/ServerRegistrationModule.kepler.js.map +1 -0
  325. package/build/ServerRegistrationModule.native.d.ts +4 -0
  326. package/build/ServerRegistrationModule.native.d.ts.map +1 -0
  327. package/build/ServerRegistrationModule.native.js +3 -0
  328. package/build/ServerRegistrationModule.native.js.map +1 -0
  329. package/build/ServerRegistrationModule.types.d.ts +7 -0
  330. package/build/ServerRegistrationModule.types.d.ts.map +1 -0
  331. package/build/ServerRegistrationModule.types.js +2 -0
  332. package/build/ServerRegistrationModule.types.js.map +1 -0
  333. package/build/ServerRegistrationModule.web.d.ts +4 -0
  334. package/build/ServerRegistrationModule.web.d.ts.map +1 -0
  335. package/build/ServerRegistrationModule.web.js +50 -0
  336. package/build/ServerRegistrationModule.web.js.map +1 -0
  337. package/build/TokenEmitter.d.ts +42 -0
  338. package/build/TokenEmitter.d.ts.map +1 -0
  339. package/build/TokenEmitter.js +44 -0
  340. package/build/TokenEmitter.js.map +1 -0
  341. package/build/Tokens.types.d.ts +99 -0
  342. package/build/Tokens.types.d.ts.map +1 -0
  343. package/build/Tokens.types.js +2 -0
  344. package/build/Tokens.types.js.map +1 -0
  345. package/build/cancelAllScheduledNotificationsAsync.d.ts +7 -0
  346. package/build/cancelAllScheduledNotificationsAsync.d.ts.map +1 -0
  347. package/build/cancelAllScheduledNotificationsAsync.js +14 -0
  348. package/build/cancelAllScheduledNotificationsAsync.js.map +1 -0
  349. package/build/cancelScheduledNotificationAsync.d.ts +22 -0
  350. package/build/cancelScheduledNotificationAsync.d.ts.map +1 -0
  351. package/build/cancelScheduledNotificationAsync.js +29 -0
  352. package/build/cancelScheduledNotificationAsync.js.map +1 -0
  353. package/build/deleteNotificationCategoryAsync.d.ts +11 -0
  354. package/build/deleteNotificationCategoryAsync.d.ts.map +1 -0
  355. package/build/deleteNotificationCategoryAsync.js +19 -0
  356. package/build/deleteNotificationCategoryAsync.js.map +1 -0
  357. package/build/deleteNotificationChannelAsync.android.d.ts +2 -0
  358. package/build/deleteNotificationChannelAsync.android.d.ts.map +1 -0
  359. package/build/deleteNotificationChannelAsync.android.js +9 -0
  360. package/build/deleteNotificationChannelAsync.android.js.map +1 -0
  361. package/build/deleteNotificationChannelAsync.d.ts +9 -0
  362. package/build/deleteNotificationChannelAsync.d.ts.map +1 -0
  363. package/build/deleteNotificationChannelAsync.js +11 -0
  364. package/build/deleteNotificationChannelAsync.js.map +1 -0
  365. package/build/deleteNotificationChannelGroupAsync.android.d.ts +2 -0
  366. package/build/deleteNotificationChannelGroupAsync.android.d.ts.map +1 -0
  367. package/build/deleteNotificationChannelGroupAsync.android.js +9 -0
  368. package/build/deleteNotificationChannelGroupAsync.android.js.map +1 -0
  369. package/build/deleteNotificationChannelGroupAsync.d.ts +9 -0
  370. package/build/deleteNotificationChannelGroupAsync.d.ts.map +1 -0
  371. package/build/deleteNotificationChannelGroupAsync.js +11 -0
  372. package/build/deleteNotificationChannelGroupAsync.js.map +1 -0
  373. package/build/dismissAllNotificationsAsync.d.ts +7 -0
  374. package/build/dismissAllNotificationsAsync.d.ts.map +1 -0
  375. package/build/dismissAllNotificationsAsync.js +14 -0
  376. package/build/dismissAllNotificationsAsync.js.map +1 -0
  377. package/build/dismissNotificationAsync.d.ts +8 -0
  378. package/build/dismissNotificationAsync.d.ts.map +1 -0
  379. package/build/dismissNotificationAsync.js +15 -0
  380. package/build/dismissNotificationAsync.js.map +1 -0
  381. package/build/getAllScheduledNotificationsAsync.d.ts +8 -0
  382. package/build/getAllScheduledNotificationsAsync.d.ts.map +1 -0
  383. package/build/getAllScheduledNotificationsAsync.js +14 -0
  384. package/build/getAllScheduledNotificationsAsync.js.map +1 -0
  385. package/build/getBadgeCountAsync.d.ts +8 -0
  386. package/build/getBadgeCountAsync.d.ts.map +1 -0
  387. package/build/getBadgeCountAsync.js +15 -0
  388. package/build/getBadgeCountAsync.js.map +1 -0
  389. package/build/getDevicePushTokenAsync.d.ts +8 -0
  390. package/build/getDevicePushTokenAsync.d.ts.map +1 -0
  391. package/build/getDevicePushTokenAsync.js +27 -0
  392. package/build/getDevicePushTokenAsync.js.map +1 -0
  393. package/build/getDevicePushTokenAsync.web.d.ts +3 -0
  394. package/build/getDevicePushTokenAsync.web.d.ts.map +1 -0
  395. package/build/getDevicePushTokenAsync.web.js +84 -0
  396. package/build/getDevicePushTokenAsync.web.js.map +1 -0
  397. package/build/getExpoPushTokenAsync.d.ts +40 -0
  398. package/build/getExpoPushTokenAsync.d.ts.map +1 -0
  399. package/build/getExpoPushTokenAsync.js +177 -0
  400. package/build/getExpoPushTokenAsync.js.map +1 -0
  401. package/build/getNextTriggerDateAsync.d.ts +26 -0
  402. package/build/getNextTriggerDateAsync.d.ts.map +1 -0
  403. package/build/getNextTriggerDateAsync.js +33 -0
  404. package/build/getNextTriggerDateAsync.js.map +1 -0
  405. package/build/getNotificationCategoriesAsync.d.ts +11 -0
  406. package/build/getNotificationCategoriesAsync.d.ts.map +1 -0
  407. package/build/getNotificationCategoriesAsync.js +18 -0
  408. package/build/getNotificationCategoriesAsync.js.map +1 -0
  409. package/build/getNotificationChannelAsync.android.d.ts +3 -0
  410. package/build/getNotificationChannelAsync.android.d.ts.map +1 -0
  411. package/build/getNotificationChannelAsync.android.js +9 -0
  412. package/build/getNotificationChannelAsync.android.js.map +1 -0
  413. package/build/getNotificationChannelAsync.d.ts +11 -0
  414. package/build/getNotificationChannelAsync.d.ts.map +1 -0
  415. package/build/getNotificationChannelAsync.js +13 -0
  416. package/build/getNotificationChannelAsync.js.map +1 -0
  417. package/build/getNotificationChannelGroupAsync.android.d.ts +3 -0
  418. package/build/getNotificationChannelGroupAsync.android.d.ts.map +1 -0
  419. package/build/getNotificationChannelGroupAsync.android.js +9 -0
  420. package/build/getNotificationChannelGroupAsync.android.js.map +1 -0
  421. package/build/getNotificationChannelGroupAsync.d.ts +12 -0
  422. package/build/getNotificationChannelGroupAsync.d.ts.map +1 -0
  423. package/build/getNotificationChannelGroupAsync.js +14 -0
  424. package/build/getNotificationChannelGroupAsync.js.map +1 -0
  425. package/build/getNotificationChannelGroupsAsync.android.d.ts +3 -0
  426. package/build/getNotificationChannelGroupsAsync.android.d.ts.map +1 -0
  427. package/build/getNotificationChannelGroupsAsync.android.js +9 -0
  428. package/build/getNotificationChannelGroupsAsync.android.js.map +1 -0
  429. package/build/getNotificationChannelGroupsAsync.d.ts +10 -0
  430. package/build/getNotificationChannelGroupsAsync.d.ts.map +1 -0
  431. package/build/getNotificationChannelGroupsAsync.js +12 -0
  432. package/build/getNotificationChannelGroupsAsync.js.map +1 -0
  433. package/build/getNotificationChannelsAsync.android.d.ts +3 -0
  434. package/build/getNotificationChannelsAsync.android.d.ts.map +1 -0
  435. package/build/getNotificationChannelsAsync.android.js +9 -0
  436. package/build/getNotificationChannelsAsync.android.js.map +1 -0
  437. package/build/getNotificationChannelsAsync.d.ts +10 -0
  438. package/build/getNotificationChannelsAsync.d.ts.map +1 -0
  439. package/build/getNotificationChannelsAsync.js +12 -0
  440. package/build/getNotificationChannelsAsync.js.map +1 -0
  441. package/build/getPresentedNotificationsAsync.d.ts +9 -0
  442. package/build/getPresentedNotificationsAsync.d.ts.map +1 -0
  443. package/build/getPresentedNotificationsAsync.js +15 -0
  444. package/build/getPresentedNotificationsAsync.js.map +1 -0
  445. package/build/index.d.ts +39 -0
  446. package/build/index.d.ts.map +1 -0
  447. package/build/index.js +39 -0
  448. package/build/index.js.map +1 -0
  449. package/build/kepler/NotificationContent.d.ts +43 -0
  450. package/build/kepler/NotificationContent.d.ts.map +1 -0
  451. package/build/kepler/NotificationContent.js +96 -0
  452. package/build/kepler/NotificationContent.js.map +1 -0
  453. package/build/kepler/index.d.ts +3 -0
  454. package/build/kepler/index.d.ts.map +1 -0
  455. package/build/kepler/index.js +15 -0
  456. package/build/kepler/index.js.map +1 -0
  457. package/build/kepler/native-notification-manager.d.ts +3 -0
  458. package/build/kepler/native-notification-manager.d.ts.map +1 -0
  459. package/build/kepler/native-notification-manager.js +10 -0
  460. package/build/kepler/native-notification-manager.js.map +1 -0
  461. package/build/kepler/types/NotificationManagerTypes.d.ts +373 -0
  462. package/build/kepler/types/NotificationManagerTypes.d.ts.map +1 -0
  463. package/build/kepler/types/NotificationManagerTypes.js +279 -0
  464. package/build/kepler/types/NotificationManagerTypes.js.map +1 -0
  465. package/build/kepler/types/index.d.ts +3 -0
  466. package/build/kepler/types/index.d.ts.map +1 -0
  467. package/build/kepler/types/index.js +15 -0
  468. package/build/kepler/types/index.js.map +1 -0
  469. package/build/presentNotificationAsync.d.ts +11 -0
  470. package/build/presentNotificationAsync.d.ts.map +1 -0
  471. package/build/presentNotificationAsync.js +22 -0
  472. package/build/presentNotificationAsync.js.map +1 -0
  473. package/build/registerTaskAsync.d.ts +29 -0
  474. package/build/registerTaskAsync.d.ts.map +1 -0
  475. package/build/registerTaskAsync.js +37 -0
  476. package/build/registerTaskAsync.js.map +1 -0
  477. package/build/scheduleNotificationAsync.d.ts +60 -0
  478. package/build/scheduleNotificationAsync.d.ts.map +1 -0
  479. package/build/scheduleNotificationAsync.js +261 -0
  480. package/build/scheduleNotificationAsync.js.map +1 -0
  481. package/build/setBadgeCountAsync.d.ts +19 -0
  482. package/build/setBadgeCountAsync.d.ts.map +1 -0
  483. package/build/setBadgeCountAsync.js +19 -0
  484. package/build/setBadgeCountAsync.js.map +1 -0
  485. package/build/setNotificationCategoryAsync.d.ts +15 -0
  486. package/build/setNotificationCategoryAsync.d.ts.map +1 -0
  487. package/build/setNotificationCategoryAsync.js +22 -0
  488. package/build/setNotificationCategoryAsync.js.map +1 -0
  489. package/build/setNotificationChannelAsync.android.d.ts +3 -0
  490. package/build/setNotificationChannelAsync.android.d.ts.map +1 -0
  491. package/build/setNotificationChannelAsync.android.js +9 -0
  492. package/build/setNotificationChannelAsync.android.js.map +1 -0
  493. package/build/setNotificationChannelAsync.d.ts +22 -0
  494. package/build/setNotificationChannelAsync.d.ts.map +1 -0
  495. package/build/setNotificationChannelAsync.js +24 -0
  496. package/build/setNotificationChannelAsync.js.map +1 -0
  497. package/build/setNotificationChannelGroupAsync.android.d.ts +3 -0
  498. package/build/setNotificationChannelGroupAsync.android.d.ts.map +1 -0
  499. package/build/setNotificationChannelGroupAsync.android.js +9 -0
  500. package/build/setNotificationChannelGroupAsync.android.js.map +1 -0
  501. package/build/setNotificationChannelGroupAsync.d.ts +12 -0
  502. package/build/setNotificationChannelGroupAsync.d.ts.map +1 -0
  503. package/build/setNotificationChannelGroupAsync.js +14 -0
  504. package/build/setNotificationChannelGroupAsync.js.map +1 -0
  505. package/build/unregisterForNotificationsAsync.d.ts +2 -0
  506. package/build/unregisterForNotificationsAsync.d.ts.map +1 -0
  507. package/build/unregisterForNotificationsAsync.js +10 -0
  508. package/build/unregisterForNotificationsAsync.js.map +1 -0
  509. package/build/unregisterTaskAsync.d.ts +7 -0
  510. package/build/unregisterTaskAsync.d.ts.map +1 -0
  511. package/build/unregisterTaskAsync.js +15 -0
  512. package/build/unregisterTaskAsync.js.map +1 -0
  513. package/build/useLastNotificationResponse.d.ts +38 -0
  514. package/build/useLastNotificationResponse.d.ts.map +1 -0
  515. package/build/useLastNotificationResponse.js +63 -0
  516. package/build/useLastNotificationResponse.js.map +1 -0
  517. package/build/utils/keplerUuidUtils.d.ts +5 -0
  518. package/build/utils/keplerUuidUtils.d.ts.map +1 -0
  519. package/build/utils/keplerUuidUtils.js +15 -0
  520. package/build/utils/keplerUuidUtils.js.map +1 -0
  521. package/build/utils/updateDevicePushTokenAsync.d.ts +3 -0
  522. package/build/utils/updateDevicePushTokenAsync.d.ts.map +1 -0
  523. package/build/utils/updateDevicePushTokenAsync.js +115 -0
  524. package/build/utils/updateDevicePushTokenAsync.js.map +1 -0
  525. package/expo-module.config.json +20 -0
  526. package/ios/EXNotifications/Building/EXNotificationBuilder.h +19 -0
  527. package/ios/EXNotifications/Building/EXNotificationBuilder.m +91 -0
  528. package/ios/EXNotifications/EXBadgeModule.h +11 -0
  529. package/ios/EXNotifications/EXBadgeModule.m +36 -0
  530. package/ios/EXNotifications/EXServerRegistrationModule.h +19 -0
  531. package/ios/EXNotifications/EXServerRegistrationModule.m +194 -0
  532. package/ios/EXNotifications/Notifications/Background/EXBackgroundNotificationTasksModule.h +16 -0
  533. package/ios/EXNotifications/Notifications/Background/EXBackgroundNotificationTasksModule.m +62 -0
  534. package/ios/EXNotifications/Notifications/Background/EXBackgroundRemoteNotificationConsumer.h +14 -0
  535. package/ios/EXNotifications/Notifications/Background/EXBackgroundRemoteNotificationConsumer.m +51 -0
  536. package/ios/EXNotifications/Notifications/Categories/EXNotificationCategoriesModule.h +25 -0
  537. package/ios/EXNotifications/Notifications/Categories/EXNotificationCategoriesModule.m +217 -0
  538. package/ios/EXNotifications/Notifications/EXNotificationCenterDelegate.h +29 -0
  539. package/ios/EXNotifications/Notifications/EXNotificationCenterDelegate.m +209 -0
  540. package/ios/EXNotifications/Notifications/EXNotificationSerializer.h +16 -0
  541. package/ios/EXNotifications/Notifications/EXNotificationSerializer.m +232 -0
  542. package/ios/EXNotifications/Notifications/EXNotificationsDelegate.h +27 -0
  543. package/ios/EXNotifications/Notifications/Emitter/EXNotificationsEmitter.h +17 -0
  544. package/ios/EXNotifications/Notifications/Emitter/EXNotificationsEmitter.m +114 -0
  545. package/ios/EXNotifications/Notifications/Handler/EXNotificationsHandlerModule.h +12 -0
  546. package/ios/EXNotifications/Notifications/Handler/EXNotificationsHandlerModule.m +109 -0
  547. package/ios/EXNotifications/Notifications/Handler/EXSingleNotificationHandlerTask.h +33 -0
  548. package/ios/EXNotifications/Notifications/Handler/EXSingleNotificationHandlerTask.m +124 -0
  549. package/ios/EXNotifications/Notifications/NSDictionary+EXNotificationsVerifyingClass.h +7 -0
  550. package/ios/EXNotifications/Notifications/NSDictionary+EXNotificationsVerifyingClass.m +19 -0
  551. package/ios/EXNotifications/Notifications/Presenting/EXNotificationPresentationModule.h +13 -0
  552. package/ios/EXNotifications/Notifications/Presenting/EXNotificationPresentationModule.m +124 -0
  553. package/ios/EXNotifications/Notifications/Scheduling/EXNotificationSchedulerModule.h +21 -0
  554. package/ios/EXNotifications/Notifications/Scheduling/EXNotificationSchedulerModule.m +263 -0
  555. package/ios/EXNotifications/Permissions/EXLegacyRemoteNotificationPermissionRequester.h +13 -0
  556. package/ios/EXNotifications/Permissions/EXLegacyRemoteNotificationPermissionRequester.m +135 -0
  557. package/ios/EXNotifications/Permissions/EXNotificationPermissionsModule.h +8 -0
  558. package/ios/EXNotifications/Permissions/EXNotificationPermissionsModule.m +67 -0
  559. package/ios/EXNotifications/Permissions/EXRemoteNotificationPermissionSingletonModule.h +29 -0
  560. package/ios/EXNotifications/Permissions/EXRemoteNotificationPermissionSingletonModule.m +68 -0
  561. package/ios/EXNotifications/Permissions/EXUserFacingNotificationsPermissionsRequester.h +15 -0
  562. package/ios/EXNotifications/Permissions/EXUserFacingNotificationsPermissionsRequester.m +202 -0
  563. package/ios/EXNotifications/PushToken/EXPushTokenListener.h +14 -0
  564. package/ios/EXNotifications/PushToken/EXPushTokenManager.h +24 -0
  565. package/ios/EXNotifications/PushToken/EXPushTokenManager.m +63 -0
  566. package/ios/EXNotifications/PushToken/EXPushTokenModule.h +9 -0
  567. package/ios/EXNotifications/PushToken/EXPushTokenModule.m +154 -0
  568. package/ios/EXNotifications.podspec +25 -0
  569. package/package.json +67 -0
  570. package/plugin/build/withNotifications.d.ts +28 -0
  571. package/plugin/build/withNotifications.js +12 -0
  572. package/plugin/build/withNotificationsAndroid.d.ts +42 -0
  573. package/plugin/build/withNotificationsAndroid.js +184 -0
  574. package/plugin/build/withNotificationsIOS.d.ts +14 -0
  575. package/plugin/build/withNotificationsIOS.js +58 -0
  576. package/plugin/jest.config.js +1 -0
  577. package/plugin/src/withNotifications.ts +40 -0
  578. package/plugin/src/withNotificationsAndroid.ts +239 -0
  579. package/plugin/src/withNotificationsIOS.ts +78 -0
  580. package/plugin/tsconfig.json +9 -0
  581. package/src/BackgroundNotificationTasksModule.kepler.ts +8 -0
  582. package/src/BackgroundNotificationTasksModule.native.ts +7 -0
  583. package/src/BackgroundNotificationTasksModule.ts +8 -0
  584. package/src/BackgroundNotificationTasksModule.types.ts +12 -0
  585. package/src/BackgroundNotificationTasksModule.web.ts +8 -0
  586. package/src/BadgeModule.kepler.ts +8 -0
  587. package/src/BadgeModule.native.ts +15 -0
  588. package/src/BadgeModule.ts +6 -0
  589. package/src/BadgeModule.types.ts +11 -0
  590. package/src/BadgeModule.web.ts +28 -0
  591. package/src/DevicePushTokenAutoRegistration.fx.ts +119 -0
  592. package/src/NotificationCategoriesModule.kepler.ts +10 -0
  593. package/src/NotificationCategoriesModule.native.ts +7 -0
  594. package/src/NotificationCategoriesModule.ts +15 -0
  595. package/src/NotificationCategoriesModule.types.ts +22 -0
  596. package/src/NotificationCategoriesModule.web.ts +17 -0
  597. package/src/NotificationChannelGroupManager.kepler.ts +8 -0
  598. package/src/NotificationChannelGroupManager.native.ts +7 -0
  599. package/src/NotificationChannelGroupManager.ts +6 -0
  600. package/src/NotificationChannelGroupManager.types.ts +34 -0
  601. package/src/NotificationChannelManager.kepler.ts +8 -0
  602. package/src/NotificationChannelManager.native.ts +5 -0
  603. package/src/NotificationChannelManager.ts +6 -0
  604. package/src/NotificationChannelManager.types.ts +115 -0
  605. package/src/NotificationPermissions.ts +91 -0
  606. package/src/NotificationPermissions.types.ts +102 -0
  607. package/src/NotificationPermissionsModule.kepler.ts +8 -0
  608. package/src/NotificationPermissionsModule.native.ts +7 -0
  609. package/src/NotificationPermissionsModule.ts +83 -0
  610. package/src/NotificationPermissionsModule.types.ts +13 -0
  611. package/src/NotificationPresenterModule.kepler.ts +67 -0
  612. package/src/NotificationPresenterModule.native.ts +5 -0
  613. package/src/NotificationPresenterModule.ts +6 -0
  614. package/src/NotificationPresenterModule.types.ts +13 -0
  615. package/src/NotificationScheduler.kepler.ts +63 -0
  616. package/src/NotificationScheduler.native.ts +5 -0
  617. package/src/NotificationScheduler.ts +6 -0
  618. package/src/NotificationScheduler.types.ts +89 -0
  619. package/src/Notifications.types.ts +722 -0
  620. package/src/NotificationsEmitter.ts +111 -0
  621. package/src/NotificationsEmitterModule.kepler.ts +8 -0
  622. package/src/NotificationsEmitterModule.native.ts +5 -0
  623. package/src/NotificationsEmitterModule.ts +17 -0
  624. package/src/NotificationsEmitterModule.types.ts +7 -0
  625. package/src/NotificationsHandler.ts +120 -0
  626. package/src/NotificationsHandlerModule.kepler.ts +8 -0
  627. package/src/NotificationsHandlerModule.native.ts +5 -0
  628. package/src/NotificationsHandlerModule.ts +17 -0
  629. package/src/NotificationsHandlerModule.types.ts +10 -0
  630. package/src/PushTokenManager.kepler.ts +8 -0
  631. package/src/PushTokenManager.native.ts +5 -0
  632. package/src/PushTokenManager.ts +17 -0
  633. package/src/PushTokenManager.types.ts +6 -0
  634. package/src/ServerRegistrationModule.kepler.ts +8 -0
  635. package/src/ServerRegistrationModule.native.ts +7 -0
  636. package/src/ServerRegistrationModule.ts +6 -0
  637. package/src/ServerRegistrationModule.types.ts +7 -0
  638. package/src/ServerRegistrationModule.web.ts +56 -0
  639. package/src/TokenEmitter.ts +56 -0
  640. package/src/Tokens.types.ts +110 -0
  641. package/src/cancelAllScheduledNotificationsAsync.ts +16 -0
  642. package/src/cancelScheduledNotificationAsync.ts +31 -0
  643. package/src/deleteNotificationCategoryAsync.ts +23 -0
  644. package/src/deleteNotificationChannelAsync.android.ts +11 -0
  645. package/src/deleteNotificationChannelAsync.ts +10 -0
  646. package/src/deleteNotificationChannelGroupAsync.android.ts +11 -0
  647. package/src/deleteNotificationChannelGroupAsync.ts +10 -0
  648. package/src/dismissAllNotificationsAsync.ts +16 -0
  649. package/src/dismissNotificationAsync.ts +19 -0
  650. package/src/getAllScheduledNotificationsAsync.ts +17 -0
  651. package/src/getBadgeCountAsync.ts +17 -0
  652. package/src/getDevicePushTokenAsync.ts +31 -0
  653. package/src/getDevicePushTokenAsync.web.ts +122 -0
  654. package/src/getExpoPushTokenAsync.ts +238 -0
  655. package/src/getNextTriggerDateAsync.ts +38 -0
  656. package/src/getNotificationCategoriesAsync.ts +21 -0
  657. package/src/getNotificationChannelAsync.android.ts +13 -0
  658. package/src/getNotificationChannelAsync.ts +16 -0
  659. package/src/getNotificationChannelGroupAsync.android.ts +14 -0
  660. package/src/getNotificationChannelGroupAsync.ts +17 -0
  661. package/src/getNotificationChannelGroupsAsync.android.ts +13 -0
  662. package/src/getNotificationChannelGroupsAsync.ts +15 -0
  663. package/src/getNotificationChannelsAsync.android.ts +11 -0
  664. package/src/getNotificationChannelsAsync.ts +13 -0
  665. package/src/getPresentedNotificationsAsync.ts +18 -0
  666. package/src/index.ts +38 -0
  667. package/src/kepler/NotificationContent.ts +119 -0
  668. package/src/kepler/index.ts +16 -0
  669. package/src/kepler/native-notification-manager.ts +10 -0
  670. package/src/kepler/types/NotificationManagerTypes.ts +508 -0
  671. package/src/kepler/types/index.ts +16 -0
  672. package/src/presentNotificationAsync.ts +32 -0
  673. package/src/registerTaskAsync.ts +39 -0
  674. package/src/scheduleNotificationAsync.ts +335 -0
  675. package/src/setBadgeCountAsync.ts +32 -0
  676. package/src/setNotificationCategoryAsync.ts +37 -0
  677. package/src/setNotificationChannelAsync.android.ts +15 -0
  678. package/src/setNotificationChannelAsync.ts +28 -0
  679. package/src/setNotificationChannelGroupAsync.android.ts +18 -0
  680. package/src/setNotificationChannelGroupAsync.ts +21 -0
  681. package/src/unregisterForNotificationsAsync.ts +11 -0
  682. package/src/unregisterTaskAsync.ts +17 -0
  683. package/src/useLastNotificationResponse.ts +70 -0
  684. package/src/utils/keplerUuidUtils.ts +29 -0
  685. package/src/utils/updateDevicePushTokenAsync.ts +147 -0
  686. 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
+ }