@100mslive/react-native-hms 1.5.0 → 1.6.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 (88) hide show
  1. package/android/src/main/java/com/reactnativehmssdk/HMSManager.kt +52 -24
  2. package/android/src/main/java/com/reactnativehmssdk/HMSRNSDK.kt +245 -62
  3. package/android/src/main/java/com/reactnativehmssdk/HMSView.kt +15 -6
  4. package/ios/HMSConstants.swift +3 -1
  5. package/ios/HMSDecoder.swift +1 -1
  6. package/ios/HMSHelper.swift +44 -7
  7. package/ios/HMSManager.m +8 -0
  8. package/ios/HMSManager.swift +35 -1
  9. package/ios/HMSRNSDK.swift +268 -38
  10. package/lib/commonjs/classes/HMSAudioTrackSettings.js +14 -0
  11. package/lib/commonjs/classes/HMSAudioTrackSettings.js.map +1 -1
  12. package/lib/commonjs/classes/HMSEncoder.js +2 -1
  13. package/lib/commonjs/classes/HMSEncoder.js.map +1 -1
  14. package/lib/commonjs/classes/HMSIOSAudioMode.js +13 -0
  15. package/lib/commonjs/classes/HMSIOSAudioMode.js.map +1 -0
  16. package/lib/commonjs/classes/HMSSDK.js +50 -0
  17. package/lib/commonjs/classes/HMSSDK.js.map +1 -1
  18. package/lib/commonjs/classes/HMSSessionStore.js +173 -0
  19. package/lib/commonjs/classes/HMSSessionStore.js.map +1 -0
  20. package/lib/commonjs/classes/HMSUpdateListenerActions.js +8 -0
  21. package/lib/commonjs/classes/HMSUpdateListenerActions.js.map +1 -1
  22. package/lib/commonjs/classes/HMSVideoTrackSettings.js +5 -0
  23. package/lib/commonjs/classes/HMSVideoTrackSettings.js.map +1 -1
  24. package/lib/commonjs/index.js +12 -0
  25. package/lib/commonjs/index.js.map +1 -1
  26. package/lib/commonjs/utils/emitter/EventEmitter.js +162 -0
  27. package/lib/commonjs/utils/emitter/EventEmitter.js.map +1 -0
  28. package/lib/commonjs/utils/emitter/_EmitterSubscription.js +46 -0
  29. package/lib/commonjs/utils/emitter/_EmitterSubscription.js.map +1 -0
  30. package/lib/commonjs/utils/emitter/_EventSubscription.js +36 -0
  31. package/lib/commonjs/utils/emitter/_EventSubscription.js.map +1 -0
  32. package/lib/commonjs/utils/emitter/_EventSubscriptionVendor.js +90 -0
  33. package/lib/commonjs/utils/emitter/_EventSubscriptionVendor.js.map +1 -0
  34. package/lib/commonjs/utils/index.js +17 -0
  35. package/lib/commonjs/utils/index.js.map +1 -0
  36. package/lib/module/classes/HMSAudioTrackSettings.js +14 -0
  37. package/lib/module/classes/HMSAudioTrackSettings.js.map +1 -1
  38. package/lib/module/classes/HMSEncoder.js +2 -1
  39. package/lib/module/classes/HMSEncoder.js.map +1 -1
  40. package/lib/module/classes/HMSIOSAudioMode.js +6 -0
  41. package/lib/module/classes/HMSIOSAudioMode.js.map +1 -0
  42. package/lib/module/classes/HMSSDK.js +50 -0
  43. package/lib/module/classes/HMSSDK.js.map +1 -1
  44. package/lib/module/classes/HMSSessionStore.js +166 -0
  45. package/lib/module/classes/HMSSessionStore.js.map +1 -0
  46. package/lib/module/classes/HMSUpdateListenerActions.js +8 -0
  47. package/lib/module/classes/HMSUpdateListenerActions.js.map +1 -1
  48. package/lib/module/classes/HMSVideoTrackSettings.js +5 -0
  49. package/lib/module/classes/HMSVideoTrackSettings.js.map +1 -1
  50. package/lib/module/index.js +1 -0
  51. package/lib/module/index.js.map +1 -1
  52. package/lib/module/utils/emitter/EventEmitter.js +151 -0
  53. package/lib/module/utils/emitter/EventEmitter.js.map +1 -0
  54. package/lib/module/utils/emitter/_EmitterSubscription.js +39 -0
  55. package/lib/module/utils/emitter/_EmitterSubscription.js.map +1 -0
  56. package/lib/module/utils/emitter/_EventSubscription.js +29 -0
  57. package/lib/module/utils/emitter/_EventSubscription.js.map +1 -0
  58. package/lib/module/utils/emitter/_EventSubscriptionVendor.js +83 -0
  59. package/lib/module/utils/emitter/_EventSubscriptionVendor.js.map +1 -0
  60. package/lib/module/utils/index.js +2 -0
  61. package/lib/module/utils/index.js.map +1 -0
  62. package/lib/typescript/classes/HMSAudioTrackSettings.d.ts +14 -0
  63. package/lib/typescript/classes/HMSIOSAudioMode.d.ts +4 -0
  64. package/lib/typescript/classes/HMSSDK.d.ts +16 -0
  65. package/lib/typescript/classes/HMSSessionStore.d.ts +63 -0
  66. package/lib/typescript/classes/HMSUpdateListenerActions.d.ts +9 -1
  67. package/lib/typescript/classes/HMSVideoTrackSettings.d.ts +5 -0
  68. package/lib/typescript/index.d.ts +2 -0
  69. package/lib/typescript/utils/emitter/EventEmitter.d.ts +91 -0
  70. package/lib/typescript/utils/emitter/_EmitterSubscription.d.ts +29 -0
  71. package/lib/typescript/utils/emitter/_EventSubscription.d.ts +19 -0
  72. package/lib/typescript/utils/emitter/_EventSubscriptionVendor.d.ts +44 -0
  73. package/lib/typescript/utils/index.d.ts +1 -0
  74. package/package.json +21 -2
  75. package/sdk-versions.json +2 -2
  76. package/src/classes/HMSAudioTrackSettings.ts +16 -0
  77. package/src/classes/HMSEncoder.ts +1 -0
  78. package/src/classes/HMSIOSAudioMode.ts +4 -0
  79. package/src/classes/HMSSDK.tsx +70 -4
  80. package/src/classes/HMSSessionStore.ts +209 -0
  81. package/src/classes/HMSUpdateListenerActions.ts +8 -0
  82. package/src/classes/HMSVideoTrackSettings.ts +5 -0
  83. package/src/index.ts +5 -0
  84. package/src/utils/emitter/EventEmitter.ts +160 -0
  85. package/src/utils/emitter/_EmitterSubscription.ts +44 -0
  86. package/src/utils/emitter/_EventSubscription.ts +28 -0
  87. package/src/utils/emitter/_EventSubscriptionVendor.ts +89 -0
  88. package/src/utils/index.ts +1 -0
