@100mslive/react-native-hms 0.9.91 → 0.9.92

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.
@@ -41,7 +41,7 @@ class HMSRNSDK(
41
41
  private var self = this
42
42
 
43
43
  init {
44
- val trackSettings = HMSHelper.getTrackSettings(data)
44
+ val trackSettings = HMSHelper.getTrackSettings(data?.getMap("trackSettings"))
45
45
  if (trackSettings == null) {
46
46
  this.hmsSDK = HMSSDK.Builder(reactApplicationContext).build()
47
47
  } else {
package/ios/HMSManager.m CHANGED
@@ -37,4 +37,7 @@ RCT_EXTERN_METHOD(changeName: (NSDictionary) data :(RCTPromiseResolveBlock) reso
37
37
  RCT_EXTERN_METHOD(enableRTCStats: (NSDictionary) data)
38
38
  RCT_EXTERN_METHOD(disableRTCStats: (NSDictionary) data)
39
39
  RCT_EXTERN_METHOD(destroy: (NSDictionary) data :(RCTPromiseResolveBlock) resolve :(RCTPromiseRejectBlock) reject)
40
+ RCT_EXTERN_METHOD(startScreenshare: (NSDictionary) data :(RCTPromiseResolveBlock) resolve :(RCTPromiseRejectBlock) reject)
41
+ RCT_EXTERN_METHOD(stopScreenshare: (NSDictionary) data :(RCTPromiseResolveBlock) resolve :(RCTPromiseRejectBlock) reject)
42
+ RCT_EXTERN_METHOD(isScreenShared: (NSDictionary) data :(RCTPromiseResolveBlock) resolve :(RCTPromiseRejectBlock) reject)
40
43
  @end
@@ -302,6 +302,27 @@ class HMSManager: RCTEventEmitter {
302
302
  resolve?(["success": id + " removed"])
303
303
  }
304
304
 
305
+ @objc
306
+ func startScreenshare(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
307
+ let hms = HMSHelper.getHms(data, hmsCollection)
308
+
309
+ hms?.startScreenshare(resolve, reject)
310
+ }
311
+
312
+ @objc
313
+ func stopScreenshare(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
314
+ let hms = HMSHelper.getHms(data, hmsCollection)
315
+
316
+ hms?.stopScreenshare(resolve, reject)
317
+ }
318
+
319
+ @objc
320
+ func isScreenShared(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
321
+ let hms = HMSHelper.getHms(data, hmsCollection)
322
+
323
+ hms?.isScreenShared(resolve, reject)
324
+ }
325
+
305
326
  // @objc
306
327
  // func setLocalVideoSettings(_ data: NSDictionary) {
307
328
  // let hms = HMSHelper.getHms(data, hmsCollection)
@@ -7,6 +7,7 @@
7
7
 
8
8
  import Foundation
9
9
  import HMSSDK
10
+ import ReplayKit
10
11
 
11
12
  class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
12
13
 
@@ -18,6 +19,12 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
18
19
  var rtcStatsAttached = false
19
20
  var recentPreviewTracks: [HMSTrack]? = []
20
21
  private var reconnectingStage: Bool = false
22
+ private var preferredExtension: String? = nil
23
+ private var systemBroadcastPicker: RPSystemBroadcastPickerView? = nil
24
+ private var startScreenshareResolve: RCTPromiseResolveBlock? = nil
25
+ private var stopScreenshareResolve: RCTPromiseResolveBlock? = nil
26
+ private var isScreenShared: Bool? = false
27
+ private var previewInProgress = false
21
28
 
22
29
  let ON_PREVIEW = "ON_PREVIEW"
23
30
  let ON_JOIN = "ON_JOIN"
@@ -38,14 +45,17 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
38
45
  let ON_REMOTE_VIDEO_STATS = "ON_REMOTE_VIDEO_STATS"
39
46
 
40
47
  // MARK: - Setup
41
-
42
48
  init(data: NSDictionary?, delegate manager: HMSManager?, uid id: String) {
43
- let videoSettings = HMSHelper.getLocalVideoSettings(data?.value(forKey: "video") as? NSDictionary)
44
- let audioSettings = HMSHelper.getLocalAudioSettings(data?.value(forKey: "audio") as? NSDictionary)
49
+ let trackSettings = data?.value(forKey: "trackSettings") as? NSDictionary
50
+ let videoSettings = HMSHelper.getLocalVideoSettings(trackSettings?.value(forKey: "video") as? NSDictionary)
51
+ let audioSettings = HMSHelper.getLocalAudioSettings(trackSettings?.value(forKey: "audio") as? NSDictionary)
52
+ preferredExtension = data?.value(forKey: "preferredExtension") as? String
53
+
45
54
  DispatchQueue.main.async { [weak self] in
46
55
  let hmsTrackSettings = HMSTrackSettings(videoSettings: videoSettings, audioSettings: audioSettings)
47
56
  self?.hms = HMSSDK.build { sdk in
48
57
  sdk.trackSettings = hmsTrackSettings
58
+ sdk.appGroup = data?.value(forKey: "appGroup") as? String
49
59
  }
50
60
  }
51
61
  self.delegate = manager
@@ -53,13 +63,6 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
53
63
  }
54
64
 
55
65
  // MARK: - HMS SDK Actions
56
-
57
- private var previewInProgress = false
58
-
59
- func emitRequiredKeysError(_ error: String) {
60
- delegate?.emitEvent(ON_ERROR, ["error": ["code": HMSErrorCode.genericErrorUnknown.rawValue, "description": error, "message": error, "name": "REQUIRED_KEYS_NOT_FOUND", "action": "SEND_ALL_REQUIRED_KEYS", "id": 102, "isTerminal": false], "id": id])
61
- }
62
-
63
66
  func preview(_ credentials: NSDictionary) {
64
67
 
65
68
  guard !previewInProgress else {
@@ -194,18 +197,23 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
194
197
 
195
198
  func leave(_ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
196
199
  if(reconnectingStage) {
197
- reject?("101", "Still in reconnecting stage", nil)
200
+ reject?("Still in reconnecting stage", "Still in reconnecting stage", nil)
198
201
  } else {
199
202
  DispatchQueue.main.async { [weak self] in
200
203
  guard let strongSelf = self else { return }
201
204
  self?.config = nil
202
205
  self?.recentRoleChangeRequest = nil
206
+ self?.systemBroadcastPicker = nil
207
+ self?.preferredExtension = nil
208
+ self?.stopScreenshareResolve = nil
209
+ self?.startScreenshareResolve = nil
210
+ self?.isScreenShared = false
203
211
  self?.hms?.leave({ success, error in
204
212
  if success {
205
213
  resolve?(["success": success])
206
214
  } else {
207
215
  strongSelf.delegate?.emitEvent(strongSelf.ON_ERROR, ["error": HMSDecoder.getError(error), "id": strongSelf.id])
208
- reject?(nil, "error in leave", nil)
216
+ reject?("error in leave", "error in leave", nil)
209
217
  }
210
218
  })
211
219
  }
@@ -359,7 +367,7 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
359
367
  guard let remotePeers = self?.hms?.remotePeers,
360
368
  let track = HMSHelper.getTrackFromTrackId(trackId, remotePeers)
361
369
  else {
362
- reject?(nil, "TRACK_NOT_FOUND", nil)
370
+ reject?("TRACK_NOT_FOUND", "TRACK_NOT_FOUND", nil)
363
371
  return
364
372
  }
365
373
 
@@ -428,7 +436,7 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
428
436
  else {
429
437
  let error = HMSError(id: "120", code: HMSErrorCode.genericErrorUnknown, message: "TRACK_NOT_FOUND")
430
438
  strongSelf.delegate?.emitEvent(strongSelf.ON_ERROR, ["error": HMSDecoder.getError(error), "id": strongSelf.id])
431
- reject?(nil, "TRACK_NOT_FOUND", nil)
439
+ reject?("TRACK_NOT_FOUND", "TRACK_NOT_FOUND", nil)
432
440
  return
433
441
  }
434
442
  let mute = track.isMute()
@@ -457,7 +465,7 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
457
465
  guard let remotePeers = self?.hms?.remotePeers,
458
466
  let peer = HMSHelper.getRemotePeerFromPeerId(peerId, remotePeers: remotePeers)
459
467
  else {
460
- reject?(nil, "PEER_NOT_FOUND", nil)
468
+ reject?("PEER_NOT_FOUND", "PEER_NOT_FOUND", nil)
461
469
  return
462
470
  }
463
471
 
@@ -506,7 +514,7 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
506
514
  DispatchQueue.main.async { [weak self] in
507
515
  guard let remotePeers = self?.hms?.remotePeers
508
516
  else {
509
- reject?(nil, "REMOTE_PEERS_NOT_FOUND", nil)
517
+ reject?("REMOTE_PEERS_NOT_FOUND", "REMOTE_PEERS_NOT_FOUND", nil)
510
518
  return
511
519
  }
512
520
  let remoteAudioTrack = HMSHelper.getRemoteAudioTrackFromTrackId(trackId, remotePeers)
@@ -520,7 +528,7 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
520
528
  resolve?(isPlaybackAllowed)
521
529
  return
522
530
  } else {
523
- reject?(nil, "TRACK_NOT_FOUND", nil)
531
+ reject?("TRACK_NOT_FOUND", "TRACK_NOT_FOUND", nil)
524
532
  return
525
533
  }
526
534
  }
@@ -776,34 +784,57 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
776
784
  rtcStatsAttached = false
777
785
  }
778
786
 
779
- // TODO: to be implemented after volume is exposed for iOS
780
- // func getVolume(_ data: NSDictionary, _ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
781
- // guard let trackId = data.value(forKey: "trackId") as? String
782
- // else {
783
- // let errorMessage = "getVolume: " + HMSHelper.getUnavailableRequiredKey(data, ["trackId"])
784
- // emitRequiredKeysError(errorMessage)
785
- // reject?(errorMessage, errorMessage, nil)
786
- // return
787
- // }
788
- //
789
- // if (localPeer?.localAudioTrack()?.trackId == trackId) {
790
- //
791
- // }
792
- // }
787
+ func startScreenshare(_ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
788
+ guard let preferredExtension = preferredExtension else {
789
+ let error = HMSError(id: "103", code: .genericErrorUnknown, message: "Could not start Screen share, preferredExtension not passed in Build Method", params: ["function": #function])
790
+ on(error: error)
791
+ reject?(error.message, error.localizedDescription, nil)
792
+ return
793
+ }
794
+ DispatchQueue.main.async { [weak self] in
795
+ if self?.systemBroadcastPicker == nil {
796
+ self?.systemBroadcastPicker = RPSystemBroadcastPickerView()
797
+ self?.systemBroadcastPicker!.preferredExtension = preferredExtension
798
+ self?.systemBroadcastPicker!.showsMicrophoneButton = false
799
+ }
800
+
801
+ for view in self!.systemBroadcastPicker!.subviews {
802
+ if let button = view as? UIButton {
803
+ button.sendActions(for: .allEvents)
804
+ }
805
+ }
806
+ self?.startScreenshareResolve = resolve
807
+ }
808
+ }
809
+
810
+ func stopScreenshare(_ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
811
+ guard let preferredExtension = preferredExtension else {
812
+ let error = HMSError(id: "103", code: .genericErrorUnknown, message: "Could not start Screen share, preferredExtension not passed in Build Method", params: ["function": #function])
813
+ on(error: error)
814
+ reject?(error.message, error.localizedDescription, nil)
815
+ return
816
+ }
817
+ DispatchQueue.main.async { [weak self] in
818
+ if self?.systemBroadcastPicker == nil {
819
+ self?.systemBroadcastPicker = RPSystemBroadcastPickerView()
820
+ self?.systemBroadcastPicker!.preferredExtension = preferredExtension
821
+ self?.systemBroadcastPicker!.showsMicrophoneButton = false
822
+ }
823
+
824
+ for view in self!.systemBroadcastPicker!.subviews {
825
+ if let button = view as? UIButton {
826
+ button.sendActions(for: .allEvents)
827
+ }
828
+ }
829
+ self?.stopScreenshareResolve = resolve
830
+ }
831
+ }
832
+
833
+ func isScreenShared(_ resolve: RCTPromiseResolveBlock?, _ reject: RCTPromiseRejectBlock?) {
834
+ resolve?(isScreenShared)
835
+ }
793
836
 
794
- // func setLocalVideoSettings(_ data: NSDictionary) {
795
- // let localVideoTrack = self.hms?.localPeer?.localVideoTrack()
796
- //
797
- // guard let settings = HMSHelper.getLocalVideoSettings(data)
798
- // else {
799
- // let errorMessage = "setLocalVideoSettings: " + HMSHelper.getUnavailableRequiredKey(data)
800
- // emitRequiredKeysError(errorMessage)
801
- // return
802
- // }
803
- // localVideoTrack?.settings = settings
804
- // }
805
-
806
- // MARK: - HMS SDK Delegate Callbacks
837
+ // MARK: - HMS SDK Delegate Callbacks
807
838
  func on(join room: HMSRoom) {
808
839
  let roomData = HMSDecoder.getHmsRoom(room)
809
840
  let localPeerData = HMSDecoder.getHmsLocalPeer(hms?.localPeer)
@@ -856,6 +887,18 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
856
887
  let hmsPeer = HMSDecoder.getHmsPeer(peer)
857
888
  let hmsTrack = HMSDecoder.getHmsTrack(track)
858
889
 
890
+ if peer.isLocal && track.source.uppercased() == "SCREEN" && track.kind == HMSTrackKind.video {
891
+ if update == .trackAdded {
892
+ isScreenShared = true
893
+ startScreenshareResolve?(["success": true])
894
+ startScreenshareResolve = nil
895
+ } else if update == .trackRemoved {
896
+ isScreenShared = false
897
+ stopScreenshareResolve?(["success": true])
898
+ stopScreenshareResolve = nil
899
+ }
900
+ }
901
+
859
902
  self.delegate?.emitEvent(ON_TRACK_UPDATE, ["event": ON_TRACK_UPDATE, "id": self.id, "room": roomData, "type": type, "localPeer": localPeerData, "remotePeers": remotePeerData, "peer": hmsPeer, "track": hmsTrack])
860
903
  }
861
904
 
@@ -1024,10 +1067,8 @@ class HMSRNSDK: HMSUpdateListener, HMSPreviewListener {
1024
1067
  return ""
1025
1068
  }
1026
1069
  }
1027
- }
1028
1070
 
1029
- // extension HMSRNSDK: HMSLogger {
1030
- // func log(_ message: String, _ level: HMSLogLevel) {
1031
- //
1032
- // }
1033
- // }
1071
+ func emitRequiredKeysError(_ error: String) {
1072
+ delegate?.emitEvent(ON_ERROR, ["error": ["code": HMSErrorCode.genericErrorUnknown.rawValue, "description": error, "message": error, "name": "REQUIRED_KEYS_NOT_FOUND", "action": "SEND_ALL_REQUIRED_KEYS", "id": 102, "isTerminal": false], "id": id])
1073
+ }
1074
+ }
@@ -499,45 +499,27 @@ class HMSSDK {
499
499
  _HMSLogger.logger === null || _HMSLogger.logger === void 0 ? void 0 : _HMSLogger.logger.verbose('#Function startScreenshare', {
500
500
  id: this.id
501
501
  });
502
-
503
- if (_reactNative.Platform.OS === 'android') {
504
- return await HMSManager.startScreenshare({
505
- id: this.id
506
- });
507
- } else {
508
- console.log('API currently not available for iOS');
509
- return 'API currently not available for iOS';
510
- }
502
+ return await HMSManager.startScreenshare({
503
+ id: this.id
504
+ });
511
505
  });
512
506
 
513
507
  _defineProperty(this, "isScreenShared", async () => {
514
508
  _HMSLogger.logger === null || _HMSLogger.logger === void 0 ? void 0 : _HMSLogger.logger.verbose('#Function isScreenShared', {
515
509
  id: this.id
516
510
  });
517
-
518
- if (_reactNative.Platform.OS === 'android') {
519
- return await HMSManager.isScreenShared({
520
- id: this.id
521
- });
522
- } else {
523
- console.log('API currently not available for iOS');
524
- return 'API currently not available for iOS';
525
- }
511
+ return await HMSManager.isScreenShared({
512
+ id: this.id
513
+ });
526
514
  });
527
515
 
528
516
  _defineProperty(this, "stopScreenshare", async () => {
529
517
  _HMSLogger.logger === null || _HMSLogger.logger === void 0 ? void 0 : _HMSLogger.logger.verbose('#Function stopScreenshare', {
530
518
  id: this.id
531
519
  });
532
-
533
- if (_reactNative.Platform.OS === 'android') {
534
- return await HMSManager.stopScreenshare({
535
- id: this.id
536
- });
537
- } else {
538
- console.log('API currently not available for iOS');
539
- return 'API currently not available for iOS';
540
- }
520
+ return await HMSManager.stopScreenshare({
521
+ id: this.id
522
+ });
541
523
  });
542
524
 
543
525
  _defineProperty(this, "enableRTCStats", () => {
@@ -1369,8 +1351,17 @@ class HMSSDK {
1369
1351
  */
1370
1352
 
1371
1353
 
1372
- static async build(params) {
1373
- let id = await HMSManager.build((params === null || params === void 0 ? void 0 : params.trackSettings) || {});
1354
+ static async build(_ref) {
1355
+ let {
1356
+ trackSettings,
1357
+ appGroup,
1358
+ preferredExtension
1359
+ } = _ref;
1360
+ let id = await HMSManager.build({
1361
+ trackSettings: trackSettings,
1362
+ appGroup: appGroup,
1363
+ preferredExtension: preferredExtension
1364
+ });
1374
1365
  HmsSdk = new HMSSDK(id);
1375
1366
  HmsSdk.attachPreviewListener();
1376
1367
  HmsSdk.attachListeners();