@100mslive/react-native-hms 1.8.0 → 1.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (152) hide show
  1. package/android/build.gradle +3 -3
  2. package/android/local.properties +8 -1
  3. package/android/src/main/java/com/reactnativehmssdk/HMSDecoder.kt +15 -5
  4. package/android/src/main/java/com/reactnativehmssdk/HMSHelper.kt +43 -5
  5. package/android/src/main/java/com/reactnativehmssdk/HMSManager.kt +120 -25
  6. package/android/src/main/java/com/reactnativehmssdk/HMSRNSDK.kt +220 -26
  7. package/ios/HMSConstants.swift +1 -0
  8. package/ios/HMSDecoder.swift +16 -5
  9. package/ios/HMSHelper.swift +33 -4
  10. package/ios/HMSManager.m +26 -0
  11. package/ios/HMSManager.swift +45 -1
  12. package/ios/HMSRNSDK.swift +158 -15
  13. package/ios/Hmssdk.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  14. package/ios/Hmssdk.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  15. package/ios/Hmssdk.xcodeproj/project.xcworkspace/xcuserdata/jatinnagar.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  16. package/ios/Hmssdk.xcodeproj/xcuserdata/jatinnagar.xcuserdatad/xcschemes/xcschememanagement.plist +14 -0
  17. package/lib/commonjs/classes/HMSAudioCodec.js +1 -2
  18. package/lib/commonjs/classes/HMSAudioCodec.js.map +1 -1
  19. package/lib/commonjs/classes/HMSAudioDevice.js +1 -2
  20. package/lib/commonjs/classes/HMSAudioDevice.js.map +1 -1
  21. package/lib/commonjs/classes/HMSAudioMixingMode.js +1 -2
  22. package/lib/commonjs/classes/HMSAudioMixingMode.js.map +1 -1
  23. package/lib/commonjs/classes/HMSAudioMode.js +1 -2
  24. package/lib/commonjs/classes/HMSAudioMode.js.map +1 -1
  25. package/lib/commonjs/classes/HMSCameraFacing.js +1 -2
  26. package/lib/commonjs/classes/HMSCameraFacing.js.map +1 -1
  27. package/lib/commonjs/classes/HMSConstants.js +1 -2
  28. package/lib/commonjs/classes/HMSConstants.js.map +1 -1
  29. package/lib/commonjs/classes/HMSEventEmitter.js +1 -2
  30. package/lib/commonjs/classes/HMSEventEmitter.js.map +1 -1
  31. package/lib/commonjs/classes/HMSIOSAudioMode.js +1 -2
  32. package/lib/commonjs/classes/HMSIOSAudioMode.js.map +1 -1
  33. package/lib/commonjs/classes/HMSLayer.js +1 -2
  34. package/lib/commonjs/classes/HMSLayer.js.map +1 -1
  35. package/lib/commonjs/classes/HMSLogAlarmManager.js +1 -2
  36. package/lib/commonjs/classes/HMSLogAlarmManager.js.map +1 -1
  37. package/lib/commonjs/classes/HMSLogLevel.js +1 -2
  38. package/lib/commonjs/classes/HMSLogLevel.js.map +1 -1
  39. package/lib/commonjs/classes/HMSLogger.js +1 -2
  40. package/lib/commonjs/classes/HMSLogger.js.map +1 -1
  41. package/lib/commonjs/classes/HMSManagerModule.js +1 -2
  42. package/lib/commonjs/classes/HMSManagerModule.js.map +1 -1
  43. package/lib/commonjs/classes/HMSMessageRecipientType.js +1 -2
  44. package/lib/commonjs/classes/HMSMessageRecipientType.js.map +1 -1
  45. package/lib/commonjs/classes/HMSNativeEventListener.js +1 -2
  46. package/lib/commonjs/classes/HMSNativeEventListener.js.map +1 -1
  47. package/lib/commonjs/classes/HMSPIPListenerActions.js +2 -2
  48. package/lib/commonjs/classes/HMSPIPListenerActions.js.map +1 -1
  49. package/lib/commonjs/classes/HMSPeer.js +15 -0
  50. package/lib/commonjs/classes/HMSPeer.js.map +1 -1
  51. package/lib/commonjs/classes/HMSPeerListIterator.js +64 -0
  52. package/lib/commonjs/classes/HMSPeerListIterator.js.map +1 -0
  53. package/lib/commonjs/classes/HMSPeerListIteratorOptions.js +2 -0
  54. package/lib/commonjs/classes/HMSPeerListIteratorOptions.js.map +1 -0
  55. package/lib/commonjs/classes/HMSPeerUpdate.js +3 -4
  56. package/lib/commonjs/classes/HMSPeerUpdate.js.map +1 -1
  57. package/lib/commonjs/classes/HMSPeersCache.js +8 -2
  58. package/lib/commonjs/classes/HMSPeersCache.js.map +1 -1
  59. package/lib/commonjs/classes/HMSQualityLimitationReason.js +1 -2
  60. package/lib/commonjs/classes/HMSQualityLimitationReason.js.map +1 -1
  61. package/lib/commonjs/classes/HMSRoomCache.js +1 -2
  62. package/lib/commonjs/classes/HMSRoomCache.js.map +1 -1
  63. package/lib/commonjs/classes/HMSRoomUpdate.js +1 -2
  64. package/lib/commonjs/classes/HMSRoomUpdate.js.map +1 -1
  65. package/lib/commonjs/classes/HMSSDK.js +152 -6
  66. package/lib/commonjs/classes/HMSSDK.js.map +1 -1
  67. package/lib/commonjs/classes/HMSTrackSettingsInitState.js +1 -2
  68. package/lib/commonjs/classes/HMSTrackSettingsInitState.js.map +1 -1
  69. package/lib/commonjs/classes/HMSTrackSource.js +1 -2
  70. package/lib/commonjs/classes/HMSTrackSource.js.map +1 -1
  71. package/lib/commonjs/classes/HMSTrackType.js +1 -2
  72. package/lib/commonjs/classes/HMSTrackType.js.map +1 -1
  73. package/lib/commonjs/classes/HMSTrackUpdate.js +1 -2
  74. package/lib/commonjs/classes/HMSTrackUpdate.js.map +1 -1
  75. package/lib/commonjs/classes/HMSUpdateListenerActions.js +2 -2
  76. package/lib/commonjs/classes/HMSUpdateListenerActions.js.map +1 -1
  77. package/lib/commonjs/classes/HMSVideoCodec.js +1 -2
  78. package/lib/commonjs/classes/HMSVideoCodec.js.map +1 -1
  79. package/lib/commonjs/classes/HMSVideoViewMode.js +1 -2
  80. package/lib/commonjs/classes/HMSVideoViewMode.js.map +1 -1
  81. package/lib/commonjs/classes/HmsView.js +3 -4
  82. package/lib/commonjs/classes/HmsView.js.map +1 -1
  83. package/lib/commonjs/components/HMSHLSPlayer/HMSHLSPlayer.js +3 -4
  84. package/lib/commonjs/components/HMSHLSPlayer/HMSHLSPlayer.js.map +1 -1
  85. package/lib/commonjs/components/HMSHLSPlayer/RCTHMSHLSPlayer.js +2 -4
  86. package/lib/commonjs/components/HMSHLSPlayer/RCTHMSHLSPlayer.js.map +1 -1
  87. package/lib/commonjs/components/HMSHLSPlayer/hooks.js +5 -10
  88. package/lib/commonjs/components/HMSHLSPlayer/hooks.js.map +1 -1
  89. package/lib/commonjs/hooks/useHMSPeerUpdates.js +2 -2
  90. package/lib/commonjs/hooks/useHMSPeerUpdates.js.map +1 -1
  91. package/lib/commonjs/index.js +1 -2
  92. package/lib/commonjs/index.js.map +1 -1
  93. package/lib/commonjs/stores/hls-player-stats-store.js +1 -2
  94. package/lib/commonjs/stores/hls-player-stats-store.js.map +1 -1
  95. package/lib/commonjs/stores/hms-store.js +1 -2
  96. package/lib/commonjs/stores/hms-store.js.map +1 -1
  97. package/lib/commonjs/types.js +3 -6
  98. package/lib/commonjs/types.js.map +1 -1
  99. package/lib/module/classes/HMSPIPListenerActions.js +1 -0
  100. package/lib/module/classes/HMSPIPListenerActions.js.map +1 -1
  101. package/lib/module/classes/HMSPeer.js +15 -0
  102. package/lib/module/classes/HMSPeer.js.map +1 -1
  103. package/lib/module/classes/HMSPeerListIterator.js +58 -0
  104. package/lib/module/classes/HMSPeerListIterator.js.map +1 -0
  105. package/lib/module/classes/HMSPeerListIteratorOptions.js +2 -0
  106. package/lib/module/classes/HMSPeerListIteratorOptions.js.map +1 -0
  107. package/lib/module/classes/HMSPeerUpdate.js +2 -1
  108. package/lib/module/classes/HMSPeerUpdate.js.map +1 -1
  109. package/lib/module/classes/HMSPeersCache.js +7 -0
  110. package/lib/module/classes/HMSPeersCache.js.map +1 -1
  111. package/lib/module/classes/HMSSDK.js +153 -7
  112. package/lib/module/classes/HMSSDK.js.map +1 -1
  113. package/lib/module/classes/HMSUpdateListenerActions.js +1 -0
  114. package/lib/module/classes/HMSUpdateListenerActions.js.map +1 -1
  115. package/lib/typescript/classes/HMSPIPListenerActions.d.ts +1 -0
  116. package/lib/typescript/classes/HMSPeer.d.ts +3 -0
  117. package/lib/typescript/classes/HMSPeerListIterator.d.ts +9 -0
  118. package/lib/typescript/classes/HMSPeerListIteratorOptions.d.ts +24 -0
  119. package/lib/typescript/classes/HMSPeerUpdate.d.ts +2 -1
  120. package/lib/typescript/classes/HMSPeersCache.d.ts +1 -0
  121. package/lib/typescript/classes/HMSSDK.d.ts +46 -1
  122. package/lib/typescript/classes/HMSUpdateListenerActions.d.ts +2 -1
  123. package/package.json +1 -1
  124. package/sdk-versions.json +2 -2
  125. package/src/classes/HMSPIPListenerActions.ts +1 -0
  126. package/src/classes/HMSPeer.ts +25 -0
  127. package/src/classes/HMSPeerListIterator.ts +60 -0
  128. package/src/classes/HMSPeerListIteratorOptions.ts +26 -0
  129. package/src/classes/HMSPeerUpdate.ts +2 -0
  130. package/src/classes/HMSPeersCache.ts +7 -0
  131. package/src/classes/HMSSDK.tsx +187 -4
  132. package/src/classes/HMSUpdateListenerActions.ts +1 -0
  133. package/android/.gradle/6.7.1/executionHistory/executionHistory.bin +0 -0
  134. package/android/.gradle/6.7.1/executionHistory/executionHistory.lock +0 -0
  135. package/android/.gradle/6.7.1/fileChanges/last-build.bin +0 -0
  136. package/android/.gradle/6.7.1/fileHashes/fileHashes.bin +0 -0
  137. package/android/.gradle/6.7.1/fileHashes/fileHashes.lock +0 -0
  138. package/android/.gradle/6.7.1/gc.properties +0 -0
  139. package/android/.gradle/6.9/executionHistory/executionHistory.bin +0 -0
  140. package/android/.gradle/6.9/executionHistory/executionHistory.lock +0 -0
  141. package/android/.gradle/6.9/fileChanges/last-build.bin +0 -0
  142. package/android/.gradle/6.9/fileHashes/fileHashes.bin +0 -0
  143. package/android/.gradle/6.9/fileHashes/fileHashes.lock +0 -0
  144. package/android/.gradle/6.9/gc.properties +0 -0
  145. package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
  146. package/android/.gradle/buildOutputCleanup/cache.properties +0 -2
  147. package/android/.gradle/buildOutputCleanup/outputFiles.bin +0 -0
  148. package/android/.gradle/checksums/checksums.lock +0 -0
  149. package/android/.gradle/checksums/md5-checksums.bin +0 -0
  150. package/android/.gradle/checksums/sha1-checksums.bin +0 -0
  151. package/android/.gradle/configuration-cache/gc.properties +0 -0
  152. package/android/.gradle/vcs-1/gc.properties +0 -0
