@100mslive/react-native-hms 1.10.7 → 1.10.9

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 (197) hide show
  1. package/README.md +6 -5
  2. package/android/src/main/java/com/reactnativehmssdk/HMSManager.kt +47 -8
  3. package/android/src/main/java/com/reactnativehmssdk/HMSRNSDK.kt +34 -3
  4. package/android/src/main/java/com/reactnativehmssdk/PipActionReceiver.kt +3 -1
  5. package/ios/HMSConstants.swift +1 -0
  6. package/ios/HMSManager.m +39 -0
  7. package/ios/HMSManager.swift +116 -1
  8. package/ios/HMSRNSDK.swift +276 -2
  9. package/ios/PIPMode/HMSPipModel.swift +18 -0
  10. package/ios/PIPMode/HMSPipView.swift +36 -0
  11. package/ios/PIPMode/HMSSampleBufferSwiftUIView.swift +45 -0
  12. package/lib/commonjs/classes/HMSAudioDevice.js +9 -0
  13. package/lib/commonjs/classes/HMSAudioDevice.js.map +1 -1
  14. package/lib/commonjs/classes/HMSAudioMixingMode.js +11 -0
  15. package/lib/commonjs/classes/HMSAudioMixingMode.js.map +1 -1
  16. package/lib/commonjs/classes/HMSAudioTrack.js +9 -0
  17. package/lib/commonjs/classes/HMSAudioTrack.js.map +1 -1
  18. package/lib/commonjs/classes/HMSCameraFacing.js +9 -0
  19. package/lib/commonjs/classes/HMSCameraFacing.js.map +1 -1
  20. package/lib/commonjs/classes/HMSConfig.js +27 -0
  21. package/lib/commonjs/classes/HMSConfig.js.map +1 -1
  22. package/lib/commonjs/classes/HMSException.js +18 -0
  23. package/lib/commonjs/classes/HMSException.js.map +1 -1
  24. package/lib/commonjs/classes/HMSHLSTimedMetadata.js.map +1 -1
  25. package/lib/commonjs/classes/HMSIOSAudioMode.js +15 -0
  26. package/lib/commonjs/classes/HMSIOSAudioMode.js.map +1 -1
  27. package/lib/commonjs/classes/HMSLogAlarmManager.js +12 -0
  28. package/lib/commonjs/classes/HMSLogAlarmManager.js.map +1 -1
  29. package/lib/commonjs/classes/HMSLogLevel.js +12 -0
  30. package/lib/commonjs/classes/HMSLogLevel.js.map +1 -1
  31. package/lib/commonjs/classes/HMSLogSettings.js +14 -0
  32. package/lib/commonjs/classes/HMSLogSettings.js.map +1 -1
  33. package/lib/commonjs/classes/HMSNetworkQuality.js +11 -0
  34. package/lib/commonjs/classes/HMSNetworkQuality.js.map +1 -1
  35. package/lib/commonjs/classes/HMSNoiseCancellationPlugin.js +40 -10
  36. package/lib/commonjs/classes/HMSNoiseCancellationPlugin.js.map +1 -1
  37. package/lib/commonjs/classes/HMSPIPConfig.js +4 -0
  38. package/lib/commonjs/classes/HMSPIPConfig.js.map +1 -1
  39. package/lib/commonjs/classes/HMSPIPListenerActions.js +9 -0
  40. package/lib/commonjs/classes/HMSPIPListenerActions.js.map +1 -1
  41. package/lib/commonjs/classes/HMSPeer.js +148 -0
  42. package/lib/commonjs/classes/HMSPeer.js.map +1 -1
  43. package/lib/commonjs/classes/HMSPeerType.js +12 -1
  44. package/lib/commonjs/classes/HMSPeerType.js.map +1 -1
  45. package/lib/commonjs/classes/HMSRTMPConfig.js +14 -0
  46. package/lib/commonjs/classes/HMSRTMPConfig.js.map +1 -1
  47. package/lib/commonjs/classes/HMSRole.js +17 -0
  48. package/lib/commonjs/classes/HMSRole.js.map +1 -1
  49. package/lib/commonjs/classes/HMSRtmpVideoResolution.js +13 -0
  50. package/lib/commonjs/classes/HMSRtmpVideoResolution.js.map +1 -1
  51. package/lib/commonjs/classes/HMSSDK.js +1153 -233
  52. package/lib/commonjs/classes/HMSSDK.js.map +1 -1
  53. package/lib/commonjs/classes/HMSSessionStore.js +14 -15
  54. package/lib/commonjs/classes/HMSSessionStore.js.map +1 -1
  55. package/lib/commonjs/classes/HMSTrack.js +13 -0
  56. package/lib/commonjs/classes/HMSTrack.js.map +1 -1
  57. package/lib/commonjs/classes/HMSTrackSettings.js +10 -0
  58. package/lib/commonjs/classes/HMSTrackSettings.js.map +1 -1
  59. package/lib/commonjs/classes/HMSTrackSettingsInitState.js +9 -0
  60. package/lib/commonjs/classes/HMSTrackSettingsInitState.js.map +1 -1
  61. package/lib/commonjs/classes/HMSTrackSource.js +10 -0
  62. package/lib/commonjs/classes/HMSTrackSource.js.map +1 -1
  63. package/lib/commonjs/classes/HMSTrackType.js +7 -0
  64. package/lib/commonjs/classes/HMSTrackType.js.map +1 -1
  65. package/lib/commonjs/classes/HMSUpdateListenerActions.js +42 -3
  66. package/lib/commonjs/classes/HMSUpdateListenerActions.js.map +1 -1
  67. package/lib/commonjs/classes/HMSVideoTrack.js +17 -0
  68. package/lib/commonjs/classes/HMSVideoTrack.js.map +1 -1
  69. package/lib/commonjs/classes/HMSVideoTrackSettings.js +12 -2
  70. package/lib/commonjs/classes/HMSVideoTrackSettings.js.map +1 -1
  71. package/lib/commonjs/classes/HmsView.js +42 -0
  72. package/lib/commonjs/classes/HmsView.js.map +1 -1
  73. package/lib/module/classes/HMSAudioDevice.js +9 -0
  74. package/lib/module/classes/HMSAudioDevice.js.map +1 -1
  75. package/lib/module/classes/HMSAudioMixingMode.js +11 -0
  76. package/lib/module/classes/HMSAudioMixingMode.js.map +1 -1
  77. package/lib/module/classes/HMSAudioTrack.js +9 -0
  78. package/lib/module/classes/HMSAudioTrack.js.map +1 -1
  79. package/lib/module/classes/HMSCameraFacing.js +9 -0
  80. package/lib/module/classes/HMSCameraFacing.js.map +1 -1
  81. package/lib/module/classes/HMSConfig.js +27 -0
  82. package/lib/module/classes/HMSConfig.js.map +1 -1
  83. package/lib/module/classes/HMSException.js +18 -0
  84. package/lib/module/classes/HMSException.js.map +1 -1
  85. package/lib/module/classes/HMSHLSTimedMetadata.js.map +1 -1
  86. package/lib/module/classes/HMSIOSAudioMode.js +15 -0
  87. package/lib/module/classes/HMSIOSAudioMode.js.map +1 -1
  88. package/lib/module/classes/HMSLogAlarmManager.js +12 -0
  89. package/lib/module/classes/HMSLogAlarmManager.js.map +1 -1
  90. package/lib/module/classes/HMSLogLevel.js +12 -0
  91. package/lib/module/classes/HMSLogLevel.js.map +1 -1
  92. package/lib/module/classes/HMSLogSettings.js +14 -0
  93. package/lib/module/classes/HMSLogSettings.js.map +1 -1
  94. package/lib/module/classes/HMSNetworkQuality.js +11 -0
  95. package/lib/module/classes/HMSNetworkQuality.js.map +1 -1
  96. package/lib/module/classes/HMSNoiseCancellationPlugin.js +40 -10
  97. package/lib/module/classes/HMSNoiseCancellationPlugin.js.map +1 -1
  98. package/lib/module/classes/HMSPIPConfig.js +1 -1
  99. package/lib/module/classes/HMSPIPConfig.js.map +1 -1
  100. package/lib/module/classes/HMSPIPListenerActions.js +9 -0
  101. package/lib/module/classes/HMSPIPListenerActions.js.map +1 -1
  102. package/lib/module/classes/HMSPeer.js +149 -0
  103. package/lib/module/classes/HMSPeer.js.map +1 -1
  104. package/lib/module/classes/HMSPeerType.js +12 -1
  105. package/lib/module/classes/HMSPeerType.js.map +1 -1
  106. package/lib/module/classes/HMSRTMPConfig.js +14 -0
  107. package/lib/module/classes/HMSRTMPConfig.js.map +1 -1
  108. package/lib/module/classes/HMSRole.js +17 -0
  109. package/lib/module/classes/HMSRole.js.map +1 -1
  110. package/lib/module/classes/HMSRtmpVideoResolution.js +13 -0
  111. package/lib/module/classes/HMSRtmpVideoResolution.js.map +1 -1
  112. package/lib/module/classes/HMSSDK.js +1153 -233
  113. package/lib/module/classes/HMSSDK.js.map +1 -1
  114. package/lib/module/classes/HMSSessionStore.js +14 -15
  115. package/lib/module/classes/HMSSessionStore.js.map +1 -1
  116. package/lib/module/classes/HMSTrack.js +13 -0
  117. package/lib/module/classes/HMSTrack.js.map +1 -1
  118. package/lib/module/classes/HMSTrackSettings.js +10 -0
  119. package/lib/module/classes/HMSTrackSettings.js.map +1 -1
  120. package/lib/module/classes/HMSTrackSettingsInitState.js +9 -0
  121. package/lib/module/classes/HMSTrackSettingsInitState.js.map +1 -1
  122. package/lib/module/classes/HMSTrackSource.js +10 -0
  123. package/lib/module/classes/HMSTrackSource.js.map +1 -1
  124. package/lib/module/classes/HMSTrackType.js +7 -0
  125. package/lib/module/classes/HMSTrackType.js.map +1 -1
  126. package/lib/module/classes/HMSUpdateListenerActions.js +42 -3
  127. package/lib/module/classes/HMSUpdateListenerActions.js.map +1 -1
  128. package/lib/module/classes/HMSVideoTrack.js +17 -0
  129. package/lib/module/classes/HMSVideoTrack.js.map +1 -1
  130. package/lib/module/classes/HMSVideoTrackSettings.js +12 -2
  131. package/lib/module/classes/HMSVideoTrackSettings.js.map +1 -1
  132. package/lib/module/classes/HmsView.js +43 -0
  133. package/lib/module/classes/HmsView.js.map +1 -1
  134. package/lib/typescript/classes/HMSAudioDevice.d.ts +14 -0
  135. package/lib/typescript/classes/HMSAudioMixingMode.d.ts +11 -0
  136. package/lib/typescript/classes/HMSAudioTrack.d.ts +9 -0
  137. package/lib/typescript/classes/HMSCameraFacing.d.ts +11 -0
  138. package/lib/typescript/classes/HMSConfig.d.ts +27 -0
  139. package/lib/typescript/classes/HMSException.d.ts +18 -0
  140. package/lib/typescript/classes/HMSHLSTimedMetadata.d.ts +12 -0
  141. package/lib/typescript/classes/HMSIOSAudioMode.d.ts +15 -0
  142. package/lib/typescript/classes/HMSLogAlarmManager.d.ts +12 -0
  143. package/lib/typescript/classes/HMSLogLevel.d.ts +12 -0
  144. package/lib/typescript/classes/HMSLogSettings.d.ts +14 -0
  145. package/lib/typescript/classes/HMSNetworkQuality.d.ts +11 -0
  146. package/lib/typescript/classes/HMSNoiseCancellationPlugin.d.ts +36 -6
  147. package/lib/typescript/classes/HMSPIPConfig.d.ts +40 -0
  148. package/lib/typescript/classes/HMSPIPListenerActions.d.ts +17 -0
  149. package/lib/typescript/classes/HMSPeer.d.ts +137 -0
  150. package/lib/typescript/classes/HMSPeerType.d.ts +11 -0
  151. package/lib/typescript/classes/HMSRTMPConfig.d.ts +14 -0
  152. package/lib/typescript/classes/HMSRole.d.ts +17 -0
  153. package/lib/typescript/classes/HMSRtmpVideoResolution.d.ts +13 -0
  154. package/lib/typescript/classes/HMSSDK.d.ts +1083 -235
  155. package/lib/typescript/classes/HMSSessionStore.d.ts +14 -15
  156. package/lib/typescript/classes/HMSTrack.d.ts +13 -0
  157. package/lib/typescript/classes/HMSTrackSettings.d.ts +10 -0
  158. package/lib/typescript/classes/HMSTrackSettingsInitState.d.ts +11 -0
  159. package/lib/typescript/classes/HMSTrackSource.d.ts +10 -0
  160. package/lib/typescript/classes/HMSTrackType.d.ts +7 -0
  161. package/lib/typescript/classes/HMSUpdateListenerActions.d.ts +290 -4
  162. package/lib/typescript/classes/HMSVideoTrack.d.ts +17 -0
  163. package/lib/typescript/classes/HMSVideoTrackSettings.d.ts +12 -2
  164. package/lib/typescript/classes/HmsView.d.ts +16 -0
  165. package/package.json +1 -1
  166. package/sdk-versions.json +2 -2
  167. package/src/classes/HMSAudioDevice.ts +18 -0
  168. package/src/classes/HMSAudioMixingMode.ts +11 -0
  169. package/src/classes/HMSAudioTrack.ts +9 -0
  170. package/src/classes/HMSCameraFacing.ts +11 -0
  171. package/src/classes/HMSConfig.ts +27 -0
  172. package/src/classes/HMSException.ts +18 -0
  173. package/src/classes/HMSHLSTimedMetadata.ts +12 -0
  174. package/src/classes/HMSIOSAudioMode.ts +15 -0
  175. package/src/classes/HMSLogAlarmManager.ts +12 -0
  176. package/src/classes/HMSLogLevel.ts +12 -0
  177. package/src/classes/HMSLogSettings.ts +14 -0
  178. package/src/classes/HMSNetworkQuality.ts +11 -0
  179. package/src/classes/HMSNoiseCancellationPlugin.ts +41 -10
  180. package/src/classes/HMSPIPConfig.ts +47 -0
  181. package/src/classes/HMSPIPListenerActions.ts +18 -0
  182. package/src/classes/HMSPeer.ts +137 -0
  183. package/src/classes/HMSPeerType.ts +13 -2
  184. package/src/classes/HMSRTMPConfig.ts +14 -0
  185. package/src/classes/HMSRole.ts +17 -0
  186. package/src/classes/HMSRtmpVideoResolution.ts +13 -0
  187. package/src/classes/HMSSDK.tsx +1211 -269
  188. package/src/classes/HMSSessionStore.ts +14 -15
  189. package/src/classes/HMSTrack.ts +13 -0
  190. package/src/classes/HMSTrackSettings.ts +10 -0
  191. package/src/classes/HMSTrackSettingsInitState.ts +11 -0
  192. package/src/classes/HMSTrackSource.ts +10 -0
  193. package/src/classes/HMSTrackType.ts +7 -0
  194. package/src/classes/HMSUpdateListenerActions.ts +312 -3
  195. package/src/classes/HMSVideoTrack.ts +17 -0
  196. package/src/classes/HMSVideoTrackSettings.ts +12 -2
  197. package/src/classes/HmsView.tsx +39 -0
