voltra 1.3.1 → 1.4.0

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 (217) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/android/build.gradle +1 -3
  3. package/android/src/main/AndroidManifest.xml +1 -3
  4. package/android/src/main/java/voltra/VoltraModule.kt +120 -23
  5. package/android/src/main/java/voltra/VoltraNotificationManager.kt +674 -100
  6. package/android/src/main/java/voltra/VoltraOngoingNotificationDismissedReceiver.kt +15 -0
  7. package/android/src/main/java/voltra/generated/ShortNames.kt +1 -0
  8. package/android/src/main/java/voltra/glance/GlanceFactory.kt +1 -1
  9. package/android/src/main/java/voltra/glance/RemoteViewsGenerator.kt +1 -1
  10. package/android/src/main/java/voltra/glance/StyleUtils.kt +8 -7
  11. package/android/src/main/java/voltra/glance/VoltraRenderContext.kt +1 -1
  12. package/android/src/main/java/voltra/glance/renderers/ButtonRenderers.kt +16 -18
  13. package/android/src/main/java/voltra/glance/renderers/ChartBitmapRenderer.kt +18 -22
  14. package/android/src/main/java/voltra/glance/renderers/ChartRenderers.kt +31 -17
  15. package/android/src/main/java/voltra/glance/renderers/ComplexRenderers.kt +8 -17
  16. package/android/src/main/java/voltra/glance/renderers/InputRenderers.kt +7 -6
  17. package/android/src/main/java/voltra/glance/renderers/LayoutRenderers.kt +1 -0
  18. package/android/src/main/java/voltra/glance/renderers/LazyListRenderers.kt +2 -2
  19. package/android/src/main/java/voltra/glance/renderers/ProgressRenderers.kt +4 -4
  20. package/android/src/main/java/voltra/glance/renderers/RenderCommon.kt +6 -32
  21. package/android/src/main/java/voltra/glance/renderers/RendererJson.kt +128 -0
  22. package/android/src/main/java/voltra/glance/renderers/TextAndImageRenderers.kt +9 -2
  23. package/android/src/main/java/voltra/glance/renderers/TextBitmapRenderer.kt +4 -1
  24. package/android/src/main/java/voltra/models/VoltraPayload.kt +24 -6
  25. package/android/src/main/java/voltra/ongoingnotification/AndroidOngoingNotificationPayload.kt +93 -0
  26. package/android/src/main/java/voltra/ongoingnotification/AndroidOngoingNotificationPayloadParser.kt +13 -0
  27. package/android/src/main/java/voltra/parsing/VoltraDecompressor.kt +10 -10
  28. package/android/src/main/java/voltra/parsing/VoltraPayloadParser.kt +11 -7
  29. package/android/src/main/java/voltra/parsing/VoltraSerializers.kt +231 -0
  30. package/android/src/main/java/voltra/styling/JSColorParser.kt +10 -6
  31. package/android/src/main/java/voltra/styling/JSStyleParser.kt +1 -1
  32. package/android/src/main/java/voltra/styling/StyleConverter.kt +2 -2
  33. package/android/src/main/java/voltra/styling/StyleModifiers.kt +10 -9
  34. package/android/src/main/java/voltra/styling/StyleStructures.kt +4 -6
  35. package/android/src/main/java/voltra/styling/VoltraColorValue.kt +101 -0
  36. package/android/src/main/java/voltra/widget/VoltraRefreshActionCallback.kt +1 -12
  37. package/android/src/main/java/voltra/widget/VoltraWidgetUpdateRequest.kt +30 -0
  38. package/android/src/main/java/voltra/widget/VoltraWidgetUpdateWorker.kt +1 -12
  39. package/build/cjs/VoltraModule.js.map +1 -1
  40. package/build/cjs/android/client.js +1 -1
  41. package/build/cjs/android/client.js.map +1 -1
  42. package/build/cjs/android/components/VoltraView.js +3 -77
  43. package/build/cjs/android/components/VoltraView.js.map +1 -1
  44. package/build/cjs/android/components/VoltraWidgetPreview.js +3 -30
  45. package/build/cjs/android/components/VoltraWidgetPreview.js.map +1 -1
  46. package/build/cjs/android/dynamic-colors.js +6 -0
  47. package/build/cjs/android/dynamic-colors.js.map +1 -0
  48. package/build/cjs/android/index.js +28 -4
  49. package/build/cjs/android/index.js.map +1 -1
  50. package/build/cjs/android/jsx/AreaMark.js.map +1 -1
  51. package/build/cjs/android/jsx/BarMark.js.map +1 -1
  52. package/build/cjs/android/jsx/LineMark.js.map +1 -1
  53. package/build/cjs/android/jsx/PointMark.js.map +1 -1
  54. package/build/cjs/android/jsx/RuleMark.js.map +1 -1
  55. package/build/cjs/android/jsx/SectorMark.js.map +1 -1
  56. package/build/cjs/android/jsx/props/CheckBox.js.map +1 -1
  57. package/build/cjs/android/jsx/props/CircleIconButton.js.map +1 -1
  58. package/build/cjs/android/jsx/props/CircularProgressIndicator.js.map +1 -1
  59. package/build/cjs/android/jsx/props/FilledButton.js.map +1 -1
  60. package/build/cjs/android/jsx/props/Image.js.map +1 -1
  61. package/build/cjs/android/jsx/props/LinearProgressIndicator.js.map +1 -1
  62. package/build/cjs/android/jsx/props/OutlineButton.js.map +1 -1
  63. package/build/cjs/android/jsx/props/RadioButton.js.map +1 -1
  64. package/build/cjs/android/jsx/props/Scaffold.js.map +1 -1
  65. package/build/cjs/android/jsx/props/SquareIconButton.js.map +1 -1
  66. package/build/cjs/android/jsx/props/Switch.js.map +1 -1
  67. package/build/cjs/android/jsx/props/TitleBar.js.map +1 -1
  68. package/build/cjs/android/server.js +9 -15
  69. package/build/cjs/android/server.js.map +1 -1
  70. package/build/cjs/android/styles/types.js.map +1 -1
  71. package/build/cjs/android/widgets/api.js +8 -152
  72. package/build/cjs/android/widgets/api.js.map +1 -1
  73. package/build/cjs/android/widgets/renderer.js +5 -53
  74. package/build/cjs/android/widgets/renderer.js.map +1 -1
  75. package/build/cjs/client.js +24 -24
  76. package/build/cjs/client.js.map +1 -1
  77. package/build/cjs/live-activity/api.js +1 -1
  78. package/build/cjs/live-activity/api.js.map +1 -1
  79. package/build/cjs/styles/index.js.map +1 -1
  80. package/build/cjs/styles/types.js.map +1 -1
  81. package/build/cjs/types.js.map +1 -1
  82. package/build/cjs/widget-server.js +17 -16
  83. package/build/cjs/widget-server.js.map +1 -1
  84. package/build/cjs/widgets/renderer.js +1 -1
  85. package/build/cjs/widgets/renderer.js.map +1 -1
  86. package/build/esm/VoltraModule.js.map +1 -1
  87. package/build/esm/android/client.js +1 -1
  88. package/build/esm/android/client.js.map +1 -1
  89. package/build/esm/android/components/VoltraView.js +1 -43
  90. package/build/esm/android/components/VoltraView.js.map +1 -1
  91. package/build/esm/android/components/VoltraWidgetPreview.js +1 -26
  92. package/build/esm/android/components/VoltraWidgetPreview.js.map +1 -1
  93. package/build/esm/android/dynamic-colors.js +2 -0
  94. package/build/esm/android/dynamic-colors.js.map +1 -0
  95. package/build/esm/android/index.js +3 -1
  96. package/build/esm/android/index.js.map +1 -1
  97. package/build/esm/android/jsx/AreaMark.js.map +1 -1
  98. package/build/esm/android/jsx/BarMark.js.map +1 -1
  99. package/build/esm/android/jsx/LineMark.js.map +1 -1
  100. package/build/esm/android/jsx/PointMark.js.map +1 -1
  101. package/build/esm/android/jsx/RuleMark.js.map +1 -1
  102. package/build/esm/android/jsx/SectorMark.js.map +1 -1
  103. package/build/esm/android/jsx/props/CheckBox.js.map +1 -1
  104. package/build/esm/android/jsx/props/CircleIconButton.js.map +1 -1
  105. package/build/esm/android/jsx/props/CircularProgressIndicator.js.map +1 -1
  106. package/build/esm/android/jsx/props/FilledButton.js.map +1 -1
  107. package/build/esm/android/jsx/props/Image.js.map +1 -1
  108. package/build/esm/android/jsx/props/LinearProgressIndicator.js.map +1 -1
  109. package/build/esm/android/jsx/props/OutlineButton.js.map +1 -1
  110. package/build/esm/android/jsx/props/RadioButton.js.map +1 -1
  111. package/build/esm/android/jsx/props/Scaffold.js.map +1 -1
  112. package/build/esm/android/jsx/props/SquareIconButton.js.map +1 -1
  113. package/build/esm/android/jsx/props/Switch.js.map +1 -1
  114. package/build/esm/android/jsx/props/TitleBar.js.map +1 -1
  115. package/build/esm/android/server.js +2 -1
  116. package/build/esm/android/server.js.map +1 -1
  117. package/build/esm/android/styles/types.js.map +1 -1
  118. package/build/esm/android/widgets/api.js +1 -142
  119. package/build/esm/android/widgets/api.js.map +1 -1
  120. package/build/esm/android/widgets/renderer.js +1 -50
  121. package/build/esm/android/widgets/renderer.js.map +1 -1
  122. package/build/esm/client.js +1 -1
  123. package/build/esm/client.js.map +1 -1
  124. package/build/esm/live-activity/api.js +1 -1
  125. package/build/esm/live-activity/api.js.map +1 -1
  126. package/build/esm/styles/index.js.map +1 -1
  127. package/build/esm/styles/types.js.map +1 -1
  128. package/build/esm/types.js.map +1 -1
  129. package/build/esm/widget-server.js +13 -12
  130. package/build/esm/widget-server.js.map +1 -1
  131. package/build/esm/widgets/renderer.js +1 -1
  132. package/build/esm/widgets/renderer.js.map +1 -1
  133. package/build/types/VoltraModule.d.ts +1 -24
  134. package/build/types/VoltraModule.d.ts.map +1 -1
  135. package/build/types/android/client.d.ts +1 -1
  136. package/build/types/android/components/VoltraView.d.ts +1 -28
  137. package/build/types/android/components/VoltraView.d.ts.map +1 -1
  138. package/build/types/android/components/VoltraWidgetPreview.d.ts +1 -21
  139. package/build/types/android/components/VoltraWidgetPreview.d.ts.map +1 -1
  140. package/build/types/android/dynamic-colors.d.ts +2 -0
  141. package/build/types/android/dynamic-colors.d.ts.map +1 -0
  142. package/build/types/android/index.d.ts +18 -1
  143. package/build/types/android/index.d.ts.map +1 -1
  144. package/build/types/android/jsx/AreaMark.d.ts +2 -1
  145. package/build/types/android/jsx/AreaMark.d.ts.map +1 -1
  146. package/build/types/android/jsx/BarMark.d.ts +2 -1
  147. package/build/types/android/jsx/BarMark.d.ts.map +1 -1
  148. package/build/types/android/jsx/LineMark.d.ts +2 -1
  149. package/build/types/android/jsx/LineMark.d.ts.map +1 -1
  150. package/build/types/android/jsx/PointMark.d.ts +2 -1
  151. package/build/types/android/jsx/PointMark.d.ts.map +1 -1
  152. package/build/types/android/jsx/RuleMark.d.ts +2 -1
  153. package/build/types/android/jsx/RuleMark.d.ts.map +1 -1
  154. package/build/types/android/jsx/SectorMark.d.ts +2 -1
  155. package/build/types/android/jsx/SectorMark.d.ts.map +1 -1
  156. package/build/types/android/jsx/props/CheckBox.d.ts +3 -2
  157. package/build/types/android/jsx/props/CheckBox.d.ts.map +1 -1
  158. package/build/types/android/jsx/props/CircleIconButton.d.ts +3 -2
  159. package/build/types/android/jsx/props/CircleIconButton.d.ts.map +1 -1
  160. package/build/types/android/jsx/props/CircularProgressIndicator.d.ts +2 -1
  161. package/build/types/android/jsx/props/CircularProgressIndicator.d.ts.map +1 -1
  162. package/build/types/android/jsx/props/FilledButton.d.ts +3 -2
  163. package/build/types/android/jsx/props/FilledButton.d.ts.map +1 -1
  164. package/build/types/android/jsx/props/Image.d.ts +3 -2
  165. package/build/types/android/jsx/props/Image.d.ts.map +1 -1
  166. package/build/types/android/jsx/props/LinearProgressIndicator.d.ts +3 -2
  167. package/build/types/android/jsx/props/LinearProgressIndicator.d.ts.map +1 -1
  168. package/build/types/android/jsx/props/OutlineButton.d.ts +2 -1
  169. package/build/types/android/jsx/props/OutlineButton.d.ts.map +1 -1
  170. package/build/types/android/jsx/props/RadioButton.d.ts +3 -2
  171. package/build/types/android/jsx/props/RadioButton.d.ts.map +1 -1
  172. package/build/types/android/jsx/props/Scaffold.d.ts +2 -1
  173. package/build/types/android/jsx/props/Scaffold.d.ts.map +1 -1
  174. package/build/types/android/jsx/props/SquareIconButton.d.ts +3 -2
  175. package/build/types/android/jsx/props/SquareIconButton.d.ts.map +1 -1
  176. package/build/types/android/jsx/props/Switch.d.ts +5 -4
  177. package/build/types/android/jsx/props/Switch.d.ts.map +1 -1
  178. package/build/types/android/jsx/props/TitleBar.d.ts +3 -2
  179. package/build/types/android/jsx/props/TitleBar.d.ts.map +1 -1
  180. package/build/types/android/server.d.ts +4 -1
  181. package/build/types/android/server.d.ts.map +1 -1
  182. package/build/types/android/styles/types.d.ts +5 -4
  183. package/build/types/android/styles/types.d.ts.map +1 -1
  184. package/build/types/android/widgets/api.d.ts +1 -130
  185. package/build/types/android/widgets/api.d.ts.map +1 -1
  186. package/build/types/android/widgets/renderer.d.ts +1 -21
  187. package/build/types/android/widgets/renderer.d.ts.map +1 -1
  188. package/build/types/client.d.ts +2 -2
  189. package/build/types/styles/index.d.ts +1 -1
  190. package/build/types/styles/index.d.ts.map +1 -1
  191. package/build/types/styles/types.d.ts +1 -1
  192. package/build/types/styles/types.d.ts.map +1 -1
  193. package/build/types/types.d.ts +2 -1
  194. package/build/types/types.d.ts.map +1 -1
  195. package/build/types/widget-server.d.ts +4 -4
  196. package/build/types/widget-server.d.ts.map +1 -1
  197. package/ios/shared/ShortNames.swift +1 -0
  198. package/package.json +10 -8
  199. package/android/src/main/java/voltra/parsing/VoltraNodeDeserializer.kt +0 -43
  200. package/build/cjs/android/live-update/api.js +0 -215
  201. package/build/cjs/android/live-update/api.js.map +0 -1
  202. package/build/cjs/android/live-update/renderer.js +0 -46
  203. package/build/cjs/android/live-update/renderer.js.map +0 -1
  204. package/build/cjs/android/live-update/types.js +0 -3
  205. package/build/cjs/android/live-update/types.js.map +0 -1
  206. package/build/esm/android/live-update/api.js +0 -203
  207. package/build/esm/android/live-update/api.js.map +0 -1
  208. package/build/esm/android/live-update/renderer.js +0 -41
  209. package/build/esm/android/live-update/renderer.js.map +0 -1
  210. package/build/esm/android/live-update/types.js +0 -2
  211. package/build/esm/android/live-update/types.js.map +0 -1
  212. package/build/types/android/live-update/api.d.ts +0 -126
  213. package/build/types/android/live-update/api.d.ts.map +0 -1
  214. package/build/types/android/live-update/renderer.d.ts +0 -11
  215. package/build/types/android/live-update/renderer.d.ts.map +0 -1
  216. package/build/types/android/live-update/types.d.ts +0 -100
  217. package/build/types/android/live-update/types.d.ts.map +0 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,30 @@
