@100mslive/react-native-hms 1.7.2 → 1.9.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 (178) hide show
  1. package/android/build.gradle +3 -3
  2. package/android/local.properties +8 -1
  3. package/android/src/main/java/com/reactnativehmssdk/HMSAudioshareActivity.kt +1 -0
  4. package/android/src/main/java/com/reactnativehmssdk/HMSDecoder.kt +43 -15
  5. package/android/src/main/java/com/reactnativehmssdk/HMSHLSPlayer.kt +113 -68
  6. package/android/src/main/java/com/reactnativehmssdk/HMSHLSPlayerManager.kt +17 -4
  7. package/android/src/main/java/com/reactnativehmssdk/HMSHelper.kt +75 -21
  8. package/android/src/main/java/com/reactnativehmssdk/HMSManager.kt +483 -184
  9. package/android/src/main/java/com/reactnativehmssdk/HMSRNSDK.kt +587 -177
  10. package/android/src/main/java/com/reactnativehmssdk/HMSSDKViewManager.kt +26 -7
  11. package/android/src/main/java/com/reactnativehmssdk/HMSView.kt +32 -12
  12. package/android/src/main/java/com/reactnativehmssdk/HmsScreenshareActivity.kt +1 -0
  13. package/android/src/main/java/com/reactnativehmssdk/PipActionReceiver.kt +10 -6
  14. package/android/src/main/res/layout/player_view.xml +3 -2
  15. package/ios/HMSConstants.swift +1 -0
  16. package/ios/HMSDecoder.swift +18 -7
  17. package/ios/HMSHLSPlayerManager.swift +18 -2
  18. package/ios/HMSHelper.swift +33 -4
  19. package/ios/HMSManager.m +256 -73
  20. package/ios/HMSManager.swift +47 -3
  21. package/ios/HMSRNSDK.swift +224 -140
  22. package/ios/HMSView.swift +17 -3
  23. package/ios/Hmssdk.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  24. package/ios/Hmssdk.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  25. package/ios/Hmssdk.xcodeproj/project.xcworkspace/xcuserdata/jatinnagar.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  26. package/ios/Hmssdk.xcodeproj/xcuserdata/jatinnagar.xcuserdatad/xcschemes/xcschememanagement.plist +14 -0
  27. package/lib/commonjs/classes/HMSAudioCodec.js +1 -2
  28. package/lib/commonjs/classes/HMSAudioCodec.js.map +1 -1
  29. package/lib/commonjs/classes/HMSAudioDevice.js +1 -2
  30. package/lib/commonjs/classes/HMSAudioDevice.js.map +1 -1
  31. package/lib/commonjs/classes/HMSAudioMixingMode.js +1 -2
  32. package/lib/commonjs/classes/HMSAudioMixingMode.js.map +1 -1
  33. package/lib/commonjs/classes/HMSAudioMode.js +1 -2
  34. package/lib/commonjs/classes/HMSAudioMode.js.map +1 -1
  35. package/lib/commonjs/classes/HMSCameraFacing.js +1 -2
  36. package/lib/commonjs/classes/HMSCameraFacing.js.map +1 -1
  37. package/lib/commonjs/classes/HMSConstants.js +1 -2
  38. package/lib/commonjs/classes/HMSConstants.js.map +1 -1
  39. package/lib/commonjs/classes/HMSEncoder.js +6 -0
  40. package/lib/commonjs/classes/HMSEncoder.js.map +1 -1
  41. package/lib/commonjs/classes/HMSEventEmitter.js +1 -2
  42. package/lib/commonjs/classes/HMSEventEmitter.js.map +1 -1
  43. package/lib/commonjs/classes/HMSIOSAudioMode.js +1 -2
  44. package/lib/commonjs/classes/HMSIOSAudioMode.js.map +1 -1
  45. package/lib/commonjs/classes/HMSLayer.js +1 -2
  46. package/lib/commonjs/classes/HMSLayer.js.map +1 -1
  47. package/lib/commonjs/classes/HMSLogAlarmManager.js +1 -2
  48. package/lib/commonjs/classes/HMSLogAlarmManager.js.map +1 -1
  49. package/lib/commonjs/classes/HMSLogLevel.js +1 -2
  50. package/lib/commonjs/classes/HMSLogLevel.js.map +1 -1
  51. package/lib/commonjs/classes/HMSLogger.js +1 -2
  52. package/lib/commonjs/classes/HMSLogger.js.map +1 -1
  53. package/lib/commonjs/classes/HMSManagerModule.js +1 -2
  54. package/lib/commonjs/classes/HMSManagerModule.js.map +1 -1
  55. package/lib/commonjs/classes/HMSMessageRecipientType.js +1 -2
  56. package/lib/commonjs/classes/HMSMessageRecipientType.js.map +1 -1
  57. package/lib/commonjs/classes/HMSNativeEventListener.js +1 -2
  58. package/lib/commonjs/classes/HMSNativeEventListener.js.map +1 -1
  59. package/lib/commonjs/classes/HMSPIPListenerActions.js +2 -2
  60. package/lib/commonjs/classes/HMSPIPListenerActions.js.map +1 -1
  61. package/lib/commonjs/classes/HMSPeer.js +15 -0
  62. package/lib/commonjs/classes/HMSPeer.js.map +1 -1
  63. package/lib/commonjs/classes/HMSPeerListIterator.js +64 -0
  64. package/lib/commonjs/classes/HMSPeerListIterator.js.map +1 -0
  65. package/lib/commonjs/classes/HMSPeerListIteratorOptions.js +2 -0
  66. package/lib/commonjs/classes/HMSPeerListIteratorOptions.js.map +1 -0
  67. package/lib/commonjs/classes/HMSPeerUpdate.js +3 -4
  68. package/lib/commonjs/classes/HMSPeerUpdate.js.map +1 -1
  69. package/lib/commonjs/classes/HMSPeersCache.js +8 -2
  70. package/lib/commonjs/classes/HMSPeersCache.js.map +1 -1
  71. package/lib/commonjs/classes/HMSQualityLimitationReason.js +1 -2
  72. package/lib/commonjs/classes/HMSQualityLimitationReason.js.map +1 -1
  73. package/lib/commonjs/classes/HMSRoomCache.js +1 -2
  74. package/lib/commonjs/classes/HMSRoomCache.js.map +1 -1
  75. package/lib/commonjs/classes/HMSRoomUpdate.js +1 -2
  76. package/lib/commonjs/classes/HMSRoomUpdate.js.map +1 -1
  77. package/lib/commonjs/classes/HMSSDK.js +192 -32
  78. package/lib/commonjs/classes/HMSSDK.js.map +1 -1
  79. package/lib/commonjs/classes/HMSTrackSettingsInitState.js +1 -2
  80. package/lib/commonjs/classes/HMSTrackSettingsInitState.js.map +1 -1
  81. package/lib/commonjs/classes/HMSTrackSource.js +1 -2
  82. package/lib/commonjs/classes/HMSTrackSource.js.map +1 -1
  83. package/lib/commonjs/classes/HMSTrackType.js +1 -2
  84. package/lib/commonjs/classes/HMSTrackType.js.map +1 -1
  85. package/lib/commonjs/classes/HMSTrackUpdate.js +1 -2
  86. package/lib/commonjs/classes/HMSTrackUpdate.js.map +1 -1
  87. package/lib/commonjs/classes/HMSUpdateListenerActions.js +2 -2
  88. package/lib/commonjs/classes/HMSUpdateListenerActions.js.map +1 -1
  89. package/lib/commonjs/classes/HMSVideoCodec.js +1 -2
  90. package/lib/commonjs/classes/HMSVideoCodec.js.map +1 -1
  91. package/lib/commonjs/classes/HMSVideoViewMode.js +1 -2
  92. package/lib/commonjs/classes/HMSVideoViewMode.js.map +1 -1
  93. package/lib/commonjs/classes/HmsView.js +3 -4
  94. package/lib/commonjs/classes/HmsView.js.map +1 -1
  95. package/lib/commonjs/components/HMSHLSPlayer/HMSHLSPlayer.js +13 -9
  96. package/lib/commonjs/components/HMSHLSPlayer/HMSHLSPlayer.js.map +1 -1
  97. package/lib/commonjs/components/HMSHLSPlayer/RCTHMSHLSPlayer.js +2 -4
  98. package/lib/commonjs/components/HMSHLSPlayer/RCTHMSHLSPlayer.js.map +1 -1
  99. package/lib/commonjs/components/HMSHLSPlayer/hooks.js +5 -10
  100. package/lib/commonjs/components/HMSHLSPlayer/hooks.js.map +1 -1
  101. package/lib/commonjs/hooks/useHMSPeerUpdates.js +2 -2
  102. package/lib/commonjs/hooks/useHMSPeerUpdates.js.map +1 -1
  103. package/lib/commonjs/index.js +1 -2
  104. package/lib/commonjs/index.js.map +1 -1
  105. package/lib/commonjs/stores/hls-player-stats-store.js +1 -2
  106. package/lib/commonjs/stores/hls-player-stats-store.js.map +1 -1
  107. package/lib/commonjs/stores/hms-store.js +1 -2
  108. package/lib/commonjs/stores/hms-store.js.map +1 -1
  109. package/lib/commonjs/types.js +4 -6
  110. package/lib/commonjs/types.js.map +1 -1
  111. package/lib/module/classes/HMSEncoder.js +6 -0
  112. package/lib/module/classes/HMSEncoder.js.map +1 -1
  113. package/lib/module/classes/HMSPIPListenerActions.js +1 -0
  114. package/lib/module/classes/HMSPIPListenerActions.js.map +1 -1
  115. package/lib/module/classes/HMSPeer.js +15 -0
  116. package/lib/module/classes/HMSPeer.js.map +1 -1
  117. package/lib/module/classes/HMSPeerListIterator.js +58 -0
  118. package/lib/module/classes/HMSPeerListIterator.js.map +1 -0
  119. package/lib/module/classes/HMSPeerListIteratorOptions.js +2 -0
  120. package/lib/module/classes/HMSPeerListIteratorOptions.js.map +1 -0
  121. package/lib/module/classes/HMSPeerUpdate.js +2 -1
  122. package/lib/module/classes/HMSPeerUpdate.js.map +1 -1
  123. package/lib/module/classes/HMSPeersCache.js +7 -0
  124. package/lib/module/classes/HMSPeersCache.js.map +1 -1
  125. package/lib/module/classes/HMSSDK.js +193 -33
  126. package/lib/module/classes/HMSSDK.js.map +1 -1
  127. package/lib/module/classes/HMSUpdateListenerActions.js +1 -0
  128. package/lib/module/classes/HMSUpdateListenerActions.js.map +1 -1
  129. package/lib/module/components/HMSHLSPlayer/HMSHLSPlayer.js +11 -6
  130. package/lib/module/components/HMSHLSPlayer/HMSHLSPlayer.js.map +1 -1
  131. package/lib/module/index.js.map +1 -1
  132. package/lib/module/types.js +1 -0
  133. package/lib/module/types.js.map +1 -1
  134. package/lib/typescript/classes/HMSEncoder.d.ts +1 -0
  135. package/lib/typescript/classes/HMSPIPListenerActions.d.ts +1 -0
  136. package/lib/typescript/classes/HMSPeer.d.ts +3 -0
  137. package/lib/typescript/classes/HMSPeerListIterator.d.ts +9 -0
  138. package/lib/typescript/classes/HMSPeerListIteratorOptions.d.ts +24 -0
  139. package/lib/typescript/classes/HMSPeerUpdate.d.ts +2 -1
  140. package/lib/typescript/classes/HMSPeersCache.d.ts +1 -0
  141. package/lib/typescript/classes/HMSSDK.d.ts +69 -13
  142. package/lib/typescript/classes/HMSUpdateListenerActions.d.ts +2 -1
  143. package/lib/typescript/index.d.ts +1 -1
  144. package/lib/typescript/types.d.ts +3 -1
  145. package/package.json +1 -1
  146. package/sdk-versions.json +2 -2
  147. package/src/classes/HMSEncoder.ts +9 -0
  148. package/src/classes/HMSPIPListenerActions.ts +1 -0
  149. package/src/classes/HMSPeer.ts +25 -0
  150. package/src/classes/HMSPeerListIterator.ts +60 -0
  151. package/src/classes/HMSPeerListIteratorOptions.ts +26 -0
  152. package/src/classes/HMSPeerUpdate.ts +2 -0
  153. package/src/classes/HMSPeersCache.ts +7 -0
  154. package/src/classes/HMSSDK.tsx +235 -28
  155. package/src/classes/HMSUpdateListenerActions.ts +1 -0
  156. package/src/components/HMSHLSPlayer/HMSHLSPlayer.tsx +15 -13
  157. package/src/index.ts +4 -1
  158. package/src/types.ts +2 -0
  159. package/android/.gradle/6.7.1/executionHistory/executionHistory.bin +0 -0
  160. package/android/.gradle/6.7.1/executionHistory/executionHistory.lock +0 -0
  161. package/android/.gradle/6.7.1/fileChanges/last-build.bin +0 -0
  162. package/android/.gradle/6.7.1/fileHashes/fileHashes.bin +0 -0
  163. package/android/.gradle/6.7.1/fileHashes/fileHashes.lock +0 -0
  164. package/android/.gradle/6.7.1/gc.properties +0 -0
  165. package/android/.gradle/6.9/executionHistory/executionHistory.bin +0 -0
  166. package/android/.gradle/6.9/executionHistory/executionHistory.lock +0 -0
  167. package/android/.gradle/6.9/fileChanges/last-build.bin +0 -0
  168. package/android/.gradle/6.9/fileHashes/fileHashes.bin +0 -0
  169. package/android/.gradle/6.9/fileHashes/fileHashes.lock +0 -0
  170. package/android/.gradle/6.9/gc.properties +0 -0
  171. package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
  172. package/android/.gradle/buildOutputCleanup/cache.properties +0 -2
  173. package/android/.gradle/buildOutputCleanup/outputFiles.bin +0 -0
  174. package/android/.gradle/checksums/checksums.lock +0 -0
  175. package/android/.gradle/checksums/md5-checksums.bin +0 -0
  176. package/android/.gradle/checksums/sha1-checksums.bin +0 -0
  177. package/android/.gradle/configuration-cache/gc.properties +0 -0
  178. package/android/.gradle/vcs-1/gc.properties +0 -0
