bitmovin-player-react-native 0.44.1-alpha.0 → 1.0.0-alpha.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 (497) hide show
  1. package/.eslintignore +11 -0
  2. package/.eslintrc.js +7 -0
  3. package/.gitattributes +3 -0
  4. package/.prettierignore +11 -0
  5. package/.ruby-version +1 -0
  6. package/.swiftlint.yml +171 -0
  7. package/Brewfile +2 -0
  8. package/CHANGELOG.md +627 -0
  9. package/CONTRIBUTING.md +255 -0
  10. package/TODO.md +0 -0
  11. package/android/.editorconfig +8 -0
  12. package/android/build.gradle +78 -75
  13. package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  14. package/android/gradle/wrapper/gradle-wrapper.properties +7 -0
  15. package/android/gradle.properties +1 -0
  16. package/android/gradlew +248 -0
  17. package/android/gradlew.bat +92 -0
  18. package/android/ktlint.gradle +31 -0
  19. package/android/src/main/java/com/bitmovin/player/reactnative/ActivityLifecycleListener.kt +51 -0
  20. package/android/src/main/java/com/bitmovin/player/reactnative/BitmovinCastManagerModule.kt +32 -55
  21. package/android/src/main/java/com/bitmovin/player/reactnative/BufferModule.kt +33 -45
  22. package/android/src/main/java/com/bitmovin/player/reactnative/CustomMessageHandlerModule.kt +84 -0
  23. package/android/src/main/java/com/bitmovin/player/reactnative/DebugModule.kt +6 -14
  24. package/android/src/main/java/com/bitmovin/player/reactnative/DecoderConfigModule.kt +89 -44
  25. package/android/src/main/java/com/bitmovin/player/reactnative/DrmModule.kt +80 -99
  26. package/android/src/main/java/com/bitmovin/player/reactnative/EventSubscription.kt +22 -0
  27. package/android/src/main/java/com/bitmovin/player/reactnative/FullscreenHandlerModule.kt +100 -0
  28. package/android/src/main/java/com/bitmovin/player/reactnative/MediaSessionPlaybackManager.kt +5 -5
  29. package/android/src/main/java/com/bitmovin/player/reactnative/NetworkModule.kt +98 -56
  30. package/android/src/main/java/com/bitmovin/player/reactnative/OfflineModule.kt +132 -186
  31. package/android/src/main/java/com/bitmovin/player/reactnative/PlayerAnalyticsModule.kt +37 -36
  32. package/android/src/main/java/com/bitmovin/player/reactnative/PlayerModule.kt +252 -528
  33. package/android/src/main/java/com/bitmovin/player/reactnative/RNPlayerPackage.kt +11 -0
  34. package/android/src/main/java/com/bitmovin/player/reactnative/RNPlayerView.kt +558 -213
  35. package/android/src/main/java/com/bitmovin/player/reactnative/RNPlayerViewManager.kt +99 -286
  36. package/android/src/main/java/com/bitmovin/player/reactnative/ResultWaiter.kt +58 -0
  37. package/android/src/main/java/com/bitmovin/player/reactnative/SourceModule.kt +77 -151
  38. package/android/src/main/java/com/bitmovin/player/reactnative/Types.kt +44 -0
  39. package/android/src/main/java/com/bitmovin/player/reactnative/UuidModule.kt +12 -15
  40. package/android/src/main/java/com/bitmovin/player/reactnative/converter/JsonConverter.kt +296 -456
  41. package/android/src/main/java/com/bitmovin/player/reactnative/extensions/ListExtension.kt +89 -0
  42. package/android/src/main/java/com/bitmovin/player/reactnative/extensions/MapExtension.kt +95 -0
  43. package/android/src/main/java/com/bitmovin/player/reactnative/offline/OfflineContentManagerBridge.kt +20 -52
  44. package/android/src/main/java/com/bitmovin/player/reactnative/ui/CustomMessageHandlerBridge.kt +10 -20
  45. package/android/src/main/java/com/bitmovin/player/reactnative/ui/FullscreenHandlerBridge.kt +4 -9
  46. package/app.plugin.js +21 -0
  47. package/build/BitmovinPlayerReactNative.types.d.ts +18 -0
  48. package/build/BitmovinPlayerReactNative.types.d.ts.map +1 -0
  49. package/build/BitmovinPlayerReactNative.types.js +2 -0
  50. package/build/BitmovinPlayerReactNative.types.js.map +1 -0
  51. package/build/adaptationConfig.d.ts +18 -0
  52. package/build/adaptationConfig.d.ts.map +1 -0
  53. package/build/adaptationConfig.js +2 -0
  54. package/build/adaptationConfig.js.map +1 -0
  55. package/build/advertising.d.ts +175 -0
  56. package/build/advertising.d.ts.map +1 -0
  57. package/build/advertising.js +37 -0
  58. package/build/advertising.js.map +1 -0
  59. package/build/analytics/config.d.ts +194 -0
  60. package/build/analytics/config.d.ts.map +1 -0
  61. package/build/analytics/config.js +2 -0
  62. package/build/analytics/config.js.map +1 -0
  63. package/build/analytics/index.d.ts +3 -0
  64. package/build/analytics/index.d.ts.map +1 -0
  65. package/build/analytics/index.js +3 -0
  66. package/build/analytics/index.js.map +1 -0
  67. package/build/analytics/player.d.ts +24 -0
  68. package/build/analytics/player.d.ts.map +1 -0
  69. package/build/analytics/player.js +30 -0
  70. package/build/analytics/player.js.map +1 -0
  71. package/build/analytics/playerAnalyticsModule.d.ts +13 -0
  72. package/build/analytics/playerAnalyticsModule.d.ts.map +1 -0
  73. package/build/analytics/playerAnalyticsModule.js +3 -0
  74. package/build/analytics/playerAnalyticsModule.js.map +1 -0
  75. package/build/audioSession.d.ts +33 -0
  76. package/build/audioSession.d.ts.map +1 -0
  77. package/build/audioSession.js +21 -0
  78. package/build/audioSession.js.map +1 -0
  79. package/build/audioTrack.d.ts +39 -0
  80. package/build/audioTrack.d.ts.map +1 -0
  81. package/build/audioTrack.js +2 -0
  82. package/build/audioTrack.js.map +1 -0
  83. package/build/bitmovinCastManager.d.ts +58 -0
  84. package/build/bitmovinCastManager.d.ts.map +1 -0
  85. package/build/bitmovinCastManager.js +64 -0
  86. package/build/bitmovinCastManager.js.map +1 -0
  87. package/build/bufferApi.d.ts +85 -0
  88. package/build/bufferApi.d.ts.map +1 -0
  89. package/build/bufferApi.js +60 -0
  90. package/build/bufferApi.js.map +1 -0
  91. package/build/bufferConfig.d.ts +42 -0
  92. package/build/bufferConfig.d.ts.map +1 -0
  93. package/build/bufferConfig.js +2 -0
  94. package/build/bufferConfig.js.map +1 -0
  95. package/build/components/PlayerView/events.d.ts +310 -0
  96. package/build/components/PlayerView/events.d.ts.map +1 -0
  97. package/build/components/PlayerView/events.js +2 -0
  98. package/build/components/PlayerView/events.js.map +1 -0
  99. package/build/components/PlayerView/index.d.ts +10 -0
  100. package/build/components/PlayerView/index.d.ts.map +1 -0
  101. package/build/components/PlayerView/index.js +72 -0
  102. package/build/components/PlayerView/index.js.map +1 -0
  103. package/build/components/PlayerView/native.d.ts +30 -0
  104. package/build/components/PlayerView/native.d.ts.map +1 -0
  105. package/build/components/PlayerView/native.js +6 -0
  106. package/build/components/PlayerView/native.js.map +1 -0
  107. package/build/components/PlayerView/nativeEvents.d.ts +437 -0
  108. package/build/components/PlayerView/nativeEvents.d.ts.map +1 -0
  109. package/build/components/PlayerView/nativeEvents.js +2 -0
  110. package/build/components/PlayerView/nativeEvents.js.map +1 -0
  111. package/build/components/PlayerView/pictureInPictureConfig.d.ts +22 -0
  112. package/build/components/PlayerView/pictureInPictureConfig.d.ts.map +1 -0
  113. package/build/components/PlayerView/pictureInPictureConfig.js +2 -0
  114. package/build/components/PlayerView/pictureInPictureConfig.js.map +1 -0
  115. package/build/components/PlayerView/playerViewConfig.d.ts +111 -0
  116. package/build/components/PlayerView/playerViewConfig.d.ts.map +1 -0
  117. package/build/components/PlayerView/playerViewConfig.js +51 -0
  118. package/build/components/PlayerView/playerViewConfig.js.map +1 -0
  119. package/build/components/PlayerView/properties.d.ts +61 -0
  120. package/build/components/PlayerView/properties.d.ts.map +1 -0
  121. package/build/components/PlayerView/properties.js +2 -0
  122. package/build/components/PlayerView/properties.js.map +1 -0
  123. package/build/components/index.d.ts +5 -0
  124. package/build/components/index.d.ts.map +1 -0
  125. package/build/components/index.js +5 -0
  126. package/build/components/index.js.map +1 -0
  127. package/build/debug.d.ts +46 -0
  128. package/build/debug.d.ts.map +1 -0
  129. package/build/debug.js +52 -0
  130. package/build/debug.js.map +1 -0
  131. package/build/decoder/decoderConfig.d.ts +96 -0
  132. package/build/decoder/decoderConfig.d.ts.map +1 -0
  133. package/build/decoder/decoderConfig.js +6 -0
  134. package/build/decoder/decoderConfig.js.map +1 -0
  135. package/build/decoder/decoderConfigModule.d.ts +14 -0
  136. package/build/decoder/decoderConfigModule.d.ts.map +1 -0
  137. package/build/decoder/decoderConfigModule.js +31 -0
  138. package/build/decoder/decoderConfigModule.js.map +1 -0
  139. package/build/decoder/index.d.ts +26 -0
  140. package/build/decoder/index.d.ts.map +1 -0
  141. package/build/decoder/index.js +50 -0
  142. package/build/decoder/index.js.map +1 -0
  143. package/build/drm/drmModule.d.ts +55 -0
  144. package/build/drm/drmModule.d.ts.map +1 -0
  145. package/build/drm/drmModule.js +3 -0
  146. package/build/drm/drmModule.js.map +1 -0
  147. package/build/drm/fairplayConfig.d.ts +91 -0
  148. package/build/drm/fairplayConfig.d.ts.map +1 -0
  149. package/build/drm/fairplayConfig.js +2 -0
  150. package/build/drm/fairplayConfig.js.map +1 -0
  151. package/build/drm/index.d.ts +112 -0
  152. package/build/drm/index.d.ts.map +1 -0
  153. package/build/drm/index.js +191 -0
  154. package/build/drm/index.js.map +1 -0
  155. package/build/drm/widevineConfig.d.ts +58 -0
  156. package/build/drm/widevineConfig.d.ts.map +1 -0
  157. package/build/drm/widevineConfig.js +2 -0
  158. package/build/drm/widevineConfig.js.map +1 -0
  159. package/build/events.d.ts +692 -0
  160. package/build/events.d.ts.map +1 -0
  161. package/build/events.js +2 -0
  162. package/build/events.js.map +1 -0
  163. package/build/hooks/index.d.ts +2 -0
  164. package/build/hooks/index.d.ts.map +1 -0
  165. package/build/hooks/index.js +2 -0
  166. package/build/hooks/index.js.map +1 -0
  167. package/build/hooks/usePlayer.d.ts +8 -0
  168. package/build/hooks/usePlayer.d.ts.map +1 -0
  169. package/build/hooks/usePlayer.js +10 -0
  170. package/build/hooks/usePlayer.js.map +1 -0
  171. package/build/hooks/useProxy.d.ts +18 -0
  172. package/build/hooks/useProxy.d.ts.map +1 -0
  173. package/build/hooks/useProxy.js +16 -0
  174. package/build/hooks/useProxy.js.map +1 -0
  175. package/build/index.d.ts +32 -0
  176. package/build/index.d.ts.map +1 -0
  177. package/build/index.js +32 -0
  178. package/build/index.js.map +1 -0
  179. package/build/liveConfig.d.ts +13 -0
  180. package/build/liveConfig.d.ts.map +1 -0
  181. package/build/liveConfig.js +2 -0
  182. package/build/liveConfig.js.map +1 -0
  183. package/build/media.d.ts +85 -0
  184. package/build/media.d.ts.map +1 -0
  185. package/build/media.js +2 -0
  186. package/build/media.js.map +1 -0
  187. package/build/mediaControlConfig.d.ts +62 -0
  188. package/build/mediaControlConfig.d.ts.map +1 -0
  189. package/build/mediaControlConfig.js +2 -0
  190. package/build/mediaControlConfig.js.map +1 -0
  191. package/build/mediaTrackRole.d.ts +28 -0
  192. package/build/mediaTrackRole.d.ts.map +1 -0
  193. package/build/mediaTrackRole.js +2 -0
  194. package/build/mediaTrackRole.js.map +1 -0
  195. package/build/modules/AudioSessionModule.d.ts +8 -0
  196. package/build/modules/AudioSessionModule.d.ts.map +1 -0
  197. package/build/modules/AudioSessionModule.js +7 -0
  198. package/build/modules/AudioSessionModule.js.map +1 -0
  199. package/build/modules/BitmovinCastManagerModule.d.ts +11 -0
  200. package/build/modules/BitmovinCastManagerModule.d.ts.map +1 -0
  201. package/build/modules/BitmovinCastManagerModule.js +3 -0
  202. package/build/modules/BitmovinCastManagerModule.js.map +1 -0
  203. package/build/modules/BufferModule.d.ts +16 -0
  204. package/build/modules/BufferModule.d.ts.map +1 -0
  205. package/build/modules/BufferModule.js +3 -0
  206. package/build/modules/BufferModule.js.map +1 -0
  207. package/build/modules/DebugModule.d.ts +8 -0
  208. package/build/modules/DebugModule.d.ts.map +1 -0
  209. package/build/modules/DebugModule.js +3 -0
  210. package/build/modules/DebugModule.js.map +1 -0
  211. package/build/modules/PlayerModule.d.ts +188 -0
  212. package/build/modules/PlayerModule.d.ts.map +1 -0
  213. package/build/modules/PlayerModule.js +3 -0
  214. package/build/modules/PlayerModule.js.map +1 -0
  215. package/build/modules/SourceModule.d.ts +51 -0
  216. package/build/modules/SourceModule.d.ts.map +1 -0
  217. package/build/modules/SourceModule.js +3 -0
  218. package/build/modules/SourceModule.js.map +1 -0
  219. package/build/modules/UuidModule.d.ts +8 -0
  220. package/build/modules/UuidModule.d.ts.map +1 -0
  221. package/build/modules/UuidModule.js +3 -0
  222. package/build/modules/UuidModule.js.map +1 -0
  223. package/build/nativeInstance.d.ts +49 -0
  224. package/build/nativeInstance.d.ts.map +1 -0
  225. package/build/nativeInstance.js +20 -0
  226. package/build/nativeInstance.js.map +1 -0
  227. package/build/network/index.d.ts +50 -0
  228. package/build/network/index.d.ts.map +1 -0
  229. package/build/network/index.js +102 -0
  230. package/build/network/index.js.map +1 -0
  231. package/build/network/networkConfig.d.ts +151 -0
  232. package/build/network/networkConfig.d.ts.map +1 -0
  233. package/build/network/networkConfig.js +21 -0
  234. package/build/network/networkConfig.js.map +1 -0
  235. package/build/network/networkModule.d.ts +29 -0
  236. package/build/network/networkModule.d.ts.map +1 -0
  237. package/build/network/networkModule.js +3 -0
  238. package/build/network/networkModule.js.map +1 -0
  239. package/build/offline/index.d.ts +8 -0
  240. package/build/offline/index.d.ts.map +1 -0
  241. package/build/offline/index.js +8 -0
  242. package/build/offline/index.js.map +1 -0
  243. package/build/offline/offlineContentConfig.d.ts +18 -0
  244. package/build/offline/offlineContentConfig.d.ts.map +1 -0
  245. package/build/offline/offlineContentConfig.js +2 -0
  246. package/build/offline/offlineContentConfig.js.map +1 -0
  247. package/build/offline/offlineContentManager.d.ts +90 -0
  248. package/build/offline/offlineContentManager.d.ts.map +1 -0
  249. package/build/offline/offlineContentManager.js +177 -0
  250. package/build/offline/offlineContentManager.js.map +1 -0
  251. package/build/offline/offlineContentManagerListener.d.ts +174 -0
  252. package/build/offline/offlineContentManagerListener.d.ts.map +1 -0
  253. package/build/offline/offlineContentManagerListener.js +17 -0
  254. package/build/offline/offlineContentManagerListener.js.map +1 -0
  255. package/build/offline/offlineContentOptions.d.ts +29 -0
  256. package/build/offline/offlineContentOptions.d.ts.map +1 -0
  257. package/build/offline/offlineContentOptions.js +2 -0
  258. package/build/offline/offlineContentOptions.js.map +1 -0
  259. package/build/offline/offlineDownloadRequest.d.ts +19 -0
  260. package/build/offline/offlineDownloadRequest.d.ts.map +1 -0
  261. package/build/offline/offlineDownloadRequest.js +2 -0
  262. package/build/offline/offlineDownloadRequest.js.map +1 -0
  263. package/build/offline/offlineModule.d.ts +32 -0
  264. package/build/offline/offlineModule.d.ts.map +1 -0
  265. package/build/offline/offlineModule.js +3 -0
  266. package/build/offline/offlineModule.js.map +1 -0
  267. package/build/offline/offlineSourceOptions.d.ts +12 -0
  268. package/build/offline/offlineSourceOptions.d.ts.map +1 -0
  269. package/build/offline/offlineSourceOptions.js +2 -0
  270. package/build/offline/offlineSourceOptions.js.map +1 -0
  271. package/build/offline/offlineState.d.ts +23 -0
  272. package/build/offline/offlineState.d.ts.map +1 -0
  273. package/build/offline/offlineState.js +24 -0
  274. package/build/offline/offlineState.js.map +1 -0
  275. package/build/playbackConfig.d.ts +88 -0
  276. package/build/playbackConfig.d.ts.map +1 -0
  277. package/build/playbackConfig.js +2 -0
  278. package/build/playbackConfig.js.map +1 -0
  279. package/build/player.d.ts +308 -0
  280. package/build/player.d.ts.map +1 -0
  281. package/build/player.js +445 -0
  282. package/build/player.js.map +1 -0
  283. package/build/playerConfig.d.ts +83 -0
  284. package/build/playerConfig.d.ts.map +1 -0
  285. package/build/playerConfig.js +2 -0
  286. package/build/playerConfig.js.map +1 -0
  287. package/build/remoteControlConfig.d.ts +38 -0
  288. package/build/remoteControlConfig.d.ts.map +1 -0
  289. package/build/remoteControlConfig.js +2 -0
  290. package/build/remoteControlConfig.js.map +1 -0
  291. package/build/source.d.ts +216 -0
  292. package/build/source.d.ts.map +1 -0
  293. package/build/source.js +167 -0
  294. package/build/source.js.map +1 -0
  295. package/build/styleConfig.d.ts +120 -0
  296. package/build/styleConfig.d.ts.map +1 -0
  297. package/build/styleConfig.js +38 -0
  298. package/build/styleConfig.js.map +1 -0
  299. package/build/subtitleFormat.d.ts +27 -0
  300. package/build/subtitleFormat.d.ts.map +1 -0
  301. package/build/subtitleFormat.js +28 -0
  302. package/build/subtitleFormat.js.map +1 -0
  303. package/build/subtitleTrack.d.ts +55 -0
  304. package/build/subtitleTrack.d.ts.map +1 -0
  305. package/build/subtitleTrack.js +2 -0
  306. package/build/subtitleTrack.js.map +1 -0
  307. package/build/thumbnail.d.ts +38 -0
  308. package/build/thumbnail.d.ts.map +1 -0
  309. package/build/thumbnail.js +2 -0
  310. package/build/thumbnail.js.map +1 -0
  311. package/build/tweaksConfig.d.ts +197 -0
  312. package/build/tweaksConfig.d.ts.map +1 -0
  313. package/build/tweaksConfig.js +25 -0
  314. package/build/tweaksConfig.js.map +1 -0
  315. package/build/ui/customMessageHandlerModule.d.ts +27 -0
  316. package/build/ui/customMessageHandlerModule.d.ts.map +1 -0
  317. package/build/ui/customMessageHandlerModule.js +3 -0
  318. package/build/ui/customMessageHandlerModule.js.map +1 -0
  319. package/build/ui/custommessagehandler.d.ts +56 -0
  320. package/build/ui/custommessagehandler.d.ts.map +1 -0
  321. package/build/ui/custommessagehandler.js +54 -0
  322. package/build/ui/custommessagehandler.js.map +1 -0
  323. package/build/ui/custommessagehandlerbridge.d.ts +33 -0
  324. package/build/ui/custommessagehandlerbridge.d.ts.map +1 -0
  325. package/build/ui/custommessagehandlerbridge.js +72 -0
  326. package/build/ui/custommessagehandlerbridge.js.map +1 -0
  327. package/build/ui/custommessagesender.d.ts +5 -0
  328. package/build/ui/custommessagesender.d.ts.map +1 -0
  329. package/build/ui/custommessagesender.js +2 -0
  330. package/build/ui/custommessagesender.js.map +1 -0
  331. package/build/ui/fullscreenHandlerModule.d.ts +20 -0
  332. package/build/ui/fullscreenHandlerModule.d.ts.map +1 -0
  333. package/build/ui/fullscreenHandlerModule.js +3 -0
  334. package/build/ui/fullscreenHandlerModule.js.map +1 -0
  335. package/build/ui/fullscreenhandler.d.ts +18 -0
  336. package/build/ui/fullscreenhandler.d.ts.map +1 -0
  337. package/build/ui/fullscreenhandler.js +2 -0
  338. package/build/ui/fullscreenhandler.js.map +1 -0
  339. package/build/ui/fullscreenhandlerbridge.d.ts +26 -0
  340. package/build/ui/fullscreenhandlerbridge.d.ts.map +1 -0
  341. package/build/ui/fullscreenhandlerbridge.js +67 -0
  342. package/build/ui/fullscreenhandlerbridge.js.map +1 -0
  343. package/build/ui/index.d.ts +3 -0
  344. package/build/ui/index.d.ts.map +1 -0
  345. package/build/ui/index.js +3 -0
  346. package/build/ui/index.js.map +1 -0
  347. package/expo-module.config.json +40 -0
  348. package/ios/AppLifecycleDelegate.swift +25 -0
  349. package/ios/AudioSessionModule.swift +14 -40
  350. package/ios/BitmovinCastManagerModule.swift +30 -69
  351. package/ios/BufferModule.swift +26 -62
  352. package/ios/CustomMessageHandlerBridge.swift +11 -18
  353. package/ios/CustomMessageHandlerModule.swift +61 -63
  354. package/ios/DebugModule.swift +6 -27
  355. package/ios/DrmModule.swift +105 -379
  356. package/ios/Event+JSON.swift +1 -0
  357. package/ios/FullscreenHandlerBridge.swift +12 -5
  358. package/ios/FullscreenHandlerModule.swift +73 -57
  359. package/ios/LockedBox.swift +21 -0
  360. package/ios/ModuleRegistry+Generics.swift +11 -0
  361. package/ios/NetworkModule.swift +78 -82
  362. package/ios/OfflineContentManagerBridge.swift +11 -38
  363. package/ios/OfflineModule.swift +136 -454
  364. package/ios/PlayerAnalyticsModule.swift +24 -52
  365. package/ios/PlayerModule.swift +192 -770
  366. package/ios/RCTConvert+BitmovinPlayer.swift +38 -312
  367. package/ios/RNBitmovinPlayer.h +1 -8
  368. package/ios/RNBitmovinPlayer.podspec +47 -0
  369. package/ios/RNPlayerView.swift +600 -77
  370. package/ios/RNPlayerViewManager.swift +96 -210
  371. package/ios/Registry.swift +2 -2
  372. package/ios/ResultWaiter.swift +66 -0
  373. package/ios/SourceModule.swift +104 -223
  374. package/ios/UuidModule.swift +9 -18
  375. package/package.json +67 -71
  376. package/plugin/build/FeatureFlags.d.ts +24 -0
  377. package/plugin/build/FeatureFlags.js +2 -0
  378. package/plugin/build/index.d.ts +7 -0
  379. package/plugin/build/index.js +10 -0
  380. package/plugin/build/withAppGradleDependencies.d.ts +7 -0
  381. package/plugin/build/withAppGradleDependencies.js +49 -0
  382. package/plugin/build/withBitmovinAndroidConfig.d.ts +7 -0
  383. package/plugin/build/withBitmovinAndroidConfig.js +159 -0
  384. package/plugin/build/withBitmovinConfig.d.ts +7 -0
  385. package/plugin/build/withBitmovinConfig.js +21 -0
  386. package/plugin/build/withBitmovinIosConfig.d.ts +7 -0
  387. package/plugin/build/withBitmovinIosConfig.js +53 -0
  388. package/plugin/src/FeatureFlags.ts +21 -0
  389. package/plugin/src/index.ts +9 -0
  390. package/plugin/src/withAppGradleDependencies.ts +80 -0
  391. package/plugin/src/withBitmovinAndroidConfig.ts +224 -0
  392. package/plugin/src/withBitmovinConfig.ts +24 -0
  393. package/plugin/src/withBitmovinIosConfig.ts +71 -0
  394. package/plugin/tsconfig.json +9 -0
  395. package/plugin/tsconfig.tsbuildinfo +1 -0
  396. package/prettier.config.js +7 -0
  397. package/scripts/format-android.sh +2 -0
  398. package/scripts/format-swift.sh +3 -0
  399. package/scripts/lint-android.sh +2 -0
  400. package/scripts/lint-swift.sh +3 -0
  401. package/scripts/pre-commit.sh +14 -0
  402. package/scripts/setup-hooks.sh +58 -0
  403. package/src/BitmovinPlayerReactNative.types.ts +19 -0
  404. package/src/adaptationConfig.ts +1 -1
  405. package/src/advertising.ts +1 -1
  406. package/src/analytics/config.ts +4 -4
  407. package/src/analytics/player.ts +4 -6
  408. package/src/analytics/playerAnalyticsModule.ts +19 -0
  409. package/src/audioSession.ts +4 -6
  410. package/src/audioTrack.ts +1 -1
  411. package/src/bitmovinCastManager.ts +14 -10
  412. package/src/bufferApi.ts +1 -3
  413. package/src/bufferConfig.ts +2 -2
  414. package/src/components/PlayerView/events.ts +92 -94
  415. package/src/components/PlayerView/index.tsx +109 -159
  416. package/src/components/PlayerView/native.ts +24 -11
  417. package/src/components/PlayerView/nativeEvents.ts +113 -94
  418. package/src/components/PlayerView/pictureInPictureConfig.ts +1 -1
  419. package/src/components/PlayerView/playerViewConfig.ts +4 -8
  420. package/src/components/PlayerView/properties.ts +23 -22
  421. package/src/debug.ts +1 -3
  422. package/src/decoder/decoderConfig.ts +3 -3
  423. package/src/decoder/decoderConfigModule.ts +62 -0
  424. package/src/decoder/index.ts +32 -16
  425. package/src/drm/drmModule.ts +84 -0
  426. package/src/drm/fairplayConfig.ts +1 -1
  427. package/src/drm/index.ts +130 -40
  428. package/src/drm/widevineConfig.ts +5 -5
  429. package/src/events.ts +47 -41
  430. package/src/hooks/useProxy.ts +13 -20
  431. package/src/mediaControlConfig.ts +1 -1
  432. package/src/modules/AudioSessionModule.ts +13 -0
  433. package/src/modules/BitmovinCastManagerModule.ts +14 -0
  434. package/src/modules/BufferModule.ts +18 -0
  435. package/src/modules/DebugModule.ts +9 -0
  436. package/src/modules/PlayerModule.ts +251 -0
  437. package/src/modules/SourceModule.ts +74 -0
  438. package/src/modules/UuidModule.ts +9 -0
  439. package/src/nativeInstance.ts +3 -3
  440. package/src/network/index.ts +42 -15
  441. package/src/network/networkConfig.ts +3 -3
  442. package/src/network/networkModule.ts +51 -0
  443. package/src/offline/offlineContentConfig.ts +1 -1
  444. package/src/offline/offlineContentManager.ts +15 -50
  445. package/src/offline/offlineContentManagerListener.ts +20 -23
  446. package/src/offline/offlineContentOptions.ts +2 -2
  447. package/src/offline/offlineDownloadRequest.ts +1 -1
  448. package/src/offline/offlineModule.ts +46 -0
  449. package/src/offline/offlineSourceOptions.ts +2 -2
  450. package/src/offline/offlineState.ts +1 -1
  451. package/src/playbackConfig.ts +5 -6
  452. package/src/player.ts +53 -48
  453. package/src/source.ts +15 -14
  454. package/src/styleConfig.ts +5 -5
  455. package/src/subtitleFormat.ts +5 -5
  456. package/src/subtitleTrack.ts +1 -1
  457. package/src/tweaksConfig.ts +16 -16
  458. package/src/ui/customMessageHandlerModule.ts +46 -0
  459. package/src/ui/custommessagehandlerbridge.ts +45 -18
  460. package/src/ui/fullscreenHandlerModule.ts +35 -0
  461. package/src/ui/fullscreenhandlerbridge.ts +35 -15
  462. package/tsconfig.json +9 -0
  463. package/typedoc.json +23 -0
  464. package/RNBitmovinPlayer.podspec +0 -26
  465. package/android/src/main/java/com/bitmovin/player/reactnative/BitmovinBaseModule.kt +0 -114
  466. package/android/src/main/java/com/bitmovin/player/reactnative/EventRelay.kt +0 -47
  467. package/android/src/main/java/com/bitmovin/player/reactnative/RNPlayerViewPackage.kt +0 -48
  468. package/android/src/main/java/com/bitmovin/player/reactnative/extensions/ReactContextExtension.kt +0 -24
  469. package/android/src/main/java/com/bitmovin/player/reactnative/extensions/ReadableArray.kt +0 -20
  470. package/android/src/main/java/com/bitmovin/player/reactnative/extensions/ReadableMap.kt +0 -15
  471. package/android/src/main/java/com/bitmovin/player/reactnative/extensions/ReadableMapExtension.kt +0 -57
  472. package/android/src/main/java/com/bitmovin/player/reactnative/extensions/WritableMap.kt +0 -27
  473. package/android/src/main/java/com/bitmovin/player/reactnative/ui/CustomMessageHandlerModule.kt +0 -86
  474. package/android/src/main/java/com/bitmovin/player/reactnative/ui/FullscreenHandlerModule.kt +0 -78
  475. package/ios/AudioSessionModule.m +0 -10
  476. package/ios/BitmovinCastManagerModule.m +0 -14
  477. package/ios/BufferModule.m +0 -8
  478. package/ios/CustomMessageHandlerModule.m +0 -10
  479. package/ios/DebugModule.m +0 -7
  480. package/ios/DrmModule.m +0 -16
  481. package/ios/FullscreenHandlerModule.m +0 -10
  482. package/ios/NetworkModule.m +0 -10
  483. package/ios/OfflineModule.m +0 -19
  484. package/ios/PlayerAnalyticsModule.m +0 -8
  485. package/ios/PlayerModule.m +0 -130
  486. package/ios/PreprocessHttpRequestDelegateBridge.swift +0 -30
  487. package/ios/RCTBridge+Generics.swift +0 -6
  488. package/ios/RNBitmovinPlayer.xcodeproj/project.pbxproj +0 -303
  489. package/ios/RNPlayerView+PlayerListener.swift +0 -229
  490. package/ios/RNPlayerView+UserInterfaceListener.swift +0 -35
  491. package/ios/RNPlayerViewManager.m +0 -79
  492. package/ios/SourceModule.m +0 -42
  493. package/ios/UuidModule.m +0 -9
  494. package/lib/index.d.mts +0 -4303
  495. package/lib/index.d.ts +0 -4303
  496. package/lib/index.js +0 -1895
  497. package/lib/index.mjs +0 -1836
