@100mslive/react-native-hms 0.8.4 → 0.9.2

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 (201) hide show
  1. package/README.md +247 -26
  2. package/android/.gradle/6.9/fileHashes/fileHashes.bin +0 -0
  3. package/android/.gradle/6.9/fileHashes/fileHashes.lock +0 -0
  4. package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
  5. package/android/.gradle/buildOutputCleanup/outputFiles.bin +0 -0
  6. package/android/.gradle/checksums/checksums.lock +0 -0
  7. package/android/.gradle/checksums/md5-checksums.bin +0 -0
  8. package/android/.gradle/checksums/sha1-checksums.bin +0 -0
  9. package/android/.idea/gradle.xml +13 -0
  10. package/android/.idea/misc.xml +9 -0
  11. package/android/.idea/modules/android.iml +18 -0
  12. package/android/.idea/modules.xml +8 -0
  13. package/android/.idea/sonarlint/issuestore/f/0/f07866736216be0ee2aba49e392191aeae700a35 +0 -0
  14. package/android/.idea/sonarlint/issuestore/index.pb +3 -0
  15. package/android/.idea/vcs.xml +6 -0
  16. package/android/build.gradle +4 -2
  17. package/android/local.properties +8 -0
  18. package/android/src/main/java/com/reactnativehmssdk/HmsDecoder.kt +67 -5
  19. package/android/src/main/java/com/reactnativehmssdk/HmsHelper.kt +67 -64
  20. package/android/src/main/java/com/reactnativehmssdk/HmsModule.kt +97 -6
  21. package/android/src/main/java/com/reactnativehmssdk/HmsSDK.kt +302 -118
  22. package/android/src/main/java/com/reactnativehmssdk/HmsScreenshareActivity.kt +77 -0
  23. package/android/src/main/java/com/reactnativehmssdk/HmsView.kt +28 -3
  24. package/android/src/main/java/com/reactnativehmssdk/HmssdkViewManager.kt +10 -1
  25. package/android/src/main/res/layout/hms_view.xml +19 -0
  26. package/ios/HmsDecoder.swift +250 -123
  27. package/ios/HmsHelper.swift +70 -38
  28. package/ios/HmsManager.m +11 -3
  29. package/ios/HmsManager.swift +123 -66
  30. package/ios/HmsSDK.swift +384 -195
  31. package/ios/HmsView.swift +50 -68
  32. package/ios/VideoCollectionViewCell.swift +4 -4
  33. package/lib/commonjs/classes/HMSBrowserRecordingState.js +6 -0
  34. package/lib/commonjs/classes/HMSBrowserRecordingState.js.map +1 -1
  35. package/lib/commonjs/classes/HMSEncoder.js +180 -3
  36. package/lib/commonjs/classes/HMSEncoder.js.map +1 -1
  37. package/lib/commonjs/classes/HMSHLSConfig.js +23 -0
  38. package/lib/commonjs/classes/HMSHLSConfig.js.map +1 -0
  39. package/lib/commonjs/classes/HMSHLSMeetingURLVariant.js +23 -0
  40. package/lib/commonjs/classes/HMSHLSMeetingURLVariant.js.map +1 -0
  41. package/lib/commonjs/classes/HMSHLSRecordingConfig.js +23 -0
  42. package/lib/commonjs/classes/HMSHLSRecordingConfig.js.map +1 -0
  43. package/lib/commonjs/classes/HMSHLSRecordingState.js +29 -0
  44. package/lib/commonjs/classes/HMSHLSRecordingState.js.map +1 -0
  45. package/lib/commonjs/classes/HMSHLSStreamingState.js +23 -0
  46. package/lib/commonjs/classes/HMSHLSStreamingState.js.map +1 -0
  47. package/lib/commonjs/classes/HMSHLSVariant.js +29 -0
  48. package/lib/commonjs/classes/HMSHLSVariant.js.map +1 -0
  49. package/lib/commonjs/classes/HMSLocalAudioStats.js +26 -0
  50. package/lib/commonjs/classes/HMSLocalAudioStats.js.map +1 -0
  51. package/lib/commonjs/classes/HMSLocalVideoStats.js +32 -0
  52. package/lib/commonjs/classes/HMSLocalVideoStats.js.map +1 -0
  53. package/lib/commonjs/classes/HMSLogger.js +48 -21
  54. package/lib/commonjs/classes/HMSLogger.js.map +1 -1
  55. package/lib/commonjs/classes/HMSMessage.js +4 -1
  56. package/lib/commonjs/classes/HMSMessage.js.map +1 -1
  57. package/lib/commonjs/classes/HMSMessageRecipient.js +26 -0
  58. package/lib/commonjs/classes/HMSMessageRecipient.js.map +1 -0
  59. package/lib/commonjs/classes/HMSMessageRecipientType.js +15 -0
  60. package/lib/commonjs/classes/HMSMessageRecipientType.js.map +1 -0
  61. package/lib/commonjs/classes/HMSPeerUpdate.js +1 -7
  62. package/lib/commonjs/classes/HMSPeerUpdate.js.map +1 -1
  63. package/lib/commonjs/classes/HMSPermissions.js +2 -2
  64. package/lib/commonjs/classes/HMSPermissions.js.map +1 -1
  65. package/lib/commonjs/classes/HMSRTCStats.js +38 -0
  66. package/lib/commonjs/classes/HMSRTCStats.js.map +1 -0
  67. package/lib/commonjs/classes/HMSRTCStatsReport.js +26 -0
  68. package/lib/commonjs/classes/HMSRTCStatsReport.js.map +1 -0
  69. package/lib/commonjs/classes/HMSRemoteAudioStats.js +32 -0
  70. package/lib/commonjs/classes/HMSRemoteAudioStats.js.map +1 -0
  71. package/lib/commonjs/classes/HMSRemoteVideoStats.js +38 -0
  72. package/lib/commonjs/classes/HMSRemoteVideoStats.js.map +1 -0
  73. package/lib/commonjs/classes/HMSRoom.js +9 -0
  74. package/lib/commonjs/classes/HMSRoom.js.map +1 -1
  75. package/lib/commonjs/classes/HMSRoomUpdate.js +7 -0
  76. package/lib/commonjs/classes/HMSRoomUpdate.js.map +1 -1
  77. package/lib/commonjs/classes/HMSRtmpStreamingState.js +6 -0
  78. package/lib/commonjs/classes/HMSRtmpStreamingState.js.map +1 -1
  79. package/lib/commonjs/classes/HMSSDK.js +488 -114
  80. package/lib/commonjs/classes/HMSSDK.js.map +1 -1
  81. package/lib/commonjs/classes/HMSServerRecordingState.js +3 -0
  82. package/lib/commonjs/classes/HMSServerRecordingState.js.map +1 -1
  83. package/lib/commonjs/classes/HMSUpdateListenerActions.js +5 -0
  84. package/lib/commonjs/classes/HMSUpdateListenerActions.js.map +1 -1
  85. package/lib/commonjs/classes/HmsView.js +26 -4
  86. package/lib/commonjs/classes/HmsView.js.map +1 -1
  87. package/lib/commonjs/index.js +196 -0
  88. package/lib/commonjs/index.js.map +1 -1
  89. package/lib/module/classes/HMSBrowserRecordingState.js +6 -0
  90. package/lib/module/classes/HMSBrowserRecordingState.js.map +1 -1
  91. package/lib/module/classes/HMSEncoder.js +172 -3
  92. package/lib/module/classes/HMSEncoder.js.map +1 -1
  93. package/lib/module/classes/HMSHLSConfig.js +14 -0
  94. package/lib/module/classes/HMSHLSConfig.js.map +1 -0
  95. package/lib/module/classes/HMSHLSMeetingURLVariant.js +14 -0
  96. package/lib/module/classes/HMSHLSMeetingURLVariant.js.map +1 -0
  97. package/lib/module/classes/HMSHLSRecordingConfig.js +14 -0
  98. package/lib/module/classes/HMSHLSRecordingConfig.js.map +1 -0
  99. package/lib/module/classes/HMSHLSRecordingState.js +20 -0
  100. package/lib/module/classes/HMSHLSRecordingState.js.map +1 -0
  101. package/lib/module/classes/HMSHLSStreamingState.js +14 -0
  102. package/lib/module/classes/HMSHLSStreamingState.js.map +1 -0
  103. package/lib/module/classes/HMSHLSVariant.js +20 -0
  104. package/lib/module/classes/HMSHLSVariant.js.map +1 -0
  105. package/lib/module/classes/HMSLocalAudioStats.js +17 -0
  106. package/lib/module/classes/HMSLocalAudioStats.js.map +1 -0
  107. package/lib/module/classes/HMSLocalVideoStats.js +23 -0
  108. package/lib/module/classes/HMSLocalVideoStats.js.map +1 -0
  109. package/lib/module/classes/HMSLogger.js +48 -21
  110. package/lib/module/classes/HMSLogger.js.map +1 -1
  111. package/lib/module/classes/HMSMessage.js +4 -1
  112. package/lib/module/classes/HMSMessage.js.map +1 -1
  113. package/lib/module/classes/HMSMessageRecipient.js +17 -0
  114. package/lib/module/classes/HMSMessageRecipient.js.map +1 -0
  115. package/lib/module/classes/HMSMessageRecipientType.js +8 -0
  116. package/lib/module/classes/HMSMessageRecipientType.js.map +1 -0
  117. package/lib/module/classes/HMSPeerUpdate.js +1 -7
  118. package/lib/module/classes/HMSPeerUpdate.js.map +1 -1
  119. package/lib/module/classes/HMSPermissions.js +2 -2
  120. package/lib/module/classes/HMSPermissions.js.map +1 -1
  121. package/lib/module/classes/HMSRTCStats.js +29 -0
  122. package/lib/module/classes/HMSRTCStats.js.map +1 -0
  123. package/lib/module/classes/HMSRTCStatsReport.js +17 -0
  124. package/lib/module/classes/HMSRTCStatsReport.js.map +1 -0
  125. package/lib/module/classes/HMSRemoteAudioStats.js +23 -0
  126. package/lib/module/classes/HMSRemoteAudioStats.js.map +1 -0
  127. package/lib/module/classes/HMSRemoteVideoStats.js +29 -0
  128. package/lib/module/classes/HMSRemoteVideoStats.js.map +1 -0
  129. package/lib/module/classes/HMSRoom.js +9 -0
  130. package/lib/module/classes/HMSRoom.js.map +1 -1
  131. package/lib/module/classes/HMSRoomUpdate.js +7 -0
  132. package/lib/module/classes/HMSRoomUpdate.js.map +1 -1
  133. package/lib/module/classes/HMSRtmpStreamingState.js +6 -0
  134. package/lib/module/classes/HMSRtmpStreamingState.js.map +1 -1
  135. package/lib/module/classes/HMSSDK.js +476 -115
  136. package/lib/module/classes/HMSSDK.js.map +1 -1
  137. package/lib/module/classes/HMSServerRecordingState.js +3 -0
  138. package/lib/module/classes/HMSServerRecordingState.js.map +1 -1
  139. package/lib/module/classes/HMSUpdateListenerActions.js +5 -0
  140. package/lib/module/classes/HMSUpdateListenerActions.js.map +1 -1
  141. package/lib/module/classes/HmsView.js +23 -4
  142. package/lib/module/classes/HmsView.js.map +1 -1
  143. package/lib/module/index.js +14 -0
  144. package/lib/module/index.js.map +1 -1
  145. package/lib/typescript/classes/HMSBrowserRecordingState.d.ts +4 -0
  146. package/lib/typescript/classes/HMSEncoder.d.ts +23 -0
  147. package/lib/typescript/classes/HMSHLSConfig.d.ts +10 -0
  148. package/lib/typescript/classes/HMSHLSMeetingURLVariant.d.ts +8 -0
  149. package/lib/typescript/classes/HMSHLSRecordingConfig.d.ts +8 -0
  150. package/lib/typescript/classes/HMSHLSRecordingState.d.ts +12 -0
  151. package/lib/typescript/classes/HMSHLSStreamingState.d.ts +9 -0
  152. package/lib/typescript/classes/HMSHLSVariant.d.ts +12 -0
  153. package/lib/typescript/classes/HMSLocalAudioStats.d.ts +10 -0
  154. package/lib/typescript/classes/HMSLocalVideoStats.d.ts +15 -0
  155. package/lib/typescript/classes/HMSLogger.d.ts +2 -0
  156. package/lib/typescript/classes/HMSMessage.d.ts +8 -4
  157. package/lib/typescript/classes/HMSMessageRecipient.d.ts +13 -0
  158. package/lib/typescript/classes/HMSMessageRecipientType.d.ts +5 -0
  159. package/lib/typescript/classes/HMSPeerUpdate.d.ts +2 -8
  160. package/lib/typescript/classes/HMSPermissions.d.ts +2 -2
  161. package/lib/typescript/classes/HMSRTCStats.d.ts +18 -0
  162. package/lib/typescript/classes/HMSRTCStatsReport.d.ts +11 -0
  163. package/lib/typescript/classes/HMSRemoteAudioStats.d.ts +14 -0
  164. package/lib/typescript/classes/HMSRemoteVideoStats.d.ts +19 -0
  165. package/lib/typescript/classes/HMSRoom.d.ts +8 -0
  166. package/lib/typescript/classes/HMSRoomUpdate.d.ts +8 -1
  167. package/lib/typescript/classes/HMSRtmpStreamingState.d.ts +4 -0
  168. package/lib/typescript/classes/HMSSDK.d.ts +325 -14
  169. package/lib/typescript/classes/HMSServerRecordingState.d.ts +2 -0
  170. package/lib/typescript/classes/HMSUpdateListenerActions.d.ts +6 -1
  171. package/lib/typescript/index.d.ts +14 -0
  172. package/package.json +1 -2
  173. package/react-native-hms.podspec +1 -1
  174. package/src/classes/HMSBrowserRecordingState.ts +10 -1
  175. package/src/classes/HMSEncoder.ts +193 -3
  176. package/src/classes/HMSHLSConfig.ts +15 -0
  177. package/src/classes/HMSHLSMeetingURLVariant.ts +9 -0
  178. package/src/classes/HMSHLSRecordingConfig.ts +9 -0
  179. package/src/classes/HMSHLSRecordingState.ts +18 -0
  180. package/src/classes/HMSHLSStreamingState.ts +11 -0
  181. package/src/classes/HMSHLSVariant.ts +18 -0
  182. package/src/classes/HMSLocalAudioStats.ts +15 -0
  183. package/src/classes/HMSLocalVideoStats.ts +23 -0
  184. package/src/classes/HMSLogger.ts +17 -3
  185. package/src/classes/HMSMessage.ts +11 -5
  186. package/src/classes/HMSMessageRecipient.ts +19 -0
  187. package/src/classes/HMSMessageRecipientType.ts +5 -0
  188. package/src/classes/HMSPeerUpdate.ts +1 -7
  189. package/src/classes/HMSPermissions.ts +3 -3
  190. package/src/classes/HMSRTCStats.ts +27 -0
  191. package/src/classes/HMSRTCStatsReport.ts +17 -0
  192. package/src/classes/HMSRemoteAudioStats.ts +21 -0
  193. package/src/classes/HMSRemoteVideoStats.ts +29 -0
  194. package/src/classes/HMSRoom.ts +11 -0
  195. package/src/classes/HMSRoomUpdate.ts +7 -0
  196. package/src/classes/HMSRtmpStreamingState.ts +10 -1
  197. package/src/classes/HMSSDK.tsx +618 -30
  198. package/src/classes/HMSServerRecordingState.ts +7 -1
  199. package/src/classes/HMSUpdateListenerActions.ts +5 -0
  200. package/src/classes/HmsView.tsx +32 -4
  201. package/src/index.ts +14 -0