@@ -12,6 +12,7 @@ import live.hms.video.error.HMSException
12
12
  import live.hms.video.media.settings.HMSLayer
13
13
  import live.hms.video.media.tracks.*
14
14
  import live.hms.video.sdk.*
15
+ import live.hms.video.sdk.listeners.PeerListResultListener
15
16
  import live.hms.video.sdk.models.*
16
17
  import live.hms.video.sdk.models.enums.AudioMixingMode
17
18
  import live.hms.video.sdk.models.enums.HMSPeerUpdate
@@ -37,6 +38,8 @@ class HMSRNSDK(
37
38
  var audioshareCallback: Promise? = null
38
39
  var isAudioSharing: Boolean = false
39
40
  var delegate: HMSManager = HmsDelegate
41
+ var previewForRoleVideoTrack: HMSLocalVideoTrack? = null
42
+ var previewForRoleAudioTrack: HMSLocalAudioTrack? = null
40
43
  private var recentRoleChangeRequest: HMSRoleChangeRequest? = null
41
44
  private var context: ReactApplicationContext = reactApplicationContext
42
45
  private var previewInProgress: Boolean = false
@@ -48,6 +51,7 @@ class HMSRNSDK(
48
51
  private var eventsEnableStatus = mutableMapOf<String, Boolean>()
49
52
  private var sessionStore: HmsSessionStore? = null
50
53
  private val keyChangeObservers = mutableMapOf<String, HMSKeyChangeListener?>()
54
+ private val peerListIterators = mutableMapOf<String, PeerListIterator>()
51
55
 
52
56
  init {
53
57
  val builder = HMSSDK.Builder(reactApplicationContext)
@@ -110,7 +114,10 @@ class HMSRNSDK(
110
114
  delegate.emitEvent("ON_ERROR", data)
111
115
  }
112
116
 
113
- private fun rejectCallback(callback: Promise?, message: String) {
117
+ private fun rejectCallback(
118
+ callback: Promise?,
119
+ message: String,
120
+ ) {
114
121
  callback?.reject("6002", message)
115
122
  }
116
123
 
@@ -126,6 +133,7 @@ class HMSRNSDK(
126
133
  eventsEnableStatus.clear()
127
134
  sessionStore = null
128
135
  keyChangeObservers.clear()
136
+ peerListIterators.clear()
129
137
  HMSDecoder.clearRestrictDataStates()
130
138
  }
131
139
 
@@ -180,7 +188,10 @@ class HMSRNSDK(
180
188
  self.emitHMSError(error)
181
189
  }
182
190
 
183
- override fun onPeerUpdate(type: HMSPeerUpdate, peer: HMSPeer) {
191
+ override fun onPeerUpdate(
192
+ type: HMSPeerUpdate,
193
+ peer: HMSPeer,
194
+ ) {
184
195
  if (eventsEnableStatus["3"] != true) {
185
196
  return
186
197
  }
@@ -197,7 +208,10 @@ class HMSRNSDK(
197
208
  delegate.emitEvent("3", hmsPeer)
198
209
  }
199
210
 
200
- override fun onRoomUpdate(type: HMSRoomUpdate, hmsRoom: HMSRoom) {
211
+ override fun onRoomUpdate(
212
+ type: HMSRoomUpdate,
213
+ hmsRoom: HMSRoom,
214
+ ) {
201
215
  if (eventsEnableStatus["ON_ROOM_UPDATE"] != true) {
202
216
  return
203
217
  }
@@ -213,7 +227,10 @@ class HMSRNSDK(
213
227
  delegate.emitEvent("ON_ROOM_UPDATE", data)
214
228
  }
215
229
 
216
- override fun onPreview(room: HMSRoom, localTracks: Array<HMSTrack>) {
230
+ override fun onPreview(
231
+ room: HMSRoom,
232
+ localTracks: Array<HMSTrack>,
233
+ ) {
217
234
  previewInProgress = false
218
235
  if (eventsEnableStatus["ON_PREVIEW"] != true) {
219
236
  return
@@ -227,6 +244,34 @@ class HMSRNSDK(
227
244
  data.putString("id", id)
228
245
  delegate.emitEvent("ON_PREVIEW", data)
229
246
  }
247
+
248
+ /*
249
+ override fun peerListUpdated(addedPeers: ArrayList<HMSPeer>?, removedPeers: ArrayList<HMSPeer>?) {
250
+
251
+ if (eventsEnableStatus["ON_PEER_LIST_UPDATED"] != true) {
252
+ return
253
+ }
254
+ val data: WritableMap = Arguments.createMap()
255
+ val addedPeersArray: WritableArray = Arguments.createArray()
256
+ val removedPeersArray: WritableArray = Arguments.createArray()
257
+
258
+ if (addedPeers != null) {
259
+ for (peer in addedPeers) {
260
+ addedPeersArray.pushMap(HMSDecoder.getHmsPeerSubset(peer))
261
+ }
262
+ }
263
+
264
+ if (removedPeers != null) {
265
+ for (peer in removedPeers) {
266
+ removedPeersArray.pushMap(HMSDecoder.getHmsPeerSubset(peer))
267
+ }
268
+ }
269
+
270
+ data.putArray("addedPeers", addedPeersArray)
271
+ data.putArray("removedPeers", removedPeersArray)
272
+ delegate.emitEvent("ON_PEER_LIST_UPDATED", data)
273
+ }
274
+ */
230
275
  },
231
276
  )
232
277
  } else {
@@ -307,7 +352,10 @@ class HMSRNSDK(
307
352
  delegate.emitEvent("ON_JOIN", data)
308
353
  }
309
354
 
310
- override fun onPeerUpdate(type: HMSPeerUpdate, peer: HMSPeer) {
355
+ override fun onPeerUpdate(
356
+ type: HMSPeerUpdate,
357
+ peer: HMSPeer,
358
+ ) {
311
359
  if (eventsEnableStatus["3"] != true) {
312
360
  return
313
361
  }
@@ -325,7 +373,10 @@ class HMSRNSDK(
325
373
  delegate.emitEvent("3", hmsPeer)
326
374
  }
327
375
 
328
- override fun onRoomUpdate(type: HMSRoomUpdate, hmsRoom: HMSRoom) {
376
+ override fun onRoomUpdate(
377
+ type: HMSRoomUpdate,
378
+ hmsRoom: HMSRoom,
379
+ ) {
329
380
  if (eventsEnableStatus["ON_ROOM_UPDATE"] != true) {
330
381
  return
331
382
  }
@@ -341,7 +392,11 @@ class HMSRNSDK(
341
392
  delegate.emitEvent("ON_ROOM_UPDATE", data)
342
393
  }
343
394
 
344
- override fun onTrackUpdate(type: HMSTrackUpdate, track: HMSTrack, peer: HMSPeer) {
395
+ override fun onTrackUpdate(
396
+ type: HMSTrackUpdate,
397
+ track: HMSTrack,
398
+ peer: HMSPeer,
399
+ ) {
345
400
  if (eventsEnableStatus["ON_TRACK_UPDATE"] != true) {
346
401
  return
347
402
  }
@@ -416,6 +471,35 @@ class HMSRNSDK(
416
471
  data.putString("id", id)
417
472
  delegate.emitEvent("ON_SESSION_STORE_AVAILABLE", data)
418
473
  }
474
+
475
+ override fun peerListUpdated(
476
+ addedPeers: ArrayList<HMSPeer>?,
477
+ removedPeers: ArrayList<HMSPeer>?,
478
+ ) {
479
+ if (eventsEnableStatus["ON_PEER_LIST_UPDATED"] != true) {
480
+ return
481
+ }
482
+ val data: WritableMap = Arguments.createMap()
483
+ val addedPeersArray: WritableArray = Arguments.createArray()
484
+ val removedPeersArray: WritableArray = Arguments.createArray()
485
+
486
+ if (addedPeers != null) {
487
+ for (peer in addedPeers) {
488
+ addedPeersArray.pushMap(HMSDecoder.getHmsPeerSubset(peer))
489
+ }
490
+ }
491
+
492
+ if (removedPeers != null) {
493
+ for (peer in removedPeers) {
494
+ removedPeersArray.pushMap(HMSDecoder.getHmsPeerSubset(peer))
495
+ }
496
+ }
497
+
498
+ data.putString("id", id)
499
+ data.putArray("addedPeers", addedPeersArray)
500
+ data.putArray("removedPeers", removedPeersArray)
501
+ delegate.emitEvent("ON_PEER_LIST_UPDATED", data)
502
+ }
419
503
  },
420
504
  )
421
505
  } catch (e: HMSException) {
@@ -478,7 +562,10 @@ class HMSRNSDK(
478
562
  if (eventsEnableStatus["ON_LOCAL_VIDEO_STATS"] != true || hmsPeer == null || hmsTrack == null) {
479
563
  return
480
564
  }
481
- val localVideoStats = HMSDecoder.getLocalVideoStats(videoStats) // List<[bitrate, bytesSent, roundTripTime, frameRate, resolution]>
565
+ val localVideoStats =
566
+ HMSDecoder.getLocalVideoStats(
567
+ videoStats,
568
+ ) // List<[bitrate, bytesSent, roundTripTime, frameRate, resolution]>
482
569
  val track = HMSDecoder.getHmsLocalVideoTrack(hmsTrack as HMSLocalVideoTrack)
483
570
  val peer = HMSDecoder.getHmsPeerSubset(hmsPeer)
484
571
 
@@ -494,9 +581,18 @@ class HMSRNSDK(
494
581
  if (eventsEnableStatus["ON_RTC_STATS"] != true) {
495
582
  return
496
583
  }
497
- val video = HMSDecoder.getHMSRTCStats(rtcStats.video) // [bitrateReceived, bitrateSent, bytesReceived, bytesSent, packetsLost, packetsReceived, roundTripTime]
498
- val audio = HMSDecoder.getHMSRTCStats(rtcStats.audio) // [bitrateReceived, bitrateSent, bytesReceived, bytesSent, packetsLost, packetsReceived, roundTripTime]
499
- val combined = HMSDecoder.getHMSRTCStats(rtcStats.combined) // [bitrateReceived, bitrateSent, bytesReceived, bytesSent, packetsLost, packetsReceived, roundTripTime]
584
+ val video =
585
+ HMSDecoder.getHMSRTCStats(
586
+ rtcStats.video,
587
+ ) // [bitrateReceived, bitrateSent, bytesReceived, bytesSent, packetsLost, packetsReceived, roundTripTime]
588
+ val audio =
589
+ HMSDecoder.getHMSRTCStats(
590
+ rtcStats.audio,
591
+ ) // [bitrateReceived, bitrateSent, bytesReceived, bytesSent, packetsLost, packetsReceived, roundTripTime]
592
+ val combined =
593
+ HMSDecoder.getHMSRTCStats(
594
+ rtcStats.combined,
595
+ ) // [bitrateReceived, bitrateSent, bytesReceived, bytesSent, packetsLost, packetsReceived, roundTripTime]
500
596
 
501
597
  val data: WritableMap = Arguments.createMap()
502
598
  data.putArray("video", video)
@@ -514,7 +610,10 @@ class HMSRNSDK(
514
610
  if (eventsEnableStatus["ON_REMOTE_AUDIO_STATS"] != true || hmsPeer == null || hmsTrack == null) {
515
611
  return
516
612
  }
517
- val remoteAudioStats = HMSDecoder.getRemoteAudioStats(audioStats) // [bitrate, bytesReceived, jitter, packetsLost, packetsReceived]
613
+ val remoteAudioStats =
614
+ HMSDecoder.getRemoteAudioStats(
615
+ audioStats,
616
+ ) // [bitrate, bytesReceived, jitter, packetsLost, packetsReceived]
518
617
  val track = HMSDecoder.getHmsRemoteAudioTrack(hmsTrack as HMSRemoteAudioTrack)
519
618
  val peer = HMSDecoder.getHmsPeerSubset(hmsPeer)
520
619
 
@@ -534,7 +633,10 @@ class HMSRNSDK(
534
633
  if (eventsEnableStatus["ON_REMOTE_VIDEO_STATS"] != true || hmsPeer == null || hmsTrack == null) {
535
634
  return
536
635
  }
537
- val remoteVideoStats = HMSDecoder.getRemoteVideoStats(videoStats) // [bitrate, bytesReceived, frameRate, jitter, packetsLost, packetsReceived, resolution]
636
+ val remoteVideoStats =
637
+ HMSDecoder.getRemoteVideoStats(
638
+ videoStats,
639
+ ) // [bitrate, bytesReceived, frameRate, jitter, packetsLost, packetsReceived, resolution]
538
640
  val track = HMSDecoder.getHmsRemoteVideoTrack(hmsTrack as HMSRemoteVideoTrack)
539
641
  val peer = HMSDecoder.getHmsPeerSubset(hmsPeer)
540
642
 
@@ -554,7 +656,10 @@ class HMSRNSDK(
554
656
  }
555
657
  }
556
658
 
557
- fun getAuthTokenByRoomCode(data: ReadableMap, promise: Promise) {
659
+ fun getAuthTokenByRoomCode(
660
+ data: ReadableMap,
661
+ promise: Promise,
662
+ ) {
558
663
  val requiredKeys =
559
664
  HMSHelper.getUnavailableRequiredKey(
560
665
  data,
@@ -591,60 +696,65 @@ class HMSRNSDK(
591
696
 
592
697
  fun setLocalMute(data: ReadableMap) {
593
698
  val isMute = data.getBoolean("isMute")
594
- hmsSDK?.getLocalPeer()?.audioTrack?.setMute(isMute)
699
+ val localAudioTrack = hmsSDK?.getLocalPeer()?.audioTrack ?: previewForRoleAudioTrack
700
+ localAudioTrack?.let {
701
+ it.setMute(isMute)
702
+ }
595
703
  }
596
704
 
597
705
  fun setLocalVideoMute(data: ReadableMap) {
598
706
  val isMute = data.getBoolean("isMute")
599
- hmsSDK?.getLocalPeer()?.videoTrack?.setMute(isMute)
707
+ val localVideoTrack = hmsSDK?.getLocalPeer()?.videoTrack ?: previewForRoleVideoTrack
708
+ localVideoTrack?.let {
709
+ it.setMute(isMute)
710
+ }
600
711
  }
601
712
 
602
713
  fun switchCamera() {
603
- if (hmsSDK?.getLocalPeer()?.videoTrack?.isMute == false) {
604
- HMSCoroutineScope.launch { hmsSDK?.getLocalPeer()?.videoTrack?.switchCamera() }
714
+ val localVideoTrack = hmsSDK?.getLocalPeer()?.videoTrack ?: previewForRoleVideoTrack
715
+ localVideoTrack?.let {
716
+ if (!it.isMute) {
717
+ HMSCoroutineScope.launch { it.switchCamera() }
718
+ }
605
719
  }
606
720
  }
607
721
 
608
- fun leave(callback: Promise?, fromPIP: Boolean = false) {
609
- if (reconnectingStage) {
610
- val errorMessage = "Still in reconnecting stage"
611
-
612
- if (fromPIP) {
613
- self.emitHMSError(HMSException(101, errorMessage, "PIP Action", "Leave called from PIP Window", "HMSRNSDK #Function leave"))
614
- } else {
615
- callback?.reject("101", errorMessage)
616
- }
617
- } else {
618
- hmsSDK?.leave(
619
- object : HMSActionResultListener {
620
- override fun onSuccess() {
621
- if (fromPIP) {
622
- context.currentActivity?.moveTaskToBack(false)
722
+ fun leave(
723
+ callback: Promise?,
724
+ fromPIP: Boolean = false,
725
+ ) {
726
+ hmsSDK?.leave(
727
+ object : HMSActionResultListener {
728
+ override fun onSuccess() {
729
+ if (fromPIP) {
730
+ context.currentActivity?.moveTaskToBack(false)
623
731
 
624
- if (eventsEnableStatus["ON_PIP_ROOM_LEAVE"] != true) {
625
- return
626
- }
627
- val map: WritableMap = Arguments.createMap()
628
- map.putString("id", id)
629
- delegate.emitEvent("ON_PIP_ROOM_LEAVE", map)
630
- } else {
631
- callback?.resolve(emitHMSSuccess())
732
+ if (eventsEnableStatus["ON_PIP_ROOM_LEAVE"] != true) {
733
+ return
632
734
  }
633
- cleanup() // resetting states and doing data cleanup
735
+ val map: WritableMap = Arguments.createMap()
736
+ map.putString("id", id)
737
+ delegate.emitEvent("ON_PIP_ROOM_LEAVE", map)
738
+ } else {
739
+ callback?.resolve(emitHMSSuccess())
634
740
  }
741
+ cleanup() // resetting states and doing data cleanup
742
+ }
635
743
 
636
- override fun onError(error: HMSException) {
637
- if (!fromPIP) {
638
- callback?.reject(error.code.toString(), error.message)
639
- }
640
- self.emitHMSError(error)
744
+ override fun onError(error: HMSException) {
745
+ if (!fromPIP) {
746
+ callback?.reject(error.code.toString(), error.message)
641
747
  }
642
- },
643
- )
644
- }
748
+ self.emitHMSError(error)
749
+ }
750
+ },
751
+ )
645
752
  }
646
753
 
647
- fun sendBroadcastMessage(data: ReadableMap, callback: Promise?) {
754
+ fun sendBroadcastMessage(
755
+ data: ReadableMap,
756
+ callback: Promise?,
757
+ ) {
648
758
  val requiredKeys =
649
759
  HMSHelper.getUnavailableRequiredKey(
650
760
  data,
@@ -656,9 +766,9 @@ class HMSRNSDK(
656
766
  data.getString("type") as String,
657
767
  object : HMSMessageResultListener {
658
768
  override fun onError(error: HMSException) {
659
- self.emitHMSError(error)
660
769
  callback?.reject(error.code.toString(), error.message)
661
770
  }
771
+
662
772
  override fun onSuccess(hmsMessage: HMSMessage) {
663
773
  callback?.resolve(emitHMSMessageSuccess(hmsMessage))
664
774
  }
@@ -671,7 +781,10 @@ class HMSRNSDK(
671
781
  }
672
782
  }
673
783
 
674
- fun sendGroupMessage(data: ReadableMap, callback: Promise?) {
784
+ fun sendGroupMessage(
785
+ data: ReadableMap,
786
+ callback: Promise?,
787
+ ) {
675
788
  val requiredKeys =
676
789
  HMSHelper.getUnavailableRequiredKey(
677
790
  data,
@@ -688,9 +801,9 @@ class HMSRNSDK(
688
801
  encodedTargetedRoles,
689
802
  object : HMSMessageResultListener {
690
803
  override fun onError(error: HMSException) {
691
- self.emitHMSError(error)
692
804
  callback?.reject(error.code.toString(), error.message)
693
805
  }
806
+
694
807
  override fun onSuccess(hmsMessage: HMSMessage) {
695
808
  callback?.resolve(emitHMSMessageSuccess(hmsMessage))
696
809
  }
@@ -703,7 +816,10 @@ class HMSRNSDK(
703
816
  }
704
817
  }
705
818
 
706
- fun sendDirectMessage(data: ReadableMap, callback: Promise?) {
819
+ fun sendDirectMessage(
820
+ data: ReadableMap,
821
+ callback: Promise?,
822
+ ) {
707
823
  val requiredKeys =
708
824
  HMSHelper.getUnavailableRequiredKey(
709
825
  data,
@@ -719,9 +835,9 @@ class HMSRNSDK(
719
835
  peer,
720
836
  object : HMSMessageResultListener {
721
837
  override fun onError(error: HMSException) {
722
- self.emitHMSError(error)
723
838
  callback?.reject(error.code.toString(), error.message)
724
839
  }
840
+
725
841
  override fun onSuccess(hmsMessage: HMSMessage) {
726
842
  callback?.resolve(emitHMSMessageSuccess(hmsMessage))
727
843
  }
@@ -739,7 +855,10 @@ class HMSRNSDK(
739
855
  }
740
856
 
741
857
  @kotlin.Deprecated("Use #Function changeRoleOfPeer instead")
742
- fun changeRole(data: ReadableMap, callback: Promise?) {
858
+ fun changeRole(
859
+ data: ReadableMap,
860
+ callback: Promise?,
861
+ ) {
743
862
  val requiredKeys =
744
863
  HMSHelper.getUnavailableRequiredKey(
745
864
  data,
@@ -770,8 +889,8 @@ class HMSRNSDK(
770
889
  override fun onSuccess() {
771
890
  callback?.resolve(emitHMSSuccess())
772
891
  }
892
+
773
893
  override fun onError(error: HMSException) {
774
- self.emitHMSError(error)
775
894
  callback?.reject(error.code.toString(), error.message)
776
895
  }
777
896
  },
@@ -784,7 +903,10 @@ class HMSRNSDK(
784
903
  }
785
904
  }
786
905
 
787
- fun changeRoleOfPeer(data: ReadableMap, promise: Promise?) {
906
+ fun changeRoleOfPeer(
907
+ data: ReadableMap,
908
+ promise: Promise?,
909
+ ) {
788
910
  val requiredKeys =
789
911
  HMSHelper.getUnavailableRequiredKey(
790
912
  data,
@@ -815,8 +937,8 @@ class HMSRNSDK(
815
937
  override fun onSuccess() {
816
938
  promise?.resolve(emitHMSSuccess())
817
939
  }
940
+
818
941
  override fun onError(error: HMSException) {
819
- self.emitHMSError(error)
820
942
  promise?.reject(error.code.toString(), error.message)
821
943
  }
822
944
  },
@@ -829,7 +951,10 @@ class HMSRNSDK(
829
951
  }
830
952
  }
831
953
 
832
- fun changeRoleOfPeersWithRoles(data: ReadableMap, promise: Promise?) {
954
+ fun changeRoleOfPeersWithRoles(
955
+ data: ReadableMap,
956
+ promise: Promise?,
957
+ ) {
833
958
  val requiredKeys =
834
959
  HMSHelper.getUnavailableRequiredKey(
835
960
  data,
@@ -855,8 +980,8 @@ class HMSRNSDK(
855
980
  override fun onSuccess() {
856
981
  promise?.resolve(emitHMSSuccess())
857
982
  }
983
+
858
984
  override fun onError(error: HMSException) {
859
- self.emitHMSError(error)
860
985
  promise?.reject(error.code.toString(), error.message)
861
986
  }
862
987
  },
@@ -870,7 +995,10 @@ class HMSRNSDK(
870
995
  }
871
996
  }
872
997
 
873
- fun changeTrackState(data: ReadableMap, callback: Promise?) {
998
+ fun changeTrackState(
999
+ data: ReadableMap,
1000
+ callback: Promise?,
1001
+ ) {
874
1002
  val requiredKeys =
875
1003
  HMSHelper.getUnavailableRequiredKey(
876
1004
  data,
@@ -888,8 +1016,8 @@ class HMSRNSDK(
888
1016
  override fun onSuccess() {
889
1017
  callback?.resolve(emitHMSSuccess())
890
1018
  }
1019
+
891
1020
  override fun onError(error: HMSException) {
892
- self.emitHMSError(error)
893
1021
  callback?.reject(error.code.toString(), error.message)
894
1022
  }
895
1023
  },
@@ -902,7 +1030,10 @@ class HMSRNSDK(
902
1030
  }
903
1031
  }
904
1032
 
905
- fun changeTrackStateForRoles(data: ReadableMap, callback: Promise?) {
1033
+ fun changeTrackStateForRoles(
1034
+ data: ReadableMap,
1035
+ callback: Promise?,
1036
+ ) {
906
1037
  val requiredKeys = HMSHelper.getUnavailableRequiredKey(data, arrayOf(Pair("mute", "Boolean")))
907
1038
  if (requiredKeys === null) {
908
1039
  val mute: Boolean = data.getBoolean("mute")
@@ -939,8 +1070,8 @@ class HMSRNSDK(
939
1070
  override fun onSuccess() {
940
1071
  callback?.resolve(emitHMSSuccess())
941
1072
  }
1073
+
942
1074
  override fun onError(error: HMSException) {
943
- self.emitHMSError(error)
944
1075
  callback?.reject(error.code.toString(), error.message)
945
1076
  }
946
1077
  },
@@ -952,7 +1083,10 @@ class HMSRNSDK(
952
1083
  }
953
1084
  }
954
1085
 
955
- fun isMute(data: ReadableMap, callback: Promise?) {
1086
+ fun isMute(
1087
+ data: ReadableMap,
1088
+ callback: Promise?,
1089
+ ) {
956
1090
  val requiredKeys = HMSHelper.getUnavailableRequiredKey(data, arrayOf(Pair("trackId", "String")))
957
1091
  if (requiredKeys === null) {
958
1092
  val trackId = data.getString("trackId")
@@ -970,42 +1104,49 @@ class HMSRNSDK(
970
1104
  }
971
1105
  }
972
1106
 
973
- fun removePeer(data: ReadableMap, callback: Promise?) {
1107
+ fun removePeer(
1108
+ data: ReadableMap,
1109
+ callback: Promise?,
1110
+ ) {
974
1111
  val requiredKeys =
975
1112
  HMSHelper.getUnavailableRequiredKey(
976
1113
  data,
977
1114
  arrayOf(Pair("peerId", "String"), Pair("reason", "String")),
978
1115
  )
979
1116
  if (requiredKeys === null) {
980
- val peerId = data.getString("peerId")
981
- val peer = HMSHelper.getRemotePeerFromPeerId(peerId, hmsSDK?.getRoom())
1117
+ HMSCoroutineScope.launch {
1118
+ val peerId = data.getString("peerId")
982
1119
 
983
- if (peer != null) {
984
- hmsSDK?.removePeerRequest(
985
- peer,
986
- data.getString("reason") as String,
987
- object : HMSActionResultListener {
988
- override fun onSuccess() {
989
- callback?.resolve(emitHMSSuccess())
990
- }
991
- override fun onError(error: HMSException) {
992
- self.emitHMSError(error)
993
- callback?.reject(error.code.toString(), error.message)
994
- }
995
- },
996
- )
997
- } else {
998
- self.emitCustomError("PEER_NOT_FOUND")
999
- callback?.reject("101", "PEER_NOT_FOUND")
1120
+ val peer = HMSHelper.getRemotePeerFromPeerId(peerId, hmsSDK)
1121
+
1122
+ if (peer != null) {
1123
+ hmsSDK?.removePeerRequest(
1124
+ peer,
1125
+ data.getString("reason") as String,
1126
+ object : HMSActionResultListener {
1127
+ override fun onSuccess() {
1128
+ callback?.resolve(emitHMSSuccess())
1129
+ }
1130
+
1131
+ override fun onError(error: HMSException) {
1132
+ callback?.reject(error.code.toString(), error.message)
1133
+ }
1134
+ },
1135
+ )
1136
+ } else {
1137
+ callback?.reject("101", "PEER_NOT_FOUND")
1138
+ }
1000
1139
  }
1001
1140
  } else {
1002
1141
  val errorMessage = "removePeer: $requiredKeys"
1003
- self.emitRequiredKeysError(errorMessage)
1004
1142
  rejectCallback(callback, errorMessage)
1005
1143
  }
1006
1144
  }
1007
1145
 
1008
- fun endRoom(data: ReadableMap, callback: Promise?) {
1146
+ fun endRoom(
1147
+ data: ReadableMap,
1148
+ callback: Promise?,
1149
+ ) {
1009
1150
  val requiredKeys =
1010
1151
  HMSHelper.getUnavailableRequiredKey(
1011
1152
  data,
@@ -1020,8 +1161,8 @@ class HMSRNSDK(
1020
1161
  callback?.resolve(emitHMSSuccess())
1021
1162
  cleanup() // resetting states and doing data cleanup
1022
1163
  }
1164
+
1023
1165
  override fun onError(error: HMSException) {
1024
- self.emitHMSError(error)
1025
1166
  callback?.reject(error.code.toString(), error.message)
1026
1167
  }
1027
1168
  },
@@ -1033,6 +1174,60 @@ class HMSRNSDK(
1033
1174
  }
1034
1175
  }
1035
1176
 
1177
+ fun previewForRole(
1178
+ data: ReadableMap,
1179
+ callback: Promise?,
1180
+ ) {
1181
+ val requiredKeys = HMSHelper.getUnavailableRequiredKey(data, arrayOf(Pair("role", "String")))
1182
+ if (requiredKeys === null) {
1183
+ val roleString = data.getString("role")
1184
+ val role = HMSHelper.getRoleFromRoleName(roleString, hmsSDK?.getRoles())
1185
+ if (role == null) {
1186
+ callback?.reject("4000", "ROLE_NOT_FOUND")
1187
+ return
1188
+ }
1189
+ hmsSDK?.preview(
1190
+ role,
1191
+ object : RolePreviewListener {
1192
+ override fun onError(error: HMSException) {
1193
+ callback?.reject(error.code.toString(), error.message)
1194
+ }
1195
+
1196
+ override fun onTracks(localTracks: Array<HMSTrack>) {
1197
+ val tracks = HMSDecoder.getPreviewTracks(localTracks)
1198
+
1199
+ localTracks.forEach { track ->
1200
+ // /Assigning values to preview for role tracks
1201
+ if (track.type == HMSTrackType.AUDIO) {
1202
+ previewForRoleAudioTrack = track as HMSLocalAudioTrack
1203
+ } else if (track.type == HMSTrackType.VIDEO && track.source == "regular") {
1204
+ previewForRoleVideoTrack = track as HMSLocalVideoTrack
1205
+ }
1206
+ }
1207
+
1208
+ val data: WritableMap = Arguments.createMap()
1209
+
1210
+ data.putArray("tracks", tracks)
1211
+ data.putBoolean("success", true)
1212
+
1213
+ callback?.resolve(data)
1214
+ }
1215
+ },
1216
+ )
1217
+ } else {
1218
+ val errorMessage = "Missing required keys for previewForRole: $requiredKeys"
1219
+ self.emitRequiredKeysError(errorMessage)
1220
+ rejectCallback(callback, errorMessage)
1221
+ }
1222
+ }
1223
+
1224
+ fun cancelPreview(callback: Promise?) {
1225
+ hmsSDK?.cancelPreview()
1226
+ previewForRoleAudioTrack = null
1227
+ previewForRoleVideoTrack = null
1228
+ callback?.resolve(emitHMSSuccess())
1229
+ }
1230
+
1036
1231
  fun acceptRoleChange(callback: Promise?) {
1037
1232
  if (recentRoleChangeRequest !== null) {
1038
1233
  hmsSDK?.acceptChangeRole(
@@ -1041,13 +1236,15 @@ class HMSRNSDK(
1041
1236
  override fun onSuccess() {
1042
1237
  callback?.resolve(emitHMSSuccess())
1043
1238
  }
1239
+
1044
1240
  override fun onError(error: HMSException) {
1045
- self.emitHMSError(error)
1046
1241
  callback?.reject(error.code.toString(), error.message)
1047
1242
  }
1048
1243
  },
1049
1244
  )
1050
1245
  recentRoleChangeRequest = null
1246
+ previewForRoleAudioTrack = null
1247
+ previewForRoleVideoTrack = null
1051
1248
  } else {
1052
1249
  val errorMessage = "acceptRoleChange: recentRoleChangeRequest not found"
1053
1250
  self.emitRequiredKeysError(errorMessage)
@@ -1065,6 +1262,7 @@ class HMSRNSDK(
1065
1262
  true,
1066
1263
  object : HMSActionResultListener {
1067
1264
  override fun onSuccess() {}
1265
+
1068
1266
  override fun onError(error: HMSException) {
1069
1267
  customError = error
1070
1268
  }
@@ -1084,13 +1282,10 @@ class HMSRNSDK(
1084
1282
  val requiredKeys = HMSHelper.getUnavailableRequiredKey(data, arrayOf(Pair("mute", "Boolean")))
1085
1283
  if (requiredKeys === null) {
1086
1284
  val mute = data.getBoolean("mute")
1087
- val peers = hmsSDK?.getRemotePeers()
1088
- if (peers != null) {
1089
- for (remotePeer in peers) {
1090
- val peerId = remotePeer.peerID
1091
- val peer = HMSHelper.getRemotePeerFromPeerId(peerId, hmsSDK?.getRoom())
1092
- peer?.audioTrack?.isPlaybackAllowed = !mute
1093
- }
1285
+ val remotePeers = hmsSDK?.getRemotePeers()
1286
+
1287
+ remotePeers?.forEach() {
1288
+ it.audioTrack?.isPlaybackAllowed = !mute
1094
1289
  }
1095
1290
  } else {
1096
1291
  val errorMessage = "setPlaybackForAllAudio: $requiredKeys"
@@ -1120,7 +1315,10 @@ class HMSRNSDK(
1120
1315
  }
1121
1316
  }
1122
1317
 
1123
- fun isPlaybackAllowed(data: ReadableMap, callback: Promise?) {
1318
+ fun isPlaybackAllowed(
1319
+ data: ReadableMap,
1320
+ callback: Promise?,
1321
+ ) {
1124
1322
  val requiredKeys = HMSHelper.getUnavailableRequiredKey(data, arrayOf(Pair("trackId", "String")))
1125
1323
  if (requiredKeys === null) {
1126
1324
  val trackId = data.getString("trackId")
@@ -1209,7 +1407,10 @@ class HMSRNSDK(
1209
1407
  }
1210
1408
  }
1211
1409
 
1212
- fun getVolume(data: ReadableMap, callback: Promise?) {
1410
+ fun getVolume(
1411
+ data: ReadableMap,
1412
+ callback: Promise?,
1413
+ ) {
1213
1414
  val requiredKeys = HMSHelper.getUnavailableRequiredKey(data, arrayOf(Pair("trackId", "String")))
1214
1415
  if (requiredKeys === null) {
1215
1416
  val trackId = data.getString("trackId")
@@ -1229,7 +1430,10 @@ class HMSRNSDK(
1229
1430
  }
1230
1431
  }
1231
1432
 
1232
- fun changeMetadata(data: ReadableMap, callback: Promise?) {
1433
+ fun changeMetadata(
1434
+ data: ReadableMap,
1435
+ callback: Promise?,
1436
+ ) {
1233
1437
  val requiredKeys =
1234
1438
  HMSHelper.getUnavailableRequiredKey(data, arrayOf(Pair("metadata", "String")))
1235
1439
  if (requiredKeys === null) {
@@ -1242,9 +1446,9 @@ class HMSRNSDK(
1242
1446
  override fun onSuccess() {
1243
1447
  callback?.resolve(emitHMSSuccess())
1244
1448
  }
1449
+
1245
1450
  override fun onError(error: HMSException) {
1246
1451
  callback?.reject(error.code.toString(), error.message)
1247
- self.emitHMSError(error)
1248
1452
  }
1249
1453
  },
1250
1454
  )
@@ -1256,7 +1460,10 @@ class HMSRNSDK(
1256
1460
  }
1257
1461
  }
1258
1462
 
1259
- fun startRTMPOrRecording(data: ReadableMap, callback: Promise?) {
1463
+ fun startRTMPOrRecording(
1464
+ data: ReadableMap,
1465
+ callback: Promise?,
1466
+ ) {
1260
1467
  val requiredKeys =
1261
1468
  HMSHelper.getUnavailableRequiredKey(
1262
1469
  data,
@@ -1275,9 +1482,9 @@ class HMSRNSDK(
1275
1482
  override fun onSuccess() {
1276
1483
  callback?.resolve(emitHMSSuccess())
1277
1484
  }
1485
+
1278
1486
  override fun onError(error: HMSException) {
1279
1487
  callback?.reject(error.code.toString(), error.message)
1280
- self.emitHMSError(error)
1281
1488
  }
1282
1489
  },
1283
1490
  )
@@ -1295,9 +1502,9 @@ class HMSRNSDK(
1295
1502
  override fun onSuccess() {
1296
1503
  callback?.resolve(emitHMSSuccess())
1297
1504
  }
1505
+
1298
1506
  override fun onError(error: HMSException) {
1299
1507
  callback?.reject(error.code.toString(), error.message)
1300
- self.emitHMSError(error)
1301
1508
  }
1302
1509
  },
1303
1510
  )
@@ -1323,8 +1530,8 @@ class HMSRNSDK(
1323
1530
  override fun onError(error: HMSException) {
1324
1531
  screenshareCallback = null
1325
1532
  callback?.reject(error.code.toString(), error.message)
1326
- self.emitHMSError(error)
1327
1533
  }
1534
+
1328
1535
  override fun onSuccess() {
1329
1536
  screenshareCallback = null
1330
1537
  callback?.resolve(emitHMSSuccess())
@@ -1333,7 +1540,10 @@ class HMSRNSDK(
1333
1540
  )
1334
1541
  }
1335
1542
 
1336
- fun startHLSStreaming(data: ReadableMap, callback: Promise?) {
1543
+ fun startHLSStreaming(
1544
+ data: ReadableMap,
1545
+ callback: Promise?,
1546
+ ) {
1337
1547
  val hlsConfig = HMSHelper.getHLSConfig(data)
1338
1548
  hmsSDK?.startHLSStreaming(
1339
1549
  hlsConfig,
@@ -1341,9 +1551,9 @@ class HMSRNSDK(
1341
1551
  override fun onSuccess() {
1342
1552
  callback?.resolve(emitHMSSuccess())
1343
1553
  }
1554
+
1344
1555
  override fun onError(error: HMSException) {
1345
1556
  callback?.reject(error.code.toString(), error.message)
1346
- self.emitHMSError(error)
1347
1557
  }
1348
1558
  },
1349
1559
  )
@@ -1356,9 +1566,9 @@ class HMSRNSDK(
1356
1566
  override fun onSuccess() {
1357
1567
  callback?.resolve(emitHMSSuccess())
1358
1568
  }
1569
+
1359
1570
  override fun onError(error: HMSException) {
1360
1571
  callback?.reject(error.code.toString(), error.message)
1361
- self.emitHMSError(error)
1362
1572
  }
1363
1573
  },
1364
1574
  )
@@ -1384,7 +1594,10 @@ class HMSRNSDK(
1384
1594
  }
1385
1595
  }
1386
1596
 
1387
- fun changeName(data: ReadableMap, callback: Promise?) {
1597
+ fun changeName(
1598
+ data: ReadableMap,
1599
+ callback: Promise?,
1600
+ ) {
1388
1601
  val requiredKeys = HMSHelper.getUnavailableRequiredKey(data, arrayOf(Pair("name", "String")))
1389
1602
  if (requiredKeys === null) {
1390
1603
  val name = data.getString("name")
@@ -1398,7 +1611,6 @@ class HMSRNSDK(
1398
1611
 
1399
1612
  override fun onError(error: HMSException) {
1400
1613
  callback?.reject(error.code.toString(), error.message)
1401
- self.emitHMSError(error)
1402
1614
  }
1403
1615
  },
1404
1616
  )
@@ -1476,7 +1688,10 @@ class HMSRNSDK(
1476
1688
  )
1477
1689
  }
1478
1690
 
1479
- fun startAudioshare(data: ReadableMap, callback: Promise?) {
1691
+ fun startAudioshare(
1692
+ data: ReadableMap,
1693
+ callback: Promise?,
1694
+ ) {
1480
1695
  val requiredKeys =
1481
1696
  HMSHelper.getUnavailableRequiredKey(data, arrayOf(Pair("audioMixingMode", "String")))
1482
1697
  if (requiredKeys === null) {
@@ -1505,8 +1720,8 @@ class HMSRNSDK(
1505
1720
  override fun onError(error: HMSException) {
1506
1721
  audioshareCallback = null
1507
1722
  callback?.reject(error.code.toString(), error.message)
1508
- self.emitHMSError(error)
1509
1723
  }
1724
+
1510
1725
  override fun onSuccess() {
1511
1726
  isAudioSharing = false
1512
1727
  audioshareCallback = null
@@ -1520,7 +1735,10 @@ class HMSRNSDK(
1520
1735
  return audioMixingMode
1521
1736
  }
1522
1737
 
1523
- fun setAudioMixingMode(data: ReadableMap, callback: Promise?) {
1738
+ fun setAudioMixingMode(
1739
+ data: ReadableMap,
1740
+ callback: Promise?,
1741
+ ) {
1524
1742
  val requiredKeys =
1525
1743
  HMSHelper.getUnavailableRequiredKey(data, arrayOf(Pair("audioMixingMode", "String")))
1526
1744
  if (requiredKeys === null) {
@@ -1573,6 +1791,9 @@ class HMSRNSDK(
1573
1791
  "role" -> {
1574
1792
  result.putMap("role", HMSDecoder.getHmsRole(peer.hmsRole))
1575
1793
  }
1794
+ "isHandRaised" -> {
1795
+ result.putBoolean("isHandRaised", peer.isHandRaised)
1796
+ }
1576
1797
  "customerUserID" -> {
1577
1798
  if (peer.customerUserID !== null) {
1578
1799
  result.putString("customerUserID", peer.customerUserID)
@@ -1665,7 +1886,10 @@ class HMSRNSDK(
1665
1886
  return null
1666
1887
  }
1667
1888
 
1668
- fun enableEvent(data: ReadableMap, promise: Promise?) {
1889
+ fun enableEvent(
1890
+ data: ReadableMap,
1891
+ promise: Promise?,
1892
+ ) {
1669
1893
  val requiredKeys =
1670
1894
  HMSHelper.getUnavailableRequiredKey(data, arrayOf(Pair("eventType", "String")))
1671
1895
  if (requiredKeys === null) {
@@ -1682,7 +1906,10 @@ class HMSRNSDK(
1682
1906
  }
1683
1907
  }
1684
1908
 
1685
- fun disableEvent(data: ReadableMap, promise: Promise?) {
1909
+ fun disableEvent(
1910
+ data: ReadableMap,
1911
+ promise: Promise?,
1912
+ ) {
1686
1913
  val requiredKeys =
1687
1914
  HMSHelper.getUnavailableRequiredKey(data, arrayOf(Pair("eventType", "String")))
1688
1915
  if (requiredKeys === null) {
@@ -1699,7 +1926,10 @@ class HMSRNSDK(
1699
1926
  }
1700
1927
  }
1701
1928
 
1702
- fun restrictData(data: ReadableMap, promise: Promise?) {
1929
+ fun restrictData(
1930
+ data: ReadableMap,
1931
+ promise: Promise?,
1932
+ ) {
1703
1933
  val requiredKeys =
1704
1934
  HMSHelper.getUnavailableRequiredKey(data, arrayOf(Pair("roleName", "String")))
1705
1935
  if (requiredKeys === null) {
@@ -1715,7 +1945,10 @@ class HMSRNSDK(
1715
1945
  }
1716
1946
  }
1717
1947
 
1718
- fun getRemoteVideoTrackFromTrackId(data: ReadableMap, promise: Promise) {
1948
+ fun getRemoteVideoTrackFromTrackId(
1949
+ data: ReadableMap,
1950
+ promise: Promise,
1951
+ ) {
1719
1952
  val requiredKeys = HMSHelper.getUnavailableRequiredKey(data, arrayOf(Pair("trackId", "String")))
1720
1953
  if (requiredKeys === null) {
1721
1954
  val trackId = data.getString("trackId")
@@ -1732,7 +1965,10 @@ class HMSRNSDK(
1732
1965
  }
1733
1966
  }
1734
1967
 
1735
- fun getRemoteAudioTrackFromTrackId(data: ReadableMap, promise: Promise) {
1968
+ fun getRemoteAudioTrackFromTrackId(
1969
+ data: ReadableMap,
1970
+ promise: Promise,
1971
+ ) {
1736
1972
  val requiredKeys = HMSHelper.getUnavailableRequiredKey(data, arrayOf(Pair("trackId", "String")))
1737
1973
  if (requiredKeys === null) {
1738
1974
  val trackId = data.getString("trackId")
@@ -1749,7 +1985,10 @@ class HMSRNSDK(
1749
1985
  }
1750
1986
  }
1751
1987
 
1752
- fun getVideoTrackLayer(data: ReadableMap, promise: Promise) {
1988
+ fun getVideoTrackLayer(
1989
+ data: ReadableMap,
1990
+ promise: Promise,
1991
+ ) {
1753
1992
  val requiredKeys = HMSHelper.getUnavailableRequiredKey(data, arrayOf(Pair("trackId", "String")))
1754
1993
  if (requiredKeys === null) {
1755
1994
  val trackId = data.getString("trackId")
@@ -1767,7 +2006,10 @@ class HMSRNSDK(
1767
2006
  }
1768
2007
  }
1769
2008
 
1770
- fun getVideoTrackLayerDefinition(data: ReadableMap, promise: Promise) {
2009
+ fun getVideoTrackLayerDefinition(
2010
+ data: ReadableMap,
2011
+ promise: Promise,
2012
+ ) {
1771
2013
  val requiredKeys = HMSHelper.getUnavailableRequiredKey(data, arrayOf(Pair("trackId", "String")))
1772
2014
  if (requiredKeys === null) {
1773
2015
  val trackId = data.getString("trackId")
@@ -1786,7 +2028,10 @@ class HMSRNSDK(
1786
2028
  }
1787
2029
  }
1788
2030
 
1789
- fun setVideoTrackLayer(data: ReadableMap, promise: Promise?) {
2031
+ fun setVideoTrackLayer(
2032
+ data: ReadableMap,
2033
+ promise: Promise?,
2034
+ ) {
1790
2035
  val requiredKeys = HMSHelper.getUnavailableRequiredKey(data, arrayOf(Pair("trackId", "String"), Pair("layer", "String")))
1791
2036
  if (requiredKeys === null) {
1792
2037
  val trackId = data.getString("trackId")
@@ -1815,33 +2060,42 @@ class HMSRNSDK(
1815
2060
  }
1816
2061
  }
1817
2062
 
1818
- fun captureImageAtMaxSupportedResolution(data: ReadableMap, promise: Promise?) {
2063
+ fun captureImageAtMaxSupportedResolution(
2064
+ data: ReadableMap,
2065
+ promise: Promise?,
2066
+ ) {
1819
2067
  val requiredKeys = HMSHelper.getUnavailableRequiredKey(data, arrayOf(Pair("flash", "Boolean")))
1820
2068
  if (requiredKeys === null) {
1821
- val localPeer = hmsSDK?.getLocalPeer().let {
1822
- if (it == null) {
1823
- promise?.reject("6004", "An instance of Local Peer could not be found! Please check if a Room is joined.")
1824
- return
1825
- } else {
1826
- it
2069
+ val localPeer =
2070
+ hmsSDK?.getLocalPeer().let {
2071
+ if (it == null) {
2072
+ promise?.reject("6004", "An instance of Local Peer could not be found! Please check if a Room is joined.")
2073
+ return
2074
+ } else {
2075
+ it
2076
+ }
1827
2077
  }
1828
- }
1829
- val localVideoTrack = localPeer.videoTrack.let {
1830
- if (it == null) {
1831
- promise?.reject("6004", "Video Track of Local Peer could not be found! Please check if the Local Peer has permission to publish video & video is unmuted currently.")
1832
- return
1833
- } else {
1834
- it
2078
+ val localVideoTrack =
2079
+ localPeer.videoTrack.let {
2080
+ if (it == null) {
2081
+ promise?.reject(
2082
+ "6004",
2083
+ "Video Track of Local Peer could not be found! Please check if the Local Peer has permission to publish video & video is unmuted currently.",
2084
+ )
2085
+ return
2086
+ } else {
2087
+ it
2088
+ }
1835
2089
  }
1836
- }
1837
- val cameraControl = localVideoTrack.getCameraControl().let {
1838
- if (it == null) {
1839
- promise?.reject("6004", "Camera Controls not available!")
1840
- return
1841
- } else {
1842
- it
2090
+ val cameraControl =
2091
+ localVideoTrack.getCameraControl().let {
2092
+ if (it == null) {
2093
+ promise?.reject("6004", "Camera Controls not available!")
2094
+ return
2095
+ } else {
2096
+ it
2097
+ }
1843
2098
  }
1844
- }
1845
2099
 
1846
2100
  val flashSupported = cameraControl.isFlashSupported()
1847
2101
  var flashActionOnSuccess = 0 // 0 - Do nothing on success, 1 - set flash on, 2 - set flash off
@@ -1896,7 +2150,10 @@ class HMSRNSDK(
1896
2150
 
1897
2151
  // Mark: Session Store
1898
2152
 
1899
- fun setSessionMetadataForKey(data: ReadableMap, promise: Promise?) {
2153
+ fun setSessionMetadataForKey(
2154
+ data: ReadableMap,
2155
+ promise: Promise?,
2156
+ ) {
1900
2157
  val requiredKeys = HMSHelper.getUnavailableRequiredKey(data, arrayOf(Pair("key", "String")))
1901
2158
  if (requiredKeys === null) {
1902
2159
  val key = data.getString("key")!!
@@ -1916,6 +2173,7 @@ class HMSRNSDK(
1916
2173
  override fun onError(error: HMSException) {
1917
2174
  promise?.reject(error.code.toString(), error.message)
1918
2175
  }
2176
+
1919
2177
  override fun onSuccess() {
1920
2178
  val result: WritableMap = Arguments.createMap()
1921
2179
  result.putBoolean("success", true)
@@ -1931,7 +2189,10 @@ class HMSRNSDK(
1931
2189
  }
1932
2190
  }
1933
2191
 
1934
- fun getSessionMetadataForKey(data: ReadableMap, promise: Promise?) {
2192
+ fun getSessionMetadataForKey(
2193
+ data: ReadableMap,
2194
+ promise: Promise?,
2195
+ ) {
1935
2196
  val requiredKeys = HMSHelper.getUnavailableRequiredKey(data, arrayOf(Pair("key", "String")))
1936
2197
  if (requiredKeys === null) {
1937
2198
  val key = data.getString("key")!!
@@ -1974,7 +2235,10 @@ class HMSRNSDK(
1974
2235
  }
1975
2236
  }
1976
2237
 
1977
- fun addKeyChangeListener(data: ReadableMap, promise: Promise?) {
2238
+ fun addKeyChangeListener(
2239
+ data: ReadableMap,
2240
+ promise: Promise?,
2241
+ ) {
1978
2242
  val requiredKeys = HMSHelper.getUnavailableRequiredKey(data, arrayOf(Pair("keys", "Array"), Pair("uniqueId", "String")))
1979
2243
  if (requiredKeys === null) {
1980
2244
  val keys = ArrayList(data.getArray("keys")!!.toArrayList().map { it.toString() })
@@ -1987,39 +2251,45 @@ class HMSRNSDK(
1987
2251
  return
1988
2252
  }
1989
2253
 
1990
- val keyChangeListener = object : HMSKeyChangeListener {
1991
- override fun onKeyChanged(key: String, value: JsonElement?) {
1992
- val map = Arguments.createMap()
1993
- map.putString("id", id)
1994
- map.putString("key", key)
1995
-
1996
- value.let { sm ->
1997
- if (sm == null) {
1998
- map.putString("value", null)
1999
- } else {
2000
- if (sm.isJsonPrimitive) {
2001
- map.putString("value", sm.asString)
2002
- } else if (sm.isJsonNull) {
2254
+ val keyChangeListener =
2255
+ object : HMSKeyChangeListener {
2256
+ override fun onKeyChanged(
2257
+ key: String,
2258
+ value: JsonElement?,
2259
+ ) {
2260
+ val map = Arguments.createMap()
2261
+ map.putString("id", id)
2262
+ map.putString("key", key)
2263
+
2264
+ value.let { sm ->
2265
+ if (sm == null) {
2003
2266
  map.putString("value", null)
2004
2267
  } else {
2005
- map.putString("value", sm.toString())
2268
+ if (sm.isJsonPrimitive) {
2269
+ map.putString("value", sm.asString)
2270
+ } else if (sm.isJsonNull) {
2271
+ map.putString("value", null)
2272
+ } else {
2273
+ map.putString("value", sm.toString())
2274
+ }
2006
2275
  }
2007
2276
  }
2008
- }
2009
2277
 
2010
- delegate.emitEvent("ON_SESSION_STORE_CHANGED", map)
2278
+ delegate.emitEvent("ON_SESSION_STORE_CHANGED", map)
2279
+ }
2011
2280
  }
2012
- }
2013
2281
 
2014
- val actionResultListener = object : HMSActionResultListener {
2015
- override fun onError(error: HMSException) {
2016
- promise?.reject(error.code.toString(), error.message)
2017
- }
2018
- override fun onSuccess() {
2019
- keyChangeObservers[uniqueId] = keyChangeListener
2020
- promise?.resolve(true)
2282
+ val actionResultListener =
2283
+ object : HMSActionResultListener {
2284
+ override fun onError(error: HMSException) {
2285
+ promise?.reject(error.code.toString(), error.message)
2286
+ }
2287
+
2288
+ override fun onSuccess() {
2289
+ keyChangeObservers[uniqueId] = keyChangeListener
2290
+ promise?.resolve(true)
2291
+ }
2021
2292
  }
2022
- }
2023
2293
 
2024
2294
  it.addKeyChangeListener(
2025
2295
  keys,
@@ -2033,7 +2303,10 @@ class HMSRNSDK(
2033
2303
  }
2034
2304
  }
2035
2305
 
2036
- fun removeKeyChangeListener(data: ReadableMap, promise: Promise?) {
2306
+ fun removeKeyChangeListener(
2307
+ data: ReadableMap,
2308
+ promise: Promise?,
2309
+ ) {
2037
2310
  val requiredKeys = HMSHelper.getUnavailableRequiredKey(data, arrayOf(Pair("uniqueId", "String")))
2038
2311
  if (requiredKeys === null) {
2039
2312
  val uniqueId = data.getString("uniqueId")!!
@@ -2062,7 +2335,10 @@ class HMSRNSDK(
2062
2335
  }
2063
2336
  }
2064
2337
 
2065
- fun getRoomLayout(data: ReadableMap, promise: Promise?) {
2338
+ fun getRoomLayout(
2339
+ data: ReadableMap,
2340
+ promise: Promise?,
2341
+ ) {
2066
2342
  val unavailableKeys = HMSHelper.getUnavailableRequiredKey(data, arrayOf(Pair("authToken", "String")))
2067
2343
 
2068
2344
  if (unavailableKeys != null) {
@@ -2074,9 +2350,10 @@ class HMSRNSDK(
2074
2350
  val authToken = data.getString("authToken")!!
2075
2351
  val endpoint = data.getString("endpoint")
2076
2352
 
2077
- val layoutRequestOptions = endpoint?.let {
2078
- LayoutRequestOptions(endpoint)
2079
- }
2353
+ val layoutRequestOptions =
2354
+ endpoint?.let {
2355
+ LayoutRequestOptions(endpoint)
2356
+ }
2080
2357
 
2081
2358
  hmsSDK?.getRoomLayout(
2082
2359
  authToken,
@@ -2092,4 +2369,137 @@ class HMSRNSDK(
2092
2369
  },
2093
2370
  )
2094
2371
  }
2372
+
2373
+ fun raiseLocalPeerHand(
2374
+ data: ReadableMap,
2375
+ promise: Promise?,
2376
+ ) {
2377
+ hmsSDK?.raiseLocalPeerHand(
2378
+ object : HMSActionResultListener {
2379
+ override fun onError(error: HMSException) {
2380
+ promise?.reject(error.code.toString(), error.message)
2381
+ }
2382
+
2383
+ override fun onSuccess() {
2384
+ promise?.resolve(true)
2385
+ }
2386
+ },
2387
+ )
2388
+ }
2389
+
2390
+ fun lowerLocalPeerHand(
2391
+ data: ReadableMap,
2392
+ promise: Promise?,
2393
+ ) {
2394
+ hmsSDK?.lowerLocalPeerHand(
2395
+ object : HMSActionResultListener {
2396
+ override fun onError(error: HMSException) {
2397
+ promise?.reject(error.code.toString(), error.message)
2398
+ }
2399
+
2400
+ override fun onSuccess() {
2401
+ promise?.resolve(true)
2402
+ }
2403
+ },
2404
+ )
2405
+ }
2406
+
2407
+ fun lowerRemotePeerHand(
2408
+ data: ReadableMap,
2409
+ promise: Promise?,
2410
+ ) {
2411
+ val peerId = data.getString("peerId")
2412
+ peerId?.let { peerID ->
2413
+ hmsSDK?.getRoom()?.let { room ->
2414
+ val peer = HMSHelper.getPeerFromPeerId(peerID, room)
2415
+ peer?.let { peer ->
2416
+ hmsSDK?.lowerRemotePeerHand(
2417
+ forPeer = peer,
2418
+ object : HMSActionResultListener {
2419
+ override fun onError(error: HMSException) {
2420
+ promise?.reject(error.code.toString(), error.message)
2421
+ }
2422
+
2423
+ override fun onSuccess() {
2424
+ promise?.resolve(true)
2425
+ }
2426
+ },
2427
+ )
2428
+ }
2429
+ }
2430
+ }
2431
+ }
2432
+
2433
+ fun getPeerListIterator(data: ReadableMap): WritableMap? {
2434
+ val uniqueId = data.getString("uniqueId")
2435
+ if (uniqueId == null) {
2436
+ print("Error in getPeerListIterator: uniqueId is not available")
2437
+ return null
2438
+ }
2439
+
2440
+ val options = HMSHelper.getPeerListIteratorOptions(data)
2441
+
2442
+ hmsSDK?.let {
2443
+ val iterator = it.getPeerListIterator(options)
2444
+
2445
+ peerListIterators[uniqueId] = iterator
2446
+ val map = Arguments.createMap()
2447
+ map.putBoolean("success", true)
2448
+ map.putString("uniqueId", uniqueId)
2449
+ return map
2450
+ }
2451
+ print("Error in getPeerListIterator: HMS SDK is not available")
2452
+ return null
2453
+ }
2454
+
2455
+ fun peerListIteratorHasNext(
2456
+ data: ReadableMap,
2457
+ promise: Promise?,
2458
+ ) {
2459
+ val uniqueId = data.getString("uniqueId")
2460
+
2461
+ peerListIterators[uniqueId]?.let {
2462
+ promise?.resolve(it.hasNext())
2463
+ return
2464
+ }
2465
+ promise?.reject("101", "PeerListIterator is not available")
2466
+ }
2467
+
2468
+ fun peerListIteratorNext(
2469
+ data: ReadableMap,
2470
+ promise: Promise?,
2471
+ ) {
2472
+ val uniqueId = data.getString("uniqueId")
2473
+
2474
+ val peerListIterator = peerListIterators[uniqueId]
2475
+
2476
+ if (peerListIterator == null) {
2477
+ promise?.reject("101", "PeerListIterator is not available")
2478
+ return
2479
+ }
2480
+
2481
+ peerListIterator.next(
2482
+ object : PeerListResultListener {
2483
+ override fun onError(error: HMSException) {
2484
+ promise?.reject(error.code.toString(), error.message)
2485
+ }
2486
+
2487
+ override fun onSuccess(result: ArrayList<HMSPeer>) {
2488
+ val resultData: WritableMap = Arguments.createMap()
2489
+
2490
+ resultData.putInt("totalCount", peerListIterator.totalCount)
2491
+
2492
+ val array: WritableArray = Arguments.createArray()
2493
+ for (peer in result) {
2494
+ val hmsPeer = HMSDecoder.getHmsPeer(peer)
2495
+ array.pushMap(hmsPeer)
2496
+ }
2497
+
2498
+ resultData.putArray("peers", array)
2499
+
2500
+ promise?.resolve(resultData)
2501
+ }
2502
+ },
2503
+ )
2504
+ }
2095
2505
  }