@@ -0,0 +1,72 @@
1
+ import UuidModule from '../modules/UuidModule';
2
+ import CustomMessageHandlerModule from './customMessageHandlerModule';
3
+ /**
4
+ * Takes care of JS/Native communication for a CustomMessageHandler.
5
+ */
6
+ export class CustomMessageHandlerBridge {
7
+ nativeId;
8
+ customMessageHandler;
9
+ isDestroyed;
10
+ onReceivedSynchronousMessageSubscription;
11
+ onReceivedAsynchronousMessageSubscription;
12
+ constructor(nativeId) {
13
+ this.nativeId = nativeId ?? UuidModule.generate();
14
+ this.isDestroyed = false;
15
+ // Set up event listeners for synchronous and asynchronous messages
16
+ this.onReceivedSynchronousMessageSubscription =
17
+ CustomMessageHandlerModule.addListener('onReceivedSynchronousMessage', ({ nativeId, id, message, data }) => {
18
+ if (nativeId !== this.nativeId) {
19
+ return;
20
+ }
21
+ this.receivedSynchronousMessage(id, message, data);
22
+ });
23
+ this.onReceivedAsynchronousMessageSubscription =
24
+ CustomMessageHandlerModule.addListener('onReceivedAsynchronousMessage', ({ nativeId, message, data }) => {
25
+ if (nativeId !== this.nativeId) {
26
+ return;
27
+ }
28
+ this.receivedAsynchronousMessage(message, data);
29
+ });
30
+ CustomMessageHandlerModule.registerHandler(this.nativeId);
31
+ }
32
+ setCustomMessageHandler(customMessageHandler) {
33
+ this.customMessageHandler = customMessageHandler;
34
+ this.customMessageHandler.customMessageSender = this;
35
+ }
36
+ /**
37
+ * Destroys the native CustomMessageHandler
38
+ */
39
+ destroy() {
40
+ if (!this.isDestroyed) {
41
+ CustomMessageHandlerModule.destroy(this.nativeId);
42
+ this.onReceivedSynchronousMessageSubscription?.remove();
43
+ this.onReceivedAsynchronousMessageSubscription?.remove();
44
+ this.onReceivedSynchronousMessageSubscription = undefined;
45
+ this.onReceivedAsynchronousMessageSubscription = undefined;
46
+ this.isDestroyed = true;
47
+ }
48
+ }
49
+ /**
50
+ * Called by native code, when the UI sends a synchronous message.
51
+ * @internal
52
+ */
53
+ receivedSynchronousMessage(id, message, data) {
54
+ const result = this.customMessageHandler?.receivedSynchronousMessage(message, data);
55
+ CustomMessageHandlerModule.onReceivedSynchronousMessageResult(id, result);
56
+ }
57
+ /**
58
+ * Called by native code, when the UI sends an asynchronous message.
59
+ * @internal
60
+ */
61
+ receivedAsynchronousMessage(message, data) {
62
+ this.customMessageHandler?.receivedAsynchronousMessage(message, data);
63
+ }
64
+ // noinspection JSUnusedGlobalSymbols
65
+ /**
66
+ * Called by CustomMessageHandler, when sending a message to the UI.
67
+ */
68
+ sendMessage(message, data) {
69
+ CustomMessageHandlerModule.sendMessage(this.nativeId, message, data);
70
+ }
71
+ }
72
+ //# sourceMappingURL=custommessagehandlerbridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custommessagehandlerbridge.js","sourceRoot":"","sources":["../../src/ui/custommessagehandlerbridge.ts"],"names":[],"mappings":"AAGA,OAAO,UAAU,MAAM,uBAAuB,CAAC;AAC/C,OAAO,0BAA0B,MAAM,8BAA8B,CAAC;AAEtE;;GAEG;AACH,MAAM,OAAO,0BAA0B;IAC5B,QAAQ,CAAS;IAClB,oBAAoB,CAAwB;IAC5C,WAAW,CAAU;IAErB,wCAAwC,CAAqB;IAC7D,yCAAyC,CAAqB;IAEtE,YAAY,QAAiB;QAC3B,IAAI,CAAC,QAAQ,GAAG,QAAQ,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;QAClD,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QAEzB,mEAAmE;QACnE,IAAI,CAAC,wCAAwC;YAC3C,0BAA0B,CAAC,WAAW,CACpC,8BAA8B,EAC9B,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE;gBAClC,IAAI,QAAQ,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAC/B,OAAO;gBACT,CAAC;gBACD,IAAI,CAAC,0BAA0B,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;YACrD,CAAC,CACF,CAAC;QAEJ,IAAI,CAAC,yCAAyC;YAC5C,0BAA0B,CAAC,WAAW,CACpC,+BAA+B,EAC/B,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE;gBAC9B,IAAI,QAAQ,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAC/B,OAAO;gBACT,CAAC;gBACD,IAAI,CAAC,2BAA2B,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;YAClD,CAAC,CACF,CAAC;QAEJ,0BAA0B,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC5D,CAAC;IAED,uBAAuB,CAAC,oBAA0C;QAChE,IAAI,CAAC,oBAAoB,GAAG,oBAAoB,CAAC;QACjD,IAAI,CAAC,oBAAoB,CAAC,mBAAmB,GAAG,IAAI,CAAC;IACvD,CAAC;IAED;;OAEG;IACH,OAAO;QACL,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,0BAA0B,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAClD,IAAI,CAAC,wCAAwC,EAAE,MAAM,EAAE,CAAC;YACxD,IAAI,CAAC,yCAAyC,EAAE,MAAM,EAAE,CAAC;YACzD,IAAI,CAAC,wCAAwC,GAAG,SAAS,CAAC;YAC1D,IAAI,CAAC,yCAAyC,GAAG,SAAS,CAAC;YAC3D,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAC1B,CAAC;IACH,CAAC;IAED;;;OAGG;IACK,0BAA0B,CAChC,EAAU,EACV,OAAe,EACf,IAAwB;QAExB,MAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,EAAE,0BAA0B,CAClE,OAAO,EACP,IAAI,CACL,CAAC;QACF,0BAA0B,CAAC,kCAAkC,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IAC5E,CAAC;IAED;;;OAGG;IACK,2BAA2B,CACjC,OAAe,EACf,IAAwB;QAExB,IAAI,CAAC,oBAAoB,EAAE,2BAA2B,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACxE,CAAC;IAED,qCAAqC;IACrC;;OAEG;IACH,WAAW,CAAC,OAAe,EAAE,IAAwB;QACnD,0BAA0B,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IACvE,CAAC;CACF","sourcesContent":["import { EventSubscription } from 'expo-modules-core';\nimport { CustomMessageHandler } from './custommessagehandler';\nimport { CustomMessageSender } from './custommessagesender';\nimport UuidModule from '../modules/UuidModule';\nimport CustomMessageHandlerModule from './customMessageHandlerModule';\n\n/**\n * Takes care of JS/Native communication for a CustomMessageHandler.\n */\nexport class CustomMessageHandlerBridge implements CustomMessageSender {\n readonly nativeId: string;\n private customMessageHandler?: CustomMessageHandler;\n private isDestroyed: boolean;\n\n private onReceivedSynchronousMessageSubscription?: EventSubscription;\n private onReceivedAsynchronousMessageSubscription?: EventSubscription;\n\n constructor(nativeId?: string) {\n this.nativeId = nativeId ?? UuidModule.generate();\n this.isDestroyed = false;\n\n // Set up event listeners for synchronous and asynchronous messages\n this.onReceivedSynchronousMessageSubscription =\n CustomMessageHandlerModule.addListener(\n 'onReceivedSynchronousMessage',\n ({ nativeId, id, message, data }) => {\n if (nativeId !== this.nativeId) {\n return;\n }\n this.receivedSynchronousMessage(id, message, data);\n }\n );\n\n this.onReceivedAsynchronousMessageSubscription =\n CustomMessageHandlerModule.addListener(\n 'onReceivedAsynchronousMessage',\n ({ nativeId, message, data }) => {\n if (nativeId !== this.nativeId) {\n return;\n }\n this.receivedAsynchronousMessage(message, data);\n }\n );\n\n CustomMessageHandlerModule.registerHandler(this.nativeId);\n }\n\n setCustomMessageHandler(customMessageHandler: CustomMessageHandler) {\n this.customMessageHandler = customMessageHandler;\n this.customMessageHandler.customMessageSender = this;\n }\n\n /**\n * Destroys the native CustomMessageHandler\n */\n destroy() {\n if (!this.isDestroyed) {\n CustomMessageHandlerModule.destroy(this.nativeId);\n this.onReceivedSynchronousMessageSubscription?.remove();\n this.onReceivedAsynchronousMessageSubscription?.remove();\n this.onReceivedSynchronousMessageSubscription = undefined;\n this.onReceivedAsynchronousMessageSubscription = undefined;\n this.isDestroyed = true;\n }\n }\n\n /**\n * Called by native code, when the UI sends a synchronous message.\n * @internal\n */\n private receivedSynchronousMessage(\n id: number,\n message: string,\n data: string | undefined\n ): void {\n const result = this.customMessageHandler?.receivedSynchronousMessage(\n message,\n data\n );\n CustomMessageHandlerModule.onReceivedSynchronousMessageResult(id, result);\n }\n\n /**\n * Called by native code, when the UI sends an asynchronous message.\n * @internal\n */\n private receivedAsynchronousMessage(\n message: string,\n data: string | undefined\n ): void {\n this.customMessageHandler?.receivedAsynchronousMessage(message, data);\n }\n\n // noinspection JSUnusedGlobalSymbols\n /**\n * Called by CustomMessageHandler, when sending a message to the UI.\n */\n sendMessage(message: string, data: string | undefined): void {\n CustomMessageHandlerModule.sendMessage(this.nativeId, message, data);\n }\n}\n"]}
@@ -0,0 +1,5 @@
1
+ /** @internal */
2
+ export interface CustomMessageSender {
3
+ sendMessage(message: string, data: string | undefined): void;
4
+ }
5
+ //# sourceMappingURL=custommessagesender.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custommessagesender.d.ts","sourceRoot":"","sources":["../../src/ui/custommessagesender.ts"],"names":[],"mappings":"AAAA,gBAAgB;AAChB,MAAM,WAAW,mBAAmB;IAClC,WAAW,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CAAC;CAC9D"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=custommessagesender.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custommessagesender.js","sourceRoot":"","sources":["../../src/ui/custommessagesender.ts"],"names":[],"mappings":"","sourcesContent":["/** @internal */\nexport interface CustomMessageSender {\n sendMessage(message: string, data: string | undefined): void;\n}\n"]}
@@ -0,0 +1,20 @@
1
+ import { NativeModule } from 'expo-modules-core';
2
+ export type FullscreenHandlerModuleEvents = {
3
+ onEnterFullscreen: ({ nativeId, id, }: {
4
+ nativeId: string;
5
+ id: number;
6
+ }) => void;
7
+ onExitFullscreen: ({ nativeId, id, }: {
8
+ nativeId: string;
9
+ id: number;
10
+ }) => void;
11
+ };
12
+ declare class FullscreenHandlerModule extends NativeModule<FullscreenHandlerModuleEvents> {
13
+ registerHandler(nativeId: string): Promise<void>;
14
+ destroy(nativeId: string): Promise<void>;
15
+ notifyFullscreenChanged(id: number, isFullscreenEnabled: boolean): Promise<void>;
16
+ setIsFullscreenActive(nativeId: string, isFullscreenActive: boolean): Promise<void>;
17
+ }
18
+ declare const _default: FullscreenHandlerModule;
19
+ export default _default;
20
+ //# sourceMappingURL=fullscreenHandlerModule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fullscreenHandlerModule.d.ts","sourceRoot":"","sources":["../../src/ui/fullscreenHandlerModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAuB,MAAM,mBAAmB,CAAC;AAEtE,MAAM,MAAM,6BAA6B,GAAG;IAC1C,iBAAiB,EAAE,CAAC,EAClB,QAAQ,EACR,EAAE,GACH,EAAE;QACD,QAAQ,EAAE,MAAM,CAAC;QACjB,EAAE,EAAE,MAAM,CAAC;KACZ,KAAK,IAAI,CAAC;IACX,gBAAgB,EAAE,CAAC,EACjB,QAAQ,EACR,EAAE,GACH,EAAE;QACD,QAAQ,EAAE,MAAM,CAAC;QACjB,EAAE,EAAE,MAAM,CAAC;KACZ,KAAK,IAAI,CAAC;CACZ,CAAC;AAEF,OAAO,OAAO,uBAAwB,SAAQ,YAAY,CAAC,6BAA6B,CAAC;IACvF,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAChD,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IACxC,uBAAuB,CACrB,EAAE,EAAE,MAAM,EACV,mBAAmB,EAAE,OAAO,GAC3B,OAAO,CAAC,IAAI,CAAC;IAChB,qBAAqB,CACnB,QAAQ,EAAE,MAAM,EAChB,kBAAkB,EAAE,OAAO,GAC1B,OAAO,CAAC,IAAI,CAAC;CACjB;;AAED,wBAEE"}
@@ -0,0 +1,3 @@
1
+ import { requireNativeModule } from 'expo-modules-core';
2
+ export default requireNativeModule('FullscreenHandlerModule');
3
+ //# sourceMappingURL=fullscreenHandlerModule.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fullscreenHandlerModule.js","sourceRoot":"","sources":["../../src/ui/fullscreenHandlerModule.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAgCtE,eAAe,mBAAmB,CAChC,yBAAyB,CAC1B,CAAC","sourcesContent":["import { NativeModule, requireNativeModule } from 'expo-modules-core';\n\nexport type FullscreenHandlerModuleEvents = {\n onEnterFullscreen: ({\n nativeId,\n id,\n }: {\n nativeId: string;\n id: number;\n }) => void;\n onExitFullscreen: ({\n nativeId,\n id,\n }: {\n nativeId: string;\n id: number;\n }) => void;\n};\n\ndeclare class FullscreenHandlerModule extends NativeModule<FullscreenHandlerModuleEvents> {\n registerHandler(nativeId: string): Promise<void>;\n destroy(nativeId: string): Promise<void>;\n notifyFullscreenChanged(\n id: number,\n isFullscreenEnabled: boolean\n ): Promise<void>;\n setIsFullscreenActive(\n nativeId: string,\n isFullscreenActive: boolean\n ): Promise<void>;\n}\n\nexport default requireNativeModule<FullscreenHandlerModule>(\n 'FullscreenHandlerModule'\n);\n"]}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Handles the UI state change when fullscreen should be entered or exited.
3
+ */
4
+ export interface FullscreenHandler {
5
+ /**
6
+ * Indicates if the UI is currently in fullscreen mode
7
+ */
8
+ isFullscreenActive: boolean;
9
+ /**
10
+ * Is called by the `PlayerView` when the UI should enter fullscreen mode.
11
+ */
12
+ enterFullscreen(): void;
13
+ /**
14
+ * Is called by the `PlayerView` when the UI should exit fullscreen mode.
15
+ */
16
+ exitFullscreen(): void;
17
+ }
18
+ //# sourceMappingURL=fullscreenhandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fullscreenhandler.d.ts","sourceRoot":"","sources":["../../src/ui/fullscreenhandler.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC;;OAEG;IACH,kBAAkB,EAAE,OAAO,CAAC;IAE5B;;OAEG;IACH,eAAe,IAAI,IAAI,CAAC;IAExB;;OAEG;IACH,cAAc,IAAI,IAAI,CAAC;CACxB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=fullscreenhandler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fullscreenhandler.js","sourceRoot":"","sources":["../../src/ui/fullscreenhandler.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * Handles the UI state change when fullscreen should be entered or exited.\n */\nexport interface FullscreenHandler {\n /**\n * Indicates if the UI is currently in fullscreen mode\n */\n isFullscreenActive: boolean;\n\n /**\n * Is called by the `PlayerView` when the UI should enter fullscreen mode.\n */\n enterFullscreen(): void;\n\n /**\n * Is called by the `PlayerView` when the UI should exit fullscreen mode.\n */\n exitFullscreen(): void;\n}\n"]}
@@ -0,0 +1,26 @@
1
+ import { FullscreenHandler } from './fullscreenhandler';
2
+ /**
3
+ * Takes care of JS/Native communication for a FullscreenHandler.
4
+ */
5
+ export declare class FullscreenHandlerBridge {
6
+ readonly nativeId: string;
7
+ fullscreenHandler?: FullscreenHandler;
8
+ isDestroyed: boolean;
9
+ private onEnterFullScreenSubscription?;
10
+ private onExitFullScreenSubscription?;
11
+ constructor(nativeId?: string);
12
+ setFullscreenHandler(fullscreenHandler: FullscreenHandler | undefined): void;
13
+ /**
14
+ * Destroys the native FullscreenHandler
15
+ */
16
+ destroy(): void;
17
+ /**
18
+ * Called by native code, when the UI should enter fullscreen.
19
+ */
20
+ private enterFullscreen;
21
+ /**
22
+ * Called by native code, when the UI should exit fullscreen.
23
+ */
24
+ private exitFullscreen;
25
+ }
26
+ //# sourceMappingURL=fullscreenhandlerbridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fullscreenhandlerbridge.d.ts","sourceRoot":"","sources":["../../src/ui/fullscreenhandlerbridge.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAIxD;;GAEG;AACH,qBAAa,uBAAuB;IAClC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,WAAW,EAAE,OAAO,CAAC;IAErB,OAAO,CAAC,6BAA6B,CAAC,CAAoB;IAC1D,OAAO,CAAC,4BAA4B,CAAC,CAAoB;gBAE7C,QAAQ,CAAC,EAAE,MAAM;IAyB7B,oBAAoB,CAAC,iBAAiB,EAAE,iBAAiB,GAAG,SAAS;IAcrE;;OAEG;IACH,OAAO;IAYP;;OAEG;IACH,OAAO,CAAC,eAAe;IASvB;;OAEG;IACH,OAAO,CAAC,cAAc;CAOvB"}
@@ -0,0 +1,67 @@
1
+ import UuidModule from '../modules/UuidModule';
2
+ import FullscreenHandlerModule from './fullscreenHandlerModule';
3
+ /**
4
+ * Takes care of JS/Native communication for a FullscreenHandler.
5
+ */
6
+ export class FullscreenHandlerBridge {
7
+ nativeId;
8
+ fullscreenHandler;
9
+ isDestroyed;
10
+ onEnterFullScreenSubscription;
11
+ onExitFullScreenSubscription;
12
+ constructor(nativeId) {
13
+ this.nativeId = nativeId ?? UuidModule.generate();
14
+ this.isDestroyed = false;
15
+ this.onEnterFullScreenSubscription = FullscreenHandlerModule.addListener('onEnterFullscreen', ({ nativeId, id }) => {
16
+ if (nativeId !== this.nativeId) {
17
+ return;
18
+ }
19
+ this.enterFullscreen(id);
20
+ });
21
+ this.onExitFullScreenSubscription = FullscreenHandlerModule.addListener('onExitFullscreen', ({ nativeId, id }) => {
22
+ if (nativeId !== this.nativeId) {
23
+ return;
24
+ }
25
+ this.exitFullscreen(id);
26
+ });
27
+ FullscreenHandlerModule.registerHandler(this.nativeId);
28
+ }
29
+ setFullscreenHandler(fullscreenHandler) {
30
+ if (this.fullscreenHandler === fullscreenHandler) {
31
+ return;
32
+ }
33
+ this.fullscreenHandler = fullscreenHandler;
34
+ // synchronize current state from fullscreenHandler to native
35
+ FullscreenHandlerModule.setIsFullscreenActive(this.nativeId, fullscreenHandler?.isFullscreenActive ?? false);
36
+ }
37
+ /**
38
+ * Destroys the native FullscreenHandler
39
+ */
40
+ destroy() {
41
+ if (!this.isDestroyed) {
42
+ FullscreenHandlerModule.destroy(this.nativeId);
43
+ this.onEnterFullScreenSubscription?.remove();
44
+ this.onExitFullScreenSubscription?.remove();
45
+ this.onEnterFullScreenSubscription = undefined;
46
+ this.onExitFullScreenSubscription = undefined;
47
+ this.isDestroyed = true;
48
+ }
49
+ }
50
+ // noinspection JSUnusedGlobalSymbols
51
+ /**
52
+ * Called by native code, when the UI should enter fullscreen.
53
+ */
54
+ enterFullscreen(id) {
55
+ this.fullscreenHandler?.enterFullscreen();
56
+ FullscreenHandlerModule.notifyFullscreenChanged(id, this.fullscreenHandler?.isFullscreenActive ?? false);
57
+ }
58
+ // noinspection JSUnusedGlobalSymbols
59
+ /**
60
+ * Called by native code, when the UI should exit fullscreen.
61
+ */
62
+ exitFullscreen(id) {
63
+ this.fullscreenHandler?.exitFullscreen();
64
+ FullscreenHandlerModule.notifyFullscreenChanged(id, this.fullscreenHandler?.isFullscreenActive ?? false);
65
+ }
66
+ }
67
+ //# sourceMappingURL=fullscreenhandlerbridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fullscreenhandlerbridge.js","sourceRoot":"","sources":["../../src/ui/fullscreenhandlerbridge.ts"],"names":[],"mappings":"AAEA,OAAO,UAAU,MAAM,uBAAuB,CAAC;AAC/C,OAAO,uBAAuB,MAAM,2BAA2B,CAAC;AAEhE;;GAEG;AACH,MAAM,OAAO,uBAAuB;IACzB,QAAQ,CAAS;IAC1B,iBAAiB,CAAqB;IACtC,WAAW,CAAU;IAEb,6BAA6B,CAAqB;IAClD,4BAA4B,CAAqB;IAEzD,YAAY,QAAiB;QAC3B,IAAI,CAAC,QAAQ,GAAG,QAAQ,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;QAClD,IAAI,CAAC,WAAW,GAAG,KAAK,CAAC;QAEzB,IAAI,CAAC,6BAA6B,GAAG,uBAAuB,CAAC,WAAW,CACtE,mBAAmB,EACnB,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE;YACnB,IAAI,QAAQ,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAC/B,OAAO;YACT,CAAC;YACD,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC;QAC3B,CAAC,CACF,CAAC;QACF,IAAI,CAAC,4BAA4B,GAAG,uBAAuB,CAAC,WAAW,CACrE,kBAAkB,EAClB,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,EAAE,EAAE;YACnB,IAAI,QAAQ,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAC/B,OAAO;YACT,CAAC;YACD,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;QAC1B,CAAC,CACF,CAAC;QACF,uBAAuB,CAAC,eAAe,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzD,CAAC;IAED,oBAAoB,CAAC,iBAAgD;QACnE,IAAI,IAAI,CAAC,iBAAiB,KAAK,iBAAiB,EAAE,CAAC;YACjD,OAAO;QACT,CAAC;QAED,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;QAE3C,6DAA6D;QAC7D,uBAAuB,CAAC,qBAAqB,CAC3C,IAAI,CAAC,QAAQ,EACb,iBAAiB,EAAE,kBAAkB,IAAI,KAAK,CAC/C,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,OAAO;QACL,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC;YACtB,uBAAuB,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAC/C,IAAI,CAAC,6BAA6B,EAAE,MAAM,EAAE,CAAC;YAC7C,IAAI,CAAC,4BAA4B,EAAE,MAAM,EAAE,CAAC;YAC5C,IAAI,CAAC,6BAA6B,GAAG,SAAS,CAAC;YAC/C,IAAI,CAAC,4BAA4B,GAAG,SAAS,CAAC;YAC9C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;QAC1B,CAAC;IACH,CAAC;IAED,qCAAqC;IACrC;;OAEG;IACK,eAAe,CAAC,EAAU;QAChC,IAAI,CAAC,iBAAiB,EAAE,eAAe,EAAE,CAAC;QAC1C,uBAAuB,CAAC,uBAAuB,CAC7C,EAAE,EACF,IAAI,CAAC,iBAAiB,EAAE,kBAAkB,IAAI,KAAK,CACpD,CAAC;IACJ,CAAC;IAED,qCAAqC;IACrC;;OAEG;IACK,cAAc,CAAC,EAAU;QAC/B,IAAI,CAAC,iBAAiB,EAAE,cAAc,EAAE,CAAC;QACzC,uBAAuB,CAAC,uBAAuB,CAC7C,EAAE,EACF,IAAI,CAAC,iBAAiB,EAAE,kBAAkB,IAAI,KAAK,CACpD,CAAC;IACJ,CAAC;CACF","sourcesContent":["import { EventSubscription } from 'expo-modules-core';\nimport { FullscreenHandler } from './fullscreenhandler';\nimport UuidModule from '../modules/UuidModule';\nimport FullscreenHandlerModule from './fullscreenHandlerModule';\n\n/**\n * Takes care of JS/Native communication for a FullscreenHandler.\n */\nexport class FullscreenHandlerBridge {\n readonly nativeId: string;\n fullscreenHandler?: FullscreenHandler;\n isDestroyed: boolean;\n\n private onEnterFullScreenSubscription?: EventSubscription;\n private onExitFullScreenSubscription?: EventSubscription;\n\n constructor(nativeId?: string) {\n this.nativeId = nativeId ?? UuidModule.generate();\n this.isDestroyed = false;\n\n this.onEnterFullScreenSubscription = FullscreenHandlerModule.addListener(\n 'onEnterFullscreen',\n ({ nativeId, id }) => {\n if (nativeId !== this.nativeId) {\n return;\n }\n this.enterFullscreen(id);\n }\n );\n this.onExitFullScreenSubscription = FullscreenHandlerModule.addListener(\n 'onExitFullscreen',\n ({ nativeId, id }) => {\n if (nativeId !== this.nativeId) {\n return;\n }\n this.exitFullscreen(id);\n }\n );\n FullscreenHandlerModule.registerHandler(this.nativeId);\n }\n\n setFullscreenHandler(fullscreenHandler: FullscreenHandler | undefined) {\n if (this.fullscreenHandler === fullscreenHandler) {\n return;\n }\n\n this.fullscreenHandler = fullscreenHandler;\n\n // synchronize current state from fullscreenHandler to native\n FullscreenHandlerModule.setIsFullscreenActive(\n this.nativeId,\n fullscreenHandler?.isFullscreenActive ?? false\n );\n }\n\n /**\n * Destroys the native FullscreenHandler\n */\n destroy() {\n if (!this.isDestroyed) {\n FullscreenHandlerModule.destroy(this.nativeId);\n this.onEnterFullScreenSubscription?.remove();\n this.onExitFullScreenSubscription?.remove();\n this.onEnterFullScreenSubscription = undefined;\n this.onExitFullScreenSubscription = undefined;\n this.isDestroyed = true;\n }\n }\n\n // noinspection JSUnusedGlobalSymbols\n /**\n * Called by native code, when the UI should enter fullscreen.\n */\n private enterFullscreen(id: number): void {\n this.fullscreenHandler?.enterFullscreen();\n FullscreenHandlerModule.notifyFullscreenChanged(\n id,\n this.fullscreenHandler?.isFullscreenActive ?? false\n );\n }\n\n // noinspection JSUnusedGlobalSymbols\n /**\n * Called by native code, when the UI should exit fullscreen.\n */\n private exitFullscreen(id: number): void {\n this.fullscreenHandler?.exitFullscreen();\n FullscreenHandlerModule.notifyFullscreenChanged(\n id,\n this.fullscreenHandler?.isFullscreenActive ?? false\n );\n }\n}\n"]}
@@ -0,0 +1,3 @@
1
+ export * from './fullscreenhandler';
2
+ export * from './custommessagehandler';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from './fullscreenhandler';
2
+ export * from './custommessagehandler';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ui/index.ts"],"names":[],"mappings":"AAAA,cAAc,qBAAqB,CAAC;AACpC,cAAc,wBAAwB,CAAC","sourcesContent":["export * from './fullscreenhandler';\nexport * from './custommessagehandler';\n"]}
@@ -0,0 +1,40 @@
1
+ {
2
+ "platforms": ["apple", "android"],
3
+ "apple": {
4
+ "modules": [
5
+ "UuidModule",
6
+ "DebugModule",
7
+ "AudioSessionModule",
8
+ "BitmovinCastManagerModule",
9
+ "PlayerModule",
10
+ "SourceModule",
11
+ "BufferModule",
12
+ "NetworkModule",
13
+ "CustomMessageHandlerModule",
14
+ "DrmModule",
15
+ "FullscreenHandlerModule",
16
+ "PlayerAnalyticsModule",
17
+ "OfflineModule",
18
+ "RNPlayerViewManager"
19
+ ],
20
+ "appDelegateSubscribers": ["AppLifecycleDelegate"]
21
+ },
22
+ "android": {
23
+ "modules": [
24
+ "com.bitmovin.player.reactnative.UuidModule",
25
+ "com.bitmovin.player.reactnative.DebugModule",
26
+ "com.bitmovin.player.reactnative.BitmovinCastManagerModule",
27
+ "com.bitmovin.player.reactnative.PlayerModule",
28
+ "com.bitmovin.player.reactnative.SourceModule",
29
+ "com.bitmovin.player.reactnative.BufferModule",
30
+ "com.bitmovin.player.reactnative.NetworkModule",
31
+ "com.bitmovin.player.reactnative.CustomMessageHandlerModule",
32
+ "com.bitmovin.player.reactnative.DrmModule",
33
+ "com.bitmovin.player.reactnative.FullscreenHandlerModule",
34
+ "com.bitmovin.player.reactnative.PlayerAnalyticsModule",
35
+ "com.bitmovin.player.reactnative.OfflineModule",
36
+ "com.bitmovin.player.reactnative.DecoderConfigModule",
37
+ "com.bitmovin.player.reactnative.RNPlayerViewManager"
38
+ ]
39
+ }
40
+ }
@@ -0,0 +1,25 @@
1
+ import BitmovinPlayerCore
2
+ import ExpoModulesCore
3
+
4
+ public class AppLifecycleDelegate: ExpoAppDelegateSubscriber {
5
+ public func application(
6
+ _ application: UIApplication,
7
+ didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil
8
+ ) -> Bool {
9
+ // TODO: Add support for OfflineConfig via config plugin
10
+ #if os(iOS)
11
+ OfflineManager.initializeOfflineManager()
12
+ #endif
13
+ return true
14
+ }
15
+
16
+ public func application(
17
+ _ application: UIApplication,
18
+ handleEventsForBackgroundURLSession identifier: String,
19
+ completionHandler: @escaping () -> Void
20
+ ) {
21
+ #if os(iOS)
22
+ OfflineManager.sharedInstance().add(completionHandler: completionHandler, for: identifier)
23
+ #endif
24
+ }
25
+ }
@@ -1,49 +1,23 @@
1
1
  import AVFAudio
