@100mslive/react-native-hms 1.12.2 → 2.0.0-alpha.1

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 (70) hide show
  1. package/android/build.gradle +70 -12
  2. package/android/src/main/java/com/reactnativehmssdk/HMSAudioshareActivity.kt +8 -8
  3. package/android/src/main/java/com/reactnativehmssdk/HMSHLSPlayer.kt +38 -12
  4. package/android/src/main/java/com/reactnativehmssdk/HMSHLSPlayerManagerImpl.kt +185 -0
  5. package/android/src/main/java/com/reactnativehmssdk/HMSHelper.kt +20 -10
  6. package/android/src/main/java/com/reactnativehmssdk/{HMSManager.kt → HMSManagerImpl.kt} +28 -111
  7. package/android/src/main/java/com/reactnativehmssdk/HMSRNSDK.kt +3 -3
  8. package/android/src/main/java/com/reactnativehmssdk/HMSReactNativeEvent.kt +29 -0
  9. package/android/src/main/java/com/reactnativehmssdk/HMSSDKViewManagerImpl.kt +119 -0
  10. package/android/src/main/java/com/reactnativehmssdk/HMSView.kt +33 -5
  11. package/android/src/main/java/com/reactnativehmssdk/HmsScreenshareActivity.kt +9 -9
  12. package/android/src/main/java/com/reactnativehmssdk/HmssdkPackage.kt +42 -3
  13. package/android/src/newarch/java/com/reactnativehmssdk/HMSHLSPlayerManager.kt +128 -0
  14. package/android/src/newarch/java/com/reactnativehmssdk/HMSManager.kt +332 -0
  15. package/android/src/newarch/java/com/reactnativehmssdk/HMSSDKViewManager.kt +102 -0
  16. package/android/src/oldarch/java/com/reactnativehmssdk/HMSHLSPlayerManager.kt +61 -0
  17. package/android/src/oldarch/java/com/reactnativehmssdk/HMSManager.kt +351 -0
  18. package/android/src/oldarch/java/com/reactnativehmssdk/HMSSDKViewManager.kt +87 -0
  19. package/ios/HMSHLSPlayerComponentView.mm +325 -0
  20. package/ios/HMSHLSPlayerManager.m +10 -0
  21. package/ios/HMSHLSPlayerManager.swift +91 -79
  22. package/ios/HMSManager.m +13 -0
  23. package/ios/HMSManager.mm +365 -0
  24. package/ios/HMSManager.swift +109 -103
  25. package/ios/HMSView.m +9 -0
  26. package/ios/HMSView.swift +44 -14
  27. package/ios/HMSViewComponentView.mm +229 -0
  28. package/lib/commonjs/classes/HmsView.js +45 -48
  29. package/lib/commonjs/classes/HmsView.js.map +1 -1
  30. package/lib/commonjs/components/HMSHLSPlayer/HMSHLSPlayer.js +46 -26
  31. package/lib/commonjs/components/HMSHLSPlayer/HMSHLSPlayer.js.map +1 -1
  32. package/lib/commonjs/components/HMSHLSPlayer/RCTHMSHLSPlayer.js +5 -4
  33. package/lib/commonjs/components/HMSHLSPlayer/RCTHMSHLSPlayer.js.map +1 -1
  34. package/lib/commonjs/modules/HMSManagerModule.js +3 -10
  35. package/lib/commonjs/modules/HMSManagerModule.js.map +1 -1
  36. package/lib/commonjs/specs/HMSHLSPlayerNativeComponent.js +75 -0
  37. package/lib/commonjs/specs/HMSHLSPlayerNativeComponent.js.map +1 -0
  38. package/lib/commonjs/specs/HMSViewNativeComponent.js +55 -0
  39. package/lib/commonjs/specs/HMSViewNativeComponent.js.map +1 -0
  40. package/lib/commonjs/specs/NativeHMSManager.js +38 -0
  41. package/lib/commonjs/specs/NativeHMSManager.js.map +1 -0
  42. package/lib/module/classes/HmsView.js +46 -49
  43. package/lib/module/classes/HmsView.js.map +1 -1
  44. package/lib/module/components/HMSHLSPlayer/HMSHLSPlayer.js +48 -28
  45. package/lib/module/components/HMSHLSPlayer/HMSHLSPlayer.js.map +1 -1
  46. package/lib/module/components/HMSHLSPlayer/RCTHMSHLSPlayer.js +3 -3
  47. package/lib/module/components/HMSHLSPlayer/RCTHMSHLSPlayer.js.map +1 -1
  48. package/lib/module/modules/HMSManagerModule.js +1 -9
  49. package/lib/module/modules/HMSManagerModule.js.map +1 -1
  50. package/lib/module/specs/HMSHLSPlayerNativeComponent.js +69 -0
  51. package/lib/module/specs/HMSHLSPlayerNativeComponent.js.map +1 -0
  52. package/lib/module/specs/HMSViewNativeComponent.js +49 -0
  53. package/lib/module/specs/HMSViewNativeComponent.js.map +1 -0
  54. package/lib/module/specs/NativeHMSManager.js +33 -0
  55. package/lib/module/specs/NativeHMSManager.js.map +1 -0
  56. package/lib/typescript/components/HMSHLSPlayer/RCTHMSHLSPlayer.d.ts +6 -9
  57. package/lib/typescript/specs/HMSHLSPlayerNativeComponent.d.ts +115 -0
  58. package/lib/typescript/specs/HMSViewNativeComponent.d.ts +97 -0
  59. package/lib/typescript/specs/NativeHMSManager.d.ts +147 -0
  60. package/package.json +16 -1
  61. package/react-native-hms.podspec +43 -0
  62. package/src/classes/HmsView.tsx +60 -78
  63. package/src/components/HMSHLSPlayer/HMSHLSPlayer.tsx +62 -128
  64. package/src/components/HMSHLSPlayer/RCTHMSHLSPlayer.ts +8 -13
  65. package/src/modules/HMSManagerModule.ts +1 -14
  66. package/src/specs/HMSHLSPlayerNativeComponent.ts +203 -0
  67. package/src/specs/HMSViewNativeComponent.ts +119 -0
  68. package/src/specs/NativeHMSManager.ts +307 -0
  69. package/android/src/main/java/com/reactnativehmssdk/HMSHLSPlayerManager.kt +0 -144
  70. package/android/src/main/java/com/reactnativehmssdk/HMSSDKViewManager.kt +0 -111