@@ -1,18 +1,23 @@
1
1
  package com.reactnativehmssdk
2
2
 
3
+ import android.content.Intent
4
+ import android.content.Intent.FLAG_ACTIVITY_NEW_TASK
3
5
  import com.facebook.react.bridge.*
6
+ import com.facebook.react.bridge.UiThreadUtil.runOnUiThread
4
7
  import java.util.*
5
8
  import kotlinx.coroutines.launch
6
9
  import live.hms.video.error.HMSException
7
- import live.hms.video.media.tracks.*
10
+ import live.hms.video.media.tracks.HMSRemoteAudioTrack
11
+ import live.hms.video.media.tracks.HMSTrack
12
+ import live.hms.video.media.tracks.HMSTrackType
8
13
  import live.hms.video.sdk.*
9
14
  import live.hms.video.sdk.models.*
10
- import live.hms.video.sdk.models.HMSConfig
11
15
  import live.hms.video.sdk.models.enums.HMSPeerUpdate
12
16
  import live.hms.video.sdk.models.enums.HMSRoomUpdate
13
17
  import live.hms.video.sdk.models.enums.HMSTrackUpdate
14
18
  import live.hms.video.sdk.models.trackchangerequest.HMSChangeTrackStateRequest
15
19
  import live.hms.video.utils.HMSCoroutineScope
