@100mslive/react-native-hms 1.7.2 → 2.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 (119) hide show
  1. package/android/.gradle/6.7.1/executionHistory/executionHistory.lock +0 -0
  2. package/android/.gradle/6.7.1/fileHashes/fileHashes.lock +0 -0
  3. package/android/.gradle/6.9/executionHistory/executionHistory.bin +0 -0
  4. package/android/.gradle/6.9/executionHistory/executionHistory.lock +0 -0
  5. package/android/.gradle/6.9/fileHashes/fileHashes.bin +0 -0
  6. package/android/.gradle/6.9/fileHashes/fileHashes.lock +0 -0
  7. package/android/.gradle/{6.7.1/fileHashes/fileHashes.bin → 6.9/fileHashes/resourceHashesCache.bin} +0 -0
  8. package/android/.gradle/6.9/javaCompile/classAnalysis.bin +0 -0
  9. package/android/.gradle/6.9/javaCompile/jarAnalysis.bin +0 -0
  10. package/android/.gradle/6.9/javaCompile/javaCompile.lock +0 -0
  11. package/android/.gradle/6.9/javaCompile/taskHistory.bin +0 -0
  12. package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
  13. package/android/.gradle/buildOutputCleanup/cache.properties +1 -1
  14. package/android/.gradle/buildOutputCleanup/outputFiles.bin +0 -0
  15. package/android/.gradle/checksums/checksums.lock +0 -0
  16. package/android/.gradle/checksums/md5-checksums.bin +0 -0
  17. package/android/.gradle/checksums/sha1-checksums.bin +0 -0
  18. package/android/.idea/compiler.xml +6 -0
  19. package/android/.idea/gradle.xml +18 -0
  20. package/android/.idea/jarRepositories.xml +45 -0
  21. package/android/.idea/misc.xml +10 -0
  22. package/android/.idea/vcs.xml +6 -0
  23. package/android/build.gradle +3 -3
  24. package/android/local.properties +8 -1
  25. package/android/src/main/java/com/reactnativehmssdk/HMSAudioshareActivity.kt +1 -0
  26. package/android/src/main/java/com/reactnativehmssdk/HMSDecoder.kt +42 -14
  27. package/android/src/main/java/com/reactnativehmssdk/HMSHLSPlayer.kt +113 -68
  28. package/android/src/main/java/com/reactnativehmssdk/HMSHLSPlayerManager.kt +17 -4
  29. package/android/src/main/java/com/reactnativehmssdk/HMSHelper.kt +46 -18
  30. package/android/src/main/java/com/reactnativehmssdk/HMSManager.kt +483 -184
  31. package/android/src/main/java/com/reactnativehmssdk/HMSRNSDK.kt +551 -151
  32. package/android/src/main/java/com/reactnativehmssdk/HMSSDKViewManager.kt +26 -7
  33. package/android/src/main/java/com/reactnativehmssdk/HMSView.kt +32 -12
  34. package/android/src/main/java/com/reactnativehmssdk/HmsScreenshareActivity.kt +1 -0
  35. package/android/src/main/java/com/reactnativehmssdk/PipActionReceiver.kt +10 -6
  36. package/android/src/main/res/layout/player_view.xml +3 -2
  37. package/ios/HMSConstants.swift +1 -0
  38. package/ios/HMSDecoder.swift +18 -7
  39. package/ios/HMSHLSPlayerManager.swift +18 -2
  40. package/ios/HMSManager.m +239 -70
  41. package/ios/HMSManager.swift +24 -3
  42. package/ios/HMSRNSDK.swift +129 -126
  43. package/ios/HMSView.swift +17 -3
  44. package/ios/Hmssdk.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  45. package/ios/Hmssdk.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  46. package/ios/Hmssdk.xcodeproj/project.xcworkspace/xcuserdata/jatinnagar.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  47. package/ios/Hmssdk.xcodeproj/xcuserdata/jatinnagar.xcuserdatad/xcschemes/xcschememanagement.plist +14 -0
  48. package/lib/commonjs/classes/HMSEncoder.js +6 -0
  49. package/lib/commonjs/classes/HMSEncoder.js.map +1 -1
  50. package/lib/commonjs/classes/HMSPIPListenerActions.js +1 -0
  51. package/lib/commonjs/classes/HMSPIPListenerActions.js.map +1 -1
  52. package/lib/commonjs/classes/HMSPeer.js +15 -0
  53. package/lib/commonjs/classes/HMSPeer.js.map +1 -1
  54. package/lib/commonjs/classes/HMSPeerListIterator.js +46 -0
  55. package/lib/commonjs/classes/HMSPeerListIterator.js.map +1 -0
  56. package/lib/commonjs/classes/HMSPeerListIteratorOptions.js +2 -0
  57. package/lib/commonjs/classes/HMSPeerListIteratorOptions.js.map +1 -0
  58. package/lib/commonjs/classes/HMSPeerUpdate.js +2 -1
  59. package/lib/commonjs/classes/HMSPeerUpdate.js.map +1 -1
  60. package/lib/commonjs/classes/HMSPeersCache.js +7 -0
  61. package/lib/commonjs/classes/HMSPeersCache.js.map +1 -1
  62. package/lib/commonjs/classes/HMSSDK.js +162 -29
  63. package/lib/commonjs/classes/HMSSDK.js.map +1 -1
  64. package/lib/commonjs/classes/HMSUpdateListenerActions.js +1 -0
  65. package/lib/commonjs/classes/HMSUpdateListenerActions.js.map +1 -1
  66. package/lib/commonjs/components/HMSHLSPlayer/HMSHLSPlayer.js +10 -5
  67. package/lib/commonjs/components/HMSHLSPlayer/HMSHLSPlayer.js.map +1 -1
  68. package/lib/commonjs/index.js.map +1 -1
  69. package/lib/commonjs/types.js +1 -0
  70. package/lib/commonjs/types.js.map +1 -1
  71. package/lib/module/classes/HMSEncoder.js +6 -0
  72. package/lib/module/classes/HMSEncoder.js.map +1 -1
  73. package/lib/module/classes/HMSPIPListenerActions.js +1 -0
  74. package/lib/module/classes/HMSPIPListenerActions.js.map +1 -1
  75. package/lib/module/classes/HMSPeer.js +15 -0
  76. package/lib/module/classes/HMSPeer.js.map +1 -1
  77. package/lib/module/classes/HMSPeerListIterator.js +40 -0
  78. package/lib/module/classes/HMSPeerListIterator.js.map +1 -0
  79. package/lib/module/classes/HMSPeerListIteratorOptions.js +2 -0
  80. package/lib/module/classes/HMSPeerListIteratorOptions.js.map +1 -0
  81. package/lib/module/classes/HMSPeerUpdate.js +2 -1
  82. package/lib/module/classes/HMSPeerUpdate.js.map +1 -1
  83. package/lib/module/classes/HMSPeersCache.js +7 -0
  84. package/lib/module/classes/HMSPeersCache.js.map +1 -1
  85. package/lib/module/classes/HMSSDK.js +162 -30
  86. package/lib/module/classes/HMSSDK.js.map +1 -1
  87. package/lib/module/classes/HMSUpdateListenerActions.js +1 -0
  88. package/lib/module/classes/HMSUpdateListenerActions.js.map +1 -1
  89. package/lib/module/components/HMSHLSPlayer/HMSHLSPlayer.js +11 -6
  90. package/lib/module/components/HMSHLSPlayer/HMSHLSPlayer.js.map +1 -1
  91. package/lib/module/index.js.map +1 -1
  92. package/lib/module/types.js +1 -0
  93. package/lib/module/types.js.map +1 -1
  94. package/lib/typescript/classes/HMSEncoder.d.ts +1 -0
  95. package/lib/typescript/classes/HMSPIPListenerActions.d.ts +1 -0
  96. package/lib/typescript/classes/HMSPeer.d.ts +3 -0
  97. package/lib/typescript/classes/HMSPeerListIterator.d.ts +7 -0
  98. package/lib/typescript/classes/HMSPeerListIteratorOptions.d.ts +5 -0
  99. package/lib/typescript/classes/HMSPeerUpdate.d.ts +2 -1
  100. package/lib/typescript/classes/HMSPeersCache.d.ts +1 -0
  101. package/lib/typescript/classes/HMSSDK.d.ts +46 -13
  102. package/lib/typescript/classes/HMSUpdateListenerActions.d.ts +2 -1
  103. package/lib/typescript/index.d.ts +1 -1
  104. package/lib/typescript/types.d.ts +3 -1
  105. package/package.json +1 -1
  106. package/sdk-versions.json +2 -2
  107. package/src/classes/HMSEncoder.ts +9 -0
  108. package/src/classes/HMSPIPListenerActions.ts +1 -0
  109. package/src/classes/HMSPeer.ts +25 -0
  110. package/src/classes/HMSPeerListIterator.ts +40 -0
  111. package/src/classes/HMSPeerListIteratorOptions.ts +5 -0
  112. package/src/classes/HMSPeerUpdate.ts +2 -0
  113. package/src/classes/HMSPeersCache.ts +7 -0
  114. package/src/classes/HMSSDK.tsx +202 -26
  115. package/src/classes/HMSUpdateListenerActions.ts +1 -0
  116. package/src/components/HMSHLSPlayer/HMSHLSPlayer.tsx +15 -13
  117. package/src/index.ts +4 -1
  118. package/src/types.ts +2 -0
  119. package/android/.gradle/6.7.1/executionHistory/executionHistory.bin +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<Int, 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,7 +1104,10 @@ 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,
