@100mslive/react-native-hms 0.9.0 → 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 (130) hide show
  1. package/README.md +10 -2
  2. package/android/.idea/gradle.xml +13 -0
  3. package/android/.idea/misc.xml +9 -0
  4. package/android/.idea/modules/android.iml +18 -0
  5. package/android/.idea/modules.xml +8 -0
  6. package/android/.idea/sonarlint/issuestore/f/0/f07866736216be0ee2aba49e392191aeae700a35 +0 -0
  7. package/android/.idea/sonarlint/issuestore/index.pb +3 -0
  8. package/android/.idea/vcs.xml +6 -0
  9. package/android/build.gradle +2 -2
  10. package/android/local.properties +8 -0
  11. package/android/src/main/java/com/reactnativehmssdk/HmsDecoder.kt +31 -4
  12. package/android/src/main/java/com/reactnativehmssdk/HmsHelper.kt +16 -64
  13. package/android/src/main/java/com/reactnativehmssdk/HmsModule.kt +17 -3
  14. package/android/src/main/java/com/reactnativehmssdk/HmsSDK.kt +97 -32
  15. package/android/src/main/java/com/reactnativehmssdk/HmsView.kt +1 -1
  16. package/ios/HmsDecoder.swift +173 -135
  17. package/ios/HmsHelper.swift +38 -41
  18. package/ios/HmsManager.m +7 -1
  19. package/ios/HmsManager.swift +111 -68
  20. package/ios/HmsSDK.swift +335 -199
  21. package/ios/HmsView.swift +45 -31
  22. package/ios/VideoCollectionViewCell.swift +4 -4
  23. package/lib/commonjs/classes/HMSBrowserRecordingState.js +6 -0
  24. package/lib/commonjs/classes/HMSBrowserRecordingState.js.map +1 -1
  25. package/lib/commonjs/classes/HMSEncoder.js +164 -4
  26. package/lib/commonjs/classes/HMSEncoder.js.map +1 -1
  27. package/lib/commonjs/classes/HMSHLSVariant.js.map +1 -1
  28. package/lib/commonjs/classes/HMSLocalAudioStats.js +26 -0
  29. package/lib/commonjs/classes/HMSLocalAudioStats.js.map +1 -0
  30. package/lib/commonjs/classes/HMSLocalVideoStats.js +32 -0
  31. package/lib/commonjs/classes/HMSLocalVideoStats.js.map +1 -0
  32. package/lib/commonjs/classes/HMSPeerUpdate.js +2 -0
  33. package/lib/commonjs/classes/HMSPeerUpdate.js.map +1 -1
  34. package/lib/commonjs/classes/HMSPermissions.js +2 -2
  35. package/lib/commonjs/classes/HMSPermissions.js.map +1 -1
  36. package/lib/commonjs/classes/HMSRTCStats.js +38 -0
  37. package/lib/commonjs/classes/HMSRTCStats.js.map +1 -0
  38. package/lib/commonjs/classes/HMSRTCStatsReport.js +26 -0
  39. package/lib/commonjs/classes/HMSRTCStatsReport.js.map +1 -0
  40. package/lib/commonjs/classes/HMSRemoteAudioStats.js +32 -0
  41. package/lib/commonjs/classes/HMSRemoteAudioStats.js.map +1 -0
  42. package/lib/commonjs/classes/HMSRemoteVideoStats.js +38 -0
  43. package/lib/commonjs/classes/HMSRemoteVideoStats.js.map +1 -0
  44. package/lib/commonjs/classes/HMSRoom.js +3 -0
  45. package/lib/commonjs/classes/HMSRoom.js.map +1 -1
  46. package/lib/commonjs/classes/HMSRoomUpdate.js +1 -0
  47. package/lib/commonjs/classes/HMSRoomUpdate.js.map +1 -1
  48. package/lib/commonjs/classes/HMSRtmpStreamingState.js +6 -0
  49. package/lib/commonjs/classes/HMSRtmpStreamingState.js.map +1 -1
  50. package/lib/commonjs/classes/HMSSDK.js +365 -111
  51. package/lib/commonjs/classes/HMSSDK.js.map +1 -1
  52. package/lib/commonjs/classes/HMSServerRecordingState.js +3 -0
  53. package/lib/commonjs/classes/HMSServerRecordingState.js.map +1 -1
  54. package/lib/commonjs/classes/HMSUpdateListenerActions.js +5 -0
  55. package/lib/commonjs/classes/HMSUpdateListenerActions.js.map +1 -1
  56. package/lib/commonjs/index.js +84 -0
  57. package/lib/commonjs/index.js.map +1 -1
  58. package/lib/module/classes/HMSBrowserRecordingState.js +6 -0
  59. package/lib/module/classes/HMSBrowserRecordingState.js.map +1 -1
  60. package/lib/module/classes/HMSEncoder.js +157 -4
  61. package/lib/module/classes/HMSEncoder.js.map +1 -1
  62. package/lib/module/classes/HMSHLSVariant.js.map +1 -1
  63. package/lib/module/classes/HMSLocalAudioStats.js +17 -0
  64. package/lib/module/classes/HMSLocalAudioStats.js.map +1 -0
  65. package/lib/module/classes/HMSLocalVideoStats.js +23 -0
  66. package/lib/module/classes/HMSLocalVideoStats.js.map +1 -0
  67. package/lib/module/classes/HMSPeerUpdate.js +2 -0
  68. package/lib/module/classes/HMSPeerUpdate.js.map +1 -1
  69. package/lib/module/classes/HMSPermissions.js +2 -2
  70. package/lib/module/classes/HMSPermissions.js.map +1 -1
  71. package/lib/module/classes/HMSRTCStats.js +29 -0
  72. package/lib/module/classes/HMSRTCStats.js.map +1 -0
  73. package/lib/module/classes/HMSRTCStatsReport.js +17 -0
  74. package/lib/module/classes/HMSRTCStatsReport.js.map +1 -0
  75. package/lib/module/classes/HMSRemoteAudioStats.js +23 -0
  76. package/lib/module/classes/HMSRemoteAudioStats.js.map +1 -0
  77. package/lib/module/classes/HMSRemoteVideoStats.js +29 -0
  78. package/lib/module/classes/HMSRemoteVideoStats.js.map +1 -0
  79. package/lib/module/classes/HMSRoom.js +3 -0
  80. package/lib/module/classes/HMSRoom.js.map +1 -1
  81. package/lib/module/classes/HMSRoomUpdate.js +1 -0
  82. package/lib/module/classes/HMSRoomUpdate.js.map +1 -1
  83. package/lib/module/classes/HMSRtmpStreamingState.js +6 -0
  84. package/lib/module/classes/HMSRtmpStreamingState.js.map +1 -1
  85. package/lib/module/classes/HMSSDK.js +352 -111
  86. package/lib/module/classes/HMSSDK.js.map +1 -1
  87. package/lib/module/classes/HMSServerRecordingState.js +3 -0
  88. package/lib/module/classes/HMSServerRecordingState.js.map +1 -1
  89. package/lib/module/classes/HMSUpdateListenerActions.js +5 -0
  90. package/lib/module/classes/HMSUpdateListenerActions.js.map +1 -1
  91. package/lib/module/index.js +6 -0
  92. package/lib/module/index.js.map +1 -1
  93. package/lib/typescript/classes/HMSBrowserRecordingState.d.ts +4 -0
  94. package/lib/typescript/classes/HMSEncoder.d.ts +21 -0
  95. package/lib/typescript/classes/HMSHLSVariant.d.ts +8 -8
  96. package/lib/typescript/classes/HMSLocalAudioStats.d.ts +10 -0
  97. package/lib/typescript/classes/HMSLocalVideoStats.d.ts +15 -0
  98. package/lib/typescript/classes/HMSPeerUpdate.d.ts +3 -1
  99. package/lib/typescript/classes/HMSPermissions.d.ts +2 -2
  100. package/lib/typescript/classes/HMSRTCStats.d.ts +18 -0
  101. package/lib/typescript/classes/HMSRTCStatsReport.d.ts +11 -0
  102. package/lib/typescript/classes/HMSRemoteAudioStats.d.ts +14 -0
  103. package/lib/typescript/classes/HMSRemoteVideoStats.d.ts +19 -0
  104. package/lib/typescript/classes/HMSRoom.d.ts +2 -0
  105. package/lib/typescript/classes/HMSRoomUpdate.d.ts +2 -1
  106. package/lib/typescript/classes/HMSRtmpStreamingState.d.ts +4 -0
  107. package/lib/typescript/classes/HMSSDK.d.ts +16 -1
  108. package/lib/typescript/classes/HMSServerRecordingState.d.ts +2 -0
  109. package/lib/typescript/classes/HMSUpdateListenerActions.d.ts +6 -1
  110. package/lib/typescript/index.d.ts +6 -0
  111. package/package.json +1 -1
  112. package/react-native-hms.podspec +1 -1
  113. package/src/classes/HMSBrowserRecordingState.ts +10 -1
  114. package/src/classes/HMSEncoder.ts +162 -4
  115. package/src/classes/HMSHLSVariant.ts +8 -8
  116. package/src/classes/HMSLocalAudioStats.ts +15 -0
  117. package/src/classes/HMSLocalVideoStats.ts +23 -0
  118. package/src/classes/HMSPeerUpdate.ts +2 -0
  119. package/src/classes/HMSPermissions.ts +3 -3
  120. package/src/classes/HMSRTCStats.ts +27 -0
  121. package/src/classes/HMSRTCStatsReport.ts +17 -0
  122. package/src/classes/HMSRemoteAudioStats.ts +21 -0
  123. package/src/classes/HMSRemoteVideoStats.ts +29 -0
  124. package/src/classes/HMSRoom.ts +3 -0
  125. package/src/classes/HMSRoomUpdate.ts +1 -0
  126. package/src/classes/HMSRtmpStreamingState.ts +10 -1
  127. package/src/classes/HMSSDK.tsx +233 -10
  128. package/src/classes/HMSServerRecordingState.ts +7 -1
  129. package/src/classes/HMSUpdateListenerActions.ts +5 -0
  130. package/src/index.ts +6 -0