1
1
  # voltra
2
2
 
3
+ ## 1.4.0
4
+
5
+ ### Minor Changes
6
+
7
+ - Android home-screen widgets can use colors that follow the user’s theme and wallpaper (including Material You), so widgets feel native in light, dark, and dynamic setups. If you drive widgets from your own server, you can read the full request URL—including query parameters—when handling updates, which makes it easier to personalize or A/B content per link. Widget updates on iOS are a bit more forgiving when variant data is missing.
8
+ - 14d4fa5: Add Android ongoing notification support, including richer notification content, remote update flows, and server-side payload rendering APIs. This release also expands the Expo integration and documentation so apps can configure, send, and manage Android ongoing notifications more easily.
9
+
10
+ ### Patch Changes
11
+
12
+ - Android apps built for production (minified / release) are less likely to crash or mis-render widgets because of how widget payloads are processed on the device.
13
+ - 8cedb47: Fix iOS Live Activity naming so named activities can be reused more reliably across app launches.
14
+ - Work on decomposing Voltra into smaller packages continues, and more pieces have moved from the umbrella package into the respective `@use-voltra/*` packages. You should still use the `voltra` umbrella for your app.
15
+ - Updated dependencies
16
+ - Updated dependencies [14d4fa5]
17
+ - Updated dependencies
18
+ - @use-voltra/android@1.4.0
19
+ - @use-voltra/android-server@1.4.0
20
+ - @use-voltra/ios-server@1.3.2
21
+ - @use-voltra/server@1.4.0
22
+ - @use-voltra/expo-plugin@1.4.0
23
+ - @use-voltra/android-client@1.4.0
24
+ - @use-voltra/core@1.4.0
25
+ - @use-voltra/ios@1.4.0
26
+ - @use-voltra/ios-client@1.4.0
27
+
3
28
  ## 1.3.0