@@ -988,8 +1125,8 @@ class HMSRNSDK(
988
1125
  override fun onSuccess() {
989
1126
  callback?.resolve(emitHMSSuccess())
990
1127
  }
1128
+
991
1129
  override fun onError(error: HMSException) {
992
- self.emitHMSError(error)
993
1130
  callback?.reject(error.code.toString(), error.message)
994
1131
  }
995
1132
  },
@@ -1005,7 +1142,10 @@ class HMSRNSDK(
1005
1142
  }
1006
1143
  }
1007
1144
 
1008
- fun endRoom(data: ReadableMap, callback: Promise?) {
1145
+ fun endRoom(
1146
+ data: ReadableMap,
1147
+ callback: Promise?,
1148
+ ) {
1009
1149
  val requiredKeys =
1010
1150
  HMSHelper.getUnavailableRequiredKey(
1011
1151
  data,
@@ -1020,8 +1160,8 @@ class HMSRNSDK(
1020
1160
  callback?.resolve(emitHMSSuccess())
1021
1161
  cleanup() // resetting states and doing data cleanup
1022
1162
  }
1163
+
1023
1164
  override fun onError(error: HMSException) {
1024
- self.emitHMSError(error)
1025
1165
  callback?.reject(error.code.toString(), error.message)
1026
1166
  }
1027
1167
  },
@@ -1033,6 +1173,60 @@ class HMSRNSDK(
1033
1173
  }
1034
1174
  }
1035
1175
 
1176
+ fun previewForRole(
1177
+ data: ReadableMap,
1178
+ callback: Promise?,
1179
+ ) {
1180
+ val requiredKeys = HMSHelper.getUnavailableRequiredKey(data, arrayOf(Pair("role", "String")))
1181
+ if (requiredKeys === null) {
1182
+ val roleString = data.getString("role")
1183
+ val role = HMSHelper.getRoleFromRoleName(roleString, hmsSDK?.getRoles())
1184
+ if (role == null) {
1185
+ callback?.reject("4000", "ROLE_NOT_FOUND")
1186
+ return
1187
+ }
1188
+ hmsSDK?.preview(
1189
+ role,
1190
+ object : RolePreviewListener {
1191
+ override fun onError(error: HMSException) {
1192
+ callback?.reject(error.code.toString(), error.message)
1193
+ }
1194
+
1195
+ override fun onTracks(localTracks: Array<HMSTrack>) {
1196
+ val tracks = HMSDecoder.getPreviewTracks(localTracks)
1197
+
1198
+ localTracks.forEach { track ->
1199
+ // /Assigning values to preview for role tracks
1200
+ if (track.type == HMSTrackType.AUDIO) {
1201
+ previewForRoleAudioTrack = track as HMSLocalAudioTrack
1202
+ } else if (track.type == HMSTrackType.VIDEO && track.source == "regular") {
1203
+ previewForRoleVideoTrack = track as HMSLocalVideoTrack
1204
+ }
1205
+ }
1206
+
1207
+ val data: WritableMap = Arguments.createMap()
1208
+
1209
+ data.putArray("tracks", tracks)
1210
+ data.putBoolean("success", true)
1211
+
1212
+ callback?.resolve(data)
1213
+ }
1214
+ },
1215
+ )
1216
+ } else {
1217
+ val errorMessage = "Missing required keys for previewForRole: $requiredKeys"
1218
+ self.emitRequiredKeysError(errorMessage)
1219
+ rejectCallback(callback, errorMessage)
1220
+ }
1221
+ }
1222
+
1223
+ fun cancelPreview(callback: Promise?) {
1224
+ hmsSDK?.cancelPreview()
1225
+ previewForRoleAudioTrack = null
1226
+ previewForRoleVideoTrack = null
1227
+ callback?.resolve(emitHMSSuccess())
1228
+ }
1229
+
1036
1230
  fun acceptRoleChange(callback: Promise?) {
1037
1231
  if (recentRoleChangeRequest !== null) {
1038
1232
  hmsSDK?.acceptChangeRole(
@@ -1041,13 +1235,15 @@ class HMSRNSDK(
1041
1235
  override fun onSuccess() {
1042
1236
  callback?.resolve(emitHMSSuccess())
1043
1237
  }
1238
+
1044
1239
  override fun onError(error: HMSException) {
1045
- self.emitHMSError(error)
1046
1240
  callback?.reject(error.code.toString(), error.message)
1047
1241
  }
1048
1242
  },
1049
1243
  )
1050
1244
  recentRoleChangeRequest = null
1245
+ previewForRoleAudioTrack = null
1246
+ previewForRoleVideoTrack = null
1051
1247
  } else {
1052
1248
  val errorMessage = "acceptRoleChange: recentRoleChangeRequest not found"
1053
1249
  self.emitRequiredKeysError(errorMessage)
@@ -1065,6 +1261,7 @@ class HMSRNSDK(
1065
1261
  true,
1066
1262
  object : HMSActionResultListener {
1067
1263
  override fun onSuccess() {}
1264
+
1068
1265
  override fun onError(error: HMSException) {
1069
1266
  customError = error
1070
1267
  }
@@ -1120,7 +1317,10 @@ class HMSRNSDK(
1120
1317
  }
1121
1318
  }
1122
1319
 
1123
- fun isPlaybackAllowed(data: ReadableMap, callback: Promise?) {
1320
+ fun isPlaybackAllowed(
1321
+ data: ReadableMap,
1322
+ callback: Promise?,
1323
+ ) {
1124
1324
  val requiredKeys = HMSHelper.getUnavailableRequiredKey(data, arrayOf(Pair("trackId", "String")))
1125
1325
  if (requiredKeys === null) {
1126
1326
  val trackId = data.getString("trackId")
@@ -1209,7 +1409,10 @@ class HMSRNSDK(
1209
1409
  }
1210
1410
  }
1211
1411
 
1212
- fun getVolume(data: ReadableMap, callback: Promise?) {
1412
+ fun getVolume(
1413
+ data: ReadableMap,
1414
+ callback: Promise?,
1415
+ ) {
1213
1416
  val requiredKeys = HMSHelper.getUnavailableRequiredKey(data, arrayOf(Pair("trackId", "String")))
1214
1417
  if (requiredKeys === null) {
1215
1418
  val trackId = data.getString("trackId")
@@ -1229,7 +1432,10 @@ class HMSRNSDK(
1229
1432
  }
1230
1433
  }
1231
1434
 
1232
- fun changeMetadata(data: ReadableMap, callback: Promise?) {
1435
+ fun changeMetadata(
1436
+ data: ReadableMap,
1437
+ callback: Promise?,
1438
+ ) {
1233
1439
  val requiredKeys =
1234
1440
  HMSHelper.getUnavailableRequiredKey(data, arrayOf(Pair("metadata", "String")))
1235
1441
  if (requiredKeys === null) {
@@ -1242,9 +1448,9 @@ class HMSRNSDK(
1242
1448
  override fun onSuccess() {
1243
1449
  callback?.resolve(emitHMSSuccess())
1244
1450
  }
1451
+
1245
1452
  override fun onError(error: HMSException) {
1246
1453
  callback?.reject(error.code.toString(), error.message)
1247
- self.emitHMSError(error)
1248
1454
  }
1249
1455
  },
1250
1456
  )
@@ -1256,7 +1462,10 @@ class HMSRNSDK(
1256
1462
  }
1257
1463
  }
1258
1464
 
1259
- fun startRTMPOrRecording(data: ReadableMap, callback: Promise?) {
1465
+ fun startRTMPOrRecording(
1466
+ data: ReadableMap,
1467
+ callback: Promise?,
1468
+ ) {
1260
1469
  val requiredKeys =
1261
1470
  HMSHelper.getUnavailableRequiredKey(
1262
1471
  data,
@@ -1275,9 +1484,9 @@ class HMSRNSDK(
1275
1484
  override fun onSuccess() {
1276
1485
  callback?.resolve(emitHMSSuccess())
1277
1486
  }
1487
+
1278
1488
  override fun onError(error: HMSException) {
1279
1489
  callback?.reject(error.code.toString(), error.message)
1280
- self.emitHMSError(error)
1281
1490
  }
1282
1491
  },
1283
1492
  )
@@ -1295,9 +1504,9 @@ class HMSRNSDK(
1295
1504
  override fun onSuccess() {
1296
1505
  callback?.resolve(emitHMSSuccess())
1297
1506
  }
1507
+
1298
1508
  override fun onError(error: HMSException) {
1299
1509
  callback?.reject(error.code.toString(), error.message)
1300
- self.emitHMSError(error)
1301
1510
  }
1302
1511
  },
1303
1512
  )
@@ -1323,8 +1532,8 @@ class HMSRNSDK(
1323
1532
  override fun onError(error: HMSException) {
1324
1533
  screenshareCallback = null
1325
1534
  callback?.reject(error.code.toString(), error.message)
1326
- self.emitHMSError(error)
1327
1535
  }
1536
+
1328
1537
  override fun onSuccess() {
1329
1538
  screenshareCallback = null
1330
1539
  callback?.resolve(emitHMSSuccess())
@@ -1333,7 +1542,10 @@ class HMSRNSDK(
1333
1542
  )
1334
1543
  }
1335
1544
 
1336
- fun startHLSStreaming(data: ReadableMap, callback: Promise?) {
1545
+ fun startHLSStreaming(
1546
+ data: ReadableMap,
1547
+ callback: Promise?,
1548
+ ) {
1337
1549
  val hlsConfig = HMSHelper.getHLSConfig(data)
1338
1550
  hmsSDK?.startHLSStreaming(
1339
1551
  hlsConfig,
@@ -1341,9 +1553,9 @@ class HMSRNSDK(
1341
1553
  override fun onSuccess() {
1342
1554
  callback?.resolve(emitHMSSuccess())
1343
1555
  }
1556
+
1344
1557
  override fun onError(error: HMSException) {
1345
1558
  callback?.reject(error.code.toString(), error.message)
1346
- self.emitHMSError(error)
1347
1559
  }
1348
1560
  },
1349
1561
  )
@@ -1356,9 +1568,9 @@ class HMSRNSDK(
1356
1568
  override fun onSuccess() {
1357
1569
  callback?.resolve(emitHMSSuccess())
1358
1570
  }
1571
+
1359
1572
  override fun onError(error: HMSException) {
1360
1573
  callback?.reject(error.code.toString(), error.message)
1361
- self.emitHMSError(error)
1362
1574
  }
1363
1575
  },
1364
1576
  )
@@ -1384,7 +1596,10 @@ class HMSRNSDK(
1384
1596
  }
1385
1597
  }
1386
1598
 
1387
- fun changeName(data: ReadableMap, callback: Promise?) {
1599
+ fun changeName(
1600
+ data: ReadableMap,
1601
+ callback: Promise?,
1602
+ ) {
1388
1603
  val requiredKeys = HMSHelper.getUnavailableRequiredKey(data, arrayOf(Pair("name", "String")))
1389
1604
  if (requiredKeys === null) {
1390
1605
  val name = data.getString("name")
@@ -1398,7 +1613,6 @@ class HMSRNSDK(
1398
1613
 
1399
1614
  override fun onError(error: HMSException) {
1400
1615
  callback?.reject(error.code.toString(), error.message)
1401
- self.emitHMSError(error)
1402
1616
  }
1403
1617
  },
1404
1618
  )
@@ -1476,7 +1690,10 @@ class HMSRNSDK(
1476
1690
  )
1477
1691
  }
1478
1692
 
1479
- fun startAudioshare(data: ReadableMap, callback: Promise?) {
1693
+ fun startAudioshare(
1694
+ data: ReadableMap,
1695
+ callback: Promise?,
1696
+ ) {
1480
1697
  val requiredKeys =
1481
1698
  HMSHelper.getUnavailableRequiredKey(data, arrayOf(Pair("audioMixingMode", "String")))
1482
1699
  if (requiredKeys === null) {
@@ -1505,8 +1722,8 @@ class HMSRNSDK(
1505
1722
  override fun onError(error: HMSException) {
1506
1723
  audioshareCallback = null
1507
1724
  callback?.reject(error.code.toString(), error.message)
1508
- self.emitHMSError(error)
1509
1725
  }
1726
+
1510
1727
  override fun onSuccess() {
1511
1728
  isAudioSharing = false
1512
1729
  audioshareCallback = null
@@ -1520,7 +1737,10 @@ class HMSRNSDK(
1520
1737
  return audioMixingMode
1521
1738
  }
1522
1739
 
1523
- fun setAudioMixingMode(data: ReadableMap, callback: Promise?) {
1740
+ fun setAudioMixingMode(
1741
+ data: ReadableMap,
1742
+ callback: Promise?,
1743
+ ) {
1524
1744
  val requiredKeys =
1525
1745
  HMSHelper.getUnavailableRequiredKey(data, arrayOf(Pair("audioMixingMode", "String")))
1526
1746
  if (requiredKeys === null) {
@@ -1573,6 +1793,9 @@ class HMSRNSDK(
1573
1793
  "role" -> {
1574
1794
  result.putMap("role", HMSDecoder.getHmsRole(peer.hmsRole))
1575
1795
  }
1796
+ "isHandRaised" -> {
1797
+ result.putBoolean("isHandRaised", peer.isHandRaised)
1798
+ }
1576
1799
  "customerUserID" -> {
1577
1800
  if (peer.customerUserID !== null) {
1578
1801
  result.putString("customerUserID", peer.customerUserID)
@@ -1665,7 +1888,10 @@ class HMSRNSDK(
1665
1888
  return null
1666
1889
  }
1667
1890
 
1668
- fun enableEvent(data: ReadableMap, promise: Promise?) {
1891
+ fun enableEvent(
1892
+ data: ReadableMap,
1893
+ promise: Promise?,
1894
+ ) {
1669
1895
  val requiredKeys =
1670
1896
  HMSHelper.getUnavailableRequiredKey(data, arrayOf(Pair("eventType", "String")))
1671
1897
  if (requiredKeys === null) {
@@ -1682,7 +1908,10 @@ class HMSRNSDK(
1682
1908
  }
1683
1909
  }
1684
1910
 
1685
- fun disableEvent(data: ReadableMap, promise: Promise?) {
1911
+ fun disableEvent(
1912
+ data: ReadableMap,
1913
+ promise: Promise?,
1914
+ ) {
1686
1915
  val requiredKeys =
1687
1916
  HMSHelper.getUnavailableRequiredKey(data, arrayOf(Pair("eventType", "String")))
1688
1917
  if (requiredKeys === null) {
@@ -1699,7 +1928,10 @@ class HMSRNSDK(
1699
1928
  }
1700
1929
  }
1701
1930
 
1702
- fun restrictData(data: ReadableMap, promise: Promise?) {
1931
+ fun restrictData(
1932
+ data: ReadableMap,
1933
+ promise: Promise?,
1934
+ ) {
1703
1935
  val requiredKeys =
1704
1936
  HMSHelper.getUnavailableRequiredKey(data, arrayOf(Pair("roleName", "String")))
1705
1937
  if (requiredKeys === null) {
@@ -1715,7 +1947,10 @@ class HMSRNSDK(
1715
1947
  }
1716
1948
  }
1717
1949
 
1718
- fun getRemoteVideoTrackFromTrackId(data: ReadableMap, promise: Promise) {
1950
+ fun getRemoteVideoTrackFromTrackId(
1951
+ data: ReadableMap,
1952
+ promise: Promise,
1953
+ ) {
1719
1954
  val requiredKeys = HMSHelper.getUnavailableRequiredKey(data, arrayOf(Pair("trackId", "String")))
1720
1955
  if (requiredKeys === null) {
1721
1956
  val trackId = data.getString("trackId")
@@ -1732,7 +1967,10 @@ class HMSRNSDK(
1732
1967
  }
1733
1968
  }
1734
1969
 
1735
- fun getRemoteAudioTrackFromTrackId(data: ReadableMap, promise: Promise) {
1970
+ fun getRemoteAudioTrackFromTrackId(
1971
+ data: ReadableMap,
1972
+ promise: Promise,
1973
+ ) {
1736
1974
  val requiredKeys = HMSHelper.getUnavailableRequiredKey(data, arrayOf(Pair("trackId", "String")))
1737
1975
  if (requiredKeys === null) {
1738
1976
  val trackId = data.getString("trackId")
@@ -1749,7 +1987,10 @@ class HMSRNSDK(
1749
1987
  }
1750
1988
  }
1751
1989
 
1752
- fun getVideoTrackLayer(data: ReadableMap, promise: Promise) {
1990
+ fun getVideoTrackLayer(
1991
+ data: ReadableMap,
1992
+ promise: Promise,
1993
+ ) {
1753
1994
  val requiredKeys = HMSHelper.getUnavailableRequiredKey(data, arrayOf(Pair("trackId", "String")))
1754
1995
  if (requiredKeys === null) {
1755
1996
  val trackId = data.getString("trackId")
@@ -1767,7 +2008,10 @@ class HMSRNSDK(
1767
2008
  }
1768
2009
  }
1769
2010
 
1770
- fun getVideoTrackLayerDefinition(data: ReadableMap, promise: Promise) {
2011
+ fun getVideoTrackLayerDefinition(
2012
+ data: ReadableMap,
2013
+ promise: Promise,
2014
+ ) {
1771
2015
  val requiredKeys = HMSHelper.getUnavailableRequiredKey(data, arrayOf(Pair("trackId", "String")))
1772
2016
  if (requiredKeys === null) {
1773
2017
  val trackId = data.getString("trackId")
@@ -1786,7 +2030,10 @@ class HMSRNSDK(
1786
2030
  }
1787
2031
  }
1788
2032
 
1789
- fun setVideoTrackLayer(data: ReadableMap, promise: Promise?) {
2033
+ fun setVideoTrackLayer(
2034
+ data: ReadableMap,
2035
+ promise: Promise?,
2036
+ ) {
1790
2037
  val requiredKeys = HMSHelper.getUnavailableRequiredKey(data, arrayOf(Pair("trackId", "String"), Pair("layer", "String")))
1791
2038
  if (requiredKeys === null) {
1792
2039
  val trackId = data.getString("trackId")
@@ -1815,33 +2062,42 @@ class HMSRNSDK(
1815
2062
  }
1816
2063
  }
1817
2064
 
1818
- fun captureImageAtMaxSupportedResolution(data: ReadableMap, promise: Promise?) {
2065
+ fun captureImageAtMaxSupportedResolution(
2066
+ data: ReadableMap,
2067
+ promise: Promise?,
2068
+ ) {
1819
2069
  val requiredKeys = HMSHelper.getUnavailableRequiredKey(data, arrayOf(Pair("flash", "Boolean")))
1820
2070
  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
2071
+ val localPeer =
2072
+ hmsSDK?.getLocalPeer().let {
2073
+ if (it == null) {
2074
+ promise?.reject("6004", "An instance of Local Peer could not be found! Please check if a Room is joined.")
2075
+ return
2076
+ } else {
2077
+ it
2078
+ }
1827
2079
  }
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
2080
+ val localVideoTrack =
2081
+ localPeer.videoTrack.let {
2082
+ if (it == null) {
2083
+ promise?.reject(
2084
+ "6004",
2085
+ "Video Track of Local Peer could not be found! Please check if the Local Peer has permission to publish video & video is unmuted currently.",
2086
+ )
2087
+ return
2088
+ } else {
2089
+ it
2090
+ }
1835
2091
  }
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
2092
+ val cameraControl =
2093
+ localVideoTrack.getCameraControl().let {
2094
+ if (it == null) {
2095
+ promise?.reject("6004", "Camera Controls not available!")
2096
+ return
2097
+ } else {
2098
+ it
2099
+ }
1843
2100
  }
1844
- }
1845
2101
 
1846
2102
  val flashSupported = cameraControl.isFlashSupported()
1847
2103
  var flashActionOnSuccess = 0 // 0 - Do nothing on success, 1 - set flash on, 2 - set flash off
@@ -1896,7 +2152,10 @@ class HMSRNSDK(
1896
2152
 
1897
2153
  // Mark: Session Store
1898
2154
 
1899
- fun setSessionMetadataForKey(data: ReadableMap, promise: Promise?) {
2155
+ fun setSessionMetadataForKey(
2156
+ data: ReadableMap,
2157
+ promise: Promise?,
2158
+ ) {
1900
2159
  val requiredKeys = HMSHelper.getUnavailableRequiredKey(data, arrayOf(Pair("key", "String")))
1901
2160
  if (requiredKeys === null) {
1902
2161
  val key = data.getString("key")!!
@@ -1916,6 +2175,7 @@ class HMSRNSDK(
1916
2175
  override fun onError(error: HMSException) {
1917
2176
  promise?.reject(error.code.toString(), error.message)
1918
2177
  }
2178
+
1919
2179
  override fun onSuccess() {
1920
2180
  val result: WritableMap = Arguments.createMap()
1921
2181
  result.putBoolean("success", true)
@@ -1931,7 +2191,10 @@ class HMSRNSDK(
1931
2191
  }
1932
2192
  }
1933
2193
 
1934
- fun getSessionMetadataForKey(data: ReadableMap, promise: Promise?) {
2194
+ fun getSessionMetadataForKey(
2195
+ data: ReadableMap,
2196
+ promise: Promise?,
2197
+ ) {
1935
2198
  val requiredKeys = HMSHelper.getUnavailableRequiredKey(data, arrayOf(Pair("key", "String")))
1936
2199
  if (requiredKeys === null) {
1937
2200
  val key = data.getString("key")!!
@@ -1974,7 +2237,10 @@ class HMSRNSDK(
1974
2237
  }
1975
2238
  }
1976
2239
 
1977
- fun addKeyChangeListener(data: ReadableMap, promise: Promise?) {
2240
+ fun addKeyChangeListener(
2241
+ data: ReadableMap,
2242
+ promise: Promise?,
2243
+ ) {
1978
2244
  val requiredKeys = HMSHelper.getUnavailableRequiredKey(data, arrayOf(Pair("keys", "Array"), Pair("uniqueId", "String")))
1979
2245
  if (requiredKeys === null) {
1980
2246
  val keys = ArrayList(data.getArray("keys")!!.toArrayList().map { it.toString() })
@@ -1987,39 +2253,45 @@ class HMSRNSDK(
1987
2253
  return
1988
2254
  }
1989
2255
 
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) {
2256
+ val keyChangeListener =
2257
+ object : HMSKeyChangeListener {
2258
+ override fun onKeyChanged(
2259
+ key: String,
2260
+ value: JsonElement?,
2261
+ ) {
2262
+ val map = Arguments.createMap()
2263
+ map.putString("id", id)
2264
+ map.putString("key", key)
2265
+
2266
+ value.let { sm ->
2267
+ if (sm == null) {
2003
2268
  map.putString("value", null)
2004
2269
  } else {
2005
- map.putString("value", sm.toString())
2270
+ if (sm.isJsonPrimitive) {
2271
+ map.putString("value", sm.asString)
2272
+ } else if (sm.isJsonNull) {
2273
+ map.putString("value", null)
2274
+ } else {
2275
+ map.putString("value", sm.toString())
2276
+ }
2006
2277
  }
2007
2278
  }
2008
- }
2009
2279
 
2010
- delegate.emitEvent("ON_SESSION_STORE_CHANGED", map)
2280
+ delegate.emitEvent("ON_SESSION_STORE_CHANGED", map)
2281
+ }
2011
2282
  }
2012
- }
2013
2283
 
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)
2284
+ val actionResultListener =
2285
+ object : HMSActionResultListener {
2286
+ override fun onError(error: HMSException) {
2287
+ promise?.reject(error.code.toString(), error.message)
2288
+ }
2289
+
2290
+ override fun onSuccess() {
2291
+ keyChangeObservers[uniqueId] = keyChangeListener
2292
+ promise?.resolve(true)
2293
+ }
2021
2294
  }
2022
- }
2023
2295
 
2024
2296
  it.addKeyChangeListener(
2025
2297
  keys,
@@ -2033,7 +2305,10 @@ class HMSRNSDK(
2033
2305
  }
2034
2306
  }
2035
2307
 
2036
- fun removeKeyChangeListener(data: ReadableMap, promise: Promise?) {
2308
+ fun removeKeyChangeListener(
2309
+ data: ReadableMap,
2310
+ promise: Promise?,
2311
+ ) {
2037
2312
  val requiredKeys = HMSHelper.getUnavailableRequiredKey(data, arrayOf(Pair("uniqueId", "String")))
2038
2313
  if (requiredKeys === null) {
2039
2314
  val uniqueId = data.getString("uniqueId")!!
@@ -2062,7 +2337,10 @@ class HMSRNSDK(
2062
2337
  }
2063
2338
  }
2064
2339
 
2065
- fun getRoomLayout(data: ReadableMap, promise: Promise?) {
2340
+ fun getRoomLayout(
2341
+ data: ReadableMap,
2342
+ promise: Promise?,
2343
+ ) {
2066
2344
  val unavailableKeys = HMSHelper.getUnavailableRequiredKey(data, arrayOf(Pair("authToken", "String")))
2067
2345
 
2068
2346
  if (unavailableKeys != null) {
@@ -2074,9 +2352,10 @@ class HMSRNSDK(
2074
2352
  val authToken = data.getString("authToken")!!
2075
2353
  val endpoint = data.getString("endpoint")
2076
2354
 
2077
- val layoutRequestOptions = endpoint?.let {
2078
- LayoutRequestOptions(endpoint)
2079
- }
2355
+ val layoutRequestOptions =
2356
+ endpoint?.let {
2357
+ LayoutRequestOptions(endpoint)
2358
+ }
2080
2359
 
2081
2360
  hmsSDK?.getRoomLayout(
2082
2361
  authToken,
@@ -2092,4 +2371,125 @@ class HMSRNSDK(
2092
2371
  },
2093
2372
  )
2094
2373
  }
2374
+
2375
+ fun raiseLocalPeerHand(
2376
+ data: ReadableMap,
2377
+ promise: Promise?,
2378
+ ) {
2379
+ hmsSDK?.raiseLocalPeerHand(
2380
+ object : HMSActionResultListener {
2381
+ override fun onError(error: HMSException) {
2382
+ promise?.reject(error.code.toString(), error.message)
2383
+ }
2384
+
2385
+ override fun onSuccess() {
2386
+ promise?.resolve(true)
2387
+ }
2388
+ },
2389
+ )
2390
+ }
2391
+
2392
+ fun lowerLocalPeerHand(
2393
+ data: ReadableMap,
2394
+ promise: Promise?,
2395
+ ) {
2396
+ hmsSDK?.lowerLocalPeerHand(
2397
+ object : HMSActionResultListener {
2398
+ override fun onError(error: HMSException) {
2399
+ promise?.reject(error.code.toString(), error.message)
2400
+ }
2401
+
2402
+ override fun onSuccess() {
2403
+ promise?.resolve(true)
2404
+ }
2405
+ },
2406
+ )
2407
+ }
2408
+
2409
+ fun lowerRemotePeerHand(
2410
+ data: ReadableMap,
2411
+ promise: Promise?,
2412
+ ) {
2413
+ val peerId = data.getString("peerId")
2414
+ peerId?.let { peerID ->
2415
+ hmsSDK?.getRoom()?.let { room ->
2416
+ val peer = HMSHelper.getPeerFromPeerId(peerID, room)
2417
+ peer?.let { peer ->
2418
+ hmsSDK?.lowerRemotePeerHand(
2419
+ forPeer = peer,
2420
+ object : HMSActionResultListener {
2421
+ override fun onError(error: HMSException) {
2422
+ promise?.reject(error.code.toString(), error.message)
2423
+ }
2424
+
2425
+ override fun onSuccess() {
2426
+ promise?.resolve(true)
2427
+ }
2428
+ },
2429
+ )
2430
+ }
2431
+ }
2432
+ }
2433
+ }
2434
+
2435
+ fun getPeerListIterator(data: ReadableMap): WritableMap? {
2436
+ val uniqueId = data.getInt("uniqueId")
2437
+ val options = HMSHelper.getPeerListIteratorOptions(data)
2438
+
2439
+ hmsSDK?.let {
2440
+ val iterator = it.getPeerListIterator(options)
2441
+
2442
+ peerListIterators[uniqueId] = iterator
2443
+ val map = Arguments.createMap()
2444
+ map.putBoolean("success", true)
2445
+ map.putInt("uniqueId", uniqueId)
2446
+ return map
2447
+ }
2448
+ print("Error in getPeerListIterator: HMS SDK is not available")
2449
+ return null
2450
+ }
2451
+
2452
+ fun peerListIteratorHasNext(
2453
+ data: ReadableMap,
2454
+ promise: Promise?,
2455
+ ) {
2456
+ val uniqueId = data.getInt("uniqueId")
2457
+
2458
+ peerListIterators[uniqueId]?.let {
2459
+ promise?.resolve(it.hasNext())
2460
+ return
2461
+ }
2462
+ promise?.reject("101", "PeerListIterator is not available")
2463
+ }
2464
+
2465
+ fun peerListIteratorNext(
2466
+ data: ReadableMap,
2467
+ promise: Promise?,
2468
+ ) {
2469
+ val uniqueId = data.getInt("uniqueId")
2470
+
2471
+ val peerListIterator = peerListIterators[uniqueId]
2472
+
2473
+ if (peerListIterator == null) {
2474
+ promise?.reject("101", "PeerListIterator is not available")
2475
+ return
2476
+ }
2477
+
2478
+ peerListIterator.next(
2479
+ object : PeerListResultListener {
2480
+ override fun onError(error: HMSException) {
2481
+ promise?.reject(error.code.toString(), error.message)
2482
+ }
2483
+
2484
+ override fun onSuccess(result: ArrayList<HMSPeer>) {
2485
+ val array = Arguments.createArray()
2486
+ for (peer in result) {
2487
+ val hmsPeer = HMSDecoder.getHmsPeerSubset(peer, null)
2488
+ array.pushMap(hmsPeer)
2489
+ }
2490
+ promise?.resolve(array)
2491
+ }
2492
+ },
2493
+ )
2494
+ }
2095
2495
  }