2
+ import ExpoModulesCore
2
3
 
3
- @objc(AudioSessionModule)
4
- public class AudioSessionModule: NSObject, RCTBridgeModule {
5
- // swiftlint:disable:next implicitly_unwrapped_optional
6
- public var methodQueue: DispatchQueue! {
7
- DispatchQueue.main
8
- }
9
-
10
- // swiftlint:disable:next implicitly_unwrapped_optional
11
- public static func moduleName() -> String! {
12
- "AudioSessionModule"
13
- }
4
+ public class AudioSessionModule: Module {
5
+ public func definition() -> ModuleDefinition {
6
+ Name("AudioSessionModule")
14
7
 
15
- public static func requiresMainQueueSetup() -> Bool {
16
- true
17
- }
18
-
19
- /**
20
- Sets the audio session’s category.
21
- - Parameter category: Category string.
22
- - Parameter resolver: JS promise resolver block.
23
- - Parameter rejecter: JS promise rejecter block.
24
- */
25
- @objc
26
- func setCategory(
27
- _ category: String,
28
- resolver resolve: @escaping RCTPromiseResolveBlock,
29
- rejecter reject: @escaping RCTPromiseRejectBlock
30
- ) {
31
- if let category = parseCategory(category) {
32
- do {
33
- try AVAudioSession.sharedInstance().setCategory(category)
34
- resolve(nil)
35
- } catch {
36
- reject("\((error as NSError).code)", error.localizedDescription, error as NSError)
8
+ AsyncFunction("setCategory") { (category: String) in
9
+ if let parsedCategory = parseCategory(category) {
10
+ do {
11
+ try AVAudioSession.sharedInstance().setCategory(parsedCategory)
12
+ } catch {
13
+ throw Exception(name: "AUDIO_SESSION_ERROR", description: error.localizedDescription)
14
+ }
15
+ } else {
16
+ throw Exception(name: "INVALID_CATEGORY", description: "Unknown audio session category: \(category)")
37
17
  }
38
- } else {
39
- let error = RCTErrorWithMessage("Unknown audio session category: \(category)") as NSError
40
- reject("\(error.code)", error.localizedDescription, error)
41
- }
18
+ }.runOnQueue(.main)
42
19
  }
43
20
 
44
- /**
45
- Parse any category string to an `AVAudioSession.Category` type.
46
- */
47
21
  private func parseCategory(_ category: String) -> AVAudioSession.Category? {
48
22
  switch category {
49
23
  case "ambient":
@@ -1,82 +1,43 @@
1
1
  import BitmovinPlayer
2
+ import ExpoModulesCore
2
3
 
3
- @objc(BitmovinCastManagerModule)
4
- public class BitmovinCastManagerModule: NSObject, RCTBridgeModule {
5
- // swiftlint:disable:next implicitly_unwrapped_optional
6
- @objc public var bridge: RCTBridge!
4
+ public class BitmovinCastManagerModule: Module {
5
+ public func definition() -> ModuleDefinition {
6
+ Name("BitmovinCastManagerModule")
7
7
 
8
- // swiftlint:disable:next implicitly_unwrapped_optional
9
- public static func moduleName() -> String! {
10
- "BitmovinCastManagerModule"
11
- }
12
-
13
- public static func requiresMainQueueSetup() -> Bool {
14
- true
15
- }
16
-
17
- // swiftlint:disable:next implicitly_unwrapped_optional
18
- public var methodQueue: DispatchQueue! {
19
- bridge.uiManager.methodQueue
20
- }
21
-
22
- /**
23
- Initializes the BitmovinCastManager with the given options or with no options when none given.
24
- */
25
- @objc(initializeCastManager:resolver:rejecter:)
26
- func initializeCastManager(
27
- _ config: Any?,
28
- resolver resolve: @escaping RCTPromiseResolveBlock,
29
- rejecter reject: @escaping RCTPromiseRejectBlock
30
- ) {
31
- #if os(iOS)
32
- bridge.uiManager.addUIBlock { _, _ in
33
- if let config {
34
- guard let options = RCTConvert.castManagerOptions(config) else {
35
- reject("BitmovinCastManagerModule", "Could not deserialize BitmovinCastManagerOptions", nil)
36
- return
8
+ AsyncFunction("initializeCastManager") { (options: [String: Any]?) throws in
9
+ #if os(iOS)
10
+ if let options {
11
+ guard let options = RCTConvert.castManagerOptions(options) else {
12
+ throw Exception(
13
+ name: "DESERIALIZATION_ERROR",
14
+ description: "Could not deserialize BitmovinCastManagerOptions"
15
+ )
37
16
  }
38
17
  BitmovinCastManager.initializeCasting(options: options)
39
- resolve(nil)
40
18
  } else {
41
19
  BitmovinCastManager.initializeCasting()
42
- resolve(nil)
43
20
  }
44
- }
45
- #endif
46
- }
21
+ #endif
22
+ }.runOnQueue(.main)
47
23
 
48
- /**
49
- Returns true if casting is already initialized.
50
- - Parameter resolver: JS promise resolver.
51
- - Parameter rejecter: JS promise rejecter.
52
- */
53
- @objc(isInitialized:rejecter:)
54
- func isInitialized(
55
- resolver resolve: @escaping RCTPromiseResolveBlock,
56
- rejecter reject: @escaping RCTPromiseRejectBlock
57
- ) {
58
- bridge.uiManager.addUIBlock { _, _ in
59
- #if os(iOS)
60
- resolve(BitmovinCastManager.isInitialized())
61
- #else
62
- resolve(false)
63
- #endif
64
- }
65
- }
24
+ AsyncFunction("isInitialized") { () -> Bool in
25
+ #if os(iOS)
26
+ return BitmovinCastManager.isInitialized()
27
+ #else
28
+ return false
29
+ #endif
30
+ }.runOnQueue(.main)
66
31
 
67
- /**
68
- Sends the given message to the cast receiver on the provided namespace.
69
- If no namespace is provided, the one returned by defaultChannel.protocolNamespace is used.
70
- */
71
- @objc(sendMessage:messageNamespace:)
72
- func sendMessage(
73
- _ message: String,
74
- messageNamespace: String?
75
- ) {
76
- #if os(iOS)
77
- bridge.uiManager.addUIBlock { _, _ in
32
+ AsyncFunction("sendMessage") { (message: String, messageNamespace: String?) in
33
+ #if os(iOS)
78
34
  BitmovinCastManager.sharedInstance().sendMessage(message, withNamespace: messageNamespace)
79
- }
80
- #endif
35
+ #endif
36
+ }.runOnQueue(.main)
37
+
38
+ AsyncFunction("updateContext") { () in
39
+ // iOS/tvOS doesn't need updateContext like Android does
40
+ // This is a no-op for iOS compatibility
41
+ }.runOnQueue(.main)
81
42
  }
82
43
  }