@@ -3,6 +3,7 @@ package com.reactnativehmssdk
3
3
  import android.annotation.SuppressLint
4
4
  import android.content.Context
5
5
  import android.os.Build
6
+ import android.util.Log
6
7
  import android.view.LayoutInflater
7
8
  import android.widget.FrameLayout
8
9
  import androidx.annotation.RequiresApi
@@ -56,12 +57,20 @@ class HMSView(context: ReactContext) : FrameLayout(context) {
56
57
 
57
58
  override fun onAttachedToWindow() {
58
59
  super.onAttachedToWindow()
59
- hmsVideoView.addTrack(videoTrack!!) // DOUBT: Handle case when videoTrack is null
60
- if (!scaleTypeApplied) {
61
- if (currentScaleType != RendererCommon.ScalingType.SCALE_ASPECT_FILL) {
62
- onReceiveNativeEvent()
60
+
61
+ videoTrack?.let { // Safe Call Operator to check if videoTrack is not null
62
+ hmsVideoView.addTrack(it) // add the videoTrack to the hmsVideoView
63
+ if (!scaleTypeApplied) { // check if the scaleTypeApplied flag is false
64
+ if (currentScaleType != RendererCommon.ScalingType.SCALE_ASPECT_FILL) { // check if the currentScaleType is not SCALE_ASPECT_FILL
65
+ onReceiveNativeEvent() // call the onReceiveNativeEvent function
66
+ }
67
+ scaleTypeApplied = true // set the scaleTypeApplied flag to true
63
68
  }
64
- scaleTypeApplied = true
69
+ } ?: run { // Elvis Operator to handle the case when videoTrack is null
70
+ Log.e(
71
+ "HMSView",
72
+ "HMSView attached to window, but it's videoTrack is null",
73
+ ) // log an error message
65
74
  }
66
75
  }
67
76
 
@@ -101,7 +110,7 @@ class HMSView(context: ReactContext) : FrameLayout(context) {
101
110
  id: String?,
102
111
  trackId: String?,
103
112
  hmsCollection: MutableMap<String, HMSRNSDK>,
104
- mirror: Boolean?
113
+ mirror: Boolean?,
105
114
  ) {
106
115
  if (id != null) {
107
116
  sdkId = id
@@ -16,7 +16,7 @@ struct HMSConstants {
16
16
  static let ON_PEER_UPDATE = "3"
17
17
  static let ON_TRACK_UPDATE = "ON_TRACK_UPDATE"
18
18
  static let ON_ROLE_CHANGE_REQUEST = "ON_ROLE_CHANGE_REQUEST"
19
- static let ON_CHANGE_TRACK_STATE_REQUEST = "ON_CHANGE_TRACK_STATE_REQUEST" // new
19
+ static let ON_CHANGE_TRACK_STATE_REQUEST = "ON_CHANGE_TRACK_STATE_REQUEST"
20
20
  static let ON_REMOVED_FROM_ROOM = "ON_REMOVED_FROM_ROOM"
21
21
  static let ON_ERROR = "ON_ERROR"
22
22
  static let ON_MESSAGE = "ON_MESSAGE"
@@ -28,4 +28,6 @@ struct HMSConstants {
28
28
  static let ON_LOCAL_VIDEO_STATS = "ON_LOCAL_VIDEO_STATS"
29
29
  static let ON_REMOTE_AUDIO_STATS = "ON_REMOTE_AUDIO_STATS"
30
30
  static let ON_REMOTE_VIDEO_STATS = "ON_REMOTE_VIDEO_STATS"
31
+ static let ON_SESSION_STORE_AVAILABLE = "ON_SESSION_STORE_AVAILABLE"
32
+ static let ON_SESSION_STORE_CHANGED = "ON_SESSION_STORE_CHANGED"
31
33
  }
@@ -278,7 +278,7 @@ class HMSDecoder: NSObject {
278
278
  return ["trackId": localVideo.trackId, "source": localVideo.source, "trackDescription": localVideo.trackDescription, "settings": getHmsVideoTrackSettings(localVideo.settings), "isMute": localVideo.isMute(), "type": type, "kind": type]
279
279
  }
280
280
 
281
- static func getHmsAudioTrackSettings(_ hmsAudioTrackSettings: HMSAudioTrackSettings?) -> [String: Any] {
281
+ static func getHmsAudioTrackSettings(_ hmsAudioTrackSettings: HMSAudioTrackSettings?) -> [String: Any?] {
282
282
 
283
283
  guard let settings = hmsAudioTrackSettings else { return [String: Any]() }
284
284
 
@@ -172,15 +172,21 @@ class HMSHelper: NSObject {
172
172
  }
173
173
 
174
174
  static func getLocalAudioSettings(_ settings: NSDictionary?, _ hms: HMSSDK?, _ delegate: HMSManager?, _ id: String) -> HMSAudioTrackSettings? {
175
- if settings === nil {
175
+
176
+ guard let settings = settings
177
+ else {
178
+ print(#function, "No Local Audio Settings passed.")
176
179
  return nil
177
180
  }
178
- let initialState = settings?.value(forKey: "initialState") as? String
181
+
182
+ let initialState = settings.value(forKey: "initialState") as? String
179
183
  let initialStateEncoded = HMSHelper.getHMSTrackSettingsInitState(initialState)
180
184
 
185
+ let audioMode = getAudioMode(from: settings["audioMode"] as? String)
186
+
181
187
  if #available(iOS 13.0, *) {
182
188
  var audioMixerSourceMap: [String: HMSAudioNode]?
183
- if let playerNode = settings?.value(forKey: "audioSource") as? [String] {
189
+ if let playerNode = settings.value(forKey: "audioSource") as? [String] {
184
190
  audioMixerSourceMap = [String: HMSAudioNode]()
185
191
  for node in playerNode {
186
192
  if audioMixerSourceMap?[node] == nil {
@@ -190,7 +196,7 @@ class HMSHelper: NSObject {
190
196
  do {
191
197
  audioMixerSourceMap?["screen_broadcast_audio_receiver_node"] = try hms?.screenBroadcastAudioReceiverNode()
192
198
  } catch {
193
- delegate?.emitEvent("ON_ERROR", ["error": ["code": 6002, "description": error.localizedDescription, "isTerminal": false, "canRetry": true, "params": ["function": #function]], "id": id])
199
+ delegate?.emitEvent("ON_ERROR", ["error": ["code": 6002, "description": error.localizedDescription, "isTerminal": false, "canRetry": true, "params": ["function": #function]] as [String: Any], "id": id])
194
200
  }
195
201
  } else {
196
202
  audioMixerSourceMap?[node] = HMSAudioFilePlayerNode()
@@ -203,15 +209,33 @@ class HMSHelper: NSObject {
203
209
  do {
204
210
  self.audioMixerSourceHashMap = audioMixerSourceMap
205
211
  let audioMixerSource = try HMSAudioMixerSource(nodes: audioMixerSourceMap.values.map {$0})
206
- return HMSAudioTrackSettings(maxBitrate: 32, trackDescription: "", initialMuteState: initialStateEncoded, audioSource: audioMixerSource)
212
+
213
+ return HMSAudioTrackSettings.build { builder in
214
+
215
+ builder.initialMuteState = initialStateEncoded
216
+
217
+ builder.audioSource = audioMixerSource
218
+
219
+ if let audioMode = audioMode {
220
+ builder.audioMode = audioMode
221
+ }
222
+ }
223
+
207
224
  } catch {
208
- delegate?.emitEvent("ON_ERROR", ["error": ["code": 6002, "description": error.localizedDescription, "isTerminal": false, "canRetry": true, "params": ["function": #function]], "id": id])
225
+ delegate?.emitEvent("ON_ERROR", ["error": ["code": 6002, "description": error.localizedDescription, "isTerminal": false, "canRetry": true, "params": ["function": #function]] as [String: Any], "id": id])
209
226
  return nil
210
227
  }
211
228
  }
212
229
  }
213
230
 
214
- return HMSAudioTrackSettings(maxBitrate: 32, trackDescription: "", initialMuteState: initialStateEncoded, audioSource: nil)
231
+ return HMSAudioTrackSettings.build { builder in
232
+
233
+ builder.initialMuteState = initialStateEncoded
234
+
235
+ if let audioMode = audioMode {
236
+ builder.audioMode = audioMode
237
+ }
238
+ }
215
239
  }
216
240
 
217
241
  static func getAudioMixerSourceMap() -> [String: HMSAudioNode]? {
@@ -318,4 +342,17 @@ class HMSHelper: NSObject {
318
342
  }
319
343
  return nil
320
344
  }
345
+
346
+ private static func getAudioMode(from mode: String?) -> HMSAudioMode? {
347
+ switch mode {
348
+ case "voice":
349
+ return .voice
350
+
351
+ case "music":
352
+ return .music
353
+
354
+ default:
355
+ return nil
356
+ }
357
+ }
321
358
  }
package/ios/HMSManager.m CHANGED
@@ -72,4 +72,12 @@ RCT_EXTERN_METHOD(setVideoTrackLayer: (NSDictionary) data :(RCTPromiseResolveBlo
72
72
  #pragma mark - Advanced Camera Controls
73
73
 
74
74
  RCT_EXTERN_METHOD(captureImageAtMaxSupportedResolution: (NSDictionary) data :(RCTPromiseResolveBlock) resolve :(RCTPromiseRejectBlock) reject)
75
+
76
+ #pragma mark - Session Store
77
+
78
+ RCT_EXTERN_METHOD(getSessionMetadataForKey: (NSDictionary) data :(RCTPromiseResolveBlock) resolve :(RCTPromiseRejectBlock) reject)
79
+ RCT_EXTERN_METHOD(setSessionMetadataForKey: (NSDictionary) data :(RCTPromiseResolveBlock) resolve :(RCTPromiseRejectBlock) reject)
80
+ RCT_EXTERN_METHOD(addKeyChangeListener: (NSDictionary) data :(RCTPromiseResolveBlock) resolve :(RCTPromiseRejectBlock) reject)
81
+ RCT_EXTERN_METHOD(removeKeyChangeListener: (NSDictionary) data :(RCTPromiseResolveBlock) resolve :(RCTPromiseRejectBlock) reject)
82
+
75
83
  @end
@@ -36,7 +36,7 @@ class HMSManager: RCTEventEmitter {
36
36
  }
37
37
 
38
38
  override func supportedEvents() -> [String]! {
39
- 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]
39
+ 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]
40
40
  }
41
41
 
42
42
  // MARK: - HMS SDK Delegate Callbacks
@@ -551,4 +551,38 @@ class HMSManager: RCTEventEmitter {
551
551
 
552
552
  hms?.captureImageAtMaxSupportedResolution(data, resolve, reject)
553
553
  }
554
+
555
+ // MARK: - Session Store
556
+
557
+ @objc
558
+ func getSessionMetadataForKey(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
559
+
560
+ let hms = HMSHelper.getHms(data, hmsCollection)
561
+
562
+ hms?.getSessionMetadataForKey(data, resolve, reject)
563
+ }
564
+
565
+ @objc
566
+ func setSessionMetadataForKey(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
567
+
568
+ let hms = HMSHelper.getHms(data, hmsCollection)
569
+
570
+ hms?.setSessionMetadataForKey(data, resolve, reject)
571
+ }
572
+
573
+ @objc
574
+ func addKeyChangeListener(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
575
+
576
+ let hms = HMSHelper.getHms(data, hmsCollection)
577
+
578
+ hms?.addKeyChangeListener(data, resolve, reject)
579
+ }
580
+
581
+ @objc
582
+ func removeKeyChangeListener(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
583
+
584
+ let hms = HMSHelper.getHms(data, hmsCollection)
585
+
586
+ hms?.removeKeyChangeListener(data, resolve, reject)
587
+ }
554
588
  }