package/README.md CHANGED
@@ -1,5 +1,5 @@
1
1
  <a href="https://100ms.live/">
2
- <img src="https://raw.githubusercontent.com/100mslive/react-native-hms/main/100ms.svg" title="100ms logo" float=center height=256>
2
+ <img src="https://raw.githubusercontent.com/100mslive/react-native-hms/main/100ms.svg" title="100ms logo" float=center height=256 alt="100ms logo">
3
3
  </a>
4
4
 
5
5
  [![npm](https://img.shields.io/npm/v/@100mslive/react-native-hms)](https://www.npmjs.com/package/@100mslive/react-native-hms)
@@ -22,10 +22,11 @@ With support for HLS and RTMP Live Streaming and Recording, Picture-in-Picture (
22
22
 
23
23
  📖 Read the Complete Documentation here: https://www.100ms.live/docs/react-native/v2/foundation/basics
24
24
 
25
- | Package | Version |
26
- | -------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
27
- | @100mslive/react-native-room-kit | [![npm](https://img.shields.io/npm/v/@100mslive/react-native-room-kit)](https://www.npmjs.com/package/@100mslive/react-native-room-kit) |
28
- | @100mslive/react-native-hms | [![npm](https://img.shields.io/npm/v/@100mslive/react-native-hms)](https://www.npmjs.com/package/@100mslive/react-native-hms) |
25
+ | Package | Version |
26
+ | ------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------- |
27
+ | @100mslive/react-native-room-kit | [![npm](https://img.shields.io/npm/v/@100mslive/react-native-room-kit)](https://www.npmjs.com/package/@100mslive/react-native-room-kit) |
28
+ | @100mslive/react-native-hms | [![npm](https://img.shields.io/npm/v/@100mslive/react-native-hms)](https://www.npmjs.com/package/@100mslive/react-native-hms) |
29
+ | @100mslive/react-native-video-plugin | [![npm](https://img.shields.io/npm/v/@100mslive/react-native-video-plugin)](https://www.npmjs.com/package/@100mslive/react-native-video-plugin) |
29
30
 
30
31
  ## 🏃 Example App
31
32
 
@@ -21,6 +21,7 @@ import com.facebook.react.modules.core.DeviceEventManagerModule
21
21
  import com.reactnativehmssdk.HMSManager.Companion.REACT_CLASS
22
22
  import live.hms.video.error.HMSException
23
23
  import live.hms.video.factories.noisecancellation.AvailabilityStatus
24
+ import live.hms.video.sdk.HMSActionResultListener
24
25
  import java.util.UUID
25
26
 
26
27
  @ReactModule(name = REACT_CLASS)
@@ -1092,7 +1093,7 @@ class HMSManager(
1092
1093
  activity.setPictureInPictureParams(pipParams)
1093
1094
  return true
1094
1095
  } catch (e: Exception) {
1095
- throw e
1096
+ return false
1096
1097
  }
1097
1098
  }
1098
1099
 
@@ -1127,7 +1128,7 @@ class HMSManager(
1127
1128
 
1128
1129
  return activity.enterPictureInPictureMode(pipParams)
1129
1130
  } catch (e: Exception) {
1130
- throw e
1131
+ return false
1131
1132
  }
1132
1133
  }
1133
1134
 
@@ -1517,8 +1518,19 @@ class HMSManager(
1517
1518
  )
1518
1519
  return
1519
1520
  }
1520
- hmsSdk.setNoiseCancellationEnabled(true)
1521
- promise?.resolve(true)
1521
+
1522
+ hmsSdk.enableNoiseCancellation(
1523
+ true,
1524
+ object : HMSActionResultListener {
1525
+ override fun onError(error: HMSException) {
1526
+ promise?.reject(error.code.toString(), error.message)
1527
+ }
1528
+
1529
+ override fun onSuccess() {
1530
+ promise?.resolve(true)
1531
+ }
1532
+ },
1533
+ )
1522
1534
  }
1523
1535
 
1524
1536
  @ReactMethod
@@ -1542,8 +1554,18 @@ class HMSManager(
1542
1554
  )
1543
1555
  return
1544
1556
  }
1545
- hmsSdk.setNoiseCancellationEnabled(false)
1546
- promise?.resolve(true)
1557
+ hmsSdk.enableNoiseCancellation(
1558
+ false,
1559
+ object : HMSActionResultListener {
1560
+ override fun onError(error: HMSException) {
1561
+ promise?.reject(error.code.toString(), error.message)
1562
+ }
1563
+
1564
+ override fun onSuccess() {
1565
+ promise?.resolve(true)
1566
+ }
1567
+ },
1568
+ )
1547
1569
  }
1548
1570
 
1549
1571
  @ReactMethod
@@ -1567,7 +1589,7 @@ class HMSManager(
1567
1589
  )
1568
1590
  return
1569
1591
  }
1570
- val isEnabled = hmsSdk.getNoiseCancellationEnabled()
1592
+ val isEnabled = hmsSdk.isNoiseCancellationEnabled()
1571
1593
  promise?.resolve(isEnabled)
1572
1594
  }
1573
1595
 
@@ -1593,7 +1615,7 @@ class HMSManager(
1593
1615
  return
1594
1616
  }
1595
1617
 
1596
- val availability: AvailabilityStatus = hmsSdk.isNoiseCancellationAvailable()
1618
+ val availability: AvailabilityStatus = hmsSdk.isNoiseCancellationSupported()
1597
1619
  val isAvailable =
1598
1620
  if (availability == AvailabilityStatus.Available) {
1599
1621
  true
@@ -1624,6 +1646,23 @@ class HMSManager(
1624
1646
  }
1625
1647
  // endregion
1626
1648
 
1649
+ @ReactMethod
1650
+ fun setPermissionsAccepted(
1651
+ data: ReadableMap,
1652
+ promise: Promise?,
1653
+ ) {
1654
+ val rnSDK =
1655
+ HMSHelper.getHms(data, hmsCollection) ?: run {
1656
+ promise?.reject(
1657
+ "6004",
1658
+ "RN HMS SDK not initialized",
1659
+ )
1660
+ return
1661
+ }
1662
+ rnSDK.hmsSDK?.setPermissionsAccepted()
1663
+ promise?.resolve(null)
1664
+ }
1665
+
1627
1666
  // region Warning on JS side
1628
1667
  @ReactMethod
1629
1668
  fun addListener(eventName: String) {
@@ -87,6 +87,13 @@ class HMSRNSDK(
87
87
  }
88
88
  }
89
89
 
90
+ if (data?.hasKey("haltPreviewJoinForPermissionsRequest") == true) {
91
+ val halt = data?.getBoolean("haltPreviewJoinForPermissionsRequest")
92
+ if (halt != null) {
93
+ builder.haltPreviewJoinForPermissionsRequest(halt)
94
+ }
95
+ }
96
+
90
97
  this.hmsSDK = builder.build()
91
98
 
92
99
  hmsSDK?.let {
@@ -286,6 +293,17 @@ class HMSRNSDK(
286
293
  data.putArray("removedPeers", removedPeersArray)
287
294
  delegate.emitEvent("ON_PEER_LIST_UPDATED", data)
288
295
  }
296
+
297
+ override fun onPermissionsRequested(permissions: List<String>) {
298
+ if (eventsEnableStatus["ON_PERMISSIONS_REQUESTED"] != true) {
299
+ return
300
+ }
301
+ val data: WritableMap = Arguments.createMap()
302
+
303
+ data.putArray("permissions", Arguments.fromList(permissions))
304
+ data.putString("id", id)
305
+ delegate.emitEvent("ON_PERMISSIONS_REQUESTED", data)
306
+ }
289
307
  },
290
308
  )
291
309
  } else {
@@ -557,6 +575,17 @@ class HMSRNSDK(
557
575
  data.putString("id", id)
558
576
  delegate.emitEvent("ON_TRANSCRIPTS", data)
559
577
  }
578
+
579
+ override fun onPermissionsRequested(permissions: List<String>) {
580
+ if (eventsEnableStatus["ON_PERMISSIONS_REQUESTED"] != true) {
581
+ return
582
+ }
583
+ val data: WritableMap = Arguments.createMap()
584
+
585
+ data.putArray("permissions", Arguments.fromList(permissions))
586
+ data.putString("id", id)
587
+ delegate.emitEvent("ON_PERMISSIONS_REQUESTED", data)
588
+ }
560
589
  },
561
590
  )
562
591
 
@@ -1440,6 +1469,7 @@ class HMSRNSDK(
1440
1469
 
1441
1470
  if (audioTrackId == trackId) {
1442
1471
  peer.audioTrack?.setVolume(volume)
1472
+ callback?.resolve(null)
1443
1473
  return
1444
1474
  }
1445
1475
 
@@ -1449,6 +1479,7 @@ class HMSRNSDK(
1449
1479
 
1450
1480
  if (trackExtracted != null) {
1451
1481
  trackExtracted.setVolume(volume)
1482
+ callback?.resolve(null)
1452
1483
  return
1453
1484
  }
1454
1485
  }
@@ -1721,7 +1752,7 @@ class HMSRNSDK(
1721
1752
  val audioDevice = data.getString("audioDevice")
1722
1753
  hmsSDK?.let {
1723
1754
  it.switchAudioOutput(HMSHelper.getAudioDevice(audioDevice))
1724
- callback?.resolve(true)
1755
+ callback?.resolve(null)
1725
1756
  }
1726
1757
  } else {
1727
1758
  val errorMessage = "switchAudioOutput: $requiredKeys"
@@ -1807,7 +1838,7 @@ class HMSRNSDK(
1807
1838
  override fun onSuccess() {
1808
1839
  isAudioSharing = false
1809
1840
  audioshareCallback = null
1810
- callback?.resolve(getPromiseResolveData())
1841
+ callback?.resolve(true)
1811
1842
  }
1812
1843
  },
1813
1844
  )
@@ -1825,7 +1856,7 @@ class HMSRNSDK(
1825
1856
  val mode = HMSHelper.getAudioMixingMode(data.getString("audioMixingMode"))
1826
1857
  audioMixingMode = mode
1827
1858
  hmsSDK?.setAudioMixingMode(mode)
1828
- callback?.resolve(getPromiseResolveData())
1859
+ callback?.resolve(true)
1829
1860
  } else {
1830
1861
  val errorMessage = "setAudioMixingMode: $requiredKeys"
1831
1862
  rejectCallback(callback, errorMessage)
@@ -7,6 +7,8 @@ import android.content.Intent
7
7
  import android.content.IntentFilter
8
8
  import android.os.Build
9
9
  import androidx.annotation.RequiresApi
10
+ import androidx.core.content.ContextCompat
11
+ import androidx.core.content.ContextCompat.RECEIVER_NOT_EXPORTED
10
12
 
11
13
  data class PIPAction(
12
14
  val title: String,
@@ -62,7 +64,7 @@ class PipActionReceiver(
62
64
 
63
65
  IntentFilter().also {
64
66
  it.addAction(PIP_INTENT_ACTION)
65
- activity.registerReceiver(this, it)
67
+ ContextCompat.registerReceiver(activity, this, it, RECEIVER_NOT_EXPORTED)
66
68
  }
67
69
  registered = true
68
70
  }
@@ -34,4 +34,5 @@ struct HMSConstants {
34
34
  static let ON_POLL_UPDATE = "ON_POLL_UPDATE"
35
35
  static let ON_WHITEBOARD_UPDATE = "ON_WHITEBOARD_UPDATE"
36
36
  static let ON_TRANSCRIPTS = "ON_TRANSCRIPTS"
37
+ static let ON_PIP_MODE_CHANGED = "ON_PIP_MODE_CHANGED"
37
38
  }
package/ios/HMSManager.m CHANGED
@@ -393,4 +393,43 @@ RCT_EXTERN_METHOD(handleRealTimeTranscription
393
393
  : (NSDictionary)data
394
394
  : (RCTPromiseResolveBlock)resolve
395
395
  : (RCTPromiseRejectBlock)reject)
396
+
397
+ #pragma mark - PIP Mode Support
398
+
399
+ RCT_EXTERN_METHOD(handlePipActions
400
+ : (NSString)action
401
+ : (NSDictionary)data
402
+ : (RCTPromiseResolveBlock)resolve
403
+ : (RCTPromiseRejectBlock)reject)
404
+
405
+ RCT_EXTERN_METHOD(setupPIP
406
+ : (NSDictionary)data
407
+ : (RCTPromiseResolveBlock)resolve
408
+ : (RCTPromiseRejectBlock)reject)
409
+
410
+ RCT_EXTERN_METHOD(stopPIP
411
+ : (NSDictionary)data
412
+ : (RCTPromiseResolveBlock)resolve
413
+ : (RCTPromiseRejectBlock)reject)
414
+
415
+ RCT_EXTERN_METHOD(disposePIP
416
+ : (NSDictionary)data
417
+ : (RCTPromiseResolveBlock)resolve
418
+ : (RCTPromiseRejectBlock)reject)
419
+
420
+ RCT_EXTERN_METHOD(isPIPActive
421
+ : (NSDictionary)data
422
+ : (RCTPromiseResolveBlock)resolve
423
+ : (RCTPromiseRejectBlock)reject)
424
+
425
+ RCT_EXTERN_METHOD(changeIOSPIPVideoTrack
426
+ : (NSDictionary)data
427
+ : (RCTPromiseResolveBlock)resolve
428
+ : (RCTPromiseRejectBlock)reject)
429
+
430
+ RCT_EXTERN_METHOD(setActiveSpeakerInIOSPIP
431
+ : (NSDictionary)data
432
+ : (RCTPromiseResolveBlock)resolve
433
+ : (RCTPromiseRejectBlock)reject)
434
+
396
435
  @end
@@ -37,7 +37,7 @@ class HMSManager: RCTEventEmitter {
37
37
  }
38
38
 
39
39
  override func supportedEvents() -> [String]! {
40
- return [ON_JOIN, ON_PREVIEW, ON_ROOM_UPDATE, ON_PEER_UPDATE, ON_TRACK_UPDATE, ON_ERROR, ON_MESSAGE, ON_SPEAKER, RECONNECTING, RECONNECTED, ON_ROLE_CHANGE_REQUEST, ON_CHANGE_TRACK_STATE_REQUEST, ON_REMOVED_FROM_ROOM, ON_RTC_STATS, ON_LOCAL_AUDIO_STATS, ON_LOCAL_VIDEO_STATS, ON_REMOTE_AUDIO_STATS, ON_REMOTE_VIDEO_STATS, ON_AUDIO_DEVICE_CHANGED, HMSConstants.ON_SESSION_STORE_AVAILABLE, HMSConstants.ON_SESSION_STORE_CHANGED, HMSConstants.ON_PEER_LIST_UPDATED, HMSConstants.ON_POLL_UPDATE, HMSConstants.ON_WHITEBOARD_UPDATE, HMSConstants.ON_TRANSCRIPTS]
40
+ return [ON_JOIN, ON_PREVIEW, ON_ROOM_UPDATE, ON_PEER_UPDATE, ON_TRACK_UPDATE, ON_ERROR, ON_MESSAGE, ON_SPEAKER, RECONNECTING, RECONNECTED, ON_ROLE_CHANGE_REQUEST, ON_CHANGE_TRACK_STATE_REQUEST, ON_REMOVED_FROM_ROOM, ON_RTC_STATS, ON_LOCAL_AUDIO_STATS, ON_LOCAL_VIDEO_STATS, ON_REMOTE_AUDIO_STATS, ON_REMOTE_VIDEO_STATS, ON_AUDIO_DEVICE_CHANGED, HMSConstants.ON_SESSION_STORE_AVAILABLE, HMSConstants.ON_SESSION_STORE_CHANGED, HMSConstants.ON_PEER_LIST_UPDATED, HMSConstants.ON_POLL_UPDATE, HMSConstants.ON_WHITEBOARD_UPDATE, HMSConstants.ON_TRANSCRIPTS, HMSConstants.ON_PIP_MODE_CHANGED]
41
41
  }
42
42
 
43
43
  // MARK: - HMS SDK Delegate Callbacks
@@ -837,4 +837,119 @@ class HMSManager: RCTEventEmitter {
837
837
  }
838
838
  rnsdk.handleRealTimeTranscription(data, resolve, reject)
839
839
  }
840
+
841
+ // MARK: - PIP Mode Support
842
+
843
+ @objc
844
+ func handlePipActions(_ action: String,
845
+ _ data: NSDictionary,
846
+ _ resolve: RCTPromiseResolveBlock?,
847
+ _ reject: RCTPromiseRejectBlock?) {
848
+
849
+ guard let rnsdk = HMSHelper.getHms(data, hmsCollection) else {
850
+ reject?("6004", "HMSRNSDK instance not found!", nil)
851
+ return
852
+ }
853
+
854
+ DispatchQueue.main.async { [weak self] in
855
+ switch action {
856
+ case "isPipModeSupported":
857
+ self?.isPipModeSupported(resolve, reject)
858
+ case "enterPipMode":
859
+ rnsdk.enterPipMode(resolve, reject)
860
+ case "setPictureInPictureParams":
861
+ if #available(iOS 15.0, *) {
862
+ rnsdk.setPictureInPictureParams(data, resolve, reject)
863
+ } else {
864
+ reject?("6004", "setPictureInPictureParams should be invoked for iOS 15 & above versions", nil)
865
+ }
866
+ default:
867
+ reject?("6004", "Unknown action type received", nil)
868
+ }
869
+ }
870
+ }
871
+
872
+ @objc
873
+ func stopPIP(_ data: NSDictionary,
874
+ _ resolve: RCTPromiseResolveBlock?,
875
+ _ reject: RCTPromiseRejectBlock?) {
876
+
877
+ guard let rnsdk = HMSHelper.getHms(data, hmsCollection) else {
878
+ reject?("6004", "HMSRNSDK instance not found!", nil)
879
+ return
880
+ }
881
+
882
+ DispatchQueue.main.async {
883
+ rnsdk.stopPIP(resolve, reject)
884
+ }
885
+ }
886
+
887
+ @objc
888
+ func disposePIP(_ data: NSDictionary,
889
+ _ resolve: RCTPromiseResolveBlock?,
890
+ _ reject: RCTPromiseRejectBlock?) {
891
+
892
+ guard let rnsdk = HMSHelper.getHms(data, hmsCollection) else {
893
+ reject?("6004", "HMSRNSDK instance not found!", nil)
894
+ return
895
+ }
896
+
897
+ DispatchQueue.main.async {
898
+ rnsdk.disposePIP(resolve, reject)
899
+ }
900
+ }
901
+
902
+ @objc
903
+ func isPipModeSupported(_ resolve: RCTPromiseResolveBlock?,
904
+ _ reject: RCTPromiseRejectBlock?) {
905
+
906
+ resolve?(AVPictureInPictureController.isPictureInPictureSupported())
907
+ }
908
+
909
+ @objc
910
+ func isPIPActive(_ data: NSDictionary,
911
+ _ resolve: RCTPromiseResolveBlock?,
912
+ _ reject: RCTPromiseRejectBlock?) {
913
+
914
+ guard let rnsdk = HMSHelper.getHms(data, hmsCollection) else {
915
+ reject?("6004", "HMSRNSDK instance not found!", nil)
916
+ return
917
+ }
918
+
919
+ DispatchQueue.main.async {
920
+ rnsdk.isPIPActive(resolve, reject)
921
+ }
922
+ }
923
+
924
+ @objc
925
+ func changeIOSPIPVideoTrack(_ data: NSDictionary,
926
+ _ resolve: RCTPromiseResolveBlock?,
927
+ _ reject: RCTPromiseRejectBlock?) {
928
+
929
+ guard let rnsdk = HMSHelper.getHms(data, hmsCollection) else {
930
+ reject?("6004", "HMSRNSDK instance not found!", nil)
931
+ return
932
+ }
933
+ DispatchQueue.main.async {
934
+ if #available(iOS 15.0, *) {
935
+ rnsdk.changeIOSPIPVideoTrack(data, resolve, reject)
936
+ } else {
937
+ reject?("6004", "changeIOSPIPVideoTrack is not supported on iOS version lower than 15.0", nil)
938
+ }
939
+ }
940
+ }
941
+
942
+ @objc
943
+ func setActiveSpeakerInIOSPIP(_ data: NSDictionary,
944
+ _ resolve: RCTPromiseResolveBlock?,
945
+ _ reject: RCTPromiseRejectBlock?) {
946
+
947
+ guard let rnsdk = HMSHelper.getHms(data, hmsCollection) else {
948
+ reject?("6004", "HMSRNSDK instance not found!", nil)
949
+ return
950
+ }
951
+ DispatchQueue.main.async {
952
+ rnsdk.setActiveSpeakerInIOSPIP(data, resolve, reject)
953
+ }
954
+ }
840
955
  }