@@ -0,0 +1,332 @@
1
+ package com.reactnativehmssdk
2
+
3
+ import com.facebook.react.bridge.*
4
+ import com.facebook.react.module.annotations.ReactModule
5
+
6
+ /**
7
+ * HMSManager — new-arch wrapper for the HMSManager TurboModule.
8
+ *
9
+ * Phase 1 / 1C-2 of the New Architecture migration. This wrapper is compiled
10
+ * only when the consumer's app uses new architecture (newArchEnabled=true).
11
+ * It extends the Codegen-generated NativeHMSManagerSpec abstract class and
12
+ * exposes all spec-declared methods as overrides that delegate to
13
+ * HMSManagerImpl in src/main/.
14
+ *
15
+ * iOS-only methods (audio share, PiP, video plugin) are stubbed here as
16
+ * Promise rejections — Android consumers should guard with Platform.OS
17
+ * checks. Same pattern used in iOS HMSManager.mm for Android-only methods.
18
+ *
19
+ * The old-arch counterpart at src/oldarch/.../HMSManager.kt extends
20
+ * ReactContextBaseJavaModule and forwards to the same impl.
21
+ *
22
+ * Pattern reference:
23
+ * https://github.com/reactwg/react-native-new-architecture/blob/main/docs/backwards-compat-turbo-modules.md
24
+ */
25
+ @ReactModule(name = HMSManagerImpl.REACT_CLASS)
26
+ class HMSManager(
27
+ reactContext: ReactApplicationContext,
28
+ ) : NativeHMSManagerSpec(reactContext) {
29
+ private val impl = HMSManagerImpl(reactContext)
30
+
31
+ override fun getName(): String = HMSManagerImpl.REACT_CLASS
32
+
33
+ /**
34
+ * Lifecycle hooks that consumer apps' MainActivity calls. Forward to
35
+ * the Impl's companion-object methods for backward compatibility with
36
+ * apps that already call HMSManager.onPictureInPictureModeChanged(...) etc.
37
+ */
38
+ companion object {
39
+ @JvmStatic
40
+ fun onPictureInPictureModeChanged(
41
+ isInPictureInPictureMode: Boolean,
42
+ newConfig: android.content.res.Configuration,
43
+ ) = HMSManagerImpl.onPictureInPictureModeChanged(isInPictureInPictureMode, newConfig)
44
+
45
+ @JvmStatic
46
+ fun onResume() = HMSManagerImpl.onResume()
47
+
48
+ @JvmStatic
49
+ fun onUserLeaveHint() = HMSManagerImpl.onUserLeaveHint()
50
+
51
+ /** Backward-compat: external packages (e.g. react-native-video-plugin) read this map. */
52
+ @JvmStatic
53
+ val hmsCollection: MutableMap<String, HMSRNSDK>
54
+ get() = HMSManagerImpl.hmsCollection
55
+ }
56
+
57
+ /** Used by view managers to look up the active SDK instances map. */
58
+ fun getHmsInstance(): MutableMap<String, HMSRNSDK> = impl.getHmsInstance()
59
+
60
+ override fun acceptRoleChange(data: ReadableMap, promise: Promise) = impl.acceptRoleChange(data, promise)
61
+
62
+ override fun addKeyChangeListener(data: ReadableMap, promise: Promise) = impl.addKeyChangeListener(data, promise)
63
+
64
+ override fun addListener(eventName: String) = impl.addListener(eventName)
65
+
66
+ override fun addResponseOnPollQuestion(data: ReadableMap, promise: Promise) = impl.addResponseOnPollQuestion(data, promise)
67
+
68
+ override fun audioShareCurrentTime(data: ReadableMap, promise: Promise) {
69
+ promise.reject("NotImplemented", "audioShareCurrentTime is iOS-only", null)
70
+ }
71
+
72
+ override fun audioShareDuration(data: ReadableMap, promise: Promise) {
73
+ promise.reject("NotImplemented", "audioShareDuration is iOS-only", null)
74
+ }
75
+
76
+ override fun audioShareIsPlaying(data: ReadableMap, promise: Promise) {
77
+ promise.reject("NotImplemented", "audioShareIsPlaying is iOS-only", null)
78
+ }
79
+
80
+ override fun build(data: ReadableMap, promise: Promise) = impl.build(data, promise)
81
+
82
+ override fun cancelPreview(data: ReadableMap, promise: Promise) = impl.cancelPreview(data, promise)
83
+
84
+ override fun captureImageAtMaxSupportedResolution(data: ReadableMap, promise: Promise) = impl.captureImageAtMaxSupportedResolution(data, promise)
85
+
86
+ override fun changeIOSPIPVideoTrack(data: ReadableMap, promise: Promise) {
87
+ promise.reject("NotImplemented", "changeIOSPIPVideoTrack is iOS-only", null)
88
+ }
89
+
90
+ override fun changeMetadata(data: ReadableMap, promise: Promise) = impl.changeMetadata(data, promise)
91
+
92
+ override fun changeName(data: ReadableMap, promise: Promise) = impl.changeName(data, promise)
93
+
94
+ override fun changeRole(data: ReadableMap, promise: Promise) = impl.changeRole(data, promise)
95
+
96
+ override fun changeRoleOfPeer(data: ReadableMap, promise: Promise) = impl.changeRoleOfPeer(data, promise)
97
+
98
+ override fun changeRoleOfPeersWithRoles(data: ReadableMap, promise: Promise) = impl.changeRoleOfPeersWithRoles(data, promise)
99
+
100
+ override fun changeTrackState(data: ReadableMap, promise: Promise) = impl.changeTrackState(data, promise)
101
+
102
+ override fun changeTrackStateForRoles(data: ReadableMap, promise: Promise) = impl.changeTrackStateForRoles(data, promise)
103
+
104
+ override fun changeVirtualBackground(data: ReadableMap, promise: Promise) {
105
+ promise.reject("NotImplemented", "changeVirtualBackground is iOS-only", null)
106
+ }
107
+
108
+ override fun checkNotifications(promise: Promise) = impl.checkNotifications(promise)
109
+
110
+ override fun destroy(data: ReadableMap, promise: Promise) = impl.destroy(data, promise)
111
+
112
+ override fun disableEvent(data: ReadableMap, promise: Promise) = impl.disableEvent(data, promise)
113
+
114
+ override fun disableNetworkQualityUpdates(data: ReadableMap) = impl.disableNetworkQualityUpdates(data)
115
+
116
+ override fun disableNoiseCancellationPlugin(data: ReadableMap, promise: Promise) = impl.disableNoiseCancellationPlugin(data, promise)
117
+
118
+ override fun disableVideoPlugin(data: ReadableMap, promise: Promise) {
119
+ promise.reject("NotImplemented", "disableVideoPlugin is iOS-only", null)
120
+ }
121
+
122
+ override fun disposePIP(data: ReadableMap, promise: Promise) {
123
+ promise.reject("NotImplemented", "disposePIP is iOS-only", null)
124
+ }
125
+
126
+ override fun enableEvent(data: ReadableMap, promise: Promise) = impl.enableEvent(data, promise)
127
+
128
+ override fun enableNetworkQualityUpdates(data: ReadableMap) = impl.enableNetworkQualityUpdates(data)
129
+
130
+ override fun enableNoiseCancellationPlugin(data: ReadableMap, promise: Promise) = impl.enableNoiseCancellationPlugin(data, promise)
131
+
132
+ override fun enableVideoPlugin(data: ReadableMap, promise: Promise) {
133
+ promise.reject("NotImplemented", "enableVideoPlugin is iOS-only", null)
134
+ }
135
+
136
+ override fun endRoom(data: ReadableMap, promise: Promise) = impl.endRoom(data, promise)
137
+
138
+ override fun fetchLeaderboard(data: ReadableMap, promise: Promise) = impl.fetchLeaderboard(data, promise)
139
+
140
+ override fun getAudioDevicesList(data: ReadableMap, promise: Promise) = impl.getAudioDevicesList(data, promise)
141
+
142
+ override fun getAudioMixingMode(data: ReadableMap, promise: Promise) = impl.getAudioMixingMode(data, promise)
143
+
144
+ override fun getAudioOutputRouteType(data: ReadableMap, promise: Promise) = impl.getAudioOutputRouteType(data, promise)
145
+
146
+ override fun getAuthTokenByRoomCode(data: ReadableMap, promise: Promise) = impl.getAuthTokenByRoomCode(data, promise)
147
+
148
+ override fun getLocalPeer(data: ReadableMap, promise: Promise) = impl.getLocalPeer(data, promise)
149
+
150
+ override fun getPeerListIterator(data: ReadableMap): WritableMap? = impl.getPeerListIterator(data)
151
+
152
+ override fun getPeerProperty(data: ReadableMap): WritableMap? = impl.getPeerProperty(data)
153
+
154
+ override fun getRemoteAudioTrackFromTrackId(data: ReadableMap, promise: Promise) = impl.getRemoteAudioTrackFromTrackId(data, promise)
155
+
156
+ override fun getRemotePeers(data: ReadableMap, promise: Promise) = impl.getRemotePeers(data, promise)
157
+
158
+ override fun getRemoteVideoTrackFromTrackId(data: ReadableMap, promise: Promise) = impl.getRemoteVideoTrackFromTrackId(data, promise)
159
+
160
+ override fun getRoles(data: ReadableMap, promise: Promise) = impl.getRoles(data, promise)
161
+
162
+ override fun getRoom(data: ReadableMap, promise: Promise) = impl.getRoom(data, promise)
163
+
164
+ override fun getRoomLayout(data: ReadableMap, promise: Promise) = impl.getRoomLayout(data, promise)
165
+
166
+ override fun getRoomProperty(data: ReadableMap): WritableMap? = impl.getRoomProperty(data)
167
+
168
+ override fun getSessionMetadataForKey(data: ReadableMap, promise: Promise) = impl.getSessionMetadataForKey(data, promise)
169
+
170
+ override fun getSoftInputMode(): Double = impl.getSoftInputMode().toDouble()
171
+
172
+ override fun getVideoTrackLayer(data: ReadableMap, promise: Promise) = impl.getVideoTrackLayer(data, promise)
173
+
174
+ override fun getVideoTrackLayerDefinition(data: ReadableMap, promise: Promise) = impl.getVideoTrackLayerDefinition(data, promise)
175
+
176
+ override fun getVolume(data: ReadableMap, promise: Promise) = impl.getVolume(data, promise)
177
+
178
+ override fun handlePipActions(action: String, data: ReadableMap, promise: Promise) = impl.handlePipActions(action, data, promise)
179
+
180
+ override fun handleRealTimeTranscription(data: ReadableMap, promise: Promise) = impl.handleRealTimeTranscription(data, promise)
181
+
182
+ override fun hideSystemBars() = impl.hideSystemBars()
183
+
184
+ override fun isAudioShared(data: ReadableMap, promise: Promise) = impl.isAudioShared(data, promise)
185
+
186
+ override fun isMute(data: ReadableMap, promise: Promise) = impl.isMute(data, promise)
187
+
188
+ override fun isNoiseCancellationPluginAvailable(data: ReadableMap, promise: Promise) = impl.isNoiseCancellationPluginAvailable(data, promise)
189
+
190
+ override fun isNoiseCancellationPluginEnabled(data: ReadableMap, promise: Promise) = impl.isNoiseCancellationPluginEnabled(data, promise)
191
+
192
+ override fun isPIPActive(data: ReadableMap, promise: Promise) {
193
+ promise.reject("NotImplemented", "isPIPActive is iOS-only", null)
194
+ }
195
+
196
+ override fun isPlaybackAllowed(data: ReadableMap, promise: Promise) = impl.isPlaybackAllowed(data, promise)
197
+
198
+ override fun isScreenShared(data: ReadableMap, promise: Promise) = impl.isScreenShared(data, promise)
199
+
200
+ override fun join(data: ReadableMap) = impl.join(data)
201
+
202
+ override fun leave(data: ReadableMap, promise: Promise) = impl.leave(data, promise)
203
+
204
+ override fun lowerLocalPeerHand(data: ReadableMap, promise: Promise) = impl.lowerLocalPeerHand(data, promise)
205
+
206
+ override fun lowerRemotePeerHand(data: ReadableMap, promise: Promise) = impl.lowerRemotePeerHand(data, promise)
207
+
208
+ override fun pauseAudioShare(data: ReadableMap, promise: Promise) {
209
+ promise.reject("NotImplemented", "pauseAudioShare is iOS-only", null)
210
+ }
211
+
212
+ override fun peerListIteratorHasNext(data: ReadableMap, promise: Promise) = impl.peerListIteratorHasNext(data, promise)
213
+
214
+ override fun peerListIteratorNext(data: ReadableMap, promise: Promise) = impl.peerListIteratorNext(data, promise)
215
+
216
+ override fun playAudioShare(data: ReadableMap, promise: Promise) {
217
+ promise.reject("NotImplemented", "playAudioShare is iOS-only", null)
218
+ }
219
+
220
+ override fun preview(data: ReadableMap) = impl.preview(data)
221
+
222
+ override fun previewForRole(data: ReadableMap, promise: Promise) = impl.previewForRole(data, promise)
223
+
224
+ override fun quickStartPoll(data: ReadableMap, promise: Promise) = impl.quickStartPoll(data, promise)
225
+
226
+ override fun raiseLocalPeerHand(data: ReadableMap, promise: Promise) = impl.raiseLocalPeerHand(data, promise)
227
+
228
+ override fun remoteMuteAllAudio(data: ReadableMap, promise: Promise) = impl.remoteMuteAllAudio(data, promise)
229
+
230
+ override fun removeKeyChangeListener(data: ReadableMap, promise: Promise) = impl.removeKeyChangeListener(data, promise)
231
+
232
+ override fun removeListeners(count: Double) = impl.removeListeners(count.toInt())
233
+
234
+ override fun removePeer(data: ReadableMap, promise: Promise) = impl.removePeer(data, promise)
235
+
236
+ override fun restrictData(data: ReadableMap, promise: Promise) = impl.restrictData(data, promise)
237
+
238
+ override fun resumeAudioShare(data: ReadableMap, promise: Promise) {
239
+ promise.reject("NotImplemented", "resumeAudioShare is iOS-only", null)
240
+ }
241
+
242
+ override fun sendBroadcastMessage(data: ReadableMap, promise: Promise) = impl.sendBroadcastMessage(data, promise)
243
+
244
+ override fun sendDirectMessage(data: ReadableMap, promise: Promise) = impl.sendDirectMessage(data, promise)
245
+
246
+ override fun sendGroupMessage(data: ReadableMap, promise: Promise) = impl.sendGroupMessage(data, promise)
247
+
248
+ override fun sendHLSTimedMetadata(data: ReadableMap, promise: Promise) = impl.sendHLSTimedMetadata(data, promise)
249
+
250
+ override fun setActiveSpeakerInIOSPIP(data: ReadableMap, promise: Promise) {
251
+ promise.reject("NotImplemented", "setActiveSpeakerInIOSPIP is iOS-only", null)
252
+ }
253
+
254
+ override fun setAlwaysScreenOn(data: ReadableMap, promise: Promise) = impl.setAlwaysScreenOn(data, promise)
255
+
256
+ override fun setAudioDeviceChangeListener(data: ReadableMap) = impl.setAudioDeviceChangeListener(data)
257
+
258
+ override fun setAudioMixingMode(data: ReadableMap, promise: Promise) = impl.setAudioMixingMode(data, promise)
259
+
260
+ override fun setAudioMode(data: ReadableMap, promise: Promise) = impl.setAudioMode(data, promise)
261
+
262
+ override fun setAudioShareVolume(data: ReadableMap, promise: Promise) {
263
+ promise.reject("NotImplemented", "setAudioShareVolume is iOS-only", null)
264
+ }
265
+
266
+ override fun setLocalMute(data: ReadableMap) = impl.setLocalMute(data)
267
+
268
+ override fun setLocalVideoMute(data: ReadableMap) = impl.setLocalVideoMute(data)
269
+
270
+ override fun setPermissionsAccepted(data: ReadableMap, promise: Promise) = impl.setPermissionsAccepted(data, promise)
271
+
272
+ override fun setPlaybackAllowed(data: ReadableMap, promise: Promise) = impl.setPlaybackAllowed(data, promise)
273
+
274
+ override fun setPlaybackForAllAudio(data: ReadableMap, promise: Promise) = impl.setPlaybackForAllAudio(data, promise)
275
+
276
+ override fun setSessionMetadataForKey(data: ReadableMap, promise: Promise) = impl.setSessionMetadataForKey(data, promise)
277
+
278
+ override fun setSoftInputMode(inputMode: Double): Double = impl.setSoftInputMode(inputMode.toInt()).toDouble()
279
+
280
+ override fun setVideoFilterParameter(data: ReadableMap, promise: Promise) {
281
+ promise.reject("NotImplemented", "setVideoFilterParameter is iOS-only", null)
282
+ }
283
+
284
+ override fun setVideoTrackLayer(data: ReadableMap, promise: Promise) = impl.setVideoTrackLayer(data, promise)
285
+
286
+ override fun setVolume(data: ReadableMap, promise: Promise) = impl.setVolume(data, promise)
287
+
288
+ override fun setupPIP(data: ReadableMap, promise: Promise) {
289
+ promise.reject("NotImplemented", "setupPIP is iOS-only", null)
290
+ }
291
+
292
+ override fun showSystemBars() = impl.showSystemBars()
293
+
294
+ override fun startAudioshare(data: ReadableMap, promise: Promise) = impl.startAudioshare(data, promise)
295
+
296
+ override fun startHLSStreaming(data: ReadableMap, promise: Promise) = impl.startHLSStreaming(data, promise)
297
+
298
+ override fun startRTMPOrRecording(data: ReadableMap, promise: Promise) = impl.startRTMPOrRecording(data, promise)
299
+
300
+ override fun startScreenshare(data: ReadableMap, promise: Promise) = impl.startScreenshare(data, promise)
301
+
302
+ override fun startWhiteboard(data: ReadableMap, promise: Promise) = impl.startWhiteboard(data, promise)
303
+
304
+ override fun stopAudioShare(data: ReadableMap, promise: Promise) {
305
+ promise.reject("NotImplemented", "stopAudioShare is iOS-only", null)
306
+ }
307
+
308
+ override fun stopAudioshare(data: ReadableMap, promise: Promise) = impl.stopAudioshare(data, promise)
309
+
310
+ override fun stopHLSStreaming(data: ReadableMap, promise: Promise) = impl.stopHLSStreaming(data, promise)
311
+
312
+ override fun stopPIP(data: ReadableMap, promise: Promise) {
313
+ promise.reject("NotImplemented", "stopPIP is iOS-only", null)
314
+ }
315
+
316
+ override fun stopPoll(data: ReadableMap, promise: Promise) = impl.stopPoll(data, promise)
317
+
318
+ override fun stopRtmpAndRecording(data: ReadableMap, promise: Promise) = impl.stopRtmpAndRecording(data, promise)
319
+
320
+ override fun stopScreenshare(data: ReadableMap, promise: Promise) = impl.stopScreenshare(data, promise)
321
+
322
+ override fun stopWhiteboard(data: ReadableMap, promise: Promise) = impl.stopWhiteboard(data, promise)
323
+
324
+ override fun switchAudioOutput(data: ReadableMap, promise: Promise) = impl.switchAudioOutput(data, promise)
325
+
326
+ override fun switchAudioOutputUsingIOSUI(data: ReadableMap, promise: Promise) {
327
+ promise.reject("NotImplemented", "switchAudioOutputUsingIOSUI is iOS-only", null)
328
+ }
329
+
330
+ override fun switchCamera(data: ReadableMap) = impl.switchCamera(data)
331
+
332
+ }
@@ -0,0 +1,102 @@
1
+ package com.reactnativehmssdk
2
+
3
+ import android.os.Build
4
+ import androidx.annotation.NonNull
5
+ import androidx.annotation.Nullable
6
+ import androidx.annotation.RequiresApi
7
+ import com.facebook.react.bridge.ReadableArray
8
+ import com.facebook.react.bridge.ReadableMap
9
+ import com.facebook.react.uimanager.SimpleViewManager
10
+ import com.facebook.react.uimanager.ThemedReactContext
11
+ import com.facebook.react.uimanager.ViewManagerDelegate
12
+ import com.facebook.react.viewmanagers.HMSViewManagerDelegate
13
+ import com.facebook.react.viewmanagers.HMSViewManagerInterface
14
+
15
+ /**
16
+ * HMSSDKViewManager — new-arch (Fabric) view manager for `<HMSView />`.
17
+ *
18
+ * Phase 1 / 1C-3 of the New Architecture migration. Compiled only when
19
+ * the consumer's app uses new architecture.
20
+ *
21
+ * Differences from the old-arch wrapper at src/oldarch/.../HMSSDKViewManager.kt:
22
+ * - Implements the Codegen-generated `HMSViewManagerInterface<HMSView>`
23
+ * (typed prop setters that Fabric calls directly).
24
+ * - Uses `HMSViewManagerDelegate` (also Codegen-generated) for
25
+ * prop dispatch via Fabric's mounting mechanism.
26
+ * - Drops @ReactProp annotations — Fabric doesn't scan for them;
27
+ * it uses the typed interface.
28
+ *
29
+ * Both arches still extend `SimpleViewManager<HMSView>` so the same
30
+ * paper-side machinery (event-type registration, commands map) works.
31
+ *
32
+ * All logic delegates to HMSSDKViewManagerImpl in src/main/.
33
+ */
34
+ class HMSSDKViewManager :
35
+ SimpleViewManager<HMSView>(),
36
+ HMSViewManagerInterface<HMSView> {
37
+ private val mDelegate: ViewManagerDelegate<HMSView> = HMSViewManagerDelegate(this)
38
+ private var reactContext: ThemedReactContext? = null
39
+
40
+ override fun getName(): String = HMSSDKViewManagerImpl.REACT_CLASS
41
+
42
+ override fun getDelegate(): ViewManagerDelegate<HMSView> = mDelegate
43
+
44
+ override fun createViewInstance(reactContext: ThemedReactContext): HMSView {
45
+ this.reactContext = reactContext
46
+ return HMSSDKViewManagerImpl.createViewInstance(reactContext)
47
+ }
48
+
49
+ override fun onDropViewInstance(view: HMSView) {
50
+ super.onDropViewInstance(view)
51
+ HMSSDKViewManagerImpl.onDropViewInstance(view)
52
+ }
53
+
54
+ override fun getExportedCustomDirectEventTypeConstants(): Map<String, Any> =
55
+ HMSSDKViewManagerImpl.getExportedCustomDirectEventTypeConstants()
56
+
57
+ @RequiresApi(Build.VERSION_CODES.N)
58
+ override fun receiveCommand(
59
+ @NonNull root: HMSView,
60
+ commandId: String?,
61
+ args: ReadableArray?,
62
+ ) {
63
+ when (commandId) {
64
+ "capture" -> HMSSDKViewManagerImpl.capture(root, args)
65
+ }
66
+ }
67
+
68
+ @Nullable
69
+ override fun getCommandsMap(): Map<String, Int>? = HMSSDKViewManagerImpl.getCommandsMap()
70
+
71
+ /** Codegen-interface typed `capture` command — Fabric dispatches here. */
72
+ override fun capture(
73
+ view: HMSView,
74
+ requestId: Int,
75
+ ) = HMSSDKViewManagerImpl.capture(view, requestId)
76
+
77
+ // ─────────────────────────────────────────────────────────────────
78
+ // Codegen-interface methods (typed prop setters dispatched by Fabric)
79
+ // ─────────────────────────────────────────────────────────────────
80
+
81
+ override fun setData(
82
+ view: HMSView,
83
+ value: ReadableMap?,
84
+ ) {
85
+ if (value != null) HMSSDKViewManagerImpl.setData(view, value, reactContext)
86
+ }
87
+
88
+ override fun setScaleType(
89
+ view: HMSView,
90
+ value: String?,
91
+ ) = HMSSDKViewManagerImpl.setScaleType(view, value)
92
+
93
+ override fun setSetZOrderMediaOverlay(
94
+ view: HMSView,
95
+ value: Boolean,
96
+ ) = HMSSDKViewManagerImpl.setZOrderMediaOverlay(view, value)
97
+
98
+ override fun setAutoSimulcast(
99
+ view: HMSView,
100
+ value: Boolean,
101
+ ) = HMSSDKViewManagerImpl.setAutoSimulcast(view, value)
102
+ }
@@ -0,0 +1,61 @@
1
+ package com.reactnativehmssdk
2
+
3
+ import com.facebook.react.bridge.ReadableArray
4
+ import com.facebook.react.uimanager.SimpleViewManager
5
+ import com.facebook.react.uimanager.ThemedReactContext
6
+ import com.facebook.react.uimanager.annotations.ReactProp
7
+
8
+ /**
9
+ * HMSHLSPlayerManager — old-arch (paper) view manager for `<HMSHLSPlayer />`.
10
+ *
11
+ * Phase 1 / 1C-4 of the New Architecture migration. Compiled only when
12
+ * the consumer's app uses old architecture. All logic delegates to
13
+ * HMSHLSPlayerManagerImpl in src/main/.
14
+ */
15
+ class HMSHLSPlayerManager : SimpleViewManager<HMSHLSPlayer>() {
16
+ override fun getName(): String = HMSHLSPlayerManagerImpl.REACT_CLASS
17
+
18
+ override fun createViewInstance(reactContext: ThemedReactContext): HMSHLSPlayer =
19
+ HMSHLSPlayerManagerImpl.createViewInstance(reactContext)
20
+
21
+ override fun onDropViewInstance(view: HMSHLSPlayer) {
22
+ super.onDropViewInstance(view)
23
+ HMSHLSPlayerManagerImpl.onDropViewInstance(view)
24
+ }
25
+
26
+ override fun getExportedCustomDirectEventTypeConstants(): Map<String, Any> =
27
+ HMSHLSPlayerManagerImpl.getExportedCustomDirectEventTypeConstants()
28
+
29
+ override fun receiveCommand(
30
+ root: HMSHLSPlayer,
31
+ commandId: Int,
32
+ args: ReadableArray?,
33
+ ) {
34
+ super.receiveCommand(root, commandId, args)
35
+ HMSHLSPlayerManagerImpl.receiveCommandById(root, commandId, args)
36
+ }
37
+
38
+ override fun getCommandsMap(): Map<String, Int> = HMSHLSPlayerManagerImpl.getCommandsMap()
39
+
40
+ // ─────────────────────────────────────────────────────────────────
41
+ // Paper @ReactProp setters
42
+ // ─────────────────────────────────────────────────────────────────
43
+
44
+ @ReactProp(name = "url")
45
+ fun setStreamURL(
46
+ view: HMSHLSPlayer,
47
+ data: String?,
48
+ ) = HMSHLSPlayerManagerImpl.setUrl(view, data)
49
+
50
+ @ReactProp(name = "enableStats", defaultBoolean = false)
51
+ fun setEnableStats(
52
+ view: HMSHLSPlayer,
53
+ data: Boolean,
54
+ ) = HMSHLSPlayerManagerImpl.setEnableStats(view, data)
55
+
56
+ @ReactProp(name = "enableControls", defaultBoolean = false)
57
+ fun setEnableControls(
58
+ view: HMSHLSPlayer,
59
+ data: Boolean,
60
+ ) = HMSHLSPlayerManagerImpl.setEnableControls(view, data)
61
+ }