@100mslive/react-native-hms 0.8.3 → 0.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (186) hide show
  1. package/README.md +16 -8
  2. package/android/.gradle/6.9/executionHistory/executionHistory.lock +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/cache.properties +1 -1
  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 +58 -5
  19. package/android/src/main/java/com/reactnativehmssdk/HmsHelper.kt +76 -61
  20. package/android/src/main/java/com/reactnativehmssdk/HmsModule.kt +99 -8
  21. package/android/src/main/java/com/reactnativehmssdk/HmsSDK.kt +299 -128
  22. package/android/src/main/java/com/reactnativehmssdk/HmsScreenshareActivity.kt +66 -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 +217 -123
  27. package/ios/HmsHelper.swift +56 -38
  28. package/ios/HmsManager.m +11 -3
  29. package/ios/HmsManager.swift +125 -68
  30. package/ios/HmsSDK.swift +407 -189
  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/HMSChangeTrackStateRequest.js +3 -0
  36. package/lib/commonjs/classes/HMSChangeTrackStateRequest.js.map +1 -1
  37. package/lib/commonjs/classes/HMSEncoder.js +166 -4
  38. package/lib/commonjs/classes/HMSEncoder.js.map +1 -1
  39. package/lib/commonjs/classes/HMSHLSConfig.js +20 -0
  40. package/lib/commonjs/classes/HMSHLSConfig.js.map +1 -0
  41. package/lib/commonjs/classes/HMSHLSMeetingURLVariant.js +23 -0
  42. package/lib/commonjs/classes/HMSHLSMeetingURLVariant.js.map +1 -0
  43. package/lib/commonjs/classes/HMSHLSStreamingState.js +23 -0
  44. package/lib/commonjs/classes/HMSHLSStreamingState.js.map +1 -0
  45. package/lib/commonjs/classes/HMSHLSVariant.js +29 -0
  46. package/lib/commonjs/classes/HMSHLSVariant.js.map +1 -0
  47. package/lib/commonjs/classes/HMSLocalAudioStats.js +26 -0
  48. package/lib/commonjs/classes/HMSLocalAudioStats.js.map +1 -0
  49. package/lib/commonjs/classes/HMSLocalVideoStats.js +32 -0
  50. package/lib/commonjs/classes/HMSLocalVideoStats.js.map +1 -0
  51. package/lib/commonjs/classes/HMSLogger.js +27 -0
  52. package/lib/commonjs/classes/HMSLogger.js.map +1 -1
  53. package/lib/commonjs/classes/HMSPeerUpdate.js +2 -0
  54. package/lib/commonjs/classes/HMSPeerUpdate.js.map +1 -1
  55. package/lib/commonjs/classes/HMSPermissions.js +2 -2
  56. package/lib/commonjs/classes/HMSPermissions.js.map +1 -1
  57. package/lib/commonjs/classes/HMSRTCStats.js +38 -0
  58. package/lib/commonjs/classes/HMSRTCStats.js.map +1 -0
  59. package/lib/commonjs/classes/HMSRTCStatsReport.js +26 -0
  60. package/lib/commonjs/classes/HMSRTCStatsReport.js.map +1 -0
  61. package/lib/commonjs/classes/HMSRemoteAudioStats.js +32 -0
  62. package/lib/commonjs/classes/HMSRemoteAudioStats.js.map +1 -0
  63. package/lib/commonjs/classes/HMSRemoteVideoStats.js +38 -0
  64. package/lib/commonjs/classes/HMSRemoteVideoStats.js.map +1 -0
  65. package/lib/commonjs/classes/HMSRoom.js +6 -0
  66. package/lib/commonjs/classes/HMSRoom.js.map +1 -1
  67. package/lib/commonjs/classes/HMSRoomUpdate.js +7 -0
  68. package/lib/commonjs/classes/HMSRoomUpdate.js.map +1 -1
  69. package/lib/commonjs/classes/HMSRtmpStreamingState.js +6 -0
  70. package/lib/commonjs/classes/HMSRtmpStreamingState.js.map +1 -1
  71. package/lib/commonjs/classes/HMSSDK.js +476 -115
  72. package/lib/commonjs/classes/HMSSDK.js.map +1 -1
  73. package/lib/commonjs/classes/HMSServerRecordingState.js +3 -0
  74. package/lib/commonjs/classes/HMSServerRecordingState.js.map +1 -1
  75. package/lib/commonjs/classes/HMSUpdateListenerActions.js +5 -0
  76. package/lib/commonjs/classes/HMSUpdateListenerActions.js.map +1 -1
  77. package/lib/commonjs/classes/HmsView.js +26 -4
  78. package/lib/commonjs/classes/HmsView.js.map +1 -1
  79. package/lib/commonjs/index.js +140 -0
  80. package/lib/commonjs/index.js.map +1 -1
  81. package/lib/module/classes/HMSBrowserRecordingState.js +6 -0
  82. package/lib/module/classes/HMSBrowserRecordingState.js.map +1 -1
  83. package/lib/module/classes/HMSChangeTrackStateRequest.js +3 -0
  84. package/lib/module/classes/HMSChangeTrackStateRequest.js.map +1 -1
  85. package/lib/module/classes/HMSEncoder.js +159 -4
  86. package/lib/module/classes/HMSEncoder.js.map +1 -1
  87. package/lib/module/classes/HMSHLSConfig.js +11 -0
  88. package/lib/module/classes/HMSHLSConfig.js.map +1 -0
  89. package/lib/module/classes/HMSHLSMeetingURLVariant.js +14 -0
  90. package/lib/module/classes/HMSHLSMeetingURLVariant.js.map +1 -0
  91. package/lib/module/classes/HMSHLSStreamingState.js +14 -0
  92. package/lib/module/classes/HMSHLSStreamingState.js.map +1 -0
  93. package/lib/module/classes/HMSHLSVariant.js +20 -0
  94. package/lib/module/classes/HMSHLSVariant.js.map +1 -0
  95. package/lib/module/classes/HMSLocalAudioStats.js +17 -0
  96. package/lib/module/classes/HMSLocalAudioStats.js.map +1 -0
  97. package/lib/module/classes/HMSLocalVideoStats.js +23 -0
  98. package/lib/module/classes/HMSLocalVideoStats.js.map +1 -0
  99. package/lib/module/classes/HMSLogger.js +27 -0
  100. package/lib/module/classes/HMSLogger.js.map +1 -1
  101. package/lib/module/classes/HMSPeerUpdate.js +2 -0
  102. package/lib/module/classes/HMSPeerUpdate.js.map +1 -1
  103. package/lib/module/classes/HMSPermissions.js +2 -2
  104. package/lib/module/classes/HMSPermissions.js.map +1 -1
  105. package/lib/module/classes/HMSRTCStats.js +29 -0
  106. package/lib/module/classes/HMSRTCStats.js.map +1 -0
  107. package/lib/module/classes/HMSRTCStatsReport.js +17 -0
  108. package/lib/module/classes/HMSRTCStatsReport.js.map +1 -0
  109. package/lib/module/classes/HMSRemoteAudioStats.js +23 -0
  110. package/lib/module/classes/HMSRemoteAudioStats.js.map +1 -0
  111. package/lib/module/classes/HMSRemoteVideoStats.js +29 -0
  112. package/lib/module/classes/HMSRemoteVideoStats.js.map +1 -0
  113. package/lib/module/classes/HMSRoom.js +6 -0
  114. package/lib/module/classes/HMSRoom.js.map +1 -1
  115. package/lib/module/classes/HMSRoomUpdate.js +7 -0
  116. package/lib/module/classes/HMSRoomUpdate.js.map +1 -1
  117. package/lib/module/classes/HMSRtmpStreamingState.js +6 -0
  118. package/lib/module/classes/HMSRtmpStreamingState.js.map +1 -1
  119. package/lib/module/classes/HMSSDK.js +464 -116
  120. package/lib/module/classes/HMSSDK.js.map +1 -1
  121. package/lib/module/classes/HMSServerRecordingState.js +3 -0
  122. package/lib/module/classes/HMSServerRecordingState.js.map +1 -1
  123. package/lib/module/classes/HMSUpdateListenerActions.js +5 -0
  124. package/lib/module/classes/HMSUpdateListenerActions.js.map +1 -1
  125. package/lib/module/classes/HmsView.js +23 -4
  126. package/lib/module/classes/HmsView.js.map +1 -1
  127. package/lib/module/index.js +10 -0
  128. package/lib/module/index.js.map +1 -1
  129. package/lib/typescript/classes/HMSBrowserRecordingState.d.ts +4 -0
  130. package/lib/typescript/classes/HMSChangeTrackStateRequest.d.ts +2 -0
  131. package/lib/typescript/classes/HMSEncoder.d.ts +21 -0
  132. package/lib/typescript/classes/HMSHLSConfig.d.ts +7 -0
  133. package/lib/typescript/classes/HMSHLSMeetingURLVariant.d.ts +8 -0
  134. package/lib/typescript/classes/HMSHLSStreamingState.d.ts +9 -0
  135. package/lib/typescript/classes/HMSHLSVariant.d.ts +12 -0
  136. package/lib/typescript/classes/HMSLocalAudioStats.d.ts +10 -0
  137. package/lib/typescript/classes/HMSLocalVideoStats.d.ts +15 -0
  138. package/lib/typescript/classes/HMSLogger.d.ts +2 -0
  139. package/lib/typescript/classes/HMSPeerUpdate.d.ts +3 -1
  140. package/lib/typescript/classes/HMSPermissions.d.ts +2 -2
  141. package/lib/typescript/classes/HMSRTCStats.d.ts +18 -0
  142. package/lib/typescript/classes/HMSRTCStatsReport.d.ts +11 -0
  143. package/lib/typescript/classes/HMSRemoteAudioStats.d.ts +14 -0
  144. package/lib/typescript/classes/HMSRemoteVideoStats.d.ts +19 -0
  145. package/lib/typescript/classes/HMSRoom.d.ts +5 -0
  146. package/lib/typescript/classes/HMSRoomUpdate.d.ts +8 -1
  147. package/lib/typescript/classes/HMSRtmpStreamingState.d.ts +4 -0
  148. package/lib/typescript/classes/HMSSDK.d.ts +33 -9
  149. package/lib/typescript/classes/HMSServerRecordingState.d.ts +2 -0
  150. package/lib/typescript/classes/HMSUpdateListenerActions.d.ts +6 -1
  151. package/lib/typescript/index.d.ts +10 -0
  152. package/package.json +1 -1
  153. package/react-native-hms.podspec +1 -1
  154. package/src/classes/HMSBrowserRecordingState.ts +10 -1
  155. package/src/classes/HMSChangeTrackStateRequest.ts +7 -1
  156. package/src/classes/HMSEncoder.ts +163 -3
  157. package/src/classes/HMSHLSConfig.ts +9 -0
  158. package/src/classes/HMSHLSMeetingURLVariant.ts +9 -0
  159. package/src/classes/HMSHLSStreamingState.ts +11 -0
  160. package/src/classes/HMSHLSVariant.ts +18 -0
  161. package/src/classes/HMSLocalAudioStats.ts +15 -0
  162. package/src/classes/HMSLocalVideoStats.ts +23 -0
  163. package/src/classes/HMSLogger.ts +14 -0
  164. package/src/classes/HMSPeerUpdate.ts +2 -0
  165. package/src/classes/HMSPermissions.ts +3 -3
  166. package/src/classes/HMSRTCStats.ts +27 -0
  167. package/src/classes/HMSRTCStatsReport.ts +17 -0
  168. package/src/classes/HMSRemoteAudioStats.ts +21 -0
  169. package/src/classes/HMSRemoteVideoStats.ts +29 -0
  170. package/src/classes/HMSRoom.ts +7 -0
  171. package/src/classes/HMSRoomUpdate.ts +7 -0
  172. package/src/classes/HMSRtmpStreamingState.ts +10 -1
  173. package/src/classes/HMSSDK.tsx +325 -26
  174. package/src/classes/HMSServerRecordingState.ts +7 -1
  175. package/src/classes/HMSUpdateListenerActions.ts +5 -0
  176. package/src/classes/HmsView.tsx +32 -4
  177. package/src/index.ts +10 -0
  178. package/android/.gradle/6.9/executionHistory/executionHistory.bin +0 -0
  179. package/android/.gradle/6.9/fileHashes/fileHashes.bin +0 -0
  180. package/android/.gradle/6.9/fileHashes/resourceHashesCache.bin +0 -0
  181. package/android/.gradle/6.9/javaCompile/classAnalysis.bin +0 -0
  182. package/android/.gradle/6.9/javaCompile/jarAnalysis.bin +0 -0
  183. package/android/.gradle/6.9/javaCompile/javaCompile.lock +0 -0
  184. package/android/.gradle/6.9/javaCompile/taskHistory.bin +0 -0
  185. package/android/.gradle/buildOutputCleanup/outputFiles.bin +0 -0
  186. package/android/.project +0 -34