@@ -86,7 +86,7 @@ dependencies {
86
86
  implementation "androidx.constraintlayout:constraintlayout:2.1.3"
87
87
  implementation "androidx.appcompat:appcompat:1.3.1"
88
88
 
89
- implementation "live.100ms:android-sdk:${sdkVersions["android"]}"
90
- implementation "live.100ms:video-view:${sdkVersions["android"]}"
91
- implementation "live.100ms:hls-player:${sdkVersions["android"]}"
89
+ implementation "live.100ms:android-sdk:${sdkVersions["android"]}"
90
+ implementation "live.100ms:video-view:${sdkVersions["android"]}"
91
+ implementation "live.100ms:hls-player:${sdkVersions["android"]}"
92
92
  }
@@ -1 +1,8 @@
1
- sdk.dir=/Users/yogesh/Library/Android/sdk
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
+ #Mon Nov 14 20:51:00 IST 2022
8
+ sdk.dir=/Users/jatinnagar/Library/Android/sdk
@@ -172,6 +172,9 @@ object HMSDecoder {
172
172
  HMSPeerUpdate.NAME_CHANGED -> {
173
173
  print("$peerUpdateType received")
174
174
  }
175
+ HMSPeerUpdate.HAND_RAISED_CHANGED -> {
176
+ peer.putBoolean("isHandRaised", hmsPeer.isHandRaised)
177
+ }
175
178
  else -> {
176
179
  print("Unhandled Peer Update Type received: $peerUpdateType")
177
180
  }
@@ -205,6 +208,9 @@ object HMSDecoder {
205
208
  HMSPeerUpdate.NAME_CHANGED -> {
206
209
  print("$peerUpdateType received")
207
210
  }
211
+ HMSPeerUpdate.HAND_RAISED_CHANGED -> {
212
+ peer.putBoolean("isHandRaised", hmsPeer.isHandRaised)
213
+ }
208
214
  else -> {
209
215
  print("Unhandled Peer Update Type received: $peerUpdateType")
210
216
  }
@@ -231,6 +237,8 @@ object HMSDecoder {
231
237
 
232
238
  peer.putMap("role", this.getHmsRole(hmsPeer.hmsRole))
233
239
 
240
+ peer.putBoolean("isHandRaised", hmsPeer.isHandRaised)
241
+
234
242
  hmsPeer.networkQuality?.let {
235
243
  peer.putMap("networkQuality", this.getHmsNetworkQuality(it))
236
244
  }
@@ -479,10 +487,12 @@ object HMSDecoder {
479
487
  private fun getHmsAudioTrackSettings(hmsAudioTrackSettings: HMSAudioTrackSettings?): WritableMap {
480
488
  val settings: WritableMap = Arguments.createMap()
481
489
  if (hmsAudioTrackSettings != null) {
482
- settings.putBoolean(
483
- "useHardwareAcousticEchoCanceler",
484
- hmsAudioTrackSettings.useHardwareAcousticEchoCanceler,
485
- )
490
+ hmsAudioTrackSettings.useHardwareAcousticEchoCanceler?.let {
491
+ settings.putBoolean(
492
+ "useHardwareAcousticEchoCanceler",
493
+ it,
494
+ )
495
+ }
486
496
  settings.putString("initialState", hmsAudioTrackSettings.initialState.name)
487
497
  }
488
498
  return settings
@@ -625,7 +635,7 @@ object HMSDecoder {
625
635
  fun getHMSBrowserRecordingState(data: HMSBrowserRecordingState?): ReadableMap {
626
636
  val input = Arguments.createMap()
627
637
  if (data !== null) {
628
- input.putBoolean("initialising", false)
638
+ input.putBoolean("initialising", data.initialising)
629
639
 
630
640
  input.putBoolean("running", data.running)
631
641
 
@@ -18,6 +18,8 @@ import live.hms.video.media.settings.*
18
18
  import live.hms.video.media.tracks.HMSRemoteAudioTrack
19
19
  import live.hms.video.media.tracks.HMSRemoteVideoTrack
20
20
  import live.hms.video.media.tracks.HMSTrack
21
+ import live.hms.video.sdk.HMSSDK
22
+ import live.hms.video.sdk.listeners.PeerListResultListener
21
23
  import live.hms.video.sdk.models.*
22
24
  import live.hms.video.sdk.models.enums.AudioMixingMode
23
25
  import live.hms.video.sdk.models.role.HMSRole
@@ -27,6 +29,10 @@ import live.hms.video.utils.HmsUtilities
27
29
  import org.webrtc.SurfaceViewRenderer
28
30
  import java.io.ByteArrayOutputStream
29
31
  import java.util.*
32
+ import kotlin.collections.ArrayList
33
+ import kotlin.coroutines.resume
34
+ import kotlin.coroutines.resumeWithException
35
+ import kotlin.coroutines.suspendCoroutine
30
36
 
31
37
  object HMSHelper {
32
38
  fun areAllRequiredKeysAvailable(
@@ -105,14 +111,35 @@ object HMSHelper {
105
111
  return null
106
112
  }
107
113
 
108
- fun getRemotePeerFromPeerId(
114
+ suspend fun getRemotePeerFromPeerId(
109
115
  peerId: String?,
110
- room: HMSRoom?,
116
+ hmsSDK: HMSSDK?,
111
117
  ): HMSRemotePeer? {
112
- if (peerId != null && room != null) {
113
- return HmsUtilities.getPeer(peerId, room) as? HMSRemotePeer
118
+ return suspendCoroutine {
119
+ val room = hmsSDK?.getRoom()
120
+
121
+ if (peerId != null && room != null) {
122
+ val peerFromRoom = HmsUtilities.getPeer(peerId, room) as? HMSRemotePeer
123
+ if (peerFromRoom != null) {
124
+ it.resume(peerFromRoom)
125
+ } else {
126
+ val limit = 1
127
+ val peerIds = arrayListOf(peerId)
128
+ val peerListIterator = hmsSDK.getPeerListIterator(PeerListIteratorOptions(limit = limit, byPeerIds = peerIds))
129
+ peerListIterator.next(object : PeerListResultListener {
130
+ override fun onError(error: HMSException) {
131
+ it.resumeWithException(error)
132
+ }
133
+ override fun onSuccess(result: ArrayList<HMSPeer>) {
134
+ val peerFromIterator = result[0]
135
+ it.resume(peerFromIterator as? HMSRemotePeer)
136
+ }
137
+ })
138
+ }
139
+ } else {
140
+ it.resume(null)
141
+ }
114
142
  }
115
- return null
116
143
  }
117
144
 
118
145
  fun getRolesFromRoleNames(
@@ -668,4 +695,15 @@ object HMSHelper {
668
695
  }
669
696
  return HMSAudioManager.AudioDevice.SPEAKER_PHONE
670
697
  }
698
+
699
+ fun getPeerListIteratorOptions(data: ReadableMap?): PeerListIteratorOptions? {
700
+ if (data == null) {
701
+ return null
702
+ }
703
+ val limit = data.getInt("limit")
704
+ val role = data.getString("byRoleName")
705
+ val peerIds = data.getArray("byPeerIds")?.toArrayList() as? ArrayList<String>
706
+
707
+ return PeerListIteratorOptions(null, role, peerIds, limit)
708
+ }
671
709
  }
@@ -5,6 +5,7 @@ import android.app.Application
5
5
  import android.app.PendingIntent
6
6
  import android.content.Intent
7
7
  import android.content.pm.PackageManager
8
+ import android.content.res.Configuration
8
9
  import android.os.Build
9
10
  import android.os.Bundle
10
11
  import android.util.Rational
@@ -21,6 +22,32 @@ class HMSManager(reactContext: ReactApplicationContext) :
21
22
  companion object {
22
23
  const val REACT_CLASS = "HMSManager"
23
24
  var hmsCollection = mutableMapOf<String, HMSRNSDK>()
25
+
26
+ var reactAppContext: ReactApplicationContext? = null
27
+ var pipParamConfig: PipParamConfig? = null;
28
+ var pipParamsUntyped: Any? = null;
29
+ var emitter: DeviceEventManagerModule.RCTDeviceEventEmitter? = null
30
+
31
+ fun onPictureInPictureModeChanged(isInPictureInPictureMode: Boolean, newConfig: Configuration) {
32
+ emitter?.let {
33
+ val data = Arguments.createMap()
34
+ data.putBoolean("isInPictureInPictureMode", isInPictureInPictureMode)
35
+
36
+ it.emit("ON_PIP_MODE_CHANGED", data)
37
+ }
38
+ }
39
+
40
+ fun onUserLeaveHint() {
41
+ val pipParams = pipParamsUntyped
42
+ if (
43
+ Build.VERSION.SDK_INT >= Build.VERSION_CODES.O &&
44
+ Build.VERSION.SDK_INT < Build.VERSION_CODES.S &&
45
+ pipParamConfig?.autoEnterPipMode == true &&
46
+ pipParams is android.app.PictureInPictureParams
47
+ ) {
48
+ reactAppContext?.currentActivity?.enterPictureInPictureMode(pipParams)
49
+ }
50
+ }
24
51
  }
25
52
 
26
53
  override fun getName(): String {
@@ -31,6 +58,21 @@ class HMSManager(reactContext: ReactApplicationContext) :
31
58
  return hmsCollection
32
59
  }
33
60
 
61
+ private fun setupPip() {
62
+ if (emitter == null) {
63
+ reactAppContext = reactApplicationContext
64
+
65
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
66
+ currentActivity?.let {
67
+ pipReceiver?.register(it)
68
+ }
69
+ }
70
+
71
+ emitter = reactApplicationContext
72
+ .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java)
73
+ }
74
+ }
75
+
34
76
  // Example method
35
77
  // See https://reactnative.dev/docs/native-modules-android
36
78
  @ReactMethod
@@ -743,7 +785,8 @@ class HMSManager(reactContext: ReactApplicationContext) :
743
785
  }
744
786
  // endregion
745
787
 
746
- private data class PipParamConfig(
788
+ data class PipParamConfig(
789
+ val autoEnterPipMode: Boolean,
747
790
  val aspectRatio: Pair<Int, Int>?,
748
791
  val showEndButton: Boolean,
749
792
  val showVideoButton: Boolean,
@@ -767,6 +810,8 @@ class HMSManager(reactContext: ReactApplicationContext) :
767
810
  }
768
811
 
769
812
  try {
813
+ setupPip()
814
+
770
815
  PipActionReceiver.sdkIdForPIP = data.getString("id")
771
816
 
772
817
  when (action) {
@@ -774,8 +819,8 @@ class HMSManager(reactContext: ReactApplicationContext) :
774
819
  val result = isPipModeSupported()
775
820
  promise?.resolve(result)
776
821
  }
777
- "enablePipMode" -> {
778
- val result = enablePipMode(data)
822
+ "enterPipMode" -> {
823
+ val result = enterPipMode(data)
779
824
  promise?.resolve(result)
780
825
  }
781
826
  "setPictureInPictureParams" -> {
@@ -807,10 +852,9 @@ class HMSManager(reactContext: ReactApplicationContext) :
807
852
  )
808
853
  }
809
854
 
810
- // TODO:= We need compileSdkVersion >= 31 for autoEnterEnabled
811
- // if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S && config.autoEnterEnabled !== null)
812
- // it.setAutoEnterEnabled(config.autoEnterEnabled)
813
- // }
855
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
856
+ it.setAutoEnterEnabled(config.autoEnterPipMode)
857
+ }
814
858
 
815
859
  // region Setting RemoteActions on PictureInPictureParams
816
860
  val hmssdk = getHmsInstance()[PipActionReceiver.sdkIdForPIP!!]?.hmsSDK
@@ -897,14 +941,12 @@ class HMSManager(reactContext: ReactApplicationContext) :
897
941
  return null
898
942
  }
899
943
 
944
+ var autoEnterPipMode = false
900
945
  var aspectRatio: Pair<Int, Int> = Pair(16, 9)
901
946
  var showEndButton = false
902
947
  var showAudioButton = false
903
948
  var showVideoButton = false
904
949
 
905
- // TODO:= We need compileSdkVersion >= 31 for autoEnterEnabled
906
- // var autoEnterEnabled: Boolean? = null;
907
-
908
950
  if (data !== null) {
909
951
  if (data.hasKey("aspectRatio")) {
910
952
  val aspectRatioArray = data.getArray("aspectRatio")
@@ -940,17 +982,17 @@ class HMSManager(reactContext: ReactApplicationContext) :
940
982
  showVideoButton = data.getBoolean("videoButton")
941
983
  }
942
984
 
943
- // TODO:= We need compileSdkVersion >= 31 for autoEnterEnabled
944
- // if (data.hasKey("autoEnterEnabled")) {
945
- // val autoEnterEnabledType = data.getType("autoEnterEnabled")
946
- //
947
- // if (autoEnterEnabledType === ReadableType.Boolean) {
948
- // autoEnterEnabled = data.getBoolean("autoEnterEnabled")
949
- // }
950
- // }
985
+ if (data.hasKey("autoEnterPipMode")) {
986
+ val autoEnterPipModeType = data.getType("autoEnterPipMode")
987
+
988
+ if (autoEnterPipModeType === ReadableType.Boolean) {
989
+ autoEnterPipMode = data.getBoolean("autoEnterPipMode")
990
+ }
991
+ }
951
992
  }
952
993
 
953
994
  return PipParamConfig(
995
+ autoEnterPipMode = autoEnterPipMode,
954
996
  aspectRatio = aspectRatio,
955
997
  showEndButton = showEndButton,
956
998
  showAudioButton = showAudioButton,
@@ -975,6 +1017,10 @@ class HMSManager(reactContext: ReactApplicationContext) :
975
1017
  if (pipParams !is android.app.PictureInPictureParams) {
976
1018
  return false
977
1019
  }
1020
+
1021
+ HMSManager.pipParamConfig = pipParamConfig
1022
+ HMSManager.pipParamsUntyped = pipParams
1023
+
978
1024
  activity.setPictureInPictureParams(pipParams)
979
1025
  return true
980
1026
  } catch (e: Exception) {
@@ -991,7 +1037,7 @@ class HMSManager(reactContext: ReactApplicationContext) :
991
1037
  }
992
1038
 
993
1039
  @RequiresApi(Build.VERSION_CODES.O)
994
- private fun enablePipMode(data: ReadableMap): Boolean {
1040
+ private fun enterPipMode(data: ReadableMap): Boolean {
995
1041
  if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
996
1042
  return false
997
1043
  }
@@ -1007,12 +1053,11 @@ class HMSManager(reactContext: ReactApplicationContext) :
1007
1053
  if (pipParams !is android.app.PictureInPictureParams) {
1008
1054
  return false
1009
1055
  }
1010
- pipReceiver?.register(activity)
1011
- val entered = activity.enterPictureInPictureMode(pipParams)
1012
- if (entered === false) {
1013
- pipReceiver?.unregister(activity)
1014
- }
1015
- return entered
1056
+
1057
+ HMSManager.pipParamConfig = pipParamConfig
1058
+ HMSManager.pipParamsUntyped = pipParams
1059
+
1060
+ return activity.enterPictureInPictureMode(pipParams)
1016
1061
  } catch (e: Exception) {
1017
1062
  throw e
1018
1063
  }
@@ -1128,6 +1173,56 @@ class HMSManager(reactContext: ReactApplicationContext) :
1128
1173
  hms?.getRoomLayout(data, promise)
1129
1174
  }
1130
1175
 
1176
+ @ReactMethod
1177
+ fun raiseLocalPeerHand(
1178
+ data: ReadableMap,
1179
+ promise: Promise?,
1180
+ ) {
1181
+ val hms = HMSHelper.getHms(data, hmsCollection)
1182
+ hms?.raiseLocalPeerHand(data, promise)
1183
+ }
1184
+
1185
+ @ReactMethod
1186
+ fun lowerLocalPeerHand(
1187
+ data: ReadableMap,
1188
+ promise: Promise?,
1189
+ ) {
1190
+ val hms = HMSHelper.getHms(data, hmsCollection)
1191
+ hms?.lowerLocalPeerHand(data, promise)
1192
+ }
1193
+
1194
+ fun lowerRemotePeerHand(
1195
+ data: ReadableMap,
1196
+ promise: Promise?,
1197
+ ) {
1198
+ val hms = HMSHelper.getHms(data, hmsCollection)
1199
+ hms?.lowerRemotePeerHand(data, promise)
1200
+ }
1201
+
1202
+ @ReactMethod(isBlockingSynchronousMethod = true)
1203
+ fun getPeerListIterator(data: ReadableMap): WritableMap? {
1204
+ val hms = HMSHelper.getHms(data, hmsCollection) ?: return null
1205
+ return hms.getPeerListIterator(data)
1206
+ }
1207
+
1208
+ @ReactMethod
1209
+ fun peerListIteratorHasNext(
1210
+ data: ReadableMap,
1211
+ promise: Promise?,
1212
+ ) {
1213
+ val hms = HMSHelper.getHms(data, hmsCollection)
1214
+ hms?.peerListIteratorHasNext(data, promise)
1215
+ }
1216
+
1217
+ @ReactMethod
1218
+ fun peerListIteratorNext(
1219
+ data: ReadableMap,
1220
+ promise: Promise?,
1221
+ ) {
1222
+ val hms = HMSHelper.getHms(data, hmsCollection)
1223
+ hms?.peerListIteratorNext(data, promise)
1224
+ }
1225
+
1131
1226
  fun emitEvent(
1132
1227
  event: String,
1133
1228
  data: WritableMap,