20
+ import live.hms.video.utils.HmsUtilities
16
21
 
17
22
  class HmsSDK(
18
23
  data: ReadableMap?,
@@ -21,9 +26,11 @@ class HmsSDK(
21
26
  reactApplicationContext: ReactApplicationContext
22
27
  ) {
23
28
  var hmsSDK: HMSSDK? = null
29
+ var screenshareCallback: Promise? = null
30
+ var delegate: HmsModule = HmsDelegate
24
31
  private var recentRoleChangeRequest: HMSRoleChangeRequest? = null
32
+ private var context: ReactApplicationContext = reactApplicationContext
25
33
  private var previewInProgress: Boolean = false
26
- private var delegate: HmsModule = HmsDelegate
27
34
  private var id: String = sdkId
28
35
  private var self = this
29
36
 
@@ -38,14 +45,7 @@ class HmsSDK(
38
45
 
39
46
  private fun emitCustomError(message: String) {
40
47
  val data: WritableMap = Arguments.createMap()
41
- val hmsError =
42
- HMSException(
43
- 102,
44
- message,
45
- message,
46
- message,
47
- message
48
- )
48
+ val hmsError = HMSException(102, message, message, message, message)
49
49
  data.putString("event", "ON_ERROR")
50
50
  data.putString("id", id)
51
51
  data.putMap("error", HmsDecoder.getError(hmsError))
@@ -86,7 +86,7 @@ class HmsSDK(
86
86
  }
87
87
 
88
88
  fun preview(credentials: ReadableMap) {
89
- if(previewInProgress){
89
+ if (previewInProgress) {
90
90
  self.emitCustomError("PREVIEW_ALREADY_IN_PROGRESS")
91
91
  return
92
92
  }
@@ -142,6 +142,50 @@ class HmsSDK(
142
142
  previewInProgress = false
143
143
  }
144
144
 
145
+ override fun onPeerUpdate(type: HMSPeerUpdate, peer: HMSPeer) {
146
+ if (type === HMSPeerUpdate.AUDIO_TOGGLED ||
147
+ type === HMSPeerUpdate.VIDEO_TOGGLED ||
148
+ type === HMSPeerUpdate.BECAME_DOMINANT_SPEAKER ||
149
+ type === HMSPeerUpdate.NO_DOMINANT_SPEAKER ||
150
+ type === HMSPeerUpdate.RESIGNED_DOMINANT_SPEAKER ||
151
+ type === HMSPeerUpdate.STARTED_SPEAKING ||
152
+ type === HMSPeerUpdate.STOPPED_SPEAKING
153
+ ) {
154
+ return
155
+ }
156
+ val updateType = type.name
157
+ val roomData = HmsDecoder.getHmsRoom(hmsSDK?.getRoom())
158
+ val localPeerData = HmsDecoder.getHmsLocalPeer(hmsSDK?.getLocalPeer())
159
+ val remotePeerData = HmsDecoder.getHmsRemotePeers(hmsSDK?.getRemotePeers())
160
+ val hmsPeer = HmsDecoder.getHmsPeer(peer)
161
+
162
+ val data: WritableMap = Arguments.createMap()
163
+
164
+ data.putMap("peer", hmsPeer)
165
+ data.putMap("room", roomData)
166
+ data.putString("type", updateType)
167
+ data.putMap("localPeer", localPeerData)
168
+ data.putArray("remotePeers", remotePeerData)
169
+ data.putString("id", id)
170
+ delegate.emitEvent("ON_PEER_UPDATE", data)
171
+ }
172
+
173
+ override fun onRoomUpdate(type: HMSRoomUpdate, hmsRoom: HMSRoom) {
174
+ val updateType = type.name
175
+ val roomData = HmsDecoder.getHmsRoom(hmsRoom)
176
+ val localPeerData = HmsDecoder.getHmsLocalPeer(hmsSDK?.getLocalPeer())
177
+ val remotePeerData = HmsDecoder.getHmsRemotePeers(hmsSDK?.getRemotePeers())
178
+
179
+ val data: WritableMap = Arguments.createMap()
180
+
181
+ data.putString("type", updateType)
182
+ data.putMap("room", roomData)
183
+ data.putMap("localPeer", localPeerData)
184
+ data.putArray("remotePeers", remotePeerData)
185
+ data.putString("id", id)
186
+ delegate.emitEvent("ON_ROOM_UPDATE", data)
187
+ }
188
+
145
189
  override fun onPreview(room: HMSRoom, localTracks: Array<HMSTrack>) {
146
190
  val previewTracks = HmsDecoder.getPreviewTracks(localTracks)
147
191
  val hmsRoom = HmsDecoder.getHmsRoom(room)
@@ -163,7 +207,7 @@ class HmsSDK(
163
207
  }
164
208
 
165
209
  fun join(credentials: ReadableMap) {
166
- if(previewInProgress){
210
+ if (previewInProgress) {
167
211
  self.emitCustomError("PREVIEW_IS_IN_PROGRESS")
168
212
  return
169
213
  }
@@ -262,6 +306,16 @@ class HmsSDK(
262
306
  }
263
307
 
264
308
  override fun onPeerUpdate(type: HMSPeerUpdate, peer: HMSPeer) {
309
+ if (type === HMSPeerUpdate.AUDIO_TOGGLED ||
310
+ type === HMSPeerUpdate.VIDEO_TOGGLED ||
311
+ type === HMSPeerUpdate.BECAME_DOMINANT_SPEAKER ||
312
+ type === HMSPeerUpdate.NO_DOMINANT_SPEAKER ||
313
+ type === HMSPeerUpdate.RESIGNED_DOMINANT_SPEAKER ||
314
+ type === HMSPeerUpdate.STARTED_SPEAKING ||
315
+ type === HMSPeerUpdate.STOPPED_SPEAKING
316
+ ) {
317
+ return
318
+ }
265
319
  val updateType = type.name
266
320
  val roomData = HmsDecoder.getHmsRoom(hmsSDK?.getRoom())
267
321
  val localPeerData = HmsDecoder.getHmsLocalPeer(hmsSDK?.getLocalPeer())
@@ -318,12 +372,12 @@ class HmsSDK(
318
372
  override fun onMessageReceived(message: HMSMessage) {
319
373
  val data: WritableMap = Arguments.createMap()
320
374
 
321
- data.putString("sender", message.sender.name)
375
+ data.putMap("sender", HmsDecoder.getHmsPeer(message.sender))
322
376
  data.putString("message", message.message)
323
377
  data.putString("type", message.type)
324
378
  data.putString("time", message.serverReceiveTime.toString())
325
379
  data.putString("id", id)
326
- data.putString("event", "ON_MESSAGE")
380
+ data.putMap("recipient", HmsDecoder.getHmsMessageRecipient(message.recipient))
327
381
 
328
382
  delegate.emitEvent("ON_MESSAGE", data)
329
383
  }
@@ -383,19 +437,6 @@ class HmsSDK(
383
437
  fun setLocalMute(data: ReadableMap) {
384
438
  val isMute = data.getBoolean("isMute")
385
439
  hmsSDK?.getLocalPeer()?.audioTrack?.setMute(isMute)
386
- val type = if (isMute) "TRACK_MUTED" else "TRACK_UNMUTED"
387
- val localPeerData = HmsDecoder.getHmsLocalPeer(hmsSDK?.getLocalPeer())
388
- val remotePeerData = HmsDecoder.getHmsRemotePeers(hmsSDK?.getRemotePeers())
389
- val roomData = HmsDecoder.getHmsRoom(hmsSDK?.getRoom())
390
-
391
- val map: WritableMap = Arguments.createMap()
392
-
393
- map.putMap("room", roomData)
394
- map.putString("type", type)
395
- map.putMap("localPeer", localPeerData)
396
- map.putArray("remotePeers", remotePeerData)
397
- map.putString("id", id)
398
- delegate.emitEvent("ON_TRACK_UPDATE", map)
399
440
  }
400
441
 
401
442
  fun setLocalVideoMute(data: ReadableMap) {
@@ -413,6 +454,7 @@ class HmsSDK(
413
454
  hmsSDK?.leave(
414
455
  object : HMSActionResultListener {
415
456
  override fun onSuccess() {
457
+ screenshareCallback = null
416
458
  callback?.resolve(emitHMSSuccess())
417
459
  }
418
460
 
@@ -426,15 +468,14 @@ class HmsSDK(
426
468
 
427
469
  fun sendBroadcastMessage(data: ReadableMap, callback: Promise?) {
428
470
  val requiredKeys =
429
- HmsHelper.areAllRequiredKeysAvailable(data, arrayOf(Pair("message", "String")))
471
+ HmsHelper.areAllRequiredKeysAvailable(
472
+ data,
473
+ arrayOf(Pair("message", "String"), Pair("type", "String"))
474
+ )
430
475
  if (requiredKeys) {
431
- val type =
432
- if (HmsHelper.areAllRequiredKeysAvailable(data, arrayOf(Pair("type", "String"))))
433
- data.getString("type")
434
- else "chat"
435
476
  hmsSDK?.sendBroadcastMessage(
436
477
  data.getString("message") as String,
437
- type as String,
478
+ data.getString("type") as String,
438
479
  object : HMSMessageResultListener {
439
480
  override fun onError(error: HMSException) {
440
481
  self.emitHMSError(error)
@@ -455,34 +496,27 @@ class HmsSDK(
455
496
  val requiredKeys =
456
497
  HmsHelper.areAllRequiredKeysAvailable(
457
498
  data,
458
- arrayOf(Pair("message", "String"), Pair("roles", "Array"))
499
+ arrayOf(Pair("message", "String"), Pair("roles", "Array"), Pair("type", "String"))
459
500
  )
460
501
  if (requiredKeys) {
461
- val type =
462
- if (HmsHelper.areAllRequiredKeysAvailable(data, arrayOf(Pair("type", "String"))))
463
- data.getString("type")
464
- else "chat"
465
- val message = data.getString("message")
466
502
  val targetedRoles = data.getArray("roles")?.toArrayList() as? ArrayList<String>
467
503
  val roles = hmsSDK?.getRoles()
468
504
  val encodedTargetedRoles = HmsHelper.getRolesFromRoleNames(targetedRoles, roles)
469
505
 
470
- if (message != null) {
471
- hmsSDK?.sendGroupMessage(
472
- message,
473
- type as String,
474
- encodedTargetedRoles,
475
- object : HMSMessageResultListener {
476
- override fun onError(error: HMSException) {
477
- self.emitHMSError(error)
478
- callback?.reject(error.code.toString(), error.message)
479
- }
480
- override fun onSuccess(hmsMessage: HMSMessage) {
481
- callback?.resolve(emitHMSSuccess(hmsMessage))
482
- }
506
+ hmsSDK?.sendGroupMessage(
507
+ data.getString("message") as String,
508
+ data.getString("type") as String,
509
+ encodedTargetedRoles,
510
+ object : HMSMessageResultListener {
511
+ override fun onError(error: HMSException) {
512
+ self.emitHMSError(error)
513
+ callback?.reject(error.code.toString(), error.message)
483
514
  }
484
- )
485
- }
515
+ override fun onSuccess(hmsMessage: HMSMessage) {
516
+ callback?.resolve(emitHMSSuccess(hmsMessage))
517
+ }
518
+ }
519
+ )
486
520
  } else {
487
521
  self.emitRequiredKeysError()
488
522
  callback?.reject("101", "REQUIRED_KEYS_NOT_FOUND")
@@ -493,21 +527,15 @@ class HmsSDK(
493
527
  val requiredKeys =
494
528
  HmsHelper.areAllRequiredKeysAvailable(
495
529
  data,
496
- arrayOf(Pair("message", "String"), Pair("peerId", "String"))
530
+ arrayOf(Pair("message", "String"), Pair("peerId", "String"), Pair("type", "String"))
497
531
  )
498
532
  if (requiredKeys) {
499
- val type =
500
- if (HmsHelper.areAllRequiredKeysAvailable(data, arrayOf(Pair("type", "String"))))
501
- data.getString("type")
502
- else "chat"
503
- val message = data.getString("message")
504
533
  val peerId = data.getString("peerId")
505
- val peers = hmsSDK?.getPeers()
506
- val peer = HmsHelper.getPeerFromPeerId(peerId, peers)
507
- if (message != null && peer != null) {
534
+ val peer = HmsHelper.getPeerFromPeerId(peerId, hmsSDK?.getRoom())
535
+ if (peer != null) {
508
536
  hmsSDK?.sendDirectMessage(
509
- message,
510
- type as String,
537
+ data.getString("message") as String,
538
+ data.getString("type") as String,
511
539
  peer,
512
540
  object : HMSMessageResultListener {
513
541
  override fun onError(error: HMSException) {
@@ -519,6 +547,9 @@ class HmsSDK(
519
547
  }
520
548
  }
521
549
  )
550
+ } else {
551
+ self.emitCustomError("PEER_NOT_FOUND")
552
+ callback?.reject("101", "PEER_NOT_FOUND")
522
553
  }
523
554
  } else {
524
555
  self.emitRequiredKeysError()
@@ -538,7 +569,7 @@ class HmsSDK(
538
569
  val force = data.getBoolean("force")
539
570
 
540
571
  if (peerId !== null && role !== null) {
541
- val hmsPeer = HmsHelper.getPeerFromPeerId(peerId, hmsSDK?.getPeers())
572
+ val hmsPeer = HmsHelper.getPeerFromPeerId(peerId, hmsSDK?.getRoom())
542
573
  val hmsRole = HmsHelper.getRoleFromRoleName(role, hmsSDK?.getRoles())
543
574
 
544
575
  if (hmsRole != null && hmsPeer != null) {
@@ -573,8 +604,7 @@ class HmsSDK(
573
604
  if (requiredKeys) {
574
605
  val trackId = data.getString("trackId")
575
606
  val mute = data.getBoolean("mute")
576
- val remotePeers = hmsSDK?.getRemotePeers()
577
- val track = HmsHelper.getTrackFromTrackId(trackId, remotePeers)
607
+ val track = HmsHelper.getTrackFromTrackId(trackId, hmsSDK?.getRoom())
578
608
  if (track != null) {
579
609
  hmsSDK?.changeTrackState(
580
610
  track,
@@ -596,24 +626,35 @@ class HmsSDK(
596
626
  }
597
627
  }
598
628
 
599
- fun changeTrackStateRoles(data: ReadableMap, callback: Promise?) {
629
+ fun changeTrackStateForRoles(data: ReadableMap, callback: Promise?) {
600
630
  val requiredKeys =
601
631
  HmsHelper.areAllRequiredKeysAvailable(
602
632
  data,
603
633
  arrayOf(
604
- Pair("source", "String"),
605
634
  Pair("mute", "Boolean"),
606
- Pair("type", "String"),
607
- Pair("roles", "Array")
608
635
  )
609
636
  )
610
637
  if (requiredKeys) {
611
638
  val mute: Boolean = data.getBoolean("mute")
612
639
  val type =
613
- if (data.getString("type") == HMSTrackType.AUDIO.toString()) HMSTrackType.AUDIO
614
- else HMSTrackType.VIDEO
615
- val source = data.getString("source")
616
- val targetedRoles = data.getArray("roles")?.toArrayList() as? ArrayList<String>
640
+ if (HmsHelper.areAllRequiredKeysAvailable(data, arrayOf(Pair("type", "String")))) {
641
+ if (data.getString("type") == HMSTrackType.AUDIO.toString()) HMSTrackType.AUDIO
642
+ else HMSTrackType.VIDEO
643
+ } else {
644
+ null
645
+ }
646
+ val source =
647
+ if (HmsHelper.areAllRequiredKeysAvailable(data, arrayOf(Pair("source", "String")))) {
648
+ data.getString("source")
649
+ } else {
650
+ null
651
+ }
652
+ val targetedRoles =
653
+ if (HmsHelper.areAllRequiredKeysAvailable(data, arrayOf(Pair("roles", "Array")))) {
654
+ data.getArray("roles")?.toArrayList() as? ArrayList<String>
655
+ } else {
656
+ null
657
+ }
617
658
  val roles = hmsSDK?.getRoles()
618
659
  val encodedTargetedRoles = HmsHelper.getRolesFromRoleNames(targetedRoles, roles)
619
660
  hmsSDK?.changeTrackState(
@@ -642,11 +683,9 @@ class HmsSDK(
642
683
  HmsHelper.areAllRequiredKeysAvailable(data, arrayOf(Pair("trackId", "String")))
643
684
  if (requiredKeys) {
644
685
  val trackId = data.getString("trackId")
645
- val remotePeers = hmsSDK?.getRemotePeers()
646
- val localPeer = hmsSDK?.getLocalPeer()
647
- val localTrack = HmsHelper.getLocalTrackFromTrackId(trackId, localPeer)
686
+ val localTrack = HmsHelper.getTrackFromTrackId(trackId, hmsSDK?.getRoom())
648
687
  if (localTrack == null) {
649
- val track = HmsHelper.getTrackFromTrackId(trackId, remotePeers)
688
+ val track = HmsHelper.getTrackFromTrackId(trackId, hmsSDK?.getRoom())
650
689
  if (track != null) {
651
690
  val mute = track.isMute
652
691
  callback?.resolve(mute)
@@ -664,23 +703,18 @@ class HmsSDK(
664
703
 
665
704
  fun removePeer(data: ReadableMap, callback: Promise?) {
666
705
  val requiredKeys =
667
- HmsHelper.areAllRequiredKeysAvailable(data, arrayOf(Pair("peerId", "String")))
706
+ HmsHelper.areAllRequiredKeysAvailable(
707
+ data,
708
+ arrayOf(Pair("peerId", "String"), Pair("reason", "String"))
709
+ )
668
710
  if (requiredKeys) {
669
711
  val peerId = data.getString("peerId")
670
- var reason = data.getString("reason")
671
-
672
- if (reason == null) {
673
- reason = ""
674
- }
675
-
676
- val peers = hmsSDK?.getRemotePeers()
677
-
678
- val peer = HmsHelper.getRemotePeerFromPeerId(peerId, peers)
712
+ val peer = HmsHelper.getRemotePeerFromPeerId(peerId, hmsSDK?.getRoom())
679
713
 
680
714
  if (peer != null) {
681
715
  hmsSDK?.removePeerRequest(
682
716
  peer,
683
- reason,
717
+ data.getString("reason") as String,
684
718
  object : HMSActionResultListener {
685
719
  override fun onSuccess() {
686
720
  callback?.resolve(emitHMSSuccess())
@@ -692,6 +726,7 @@ class HmsSDK(
692
726
  }
693
727
  )
694
728
  } else {
729
+ self.emitCustomError("PEER_NOT_FOUND")
695
730
  callback?.reject("101", "PEER_NOT_FOUND")
696
731
  }
697
732
  } else {
@@ -701,25 +736,29 @@ class HmsSDK(
701
736
  }
702
737
 
703
738
  fun endRoom(data: ReadableMap, callback: Promise?) {
704
- val lock = data.getBoolean("lock")
705
- var reason = data.getString("reason")
706
- if (reason == null) {
707
- reason = ""
708
- }
709
-
710
- hmsSDK?.endRoom(
711
- reason,
712
- lock,
713
- object : HMSActionResultListener {
714
- override fun onSuccess() {
715
- callback?.resolve(emitHMSSuccess())
716
- }
717
- override fun onError(error: HMSException) {
718
- self.emitHMSError(error)
719
- callback?.reject(error.code.toString(), error.message)
739
+ val requiredKeys =
740
+ HmsHelper.areAllRequiredKeysAvailable(
741
+ data,
742
+ arrayOf(Pair("lock", "Boolean"), Pair("reason", "String"))
743
+ )
744
+ if (requiredKeys) {
745
+ hmsSDK?.endRoom(
746
+ data.getString("reason") as String,
747
+ data.getBoolean("lock"),
748
+ object : HMSActionResultListener {
749
+ override fun onSuccess() {
750
+ callback?.resolve(emitHMSSuccess())
751
+ }
752
+ override fun onError(error: HMSException) {
753
+ self.emitHMSError(error)
754
+ callback?.reject(error.code.toString(), error.message)
755
+ }
720
756
  }
721
- }
722
- )
757
+ )
758
+ } else {
759
+ self.emitRequiredKeysError()
760
+ callback?.reject("101", "REQUIRED_KEYS_NOT_FOUND")
761
+ }
723
762
  }
724
763
 
725
764
  fun acceptRoleChange(callback: Promise?) {
@@ -742,7 +781,29 @@ class HmsSDK(
742
781
  }
743
782
  }
744
783
 
745
- fun muteAllPeersAudio(data: ReadableMap) {
784
+ fun remoteMuteAllAudio() {
785
+ val allAudioTracks = hmsSDK?.getRoom()?.let { HmsUtilities.getAllAudioTracks(it) }
786
+ if (allAudioTracks != null) {
787
+ var customError: HMSException? = null
788
+ for (audioTrack in allAudioTracks) {
789
+ hmsSDK?.changeTrackState(
790
+ audioTrack,
791
+ true,
792
+ object : HMSActionResultListener {
793
+ override fun onSuccess() {}
794
+ override fun onError(error: HMSException) {
795
+ customError = error
796
+ }
797
+ }
798
+ )
799
+ }
800
+ if (customError != null) {
801
+ self.emitHMSError(customError!!)
802
+ }
803
+ }
804
+ }
805
+
806
+ fun setPlaybackForAllAudio(data: ReadableMap) {
746
807
  val requiredKeys = HmsHelper.areAllRequiredKeysAvailable(data, arrayOf(Pair("mute", "Boolean")))
747
808
  if (requiredKeys) {
748
809
  val mute = data.getBoolean("mute")
@@ -750,7 +811,7 @@ class HmsSDK(
750
811
  if (peers != null) {
751
812
  for (remotePeer in peers) {
752
813
  val peerId = remotePeer.peerID
753
- val peer = HmsHelper.getRemotePeerFromPeerId(peerId, peers)
814
+ val peer = HmsHelper.getRemotePeerFromPeerId(peerId, hmsSDK?.getRoom())
754
815
  peer?.audioTrack?.isPlaybackAllowed = !mute
755
816
  }
756
817
  val localPeerData = HmsDecoder.getHmsLocalPeer(hmsSDK?.getLocalPeer())
@@ -777,9 +838,8 @@ class HmsSDK(
777
838
  if (requiredKeys) {
778
839
  val trackId = data.getString("trackId")
779
840
  val playbackAllowed = data.getBoolean("playbackAllowed")
780
- val remotePeers = hmsSDK?.getRemotePeers()
781
- val remoteAudioTrack = HmsHelper.getRemoteAudioTrackFromTrackId(trackId, remotePeers)
782
- val remoteVideoTrack = HmsHelper.getRemoteVideoTrackFromTrackId(trackId, remotePeers)
841
+ val remoteAudioTrack = HmsHelper.getRemoteAudioTrackFromTrackId(trackId, hmsSDK?.getRoom())
842
+ val remoteVideoTrack = HmsHelper.getRemoteVideoTrackFromTrackId(trackId, hmsSDK?.getRoom())
783
843
  if (remoteAudioTrack != null) {
784
844
  remoteAudioTrack.isPlaybackAllowed = playbackAllowed
785
845
  } else if (remoteVideoTrack != null) {
@@ -795,9 +855,8 @@ class HmsSDK(
795
855
  HmsHelper.areAllRequiredKeysAvailable(data, arrayOf(Pair("trackId", "String")))
796
856
  if (requiredKeys) {
797
857
  val trackId = data.getString("trackId")
798
- val remotePeers = hmsSDK?.getRemotePeers()
799
- val remoteAudioTrack = HmsHelper.getRemoteAudioTrackFromTrackId(trackId, remotePeers)
800
- val remoteVideoTrack = HmsHelper.getRemoteVideoTrackFromTrackId(trackId, remotePeers)
858
+ val remoteAudioTrack = HmsHelper.getRemoteAudioTrackFromTrackId(trackId, hmsSDK?.getRoom())
859
+ val remoteVideoTrack = HmsHelper.getRemoteVideoTrackFromTrackId(trackId, hmsSDK?.getRoom())
801
860
  when {
802
861
  remoteAudioTrack != null -> {
803
862
  val isPlaybackAllowed = remoteAudioTrack.isPlaybackAllowed
@@ -854,6 +913,9 @@ class HmsSDK(
854
913
  }
855
914
  }
856
915
  }
916
+ this.emitCustomError("TRACKID_NOT_MATCHED")
917
+ } else {
918
+ this.emitCustomError("REMOTE_PEERS_NOT_FOUND")
857
919
  }
858
920
  } else {
859
921
  this.emitRequiredKeysError()
@@ -953,4 +1015,126 @@ class HmsSDK(
953
1015
  }
954
1016
  )
955
1017
  }
1018
+
1019
+ fun startScreenshare(callback: Promise?) {
1020
+ screenshareCallback = callback
1021
+ runOnUiThread {
1022
+ val intent = Intent(context, HmsScreenshareActivity::class.java)
1023
+ intent.flags = FLAG_ACTIVITY_NEW_TASK
1024
+ intent.putExtra("id", id)
1025
+ context.startActivity(intent)
1026
+ }
1027
+ }
1028
+
1029
+ fun isScreenShared(callback: Promise?) {
1030
+ callback?.resolve(hmsSDK?.isScreenShared())
1031
+ }
1032
+
1033
+ fun stopScreenshare(callback: Promise?) {
1034
+ hmsSDK?.stopScreenshare(
1035
+ object : HMSActionResultListener {
1036
+ override fun onError(error: HMSException) {
1037
+ screenshareCallback = null
1038
+ callback?.reject(error.code.toString(), error.message)
1039
+ self.emitHMSError(error)
1040
+ }
1041
+ override fun onSuccess() {
1042
+ screenshareCallback = null
1043
+ callback?.resolve(emitHMSSuccess())
1044
+ }
1045
+ }
1046
+ )
1047
+ }
1048
+
1049
+ fun startHLSStreaming(data: ReadableMap, callback: Promise?) {
1050
+ val requiredKeys =
1051
+ HmsHelper.areAllRequiredKeysAvailable(data, arrayOf(Pair("meetingURLVariants", "Array")))
1052
+ if (requiredKeys) {
1053
+ val meetingURLVariants =
1054
+ data.getArray("meetingURLVariants")?.toArrayList() as? ArrayList<HashMap<String, String>>
1055
+ val hlsMeetingUrlVariant = HmsHelper.getHMSHLSMeetingURLVariants(meetingURLVariants)
1056
+ val hlsRecordingConfig = HmsHelper.getHlsRecordingConfig(data)
1057
+ val config = HMSHLSConfig(hlsMeetingUrlVariant, hlsRecordingConfig)
1058
+
1059
+ hmsSDK?.startHLSStreaming(
1060
+ config,
1061
+ object : HMSActionResultListener {
1062
+ override fun onSuccess() {
1063
+ callback?.resolve(emitHMSSuccess())
1064
+ }
1065
+ override fun onError(error: HMSException) {
1066
+ callback?.reject(error.code.toString(), error.message)
1067
+ self.emitHMSError(error)
1068
+ }
1069
+ }
1070
+ )
1071
+ } else {
1072
+ callback?.reject("101", "REQUIRED_KEYS_NOT_FOUND")
1073
+ self.emitRequiredKeysError()
1074
+ }
1075
+ }
1076
+
1077
+ fun stopHLSStreaming(callback: Promise?) {
1078
+ hmsSDK?.stopHLSStreaming(
1079
+ null,
1080
+ object : HMSActionResultListener {
1081
+ override fun onSuccess() {
1082
+ callback?.resolve(emitHMSSuccess())
1083
+ }
1084
+ override fun onError(error: HMSException) {
1085
+ callback?.reject(error.code.toString(), error.message)
1086
+ self.emitHMSError(error)
1087
+ }
1088
+ }
1089
+ )
1090
+ }
1091
+
1092
+ fun resetVolume() {
1093
+ val remotePeers = hmsSDK?.getRemotePeers()
1094
+
1095
+ if (remotePeers != null) {
1096
+ for (peer in remotePeers) {
1097
+ val playbackAllowed = peer.audioTrack?.isPlaybackAllowed
1098
+ if (playbackAllowed !== null && playbackAllowed) {
1099
+ peer.audioTrack?.setVolume(10.0)
1100
+ }
1101
+ val auxTracks = peer.auxiliaryTracks
1102
+
1103
+ for (track in auxTracks) {
1104
+ if (track.type === HMSTrackType.AUDIO) {
1105
+
1106
+ (track as? HMSRemoteAudioTrack)?.setVolume(10.0)
1107
+ }
1108
+ }
1109
+ }
1110
+ }
1111
+ }
1112
+
1113
+ fun changeName(data: ReadableMap, callback: Promise?) {
1114
+ val requiredKeys = HmsHelper.areAllRequiredKeysAvailable(data, arrayOf(Pair("name", "String")))
1115
+ if (requiredKeys) {
1116
+ val name = data.getString("name")
1117
+ if (name != null && name != "") {
1118
+ hmsSDK?.changeName(
1119
+ name,
1120
+ object : HMSActionResultListener {
1121
+ override fun onSuccess() {
1122
+ callback?.resolve(emitHMSSuccess())
1123
+ }
1124
+
1125
+ override fun onError(error: HMSException) {
1126
+ callback?.reject(error.code.toString(), error.message)
1127
+ self.emitHMSError(error)
1128
+ }
1129
+ }
1130
+ )
1131
+ } else {
1132
+ self.emitCustomError("NAME_UNDEFINED")
1133
+ callback?.reject("101", "NAME_UNDEFINED")
1134
+ }
1135
+ } else {
1136
+ callback?.reject("101", "REQUIRED_KEYS_NOT_FOUND")
1137
+ self.emitRequiredKeysError()
1138
+ }
1139
+ }
956
1140
  }