@@ -1,19 +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.settings.HMSTrackSettings
8
- 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
9
13
  import live.hms.video.sdk.*
10
14
  import live.hms.video.sdk.models.*
11
- import live.hms.video.sdk.models.HMSConfig
12
15
  import live.hms.video.sdk.models.enums.HMSPeerUpdate
13
16
  import live.hms.video.sdk.models.enums.HMSRoomUpdate
14
17
  import live.hms.video.sdk.models.enums.HMSTrackUpdate
15
18
  import live.hms.video.sdk.models.trackchangerequest.HMSChangeTrackStateRequest
16
19
  import live.hms.video.utils.HMSCoroutineScope
20
+ import live.hms.video.utils.HmsUtilities
17
21
 
18
22
  class HmsSDK(
19
23
  data: ReadableMap?,
@@ -23,29 +27,28 @@ class HmsSDK(
23
27
  ) {
24
28
  var hmsSDK: HMSSDK? = null
25
29
  private var recentRoleChangeRequest: HMSRoleChangeRequest? = null
26
- private var changeTrackStateRequest: HMSChangeTrackStateRequest? = null
27
- private var delegate: HmsModule = HmsDelegate
30
+ var delegate: HmsModule = HmsDelegate
31
+ private var context: ReactApplicationContext = reactApplicationContext
32
+ private var previewInProgress: Boolean = false
28
33
  private var id: String = sdkId
29
34
  private var self = this
30
35
 
31
36
  init {
32
- val requiredKeys =
33
- HmsHelper.areAllRequiredKeysAvailable(
34
- data,
35
- arrayOf(Pair("useHardwareEchoCancellation", "Boolean"))
36
- )
37
- var useHardwareEchoCancellation = false
38
- if (requiredKeys && data !== null) {
39
- useHardwareEchoCancellation = data.getBoolean("useHardwareEchoCancellation")
37
+ val trackSettings = HmsHelper.getTrackSettings(data)
38
+ if (trackSettings == null) {
39
+ this.hmsSDK = HMSSDK.Builder(reactApplicationContext).build()
40
+ } else {
41
+ this.hmsSDK = HMSSDK.Builder(reactApplicationContext).setTrackSettings(trackSettings).build()
40
42
  }
41
- val videoSettings = HmsHelper.getVideoTrackSettings(data?.getMap("video"))
42
- val audioSettings =
43
- HmsHelper.getAudioTrackSettings(data?.getMap("audio"), useHardwareEchoCancellation)
44
-
45
- val trackSettingsBuilder = HMSTrackSettings.Builder()
46
- val trackSettings = trackSettingsBuilder.audio(audioSettings).video(videoSettings).build()
43
+ }
47
44
 
48
- this.hmsSDK = HMSSDK.Builder(reactApplicationContext).setTrackSettings(trackSettings).build()
45
+ private fun emitCustomError(message: String) {
46
+ val data: WritableMap = Arguments.createMap()
47
+ val hmsError = HMSException(102, message, message, message, message)
48
+ data.putString("event", "ON_ERROR")
49
+ data.putString("id", id)
50
+ data.putMap("error", HmsDecoder.getError(hmsError))
51
+ delegate.emitEvent("ON_ERROR", data)
49
52
  }
50
53
 
51
54
  private fun emitRequiredKeysError() {
@@ -82,12 +85,17 @@ class HmsSDK(
82
85
  }
83
86
 
84
87
  fun preview(credentials: ReadableMap) {
88
+ if (previewInProgress) {
89
+ self.emitCustomError("PREVIEW_ALREADY_IN_PROGRESS")
90
+ return
91
+ }
85
92
  val requiredKeys =
86
93
  HmsHelper.areAllRequiredKeysAvailable(
87
94
  credentials,
88
95
  arrayOf(Pair("username", "String"), Pair("authToken", "String"))
89
96
  )
90
97
  if (requiredKeys) {
98
+ previewInProgress = true
91
99
  var config =
92
100
  HMSConfig(
93
101
  credentials.getString("username") as String,
@@ -130,6 +138,41 @@ class HmsSDK(
130
138
  object : HMSPreviewListener {
131
139
  override fun onError(error: HMSException) {
132
140
  self.emitHMSError(error)
141
+ previewInProgress = false
142
+ }
143
+
144
+ override fun onPeerUpdate(type: HMSPeerUpdate, peer: HMSPeer) {
145
+ val updateType = type.name
146
+ val roomData = HmsDecoder.getHmsRoom(hmsSDK?.getRoom())
147
+ val localPeerData = HmsDecoder.getHmsLocalPeer(hmsSDK?.getLocalPeer())
148
+ val remotePeerData = HmsDecoder.getHmsRemotePeers(hmsSDK?.getRemotePeers())
149
+ val hmsPeer = HmsDecoder.getHmsPeer(peer)
150
+
151
+ val data: WritableMap = Arguments.createMap()
152
+
153
+ data.putMap("peer", hmsPeer)
154
+ data.putMap("room", roomData)
155
+ data.putString("type", updateType)
156
+ data.putMap("localPeer", localPeerData)
157
+ data.putArray("remotePeers", remotePeerData)
158
+ data.putString("id", id)
159
+ delegate.emitEvent("ON_PEER_UPDATE", data)
160
+ }
161
+
162
+ override fun onRoomUpdate(type: HMSRoomUpdate, hmsRoom: HMSRoom) {
163
+ val updateType = type.name
164
+ val roomData = HmsDecoder.getHmsRoom(hmsRoom)
165
+ val localPeerData = HmsDecoder.getHmsLocalPeer(hmsSDK?.getLocalPeer())
166
+ val remotePeerData = HmsDecoder.getHmsRemotePeers(hmsSDK?.getRemotePeers())
167
+
168
+ val data: WritableMap = Arguments.createMap()
169
+
170
+ data.putString("type", updateType)
171
+ data.putMap("room", roomData)
172
+ data.putMap("localPeer", localPeerData)
173
+ data.putArray("remotePeers", remotePeerData)
174
+ data.putString("id", id)
175
+ delegate.emitEvent("ON_ROOM_UPDATE", data)
133
176
  }
134
177
 
135
178
  override fun onPreview(room: HMSRoom, localTracks: Array<HMSTrack>) {
@@ -143,6 +186,7 @@ class HmsSDK(
143
186
  data.putMap("localPeer", localPeerData)
144
187
  data.putString("id", id)
145
188
  delegate.emitEvent("ON_PREVIEW", data)
189
+ previewInProgress = false
146
190
  }
147
191
  }
148
192
  )
@@ -152,6 +196,10 @@ class HmsSDK(
152
196
  }
153
197
 
154
198
  fun join(credentials: ReadableMap) {
199
+ if (previewInProgress) {
200
+ self.emitCustomError("PREVIEW_IS_IN_PROGRESS")
201
+ return
202
+ }
155
203
  val requiredKeys =
156
204
  HmsHelper.areAllRequiredKeysAvailable(
157
205
  credentials,
@@ -207,7 +255,6 @@ class HmsSDK(
207
255
  "ON_CHANGE_TRACK_STATE_REQUEST",
208
256
  decodedChangeTrackStateRequest
209
257
  )
210
- changeTrackStateRequest = details
211
258
  }
212
259
 
213
260
  override fun onRemovedFromRoom(notification: HMSRemovedFromRoom) {
@@ -369,19 +416,6 @@ class HmsSDK(
369
416
  fun setLocalMute(data: ReadableMap) {
370
417
  val isMute = data.getBoolean("isMute")
371
418
  hmsSDK?.getLocalPeer()?.audioTrack?.setMute(isMute)
372
- val type = if (isMute) "TRACK_MUTED" else "TRACK_UNMUTED"
373
- val localPeerData = HmsDecoder.getHmsLocalPeer(hmsSDK?.getLocalPeer())
374
- val remotePeerData = HmsDecoder.getHmsRemotePeers(hmsSDK?.getRemotePeers())
375
- val roomData = HmsDecoder.getHmsRoom(hmsSDK?.getRoom())
376
-
377
- val map: WritableMap = Arguments.createMap()
378
-
379
- map.putMap("room", roomData)
380
- map.putString("type", type)
381
- map.putMap("localPeer", localPeerData)
382
- map.putArray("remotePeers", remotePeerData)
383
- map.putString("id", id)
384
- delegate.emitEvent("ON_TRACK_UPDATE", map)
385
419
  }
386
420
 
387
421
  fun setLocalVideoMute(data: ReadableMap) {
@@ -412,15 +446,14 @@ class HmsSDK(
412
446
 
413
447
  fun sendBroadcastMessage(data: ReadableMap, callback: Promise?) {
414
448
  val requiredKeys =
415
- HmsHelper.areAllRequiredKeysAvailable(data, arrayOf(Pair("message", "String")))
449
+ HmsHelper.areAllRequiredKeysAvailable(
450
+ data,
451
+ arrayOf(Pair("message", "String"), Pair("type", "String"))
452
+ )
416
453
  if (requiredKeys) {
417
- val type =
418
- if (HmsHelper.areAllRequiredKeysAvailable(data, arrayOf(Pair("type", "String"))))
419
- data.getString("type")
420
- else "chat"
421
454
  hmsSDK?.sendBroadcastMessage(
422
455
  data.getString("message") as String,
423
- type as String,
456
+ data.getString("type") as String,
424
457
  object : HMSMessageResultListener {
425
458
  override fun onError(error: HMSException) {
426
459
  self.emitHMSError(error)
@@ -441,34 +474,27 @@ class HmsSDK(
441
474
  val requiredKeys =
442
475
  HmsHelper.areAllRequiredKeysAvailable(
443
476
  data,
444
- arrayOf(Pair("message", "String"), Pair("roles", "Array"))
477
+ arrayOf(Pair("message", "String"), Pair("roles", "Array"), Pair("type", "String"))
445
478
  )
446
479
  if (requiredKeys) {
447
- val type =
448
- if (HmsHelper.areAllRequiredKeysAvailable(data, arrayOf(Pair("type", "String"))))
449
- data.getString("type")
450
- else "chat"
451
- val message = data.getString("message")
452
480
  val targetedRoles = data.getArray("roles")?.toArrayList() as? ArrayList<String>
453
481
  val roles = hmsSDK?.getRoles()
454
482
  val encodedTargetedRoles = HmsHelper.getRolesFromRoleNames(targetedRoles, roles)
455
483
 
456
- if (message != null) {
457
- hmsSDK?.sendGroupMessage(
458
- message,
459
- type as String,
460
- encodedTargetedRoles,
461
- object : HMSMessageResultListener {
462
- override fun onError(error: HMSException) {
463
- self.emitHMSError(error)
464
- callback?.reject(error.code.toString(), error.message)
465
- }
466
- override fun onSuccess(hmsMessage: HMSMessage) {
467
- callback?.resolve(emitHMSSuccess(hmsMessage))
468
- }
484
+ hmsSDK?.sendGroupMessage(
485
+ data.getString("message") as String,
486
+ data.getString("type") as String,
487
+ encodedTargetedRoles,
488
+ object : HMSMessageResultListener {
489
+ override fun onError(error: HMSException) {
490
+ self.emitHMSError(error)
491
+ callback?.reject(error.code.toString(), error.message)
469
492
  }
470
- )
471
- }
493
+ override fun onSuccess(hmsMessage: HMSMessage) {
494
+ callback?.resolve(emitHMSSuccess(hmsMessage))
495
+ }
496
+ }
497
+ )
472
498
  } else {
473
499
  self.emitRequiredKeysError()
474
500
  callback?.reject("101", "REQUIRED_KEYS_NOT_FOUND")
@@ -479,21 +505,15 @@ class HmsSDK(
479
505
  val requiredKeys =
480
506
  HmsHelper.areAllRequiredKeysAvailable(
481
507
  data,
482
- arrayOf(Pair("message", "String"), Pair("peerId", "String"))
508
+ arrayOf(Pair("message", "String"), Pair("peerId", "String"), Pair("type", "String"))
483
509
  )
484
510
  if (requiredKeys) {
485
- val type =
486
- if (HmsHelper.areAllRequiredKeysAvailable(data, arrayOf(Pair("type", "String"))))
487
- data.getString("type")
488
- else "chat"
489
- val message = data.getString("message")
490
511
  val peerId = data.getString("peerId")
491
- val peers = hmsSDK?.getPeers()
492
- val peer = HmsHelper.getPeerFromPeerId(peerId, peers)
493
- if (message != null && peer != null) {
512
+ val peer = HmsHelper.getPeerFromPeerId(peerId, hmsSDK?.getRoom())
513
+ if (peer != null) {
494
514
  hmsSDK?.sendDirectMessage(
495
- message,
496
- type as String,
515
+ data.getString("message") as String,
516
+ data.getString("type") as String,
497
517
  peer,
498
518
  object : HMSMessageResultListener {
499
519
  override fun onError(error: HMSException) {
@@ -505,6 +525,9 @@ class HmsSDK(
505
525
  }
506
526
  }
507
527
  )
528
+ } else {
529
+ self.emitCustomError("PEER_NOT_FOUND")
530
+ callback?.reject("101", "PEER_NOT_FOUND")
508
531
  }
509
532
  } else {
510
533
  self.emitRequiredKeysError()
@@ -524,7 +547,7 @@ class HmsSDK(
524
547
  val force = data.getBoolean("force")
525
548
 
526
549
  if (peerId !== null && role !== null) {
527
- val hmsPeer = HmsHelper.getPeerFromPeerId(peerId, hmsSDK?.getPeers())
550
+ val hmsPeer = HmsHelper.getPeerFromPeerId(peerId, hmsSDK?.getRoom())
528
551
  val hmsRole = HmsHelper.getRoleFromRoleName(role, hmsSDK?.getRoles())
529
552
 
530
553
  if (hmsRole != null && hmsPeer != null) {
@@ -559,8 +582,7 @@ class HmsSDK(
559
582
  if (requiredKeys) {
560
583
  val trackId = data.getString("trackId")
561
584
  val mute = data.getBoolean("mute")
562
- val remotePeers = hmsSDK?.getRemotePeers()
563
- val track = HmsHelper.getTrackFromTrackId(trackId, remotePeers)
585
+ val track = HmsHelper.getTrackFromTrackId(trackId, hmsSDK?.getRoom())
564
586
  if (track != null) {
565
587
  hmsSDK?.changeTrackState(
566
588
  track,
@@ -582,24 +604,35 @@ class HmsSDK(
582
604
  }
583
605
  }
584
606
 
585
- fun changeTrackStateRoles(data: ReadableMap, callback: Promise?) {
607
+ fun changeTrackStateForRoles(data: ReadableMap, callback: Promise?) {
586
608
  val requiredKeys =
587
609
  HmsHelper.areAllRequiredKeysAvailable(
588
610
  data,
589
611
  arrayOf(
590
- Pair("source", "String"),
591
612
  Pair("mute", "Boolean"),
592
- Pair("type", "String"),
593
- Pair("roles", "Array")
594
613
  )
595
614
  )
596
615
  if (requiredKeys) {
597
616
  val mute: Boolean = data.getBoolean("mute")
598
617
  val type =
599
- if (data.getString("type") == HMSTrackType.AUDIO.toString()) HMSTrackType.AUDIO
600
- else HMSTrackType.VIDEO
601
- val source = data.getString("source")
602
- val targetedRoles = data.getArray("roles")?.toArrayList() as? ArrayList<String>
618
+ if (HmsHelper.areAllRequiredKeysAvailable(data, arrayOf(Pair("type", "String")))) {
619
+ if (data.getString("type") == HMSTrackType.AUDIO.toString()) HMSTrackType.AUDIO
620
+ else HMSTrackType.VIDEO
621
+ } else {
622
+ null
623
+ }
624
+ val source =
625
+ if (HmsHelper.areAllRequiredKeysAvailable(data, arrayOf(Pair("source", "String")))) {
626
+ data.getString("source")
627
+ } else {
628
+ null
629
+ }
630
+ val targetedRoles =
631
+ if (HmsHelper.areAllRequiredKeysAvailable(data, arrayOf(Pair("roles", "Array")))) {
632
+ data.getArray("roles")?.toArrayList() as? ArrayList<String>
633
+ } else {
634
+ null
635
+ }
603
636
  val roles = hmsSDK?.getRoles()
604
637
  val encodedTargetedRoles = HmsHelper.getRolesFromRoleNames(targetedRoles, roles)
605
638
  hmsSDK?.changeTrackState(
@@ -628,11 +661,9 @@ class HmsSDK(
628
661
  HmsHelper.areAllRequiredKeysAvailable(data, arrayOf(Pair("trackId", "String")))
629
662
  if (requiredKeys) {
630
663
  val trackId = data.getString("trackId")
631
- val remotePeers = hmsSDK?.getRemotePeers()
632
- val localPeer = hmsSDK?.getLocalPeer()
633
- val localTrack = HmsHelper.getLocalTrackFromTrackId(trackId, localPeer)
664
+ val localTrack = HmsHelper.getTrackFromTrackId(trackId, hmsSDK?.getRoom())
634
665
  if (localTrack == null) {
635
- val track = HmsHelper.getTrackFromTrackId(trackId, remotePeers)
666
+ val track = HmsHelper.getTrackFromTrackId(trackId, hmsSDK?.getRoom())
636
667
  if (track != null) {
637
668
  val mute = track.isMute
638
669
  callback?.resolve(mute)
@@ -650,23 +681,18 @@ class HmsSDK(
650
681
 
651
682
  fun removePeer(data: ReadableMap, callback: Promise?) {
652
683
  val requiredKeys =
653
- HmsHelper.areAllRequiredKeysAvailable(data, arrayOf(Pair("peerId", "String")))
684
+ HmsHelper.areAllRequiredKeysAvailable(
685
+ data,
686
+ arrayOf(Pair("peerId", "String"), Pair("reason", "String"))
687
+ )
654
688
  if (requiredKeys) {
655
689
  val peerId = data.getString("peerId")
656
- var reason = data.getString("reason")
657
-
658
- if (reason == null) {
659
- reason = ""
660
- }
661
-
662
- val peers = hmsSDK?.getRemotePeers()
663
-
664
- val peer = HmsHelper.getRemotePeerFromPeerId(peerId, peers)
690
+ val peer = HmsHelper.getRemotePeerFromPeerId(peerId, hmsSDK?.getRoom())
665
691
 
666
692
  if (peer != null) {
667
693
  hmsSDK?.removePeerRequest(
668
694
  peer,
669
- reason,
695
+ data.getString("reason") as String,
670
696
  object : HMSActionResultListener {
671
697
  override fun onSuccess() {
672
698
  callback?.resolve(emitHMSSuccess())
@@ -678,6 +704,7 @@ class HmsSDK(
678
704
  }
679
705
  )
680
706
  } else {
707
+ self.emitCustomError("PEER_NOT_FOUND")
681
708
  callback?.reject("101", "PEER_NOT_FOUND")
682
709
  }
683
710
  } else {
@@ -687,46 +714,74 @@ class HmsSDK(
687
714
  }
688
715
 
689
716
  fun endRoom(data: ReadableMap, callback: Promise?) {
690
- val lock = data.getBoolean("lock")
691
- var reason = data.getString("reason")
692
- if (reason == null) {
693
- reason = ""
694
- }
695
-
696
- hmsSDK?.endRoom(
697
- reason,
698
- lock,
699
- object : HMSActionResultListener {
700
- override fun onSuccess() {
701
- callback?.resolve(emitHMSSuccess())
702
- }
703
- override fun onError(error: HMSException) {
704
- self.emitHMSError(error)
705
- callback?.reject(error.code.toString(), error.message)
717
+ val requiredKeys =
718
+ HmsHelper.areAllRequiredKeysAvailable(
719
+ data,
720
+ arrayOf(Pair("lock", "Boolean"), Pair("reason", "String"))
721
+ )
722
+ if (requiredKeys) {
723
+ hmsSDK?.endRoom(
724
+ data.getString("reason") as String,
725
+ data.getBoolean("lock"),
726
+ object : HMSActionResultListener {
727
+ override fun onSuccess() {
728
+ callback?.resolve(emitHMSSuccess())
729
+ }
730
+ override fun onError(error: HMSException) {
731
+ self.emitHMSError(error)
732
+ callback?.reject(error.code.toString(), error.message)
733
+ }
706
734
  }
707
- }
708
- )
735
+ )
736
+ } else {
737
+ self.emitRequiredKeysError()
738
+ callback?.reject("101", "REQUIRED_KEYS_NOT_FOUND")
739
+ }
709
740
  }
710
741
 
711
- fun acceptRoleChange() {
742
+ fun acceptRoleChange(callback: Promise?) {
712
743
  if (recentRoleChangeRequest !== null) {
744
+
713
745
  hmsSDK?.acceptChangeRole(
714
746
  recentRoleChangeRequest!!,
715
747
  object : HMSActionResultListener {
716
748
  override fun onSuccess() {
717
- recentRoleChangeRequest = null
749
+ callback?.resolve(emitHMSSuccess())
718
750
  }
719
-
720
751
  override fun onError(error: HMSException) {
721
- recentRoleChangeRequest = null
722
752
  self.emitHMSError(error)
753
+ callback?.reject(error.code.toString(), error.message)
723
754
  }
724
755
  }
725
756
  )
757
+
758
+ recentRoleChangeRequest = null
759
+ }
760
+ }
761
+
762
+ fun remoteMuteAllAudio() {
763
+ val allAudioTracks = hmsSDK?.getRoom()?.let { HmsUtilities.getAllAudioTracks(it) }
764
+ if (allAudioTracks != null) {
765
+ var customError: HMSException? = null
766
+ for (audioTrack in allAudioTracks) {
767
+ hmsSDK?.changeTrackState(
768
+ audioTrack,
769
+ true,
770
+ object : HMSActionResultListener {
771
+ override fun onSuccess() {}
772
+ override fun onError(error: HMSException) {
773
+ customError = error
774
+ }
775
+ }
776
+ )
777
+ }
778
+ if (customError != null) {
779
+ self.emitHMSError(customError!!)
780
+ }
726
781
  }
727
782
  }
728
783
 
729
- fun muteAllPeersAudio(data: ReadableMap) {
784
+ fun setPlaybackForAllAudio(data: ReadableMap) {
730
785
  val requiredKeys = HmsHelper.areAllRequiredKeysAvailable(data, arrayOf(Pair("mute", "Boolean")))
731
786
  if (requiredKeys) {
732
787
  val mute = data.getBoolean("mute")
@@ -734,7 +789,7 @@ class HmsSDK(
734
789
  if (peers != null) {
735
790
  for (remotePeer in peers) {
736
791
  val peerId = remotePeer.peerID
737
- val peer = HmsHelper.getRemotePeerFromPeerId(peerId, peers)
792
+ val peer = HmsHelper.getRemotePeerFromPeerId(peerId, hmsSDK?.getRoom())
738
793
  peer?.audioTrack?.isPlaybackAllowed = !mute
739
794
  }
740
795
  val localPeerData = HmsDecoder.getHmsLocalPeer(hmsSDK?.getLocalPeer())
@@ -761,9 +816,8 @@ class HmsSDK(
761
816
  if (requiredKeys) {
762
817
  val trackId = data.getString("trackId")
763
818
  val playbackAllowed = data.getBoolean("playbackAllowed")
764
- val remotePeers = hmsSDK?.getRemotePeers()
765
- val remoteAudioTrack = HmsHelper.getRemoteAudioTrackFromTrackId(trackId, remotePeers)
766
- val remoteVideoTrack = HmsHelper.getRemoteVideoTrackFromTrackId(trackId, remotePeers)
819
+ val remoteAudioTrack = HmsHelper.getRemoteAudioTrackFromTrackId(trackId, hmsSDK?.getRoom())
820
+ val remoteVideoTrack = HmsHelper.getRemoteVideoTrackFromTrackId(trackId, hmsSDK?.getRoom())
767
821
  if (remoteAudioTrack != null) {
768
822
  remoteAudioTrack.isPlaybackAllowed = playbackAllowed
769
823
  } else if (remoteVideoTrack != null) {
@@ -779,9 +833,8 @@ class HmsSDK(
779
833
  HmsHelper.areAllRequiredKeysAvailable(data, arrayOf(Pair("trackId", "String")))
780
834
  if (requiredKeys) {
781
835
  val trackId = data.getString("trackId")
782
- val remotePeers = hmsSDK?.getRemotePeers()
783
- val remoteAudioTrack = HmsHelper.getRemoteAudioTrackFromTrackId(trackId, remotePeers)
784
- val remoteVideoTrack = HmsHelper.getRemoteVideoTrackFromTrackId(trackId, remotePeers)
836
+ val remoteAudioTrack = HmsHelper.getRemoteAudioTrackFromTrackId(trackId, hmsSDK?.getRoom())
837
+ val remoteVideoTrack = HmsHelper.getRemoteVideoTrackFromTrackId(trackId, hmsSDK?.getRoom())
785
838
  when {
786
839
  remoteAudioTrack != null -> {
787
840
  val isPlaybackAllowed = remoteAudioTrack.isPlaybackAllowed
@@ -937,4 +990,122 @@ class HmsSDK(
937
990
  }
938
991
  )
939
992
  }
993
+
994
+ fun startScreenshare() {
995
+ runOnUiThread {
996
+ val intent = Intent(context, HmsScreenshareActivity::class.java)
997
+ intent.flags = FLAG_ACTIVITY_NEW_TASK
998
+ intent.putExtra("id", id)
999
+ context.startActivity(intent)
1000
+ }
1001
+ }
1002
+
1003
+ fun isScreenShared(callback: Promise?) {
1004
+ callback?.resolve(hmsSDK?.isScreenShared())
1005
+ }
1006
+
1007
+ fun stopScreenshare(callback: Promise?) {
1008
+ hmsSDK?.stopScreenshare(
1009
+ object : HMSActionResultListener {
1010
+ override fun onError(error: HMSException) {
1011
+ callback?.reject(error.code.toString(), error.message)
1012
+ self.emitHMSError(error)
1013
+ }
1014
+ override fun onSuccess() {
1015
+ callback?.resolve(emitHMSSuccess())
1016
+ }
1017
+ }
1018
+ )
1019
+ }
1020
+
1021
+ fun startHLSStreaming(data: ReadableMap, callback: Promise?) {
1022
+ val requiredKeys =
1023
+ HmsHelper.areAllRequiredKeysAvailable(data, arrayOf(Pair("meetingURLVariants", "Array")))
1024
+ if (requiredKeys) {
1025
+ val meetingURLVariants =
1026
+ data.getArray("meetingURLVariants")?.toArrayList() as? ArrayList<HashMap<String, String>>
1027
+ val hlsMeetingUrlVariant = HmsHelper.getHMSHLSMeetingURLVariants(meetingURLVariants)
1028
+ val config = HMSHLSConfig(hlsMeetingUrlVariant)
1029
+
1030
+ hmsSDK?.startHLSStreaming(
1031
+ config,
1032
+ object : HMSActionResultListener {
1033
+ override fun onSuccess() {
1034
+ callback?.resolve(emitHMSSuccess())
1035
+ }
1036
+ override fun onError(error: HMSException) {
1037
+ callback?.reject(error.code.toString(), error.message)
1038
+ self.emitHMSError(error)
1039
+ }
1040
+ }
1041
+ )
1042
+ } else {
1043
+ callback?.reject("101", "REQUIRED_KEYS_NOT_FOUND")
1044
+ self.emitRequiredKeysError()
1045
+ }
1046
+ }
1047
+
1048
+ fun stopHLSStreaming(callback: Promise?) {
1049
+ hmsSDK?.stopHLSStreaming(
1050
+ null,
1051
+ object : HMSActionResultListener {
1052
+ override fun onSuccess() {
1053
+ callback?.resolve(emitHMSSuccess())
1054
+ }
1055
+ override fun onError(error: HMSException) {
1056
+ callback?.reject(error.code.toString(), error.message)
1057
+ self.emitHMSError(error)
1058
+ }
1059
+ }
1060
+ )
1061
+ }
1062
+
1063
+ fun resetVolume() {
1064
+ val remotePeers = hmsSDK?.getRemotePeers()
1065
+
1066
+ if (remotePeers != null) {
1067
+ for (peer in remotePeers) {
1068
+ val playbackAllowed = peer.audioTrack?.isPlaybackAllowed
1069
+ if (playbackAllowed !== null && playbackAllowed) {
1070
+ peer.audioTrack?.setVolume(10.0)
1071
+ }
1072
+ val auxTracks = peer.auxiliaryTracks
1073
+
1074
+ for (track in auxTracks) {
1075
+ if (track.type === HMSTrackType.AUDIO) {
1076
+
1077
+ (track as? HMSRemoteAudioTrack)?.setVolume(10.0)
1078
+ }
1079
+ }
1080
+ }
1081
+ }
1082
+ }
1083
+
1084
+ fun changeName(data: ReadableMap, callback: Promise?) {
1085
+ val requiredKeys = HmsHelper.areAllRequiredKeysAvailable(data, arrayOf(Pair("name", "String")))
1086
+ if (requiredKeys) {
1087
+ val name = data.getString("name")
1088
+ if (name != null && name != "") {
1089
+ hmsSDK?.changeName(
1090
+ name,
1091
+ object : HMSActionResultListener {
1092
+ override fun onSuccess() {
1093
+ callback?.resolve(emitHMSSuccess())
1094
+ }
1095
+
1096
+ override fun onError(error: HMSException) {
1097
+ callback?.reject(error.code.toString(), error.message)
1098
+ self.emitHMSError(error)
1099
+ }
1100
+ }
1101
+ )
1102
+ } else {
1103
+ self.emitCustomError("NAME_UNDEFINED")
1104
+ callback?.reject("101", "NAME_UNDEFINED")
1105
+ }
1106
+ } else {
1107
+ callback?.reject("101", "REQUIRED_KEYS_NOT_FOUND")
1108
+ self.emitRequiredKeysError()
1109
+ }
1110
+ }
940
1111
  }