4
29
 
5
30
  ### Patch Changes
@@ -102,9 +102,6 @@ dependencies {
102
102
  // Google Tink (encryption for credential storage)
103
103
  implementation "com.google.crypto.tink:tink-android:1.19.0"
104
104
 
105
- // JSON parsing
106
- implementation "com.google.code.gson:gson:2.10.1"
107
-
108
105
  // Coroutines
109
106
  implementation "org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.1"
110
107
 
@@ -114,4 +111,5 @@ dependencies {
114
111
  // Unit tests
115
112
  testImplementation "junit:junit:4.13.2"
116
113
  testImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-test:1.8.1"
114
+ testImplementation "org.robolectric:robolectric:4.14.1"
117
115
  }
@@ -1,6 +1,4 @@
1
1
  <manifest xmlns:android="http://schemas.android.com/apk/res/android">
2
- <uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
3
-
4
2
  <application>
5
3
  <provider
6
4
  android:name="androidx.core.content.FileProvider"
@@ -12,4 +10,4 @@
12
10
  android:resource="@xml/voltra_file_paths" />
13
11
  </provider>
14
12
  </application>
15
- </manifest>
13
+ </manifest>
@@ -67,54 +67,151 @@ class VoltraModule : Module() {
67
67
  eventBusUnsubscribe = null
68
68
  }
69
69
 
70
- // Android Live Update APIs
70
+ // Android ongoing notification APIs
71
71
 
72
- AsyncFunction("startAndroidLiveUpdate") {
72
+ AsyncFunction("startAndroidOngoingNotification") {
73
73
  payload: String,
74
74
  options: Map<String, Any?>,
75
75
  ->
76
76
 
77
- Log.d(TAG, "startAndroidLiveUpdate called")
77
+ Log.d(TAG, "startAndroidOngoingNotification called")
78
78
 
79
- val updateName = options["updateName"] as? String
80
- val channelId = options["channelId"] as? String ?: "voltra_live_updates"
81
-
82
- Log.d(TAG, "updateName=$updateName, channelId=$channelId")
79
+ val ongoingNotificationOptions =
80
+ AndroidOngoingNotificationOptions(
81
+ notificationId = options["notificationId"] as? String,
82
+ channelId = options["channelId"] as? String,
83
+ smallIcon = options["smallIcon"] as? String,
84
+ deepLinkUrl = options["deepLinkUrl"] as? String,
85
+ requestPromotedOngoing = options["requestPromotedOngoing"] as? Boolean,
86
+ fallbackBehavior = options["fallbackBehavior"] as? String,
87
+ )
83
88
 
84
89
  val result =
85
90
  runBlocking {
86
- notificationManager.startLiveUpdate(payload, updateName, channelId)
91
+ notificationManager.startOngoingNotification(payload, ongoingNotificationOptions)
87
92
  }
88
93
 
89
- Log.d(TAG, "startAndroidLiveUpdate returning: $result")
90
- result
94
+ Log.d(TAG, "startAndroidOngoingNotification returning: $result")
95
+ mapOf(
96
+ "ok" to result.ok,
97
+ "notificationId" to result.notificationId,
98
+ "action" to result.action,
99
+ "reason" to result.reason,
100
+ )
91
101
  }
92
102
 
93
- AsyncFunction("updateAndroidLiveUpdate") {
103
+ AsyncFunction("updateAndroidOngoingNotification") {
94
104
  notificationId: String,
95
105
  payload: String,
106
+ options: Map<String, Any?>?,
96
107
  ->
97
108
 
98
- Log.d(TAG, "updateAndroidLiveUpdate called with notificationId=$notificationId")
109
+ Log.d(TAG, "updateAndroidOngoingNotification called with notificationId=$notificationId")
99
110
 
100
- runBlocking {
101
- notificationManager.updateLiveUpdate(notificationId, payload)
102
- }
111
+ val ongoingNotificationOptions =
112
+ AndroidOngoingNotificationOptions(
113
+ channelId = options?.get("channelId") as? String,
114
+ smallIcon = options?.get("smallIcon") as? String,
115
+ deepLinkUrl = options?.get("deepLinkUrl") as? String,
116
+ requestPromotedOngoing = options?.get("requestPromotedOngoing") as? Boolean,
117
+ fallbackBehavior = options?.get("fallbackBehavior") as? String,
118
+ )
119
+
120
+ val result =
121
+ runBlocking {
122
+ notificationManager.updateOngoingNotification(
123
+ notificationId,
124
+ payload,
125
+ ongoingNotificationOptions,
126
+ )
127
+ }
128
+
129
+ Log.d(TAG, "updateAndroidOngoingNotification returning: $result")
130
+ mapOf(
131
+ "ok" to result.ok,
132
+ "notificationId" to result.notificationId,
133
+ "action" to result.action,
134
+ "reason" to result.reason,
135
+ )
136
+ }
137
+
138
+ AsyncFunction("upsertAndroidOngoingNotification") {
139
+ payload: String,
140
+ options: Map<String, Any?>,
141
+ ->
142
+
143
+ Log.d(TAG, "upsertAndroidOngoingNotification called")
144
+
145
+ val ongoingNotificationOptions =
146
+ AndroidOngoingNotificationOptions(
147
+ notificationId = options["notificationId"] as? String,
148
+ channelId = options["channelId"] as? String,
149
+ smallIcon = options["smallIcon"] as? String,
150
+ deepLinkUrl = options["deepLinkUrl"] as? String,
151
+ requestPromotedOngoing = options["requestPromotedOngoing"] as? Boolean,
152
+ fallbackBehavior = options["fallbackBehavior"] as? String,
153
+ )
154
+
155
+ val result =
156
+ runBlocking {
157
+ notificationManager.upsertOngoingNotification(payload, ongoingNotificationOptions)
158
+ }
159
+
160
+ Log.d(TAG, "upsertAndroidOngoingNotification returning: $result")
161
+ mapOf(
162
+ "ok" to result.ok,
163
+ "notificationId" to result.notificationId,
164
+ "action" to result.action,
165
+ "reason" to result.reason,
166
+ )
167
+ }
168
+
169
+ AsyncFunction("stopAndroidOngoingNotification") { notificationId: String ->
170
+ Log.d(TAG, "stopAndroidOngoingNotification called with notificationId=$notificationId")
171
+ val result = notificationManager.stopOngoingNotification(notificationId)
172
+ mapOf(
173
+ "ok" to result.ok,
174
+ "notificationId" to result.notificationId,
175
+ "action" to result.action,
176
+ "reason" to result.reason,
177
+ )
178
+ }
179
+
180
+ Function("isAndroidOngoingNotificationActive") { notificationId: String ->
181
+ notificationManager.isOngoingNotificationActive(notificationId)
182
+ }
183
+
184
+ Function("getAndroidOngoingNotificationStatus") { notificationId: String ->
185
+ val status = notificationManager.getOngoingNotificationStatus(notificationId)
186
+ mapOf(
187
+ "isActive" to status.isActive,
188
+ "isDismissed" to status.isDismissed,
189
+ "isPromoted" to status.isPromoted,
190
+ "hasPromotableCharacteristics" to status.hasPromotableCharacteristics,
191
+ )
192
+ }
103
193
 
104
- Log.d(TAG, "updateAndroidLiveUpdate completed")
194
+ AsyncFunction("endAllAndroidOngoingNotifications") {
195
+ notificationManager.endAllOngoingNotifications()
105
196
  }
106
197
 
107
- AsyncFunction("stopAndroidLiveUpdate") { notificationId: String ->
108
- Log.d(TAG, "stopAndroidLiveUpdate called with notificationId=$notificationId")
109
- notificationManager.stopLiveUpdate(notificationId)
198
+ Function("canPostPromotedAndroidNotifications") {
199
+ notificationManager.canPostPromotedAndroidNotifications()
110
200
  }
111
201
 
112
- Function("isAndroidLiveUpdateActive") { updateName: String ->
113
- notificationManager.isLiveUpdateActive(updateName)
202
+ Function("getAndroidOngoingNotificationCapabilities") {
203
+ val capabilities = notificationManager.getOngoingNotificationCapabilities()
204
+ mapOf(
205
+ "apiLevel" to capabilities.apiLevel,
206
+ "notificationsEnabled" to capabilities.notificationsEnabled,
207
+ "supportsPromotedNotifications" to capabilities.supportsPromotedNotifications,
208
+ "canPostPromotedNotifications" to capabilities.canPostPromotedNotifications,
209
+ "canRequestPromotedOngoing" to capabilities.canRequestPromotedOngoing,
210
+ )
114
211
  }
115
212
 
116
- AsyncFunction("endAllAndroidLiveUpdates") {
117
- notificationManager.endAllLiveUpdates()
213
+ AsyncFunction("openAndroidNotificationSettings") {
214
+ notificationManager.openPromotedNotificationSettings()
118
215
  }
119
216
 
120
217
  // Android Widget APIs