package/README.md CHANGED
@@ -14,6 +14,7 @@
14
14
  [![Discord](https://img.shields.io/discord/843749923060711464?label=Join%20on%20Discord)](https://100ms.live/discord)
15
15
  [![Firebase](https://img.shields.io/badge/Download%20Android-Firebase-green)](https://appdistribution.firebase.dev/i/7b7ab3b30e627c35)
16
16
  [![TestFlight](https://img.shields.io/badge/Download%20iOS-TestFlight-blue)](https://testflight.apple.com/join/v4bSIPad)
17
+ [![Activity](https://img.shields.io/github/commit-activity/m/100mslive/react-native-hms.svg)](https://github.com/100mslive/react-native-hms/projects/1)
17
18
  [![Register](https://img.shields.io/badge/Contact-Know%20More-blue)](https://dashboard.100ms.live/register)
18
19
 
19
20
  React native wrapper for 100ms SDK
@@ -22,8 +23,6 @@ React native wrapper for 100ms SDK
22
23
 
23
24
  ```bash
24
25
  npm install @100mslive/react-native-hms --save
25
-
26
- cd ios/ && pod install
27
26
  ```
28
27
 
29
28
  📲 Download the Sample iOS App here: https://testflight.apple.com/join/v4bSIPad
@@ -206,3 +205,12 @@ import { HMSUpdateListenerActions } from '@100mslive/react-native-hms';
206
205
  // add an error event listener
207
206
  hmsInstance.addEventListener(HMSUpdateListenerActions.ON_ERROR, onError);
208
207
  ```
208
+
209
+ # Run Example App
210
+ To run the example app on your system, follow these steps -
211
+ 1. In the project root, run `npm install`
212
+ 2. Go to the example folder, `cd example`
213
+ 3. In the example folder, run `npm install`
214
+ 4. To run on Android, run `npx react-native run-android`
215
+ 5. To run on iOS, first install the pods in iOS folder, `cd ios; pod install`. Then, in example folder, run `npx react-native run-ios`
216
+
@@ -0,0 +1,13 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="GradleSettings">
4
+ <option name="linkedExternalProjectsSettings">
5
+ <GradleProjectSettings>
6
+ <option name="testRunner" value="GRADLE" />
7
+ <option name="distributionType" value="DEFAULT_WRAPPED" />
8
+ <option name="externalProjectPath" value="$PROJECT_DIR$" />
9
+ <option name="resolveModulePerSourceSet" value="false" />
10
+ </GradleProjectSettings>
11
+ </option>
12
+ </component>
13
+ </project>
@@ -0,0 +1,9 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="ProjectRootManager" version="2" project-jdk-name="11" project-jdk-type="JavaSDK">
4
+ <output url="file://$PROJECT_DIR$/build/classes" />
5
+ </component>
6
+ <component name="ProjectType">
7
+ <option name="id" value="Android" />
8
+ </component>
9
+ </project>
@@ -0,0 +1,18 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <module external.linked.project.id=":" external.linked.project.path="$MODULE_DIR$/../.." external.root.project.path="$MODULE_DIR$/../.." external.system.id="GRADLE" type="JAVA_MODULE" version="4">
3
+ <component name="FacetManager">
4
+ <facet type="android-gradle" name="Android-Gradle">
5
+ <configuration>
6
+ <option name="GRADLE_PROJECT_PATH" value=":" />
7
+ <option name="LAST_SUCCESSFUL_SYNC_AGP_VERSION" />
8
+ <option name="LAST_KNOWN_AGP_VERSION" />
9
+ </configuration>
10
+ </facet>
11
+ </component>
12
+ <component name="NewModuleRootManager" inherit-compiler-output="true">
13
+ <exclude-output />
14
+ <content url="file://$MODULE_DIR$/../.." />
15
+ <orderEntry type="inheritedJdk" />
16
+ <orderEntry type="sourceFolder" forTests="false" />
17
+ </component>
18
+ </module>
@@ -0,0 +1,8 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="ProjectModuleManager">
4
+ <modules>
5
+ <module fileurl="file://$PROJECT_DIR$/.idea/modules/android.iml" filepath="$PROJECT_DIR$/.idea/modules/android.iml" />
6
+ </modules>
7
+ </component>
8
+ </project>
@@ -0,0 +1,3 @@
1
+
2
+ <
3
+ build.gradle,f/0/f07866736216be0ee2aba49e392191aeae700a35
@@ -0,0 +1,6 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="VcsDirectoryMappings">
4
+ <mapping directory="$PROJECT_DIR$/.." vcs="Git" />
5
+ </component>
6
+ </project>
@@ -26,7 +26,7 @@ def safeExtGet(prop, fallback) {
26
26
  }
27
27
 
28
28
  android {
29
- compileSdkVersion safeExtGet('Hmssdk_compileSdkVersion', 29)
29
+ compileSdkVersion safeExtGet('Hmssdk_compileSdkVersion', 30)
30
30
  defaultConfig {
31
31
  minSdkVersion safeExtGet('Hmssdk_minSdkVersion', 21)
32
32
  targetSdkVersion safeExtGet('Hmssdk_targetSdkVersion', 29)
@@ -63,7 +63,7 @@ dependencies {
63
63
  //noinspection GradleDynamicVersion
64
64
  implementation "com.facebook.react:react-native:+"
65
65
  implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" // From node_modules
66
- implementation 'com.github.100mslive.android-sdk:lib:2.2.8'
66
+ implementation 'com.github.100mslive.android-sdk:lib:2.3.1'
67
67
  implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.0'
68
68
  implementation 'androidx.constraintlayout:constraintlayout:2.1.0'
69
69
  implementation 'androidx.appcompat:appcompat:1.3.1'
@@ -0,0 +1,8 @@
1
+ ## This file must *NOT* be checked into Version Control Systems,
2
+ # as it contains information specific to your local configuration.
3
+ #
4
+ # Location of the SDK. This is only used by Gradle.
5
+ # For customization when using a Version Control System, please read the
6
+ # header note.
7
+ #Tue Mar 01 18:12:03 IST 2022
8
+ sdk.dir=/Users/yogesh/Library/Android/sdk
@@ -34,6 +34,7 @@ object HmsDecoder {
34
34
  room.putMap("hlsStreamingState", this.getHMSHlsStreamingState(hmsRoom.hlsStreamingState))
35
35
  room.putMap("localPeer", this.getHmsLocalPeer(hmsRoom.localPeer))
36
36
  room.putArray("peers", this.getAllPeers(hmsRoom.peerList))
37
+ room.putInt("peerCount", hmsRoom.peerCount)
37
38
  }
38
39
  return room
39
40
  }
@@ -123,7 +124,7 @@ object HmsDecoder {
123
124
  permissions.putBoolean("changeRoleForce", hmsPermissions.changeRoleForce)
124
125
  permissions.putBoolean("unmute", hmsPermissions.unmute)
125
126
  permissions.putBoolean("recording", hmsPermissions.recording)
126
- permissions.putBoolean("rtmp", hmsPermissions.rtmp)
127
+ permissions.putBoolean("streaming", hmsPermissions.streaming)
127
128
  permissions.putBoolean("changeRole", hmsPermissions.changeRole)
128
129
  }
129
130
  return permissions
@@ -362,11 +363,34 @@ object HmsDecoder {
362
363
  return decodedError
363
364
  }
364
365
 
366
+ private fun getCustomError(message: String?, code: Int?): WritableMap {
367
+ val decodedError: WritableMap = Arguments.createMap()
368
+ var customCode = 101
369
+ var customMessage = "SOMETHING WENT WRONG"
370
+ if (code !== null) {
371
+ customCode = code.toInt()
372
+ }
373
+ if (message !== null) {
374
+ customMessage = message
375
+ }
376
+ decodedError.putInt("code", customCode)
377
+ decodedError.putString("localizedDescription", customMessage)
378
+ decodedError.putString("description", customMessage)
379
+ decodedError.putString("message", customMessage)
380
+ decodedError.putInt("name", customCode)
381
+ decodedError.putInt("action", customCode)
382
+
383
+ return decodedError
384
+ }
385
+
365
386
  private fun getHMSBrowserRecordingState(data: HMSBrowserRecordingState?): ReadableMap {
366
387
  val input = Arguments.createMap()
367
388
  if (data !== null) {
368
389
  input.putBoolean("running", data.running)
369
- input.putMap("error", data.error?.let { this.getError(it) })
390
+ input.putString("startedAt", data.startedAt.toString())
391
+ input.putString("stoppedAt", data.stoppedAt.toString())
392
+ input.putBoolean("running", data.running)
393
+ input.putMap("error", this.getCustomError(data.error?.message, data.error?.code))
370
394
  }
371
395
  return input
372
396
  }
@@ -375,7 +399,9 @@ object HmsDecoder {
375
399
  val input = Arguments.createMap()
376
400
  if (data !== null) {
377
401
  input.putBoolean("running", data.running)
378
- input.putMap("error", data.error?.let { this.getError(it) })
402
+ input.putString("startedAt", data.startedAt.toString())
403
+ input.putString("stoppedAt", data.stoppedAt.toString())
404
+ input.putMap("error", this.getCustomError(data.error?.message, data.error?.code))
379
405
  }
380
406
  return input
381
407
  }
@@ -384,6 +410,7 @@ object HmsDecoder {
384
410
  val input = Arguments.createMap()
385
411
  if (data !== null) {
386
412
  input.putBoolean("running", data.running)
413
+ input.putString("startedAt", data.startedAt.toString())
387
414
  input.putMap("error", data.error?.let { this.getError(it) })
388
415
  }
389
416
  return input
@@ -406,7 +433,7 @@ object HmsDecoder {
406
433
  input.putString("hlsStreamUrl", variant.hlsStreamUrl)
407
434
  input.putString("meetingUrl", variant.meetingUrl)
408
435
  input.putString("metadata", variant.metadata)
409
- variant.startedAt?.let { input.putInt("startedAt", it.toInt()) }
436
+ input.putString("startedAt", variant.startedAt.toString())
410
437
  variants.pushMap(input)
411
438
  }
412
439
  }
@@ -11,6 +11,7 @@ import live.hms.video.media.settings.HMSVideoTrackSettings
11
11
  import live.hms.video.media.tracks.*
12
12
  import live.hms.video.sdk.models.*
13
13
  import live.hms.video.sdk.models.role.*
14
+ import live.hms.video.utils.HmsUtilities
14
15
 
15
16
  object HmsHelper {
16
17
 
@@ -47,24 +48,16 @@ object HmsHelper {
47
48
  return true
48
49
  }
49
50
 
50
- fun getPeerFromPeerId(peerId: String?, peers: Array<HMSPeer>?): HMSPeer? {
51
- if (peerId != null && peers != null) {
52
- for (peer in peers) {
53
- if (peerId == peer.peerID) {
54
- return peer
55
- }
56
- }
51
+ fun getPeerFromPeerId(peerId: String?, room: HMSRoom?): HMSPeer? {
52
+ if (peerId != null && room != null) {
53
+ return HmsUtilities.getPeer(peerId, room)
57
54
  }
58
55
  return null
59
56
  }
60
57
 
61
- fun getRemotePeerFromPeerId(peerId: String?, peers: Array<HMSRemotePeer>?): HMSRemotePeer? {
62
- if (peerId != null && peers != null) {
63
- for (peer in peers) {
64
- if (peerId == peer.peerID) {
65
- return peer
66
- }
67
- }
58
+ fun getRemotePeerFromPeerId(peerId: String?, room: HMSRoom?): HMSRemotePeer? {
59
+ if (peerId != null && room != null) {
60
+ return HmsUtilities.getPeer(peerId, room) as? HMSRemotePeer
68
61
  }
69
62
  return null
70
63
  }
@@ -98,64 +91,23 @@ object HmsHelper {
98
91
  return null
99
92
  }
100
93
 
101
- fun getRemoteAudioTrackFromTrackId(
102
- trackId: String?,
103
- remotePeers: Array<HMSRemotePeer>?
104
- ): HMSRemoteAudioTrack? {
105
- if (trackId != null && remotePeers != null) {
106
- for (remotePeer in remotePeers) {
107
- if (remotePeer.audioTrack?.trackId == trackId) {
108
- return remotePeer.audioTrack as HMSRemoteAudioTrack
109
- }
110
- }
111
- }
112
- return null
113
- }
114
-
115
- fun getRemoteVideoTrackFromTrackId(
116
- trackId: String?,
117
- remotePeers: Array<HMSRemotePeer>?
118
- ): HMSRemoteVideoTrack? {
119
- if (trackId != null && remotePeers != null) {
120
- for (remotePeer in remotePeers) {
121
- if (remotePeer.videoTrack?.trackId == trackId) {
122
- return remotePeer.videoTrack as HMSRemoteVideoTrack
123
- }
124
- }
94
+ fun getRemoteAudioTrackFromTrackId(trackId: String?, room: HMSRoom?): HMSRemoteAudioTrack? {
95
+ if (trackId != null && room != null) {
96
+ return HmsUtilities.getAudioTrack(trackId, room) as? HMSRemoteAudioTrack
125
97
  }
126
98
  return null
127
99
  }
128
100
 
129
- fun getTrackFromTrackId(trackId: String?, remotePeers: Array<HMSRemotePeer>?): HMSTrack? {
130
- if (trackId != null && remotePeers != null) {
131
- for (remotePeer in remotePeers) {
132
- if (remotePeer.audioTrack?.trackId == trackId) {
133
- return remotePeer.audioTrack as HMSTrack
134
- }
135
-
136
- if (remotePeer.videoTrack?.trackId == trackId) {
137
- return remotePeer.videoTrack as HMSTrack
138
- }
139
- }
101
+ fun getRemoteVideoTrackFromTrackId(trackId: String?, room: HMSRoom?): HMSRemoteVideoTrack? {
102
+ if (trackId != null && room != null) {
103
+ return HmsUtilities.getVideoTrack(trackId, room) as? HMSRemoteVideoTrack
140
104
  }
141
105
  return null
142
106
  }
143
107
 
144
- fun getLocalTrackFromTrackId(trackId: String?, localPeer: HMSLocalPeer?): HMSTrack? {
145
- if (trackId != null && localPeer != null) {
146
- if (localPeer.audioTrack?.trackId == trackId) {
147
- return localPeer.audioTrack as HMSTrack
148
- }
149
-
150
- if (localPeer.videoTrack?.trackId == trackId) {
151
- return localPeer.videoTrack as HMSTrack
152
- }
153
-
154
- for (auxTrack in localPeer.auxiliaryTracks) {
155
- if (auxTrack.trackId == trackId) {
156
- return auxTrack
157
- }
158
- }
108
+ fun getTrackFromTrackId(trackId: String?, room: HMSRoom?): HMSTrack? {
109
+ if (trackId != null && room != null) {
110
+ HmsUtilities.getTrack(trackId, room)
159
111
  }
160
112
  return null
161
113
  }
@@ -195,10 +195,17 @@ class HmsModule(reactContext: ReactApplicationContext) :
195
195
  }
196
196
 
197
197
  @ReactMethod
198
- fun muteAllPeersAudio(data: ReadableMap) {
198
+ fun setPlaybackForAllAudio(data: ReadableMap) {
199
199
  val hms = HmsHelper.getHms(data, hmsCollection)
200
200
 
201
- hms?.muteAllPeersAudio(data)
201
+ hms?.setPlaybackForAllAudio(data)
202
+ }
203
+
204
+ @ReactMethod
205
+ fun remoteMuteAllAudio(data: ReadableMap) {
206
+ val hms = HmsHelper.getHms(data, hmsCollection)
207
+
208
+ hms?.remoteMuteAllAudio()
202
209
  }
203
210
 
204
211
  @ReactMethod
@@ -266,6 +273,13 @@ class HmsModule(reactContext: ReactApplicationContext) :
266
273
  hms?.resetVolume()
267
274
  }
268
275
 
276
+ @ReactMethod
277
+ fun changeName(data: ReadableMap, callback: Promise?) {
278
+ val hms = HmsHelper.getHms(data, hmsCollection)
279
+
280
+ hms?.changeName(data, callback)
281
+ }
282
+
269
283
  fun emitEvent(event: String, data: WritableMap) {
270
284
  reactApplicationContext
271
285
  .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java)
@@ -294,7 +308,7 @@ class HmsModule(reactContext: ReactApplicationContext) :
294
308
  }
295
309
  }
296
310
  currentActivity?.application?.unregisterActivityLifecycleCallbacks(this)
297
- hmsCollection = mutableMapOf<String, HmsSDK>()
311
+ hmsCollection = mutableMapOf()
298
312
  }
299
313
  } catch (e: Exception) {
300
314
  // Log.d("error", e.message)
@@ -17,6 +17,7 @@ import live.hms.video.sdk.models.enums.HMSRoomUpdate
17
17
  import live.hms.video.sdk.models.enums.HMSTrackUpdate
18
18
  import live.hms.video.sdk.models.trackchangerequest.HMSChangeTrackStateRequest
19
19
  import live.hms.video.utils.HMSCoroutineScope
20
+ import live.hms.video.utils.HmsUtilities
20
21
 
21
22
  class HmsSDK(
22
23
  data: ReadableMap?,
@@ -140,6 +141,40 @@ class HmsSDK(
140
141
  previewInProgress = false
141
142
  }
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)
176
+ }
177
+
143
178
  override fun onPreview(room: HMSRoom, localTracks: Array<HMSTrack>) {
144
179
  val previewTracks = HmsDecoder.getPreviewTracks(localTracks)
145
180
  val hmsRoom = HmsDecoder.getHmsRoom(room)
@@ -381,19 +416,6 @@ class HmsSDK(
381
416
  fun setLocalMute(data: ReadableMap) {
382
417
  val isMute = data.getBoolean("isMute")
383
418
  hmsSDK?.getLocalPeer()?.audioTrack?.setMute(isMute)
384
- val type = if (isMute) "TRACK_MUTED" else "TRACK_UNMUTED"
385
- val localPeerData = HmsDecoder.getHmsLocalPeer(hmsSDK?.getLocalPeer())
386
- val remotePeerData = HmsDecoder.getHmsRemotePeers(hmsSDK?.getRemotePeers())
387
- val roomData = HmsDecoder.getHmsRoom(hmsSDK?.getRoom())
388
-
389
- val map: WritableMap = Arguments.createMap()
390
-
391
- map.putMap("room", roomData)
392
- map.putString("type", type)
393
- map.putMap("localPeer", localPeerData)
394
- map.putArray("remotePeers", remotePeerData)
395
- map.putString("id", id)
396
- delegate.emitEvent("ON_TRACK_UPDATE", map)
397
419
  }
398
420
 
399
421
  fun setLocalVideoMute(data: ReadableMap) {
@@ -487,8 +509,7 @@ class HmsSDK(
487
509
  )
488
510
  if (requiredKeys) {
489
511
  val peerId = data.getString("peerId")
490
- val peers = hmsSDK?.getPeers()
491
- val peer = HmsHelper.getPeerFromPeerId(peerId, peers)
512
+ val peer = HmsHelper.getPeerFromPeerId(peerId, hmsSDK?.getRoom())
492
513
  if (peer != null) {
493
514
  hmsSDK?.sendDirectMessage(
494
515
  data.getString("message") as String,
@@ -526,7 +547,7 @@ class HmsSDK(
526
547
  val force = data.getBoolean("force")
527
548
 
528
549
  if (peerId !== null && role !== null) {
529
- val hmsPeer = HmsHelper.getPeerFromPeerId(peerId, hmsSDK?.getPeers())
550
+ val hmsPeer = HmsHelper.getPeerFromPeerId(peerId, hmsSDK?.getRoom())
530
551
  val hmsRole = HmsHelper.getRoleFromRoleName(role, hmsSDK?.getRoles())
531
552
 
532
553
  if (hmsRole != null && hmsPeer != null) {
@@ -561,8 +582,7 @@ class HmsSDK(
561
582
  if (requiredKeys) {
562
583
  val trackId = data.getString("trackId")
563
584
  val mute = data.getBoolean("mute")
564
- val remotePeers = hmsSDK?.getRemotePeers()
565
- val track = HmsHelper.getTrackFromTrackId(trackId, remotePeers)
585
+ val track = HmsHelper.getTrackFromTrackId(trackId, hmsSDK?.getRoom())
566
586
  if (track != null) {
567
587
  hmsSDK?.changeTrackState(
568
588
  track,
@@ -641,11 +661,9 @@ class HmsSDK(
641
661
  HmsHelper.areAllRequiredKeysAvailable(data, arrayOf(Pair("trackId", "String")))
642
662
  if (requiredKeys) {
643
663
  val trackId = data.getString("trackId")
644
- val remotePeers = hmsSDK?.getRemotePeers()
645
- val localPeer = hmsSDK?.getLocalPeer()
646
- val localTrack = HmsHelper.getLocalTrackFromTrackId(trackId, localPeer)
664
+ val localTrack = HmsHelper.getTrackFromTrackId(trackId, hmsSDK?.getRoom())
647
665
  if (localTrack == null) {
648
- val track = HmsHelper.getTrackFromTrackId(trackId, remotePeers)
666
+ val track = HmsHelper.getTrackFromTrackId(trackId, hmsSDK?.getRoom())
649
667
  if (track != null) {
650
668
  val mute = track.isMute
651
669
  callback?.resolve(mute)
@@ -669,8 +687,7 @@ class HmsSDK(
669
687
  )
670
688
  if (requiredKeys) {
671
689
  val peerId = data.getString("peerId")
672
- val peers = hmsSDK?.getRemotePeers()
673
- val peer = HmsHelper.getRemotePeerFromPeerId(peerId, peers)
690
+ val peer = HmsHelper.getRemotePeerFromPeerId(peerId, hmsSDK?.getRoom())
674
691
 
675
692
  if (peer != null) {
676
693
  hmsSDK?.removePeerRequest(
@@ -742,7 +759,29 @@ class HmsSDK(
742
759
  }
743
760
  }
744
761
 
745
- fun muteAllPeersAudio(data: ReadableMap) {
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
+ }
781
+ }
782
+ }
783
+
784
+ fun setPlaybackForAllAudio(data: ReadableMap) {
746
785
  val requiredKeys = HmsHelper.areAllRequiredKeysAvailable(data, arrayOf(Pair("mute", "Boolean")))
747
786
  if (requiredKeys) {
748
787
  val mute = data.getBoolean("mute")
@@ -750,7 +789,7 @@ class HmsSDK(
750
789
  if (peers != null) {
751
790
  for (remotePeer in peers) {
752
791
  val peerId = remotePeer.peerID
753
- val peer = HmsHelper.getRemotePeerFromPeerId(peerId, peers)
792
+ val peer = HmsHelper.getRemotePeerFromPeerId(peerId, hmsSDK?.getRoom())
754
793
  peer?.audioTrack?.isPlaybackAllowed = !mute
755
794
  }
756
795
  val localPeerData = HmsDecoder.getHmsLocalPeer(hmsSDK?.getLocalPeer())
@@ -777,9 +816,8 @@ class HmsSDK(
777
816
  if (requiredKeys) {
778
817
  val trackId = data.getString("trackId")
779
818
  val playbackAllowed = data.getBoolean("playbackAllowed")
780
- val remotePeers = hmsSDK?.getRemotePeers()
781
- val remoteAudioTrack = HmsHelper.getRemoteAudioTrackFromTrackId(trackId, remotePeers)
782
- val remoteVideoTrack = HmsHelper.getRemoteVideoTrackFromTrackId(trackId, remotePeers)
819
+ val remoteAudioTrack = HmsHelper.getRemoteAudioTrackFromTrackId(trackId, hmsSDK?.getRoom())
820
+ val remoteVideoTrack = HmsHelper.getRemoteVideoTrackFromTrackId(trackId, hmsSDK?.getRoom())
783
821
  if (remoteAudioTrack != null) {
784
822
  remoteAudioTrack.isPlaybackAllowed = playbackAllowed
785
823
  } else if (remoteVideoTrack != null) {
@@ -795,9 +833,8 @@ class HmsSDK(
795
833
  HmsHelper.areAllRequiredKeysAvailable(data, arrayOf(Pair("trackId", "String")))
796
834
  if (requiredKeys) {
797
835
  val trackId = data.getString("trackId")
798
- val remotePeers = hmsSDK?.getRemotePeers()
799
- val remoteAudioTrack = HmsHelper.getRemoteAudioTrackFromTrackId(trackId, remotePeers)
800
- val remoteVideoTrack = HmsHelper.getRemoteVideoTrackFromTrackId(trackId, remotePeers)
836
+ val remoteAudioTrack = HmsHelper.getRemoteAudioTrackFromTrackId(trackId, hmsSDK?.getRoom())
837
+ val remoteVideoTrack = HmsHelper.getRemoteVideoTrackFromTrackId(trackId, hmsSDK?.getRoom())
801
838
  when {
802
839
  remoteAudioTrack != null -> {
803
840
  val isPlaybackAllowed = remoteAudioTrack.isPlaybackAllowed
@@ -1043,4 +1080,32 @@ class HmsSDK(
1043
1080
  }
1044
1081
  }
1045
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
+ }
1046
1111
  }
@@ -31,7 +31,7 @@ class HmsView(context: ReactContext) : FrameLayout(context) {
31
31
  surfaceView.setEnableHardwareScaler(true)
32
32
  }
33
33
 
34
- fun onReceiveNativeEvent() {
34
+ private fun onReceiveNativeEvent() {
35
35
  val event: WritableMap = Arguments.createMap()
36
36
  event.putString("message", "MyMessage")
37
37
  val reactContext = context as ReactContext