@100mslive/react-native-hms 1.8.0 → 2.0.0-alpha.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/.gradle/6.7.1/executionHistory/executionHistory.lock +0 -0
  2. package/android/.gradle/6.7.1/fileHashes/fileHashes.lock +0 -0
  3. package/android/.gradle/6.9/executionHistory/executionHistory.bin +0 -0
  4. package/android/.gradle/6.9/executionHistory/executionHistory.lock +0 -0
  5. package/android/.gradle/6.9/fileHashes/fileHashes.bin +0 -0
  6. package/android/.gradle/6.9/fileHashes/fileHashes.lock +0 -0
  7. package/android/.gradle/{6.7.1/fileHashes/fileHashes.bin → 6.9/fileHashes/resourceHashesCache.bin} +0 -0
  8. package/android/.gradle/6.9/javaCompile/classAnalysis.bin +0 -0
  9. package/android/.gradle/6.9/javaCompile/jarAnalysis.bin +0 -0
  10. package/android/.gradle/6.9/javaCompile/javaCompile.lock +0 -0
  11. package/android/.gradle/6.9/javaCompile/taskHistory.bin +0 -0
  12. package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
  13. package/android/.gradle/buildOutputCleanup/cache.properties +1 -1
  14. package/android/.gradle/buildOutputCleanup/outputFiles.bin +0 -0
  15. package/android/.gradle/checksums/checksums.lock +0 -0
  16. package/android/.gradle/checksums/md5-checksums.bin +0 -0
  17. package/android/.gradle/checksums/sha1-checksums.bin +0 -0
  18. package/android/.idea/compiler.xml +6 -0
  19. package/android/.idea/gradle.xml +18 -0
  20. package/android/.idea/jarRepositories.xml +45 -0
  21. package/android/.idea/misc.xml +10 -0
  22. package/android/.idea/vcs.xml +6 -0
  23. package/android/build.gradle +3 -3
  24. package/android/local.properties +8 -1
  25. package/android/src/main/java/com/reactnativehmssdk/HMSDecoder.kt +14 -4
  26. package/android/src/main/java/com/reactnativehmssdk/HMSHelper.kt +12 -0
  27. package/android/src/main/java/com/reactnativehmssdk/HMSManager.kt +120 -25
  28. package/android/src/main/java/com/reactnativehmssdk/HMSRNSDK.kt +184 -0
  29. package/ios/HMSConstants.swift +1 -0
  30. package/ios/HMSDecoder.swift +16 -5
  31. package/ios/HMSManager.m +12 -0
  32. package/ios/HMSManager.swift +22 -1
  33. package/ios/HMSRNSDK.swift +62 -0
  34. package/ios/Hmssdk.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  35. package/ios/Hmssdk.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  36. package/ios/Hmssdk.xcodeproj/project.xcworkspace/xcuserdata/jatinnagar.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  37. package/ios/Hmssdk.xcodeproj/xcuserdata/jatinnagar.xcuserdatad/xcschemes/xcschememanagement.plist +14 -0
  38. package/lib/commonjs/classes/HMSPIPListenerActions.js +1 -0
  39. package/lib/commonjs/classes/HMSPIPListenerActions.js.map +1 -1
  40. package/lib/commonjs/classes/HMSPeer.js +15 -0
  41. package/lib/commonjs/classes/HMSPeer.js.map +1 -1
  42. package/lib/commonjs/classes/HMSPeerListIterator.js +46 -0
  43. package/lib/commonjs/classes/HMSPeerListIterator.js.map +1 -0
  44. package/lib/commonjs/classes/HMSPeerListIteratorOptions.js +2 -0
  45. package/lib/commonjs/classes/HMSPeerListIteratorOptions.js.map +1 -0
  46. package/lib/commonjs/classes/HMSPeerUpdate.js +2 -1
  47. package/lib/commonjs/classes/HMSPeerUpdate.js.map +1 -1
  48. package/lib/commonjs/classes/HMSPeersCache.js +7 -0
  49. package/lib/commonjs/classes/HMSPeersCache.js.map +1 -1
  50. package/lib/commonjs/classes/HMSSDK.js +122 -3
  51. package/lib/commonjs/classes/HMSSDK.js.map +1 -1
  52. package/lib/commonjs/classes/HMSUpdateListenerActions.js +1 -0
  53. package/lib/commonjs/classes/HMSUpdateListenerActions.js.map +1 -1
  54. package/lib/module/classes/HMSPIPListenerActions.js +1 -0
  55. package/lib/module/classes/HMSPIPListenerActions.js.map +1 -1
  56. package/lib/module/classes/HMSPeer.js +15 -0
  57. package/lib/module/classes/HMSPeer.js.map +1 -1
  58. package/lib/module/classes/HMSPeerListIterator.js +40 -0
  59. package/lib/module/classes/HMSPeerListIterator.js.map +1 -0
  60. package/lib/module/classes/HMSPeerListIteratorOptions.js +2 -0
  61. package/lib/module/classes/HMSPeerListIteratorOptions.js.map +1 -0
  62. package/lib/module/classes/HMSPeerUpdate.js +2 -1
  63. package/lib/module/classes/HMSPeerUpdate.js.map +1 -1
  64. package/lib/module/classes/HMSPeersCache.js +7 -0
  65. package/lib/module/classes/HMSPeersCache.js.map +1 -1
  66. package/lib/module/classes/HMSSDK.js +122 -4
  67. package/lib/module/classes/HMSSDK.js.map +1 -1
  68. package/lib/module/classes/HMSUpdateListenerActions.js +1 -0
  69. package/lib/module/classes/HMSUpdateListenerActions.js.map +1 -1
  70. package/lib/typescript/classes/HMSPIPListenerActions.d.ts +1 -0
  71. package/lib/typescript/classes/HMSPeer.d.ts +3 -0
  72. package/lib/typescript/classes/HMSPeerListIterator.d.ts +7 -0
  73. package/lib/typescript/classes/HMSPeerListIteratorOptions.d.ts +5 -0
  74. package/lib/typescript/classes/HMSPeerUpdate.d.ts +2 -1
  75. package/lib/typescript/classes/HMSPeersCache.d.ts +1 -0
  76. package/lib/typescript/classes/HMSSDK.d.ts +23 -1
  77. package/lib/typescript/classes/HMSUpdateListenerActions.d.ts +2 -1
  78. package/package.json +1 -1
  79. package/sdk-versions.json +2 -2
  80. package/src/classes/HMSPIPListenerActions.ts +1 -0
  81. package/src/classes/HMSPeer.ts +25 -0
  82. package/src/classes/HMSPeerListIterator.ts +40 -0
  83. package/src/classes/HMSPeerListIteratorOptions.ts +5 -0
  84. package/src/classes/HMSPeerUpdate.ts +2 -0
  85. package/src/classes/HMSPeersCache.ts +7 -0
  86. package/src/classes/HMSSDK.tsx +154 -2
  87. package/src/classes/HMSUpdateListenerActions.ts +1 -0
  88. package/android/.gradle/6.7.1/executionHistory/executionHistory.bin +0 -0
@@ -26,6 +26,7 @@ export let HMSUpdateListenerActions = /*#__PURE__*/function (HMSUpdateListenerAc
26
26
  HMSUpdateListenerActions["ON_AUDIO_DEVICE_CHANGED"] = "ON_AUDIO_DEVICE_CHANGED";
27
27
  HMSUpdateListenerActions["ON_SESSION_STORE_AVAILABLE"] = "ON_SESSION_STORE_AVAILABLE";
28
28
  HMSUpdateListenerActions["ON_SESSION_STORE_CHANGED"] = "ON_SESSION_STORE_CHANGED";
29
+ HMSUpdateListenerActions["ON_PEER_LIST_UPDATED"] = "ON_PEER_LIST_UPDATED";
29
30
  return HMSUpdateListenerActions;
30
31
  }({});
31
32
  //# sourceMappingURL=HMSUpdateListenerActions.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["HMSUpdateListenerActions"],"sources":["HMSUpdateListenerActions.ts"],"sourcesContent":["/**\n * These are the available events emitted by the `HMSSDK`\n *\n * For more info about these events, checkout Event Listener docs\n * {@link https://www.100ms.live/docs/react-native/v2/how-to-guides/listen-to-room-updates/event-listeners}\n */\nexport enum HMSUpdateListenerActions {\n ON_PREVIEW = 'ON_PREVIEW',\n ON_JOIN = 'ON_JOIN',\n ON_ROOM_UPDATE = 'ON_ROOM_UPDATE',\n ON_PEER_UPDATE = '3',\n ON_TRACK_UPDATE = 'ON_TRACK_UPDATE',\n ON_ERROR = 'ON_ERROR',\n ON_MESSAGE = 'ON_MESSAGE',\n ON_SPEAKER = 'ON_SPEAKER',\n RECONNECTING = 'RECONNECTING',\n RECONNECTED = 'RECONNECTED',\n ON_ROLE_CHANGE_REQUEST = 'ON_ROLE_CHANGE_REQUEST',\n ON_CHANGE_TRACK_STATE_REQUEST = 'ON_CHANGE_TRACK_STATE_REQUEST',\n ON_REMOVED_FROM_ROOM = 'ON_REMOVED_FROM_ROOM',\n ON_RTC_STATS = 'ON_RTC_STATS',\n ON_LOCAL_AUDIO_STATS = 'ON_LOCAL_AUDIO_STATS',\n ON_LOCAL_VIDEO_STATS = 'ON_LOCAL_VIDEO_STATS',\n ON_REMOTE_AUDIO_STATS = 'ON_REMOTE_AUDIO_STATS',\n ON_REMOTE_VIDEO_STATS = 'ON_REMOTE_VIDEO_STATS',\n ON_AUDIO_DEVICE_CHANGED = 'ON_AUDIO_DEVICE_CHANGED',\n ON_SESSION_STORE_AVAILABLE = 'ON_SESSION_STORE_AVAILABLE',\n ON_SESSION_STORE_CHANGED = 'ON_SESSION_STORE_CHANGED',\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,WAAYA,wBAAwB,0BAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAA,OAAxBA,wBAAwB;AAAA"}
1
+ {"version":3,"names":["HMSUpdateListenerActions"],"sources":["HMSUpdateListenerActions.ts"],"sourcesContent":["/**\n * These are the available events emitted by the `HMSSDK`\n *\n * For more info about these events, checkout Event Listener docs\n * {@link https://www.100ms.live/docs/react-native/v2/how-to-guides/listen-to-room-updates/event-listeners}\n */\nexport enum HMSUpdateListenerActions {\n ON_PREVIEW = 'ON_PREVIEW',\n ON_JOIN = 'ON_JOIN',\n ON_ROOM_UPDATE = 'ON_ROOM_UPDATE',\n ON_PEER_UPDATE = '3',\n ON_TRACK_UPDATE = 'ON_TRACK_UPDATE',\n ON_ERROR = 'ON_ERROR',\n ON_MESSAGE = 'ON_MESSAGE',\n ON_SPEAKER = 'ON_SPEAKER',\n RECONNECTING = 'RECONNECTING',\n RECONNECTED = 'RECONNECTED',\n ON_ROLE_CHANGE_REQUEST = 'ON_ROLE_CHANGE_REQUEST',\n ON_CHANGE_TRACK_STATE_REQUEST = 'ON_CHANGE_TRACK_STATE_REQUEST',\n ON_REMOVED_FROM_ROOM = 'ON_REMOVED_FROM_ROOM',\n ON_RTC_STATS = 'ON_RTC_STATS',\n ON_LOCAL_AUDIO_STATS = 'ON_LOCAL_AUDIO_STATS',\n ON_LOCAL_VIDEO_STATS = 'ON_LOCAL_VIDEO_STATS',\n ON_REMOTE_AUDIO_STATS = 'ON_REMOTE_AUDIO_STATS',\n ON_REMOTE_VIDEO_STATS = 'ON_REMOTE_VIDEO_STATS',\n ON_AUDIO_DEVICE_CHANGED = 'ON_AUDIO_DEVICE_CHANGED',\n ON_SESSION_STORE_AVAILABLE = 'ON_SESSION_STORE_AVAILABLE',\n ON_SESSION_STORE_CHANGED = 'ON_SESSION_STORE_CHANGED',\n ON_PEER_LIST_UPDATED = 'ON_PEER_LIST_UPDATED',\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,WAAYA,wBAAwB,0BAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAxBA,wBAAwB;EAAA,OAAxBA,wBAAwB;AAAA"}
@@ -1,3 +1,4 @@
1
1
  export declare enum HMSPIPListenerActions {
2
+ ON_PIP_MODE_CHANGED = "ON_PIP_MODE_CHANGED",
2
3
  ON_PIP_ROOM_LEAVE = "ON_PIP_ROOM_LEAVE"
3
4
  }
@@ -10,7 +10,9 @@ export declare class HMSPeer {
10
10
  private _customerUserID;
11
11
  private _metadata;
12
12
  private _role;
13
+ private _isHandRaised;
13
14
  private _updateIsLocal;
15
+ private _updateIsHandRaised;
14
16
  private _updateCustomerUserID;
15
17
  private _updateMetadata;
16
18
  private _updateRole;
@@ -19,6 +21,7 @@ export declare class HMSPeer {
19
21
  name: string;
20
22
  });
21
23
  get isLocal(): boolean | undefined;
24
+ get isHandRaised(): boolean;
22
25
  get networkQuality(): HMSNetworkQuality | undefined;
23
26
  get customerUserID(): string | undefined;
24
27
  get metadata(): string | undefined;
@@ -0,0 +1,7 @@
1
+ import type { HMSPeer } from './HMSPeer';
2
+ export declare class HMSPeerListIterator {
3
+ private readonly uniqueId;
4
+ constructor(uniqueId: number);
5
+ hasNext(): Promise<boolean>;
6
+ next(): Promise<HMSPeer[]>;
7
+ }
@@ -0,0 +1,5 @@
1
+ export interface HMSPeerListIteratorOptions {
2
+ byRoleName?: string;
3
+ byPeerIds?: string[];
4
+ limit?: number;
5
+ }
@@ -4,6 +4,7 @@ export declare enum HMSPeerUpdate {
4
4
  METADATA_CHANGED = "METADATA_CHANGED",
5
5
  ROLE_CHANGED = "ROLE_CHANGED",
6
6
  NAME_CHANGED = "NAME_CHANGED",
7
- NETWORK_QUALITY_UPDATED = "NETWORK_QUALITY_UPDATED"
7
+ NETWORK_QUALITY_UPDATED = "NETWORK_QUALITY_UPDATED",
8
+ HAND_RAISED_CHANGED = "HAND_RAISED_CHANGED"
8
9
  }
9
10
  export declare const HMSPeerUpdateOrdinals: Map<string, HMSPeerUpdate>;
@@ -20,6 +20,7 @@ export type HMSPeerCacheProps = {
20
20
  audioTrack?: HMSAudioTrack | undefined;
21
21
  videoTrack?: HMSVideoTrack | undefined;
22
22
  auxiliaryTracks?: HMSTrack[] | undefined;
23
+ isHandRaised?: boolean | undefined;
23
24
  };
24
25
  export declare class HMSPeersCache {
25
26
  private _data;
@@ -20,6 +20,7 @@ import type { HMSLogSettings } from './HMSLogSettings';
20
20
  import { HMSPIPListenerActions } from './HMSPIPListenerActions';
21
21
  type HmsViewProps = Omit<HmsComponentProps, 'id'>;
22
22
  interface PIPConfig {
23
+ autoEnterPipMode?: boolean;
23
24
  aspectRatio?: [number, number];
24
25
  endButton?: boolean;
25
26
  audioButton?: boolean;
@@ -33,6 +34,7 @@ export declare class HMSSDK {
33
34
  private onJoinDelegate?;
34
35
  private onRoomDelegate?;
35
36
  private onPeerDelegate?;
37
+ private onPeerListUpdatedDelegate?;
36
38
  private onTrackDelegate?;
37
39
  private onErrorDelegate?;
38
40
  private onMessageDelegate?;
@@ -50,6 +52,7 @@ export declare class HMSSDK {
50
52
  private onAudioDeviceChangedDelegate?;
51
53
  private onSessionStoreAvailableDelegate?;
52
54
  private onPIPRoomLeaveDelegate?;
55
+ private onPIPModeChangedDelegate?;
53
56
  private emitterSubscriptions;
54
57
  private constructor();
55
58
  /**
@@ -525,6 +528,21 @@ export declare class HMSSDK {
525
528
  getRemoteVideoTrackFromTrackId: (trackId: string) => Promise<import("./HMSRemoteVideoTrack").HMSRemoteVideoTrack>;
526
529
  getRemoteAudioTrackFromTrackId: (trackId: string) => Promise<import("./HMSRemoteAudioTrack").HMSRemoteAudioTrack>;
527
530
  getPeerFromPeerId: (peerId: string) => HMSPeer | undefined;
531
+ /**
532
+ * - This function is used to raise hand for the local peer
533
+ * @memberof HMSSDK
534
+ */
535
+ raiseLocalPeerHand: () => Promise<any>;
536
+ /**
537
+ * - This function is used to lower hand for the local peer
538
+ * @memberof HMSSDK
539
+ */
540
+ lowerLocalPeerHand: () => Promise<any>;
541
+ /**
542
+ * - This function is used to lower hand for the remote peer
543
+ * @param peer
544
+ */
545
+ lowerRemotePeerHand: (peer: HMSPeer) => Promise<any>;
528
546
  /**
529
547
  * - This is a prototype event listener that takes action and listens for updates related to that particular action
530
548
  *
@@ -565,6 +583,7 @@ export declare class HMSSDK {
565
583
  onJoinListener: (data: any) => void;
566
584
  onRoomListener: (data: any) => void;
567
585
  onPeerListener: (peerData: any) => void;
586
+ onPeerListUpdatedListener: (data: any) => void;
568
587
  onTrackListener: (data: any) => void;
569
588
  onMessageListener: (data: any) => void;
570
589
  onSpeakerListener: (data: any) => void;
@@ -590,8 +609,11 @@ export declare class HMSSDK {
590
609
  onPIPRoomLeaveListener: (data: {
591
610
  id: string;
592
611
  }) => void;
612
+ onPIPModeChangedListener: (data: {
613
+ isInPictureInPictureMode: boolean;
614
+ }) => void;
593
615
  isPipModeSupported(): Promise<undefined | boolean>;
594
- enablePipMode(data?: PIPConfig): Promise<undefined | boolean>;
616
+ enterPipMode(data?: PIPConfig): Promise<undefined | boolean>;
595
617
  setPipParams(data?: PIPConfig): Promise<undefined | boolean>;
596
618
  /**
597
619
  * - Returns the instance of logger which can be used to manipulate log levels.
@@ -25,5 +25,6 @@ export declare enum HMSUpdateListenerActions {
25
25
  ON_REMOTE_VIDEO_STATS = "ON_REMOTE_VIDEO_STATS",
26
26
  ON_AUDIO_DEVICE_CHANGED = "ON_AUDIO_DEVICE_CHANGED",
27
27
  ON_SESSION_STORE_AVAILABLE = "ON_SESSION_STORE_AVAILABLE",
28
- ON_SESSION_STORE_CHANGED = "ON_SESSION_STORE_CHANGED"
28
+ ON_SESSION_STORE_CHANGED = "ON_SESSION_STORE_CHANGED",
29
+ ON_PEER_LIST_UPDATED = "ON_PEER_LIST_UPDATED"
29
30
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@100mslive/react-native-hms",
3
- "version": "1.8.0",
3
+ "version": "2.0.0-alpha.0",
4
4
  "description": "Integrate Real Time Audio and Video conferencing, Interactive Live Streaming, and Chat in your apps with 100ms React Native SDK. With support for HLS and RTMP Live Streaming and Recording, Picture-in-Picture (PiP), one-to-one Video Call Modes, Audio Rooms, Video Player and much more, add immersive real-time communications to your apps.",
5
5
  "main": "lib/commonjs/index",
6
6
  "module": "lib/module/index",
package/sdk-versions.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
- "ios": "0.9.12",
2
+ "ios": "1.1.0",
3
3
  "iOSBroadcastExtension": "0.0.9",
4
4
  "iOSHMSHLSPlayer": "0.0.2",
5
- "android": "2.7.6"
5
+ "android": "2.7.7"
6
6
  }
@@ -1,3 +1,4 @@
1
1
  export enum HMSPIPListenerActions {
2
+ ON_PIP_MODE_CHANGED = 'ON_PIP_MODE_CHANGED',
2
3
  ON_PIP_ROOM_LEAVE = 'ON_PIP_ROOM_LEAVE',
3
4
  }
@@ -13,6 +13,7 @@ export class HMSPeer {
13
13
  private _customerUserID: string | undefined;
14
14
  private _metadata: string | undefined;
15
15
  private _role: HMSRole | undefined;
16
+ private _isHandRaised: boolean = false;
16
17
 
17
18
  private _updateIsLocal(value: boolean) {
18
19
  // If `_isLocal` is outdated, update it
@@ -21,6 +22,13 @@ export class HMSPeer {
21
22
  }
22
23
  }
23
24
 
25
+ private _updateIsHandRaised(value: boolean) {
26
+ // If `_isHandRaised` is outdated, update it
27
+ if (this._isHandRaised !== value) {
28
+ this._isHandRaised = value;
29
+ }
30
+ }
31
+
24
32
  private _updateCustomerUserID(value: string) {
25
33
  // If `_customerUserID` is outdated, update it
26
34
  if (this._customerUserID !== value) {
@@ -64,6 +72,23 @@ export class HMSPeer {
64
72
  return value ?? this._isLocal;
65
73
  }
66
74
 
75
+ get isHandRaised(): boolean {
76
+ const hmsPeersCache = getHmsPeersCache();
77
+
78
+ const value = hmsPeersCache
79
+ ? hmsPeersCache.getProperty(this.peerID, 'isHandRaised')
80
+ : getPeerPropertyFromNative(
81
+ HMSConstants.DEFAULT_SDK_ID,
82
+ this.peerID,
83
+ 'isHandRaised'
84
+ );
85
+
86
+ if (typeof value === 'boolean') {
87
+ this._updateIsHandRaised(value);
88
+ }
89
+ return value ?? this._isHandRaised;
90
+ }
91
+
67
92
  get networkQuality(): HMSNetworkQuality | undefined {
68
93
  const hmsPeersCache = getHmsPeersCache();
69
94
 
@@ -0,0 +1,40 @@
1
+ // import type { HMSException } from "./HMSException";
2
+ import type { HMSPeer } from './HMSPeer';
3
+ import HMSManagerModule from './HMSManagerModule';
4
+ import { HMSEncoder, logger } from '@100mslive/react-native-hms';
5
+ import { HMSConstants } from './HMSConstants';
6
+
7
+ export class HMSPeerListIterator {
8
+ private readonly uniqueId: number;
9
+
10
+ constructor(uniqueId: number) {
11
+ this.uniqueId = uniqueId;
12
+ }
13
+
14
+ async hasNext(): Promise<boolean> {
15
+ logger?.verbose('#Function HMSPeerListIterator#hasNext', this.uniqueId);
16
+ try {
17
+ return HMSManagerModule.peerListIteratorHasNext({
18
+ id: HMSConstants.DEFAULT_SDK_ID,
19
+ uniqueId: this.uniqueId,
20
+ });
21
+ } catch (e) {
22
+ logger?.error('#Error in #Function HMSPeerListIterator#hasNext ', e);
23
+ return Promise.reject(e);
24
+ }
25
+ }
26
+
27
+ async next(): Promise<HMSPeer[]> {
28
+ logger?.verbose('#Function HMSPeerListIterator#next', this.uniqueId);
29
+ try {
30
+ const peers = await HMSManagerModule.peerListIteratorNext({
31
+ id: HMSConstants.DEFAULT_SDK_ID,
32
+ uniqueId: this.uniqueId,
33
+ });
34
+ return HMSEncoder.encodeHmsPeers(peers);
35
+ } catch (e) {
36
+ logger?.error('#Error in #Function HMSPeerListIterator#next ', e);
37
+ return Promise.reject(e);
38
+ }
39
+ }
40
+ }
@@ -0,0 +1,5 @@
1
+ export interface HMSPeerListIteratorOptions {
2
+ byRoleName?: string;
3
+ byPeerIds?: string[];
4
+ limit?: number;
5
+ }
@@ -5,6 +5,7 @@ export enum HMSPeerUpdate {
5
5
  ROLE_CHANGED = 'ROLE_CHANGED',
6
6
  NAME_CHANGED = 'NAME_CHANGED',
7
7
  NETWORK_QUALITY_UPDATED = 'NETWORK_QUALITY_UPDATED',
8
+ HAND_RAISED_CHANGED = 'HAND_RAISED_CHANGED',
8
9
  }
9
10
 
10
11
  export const HMSPeerUpdateOrdinals = new Map([
@@ -14,4 +15,5 @@ export const HMSPeerUpdateOrdinals = new Map([
14
15
  ['5', HMSPeerUpdate.NAME_CHANGED],
15
16
  ['6', HMSPeerUpdate.METADATA_CHANGED],
16
17
  ['7', HMSPeerUpdate.NETWORK_QUALITY_UPDATED],
18
+ ['8', HMSPeerUpdate.HAND_RAISED_CHANGED],
17
19
  ]);
@@ -39,6 +39,7 @@ export type HMSPeerCacheProps = {
39
39
  audioTrack?: HMSAudioTrack | undefined;
40
40
  videoTrack?: HMSVideoTrack | undefined;
41
41
  auxiliaryTracks?: HMSTrack[] | undefined;
42
+ isHandRaised?: boolean | undefined;
42
43
  };
43
44
 
44
45
  export class HMSPeersCache {
@@ -206,6 +207,10 @@ export class HMSPeersCache {
206
207
  updatedObj.name = data.name;
207
208
  break;
208
209
  }
210
+ case HMSPeerUpdate.HAND_RAISED_CHANGED: {
211
+ updatedObj.isHandRaised = data.isHandRaised;
212
+ break;
213
+ }
209
214
  default: {
210
215
  updatedObj = { ...updatedObj, ...data };
211
216
  break;
@@ -256,6 +261,8 @@ export function getPeerPropertyFromNative<T extends keyof HMSPeerCacheProps>(
256
261
  : undefined;
257
262
  } else if (property === 'name') {
258
263
  value = data?.[property];
264
+ } else if (property === 'isHandRaised') {
265
+ value = data ? data[property] : false;
259
266
  } else {
260
267
  value = data ? data[property] : undefined;
261
268
  }
@@ -43,11 +43,14 @@ import {
43
43
  } from './HMSRoomCache';
44
44
  import { HMSPeerUpdateOrdinals } from './HMSPeerUpdate';
45
45
  import { HMSSessionStore } from './HMSSessionStore';
46
+ // import type { HMSPeerListIteratorOptions } from './HMSPeerListIteratorOptions';
47
+ // import { HMSPeerListIterator } from './HMSPeerListIterator';
46
48
 
47
49
  type HmsViewProps = Omit<HmsComponentProps, 'id'>;
48
50
 
49
51
  // TODO: Rename to HMSPIPConfig & to be moved to a separate file
50
52
  interface PIPConfig {
53
+ autoEnterPipMode?: boolean;
51
54
  aspectRatio?: [number, number];
52
55
  endButton?: boolean;
53
56
  audioButton?: boolean;
@@ -66,6 +69,7 @@ export class HMSSDK {
66
69
  private onJoinDelegate?: any;
67
70
  private onRoomDelegate?: any;
68
71
  private onPeerDelegate?: any;
72
+ private onPeerListUpdatedDelegate?: any;
69
73
  private onTrackDelegate?: any;
70
74
  private onErrorDelegate?: any;
71
75
  private onMessageDelegate?: any;
@@ -83,6 +87,7 @@ export class HMSSDK {
83
87
  private onAudioDeviceChangedDelegate?: any;
84
88
  private onSessionStoreAvailableDelegate?: any;
85
89
  private onPIPRoomLeaveDelegate?: any;
90
+ private onPIPModeChangedDelegate?: any;
86
91
 
87
92
  private emitterSubscriptions: Partial<
88
93
  Record<
@@ -1145,6 +1150,68 @@ export class HMSSDK {
1145
1150
  return HMSEncoder.encodeHmsPeer({ peerID: peerId });
1146
1151
  };
1147
1152
 
1153
+ /**
1154
+ * - This function is used to raise hand for the local peer
1155
+ * @memberof HMSSDK
1156
+ */
1157
+ raiseLocalPeerHand = async () => {
1158
+ const data = {
1159
+ id: this.id,
1160
+ };
1161
+ logger?.verbose('#Function raiseLocalPeerHand', data);
1162
+ return HMSManager.raiseLocalPeerHand(data);
1163
+ };
1164
+
1165
+ /**
1166
+ * - This function is used to lower hand for the local peer
1167
+ * @memberof HMSSDK
1168
+ */
1169
+ lowerLocalPeerHand = async () => {
1170
+ const data = {
1171
+ id: this.id,
1172
+ };
1173
+ logger?.verbose('#Function lowerLocalPeerHand', data);
1174
+ return HMSManager.lowerLocalPeerHand(data);
1175
+ };
1176
+
1177
+ /**
1178
+ * - This function is used to lower hand for the remote peer
1179
+ * @param peer
1180
+ */
1181
+ lowerRemotePeerHand = async (peer: HMSPeer) => {
1182
+ const data = {
1183
+ peerId: peer.peerID,
1184
+ id: this.id,
1185
+ };
1186
+ logger?.verbose('#Function lowerRemotePeerHand', data);
1187
+ return HMSManager.lowerRemotePeerHand(data);
1188
+ };
1189
+
1190
+ // getPeerListIterator = (
1191
+ // options?: HMSPeerListIteratorOptions
1192
+ // ): HMSPeerListIterator => {
1193
+ // logger?.verbose('#Function getPeerListIterator', {
1194
+ // id: this.id,
1195
+ // options,
1196
+ // });
1197
+
1198
+ // const uniqueId = Date.now();
1199
+
1200
+ // const data: null | { sucess: boolean; uniqueId: number } =
1201
+ // HMSManager.getPeerListIterator({
1202
+ // id: this.id,
1203
+ // ...options,
1204
+ // limit: options?.limit ?? 10,
1205
+ // uniqueId: uniqueId,
1206
+ // });
1207
+
1208
+ // if (!data) {
1209
+ // throw new Error('Unable to create PeerListIterator');
1210
+ // }
1211
+
1212
+ // return new HMSPeerListIterator(data.uniqueId);
1213
+ // };
1214
+
1148
1215
  /**
1149
1216
  * - This is a prototype event listener that takes action and listens for updates related to that particular action
1150
1217
  *
@@ -1229,6 +1296,28 @@ export class HMSSDK {
1229
1296
  this.onPeerDelegate = callback;
1230
1297
  break;
1231
1298
  }
1299
+ case HMSUpdateListenerActions.ON_PEER_LIST_UPDATED: {
1300
+ // Checking if we already have ON_PEER_LIST_UPDATED subscription
1301
+ if (
1302
+ !this.emitterSubscriptions[
1303
+ HMSUpdateListenerActions.ON_PEER_LIST_UPDATED
1304
+ ]
1305
+ ) {
1306
+ // Adding ON_PEER_LIST_UPDATED native listener
1307
+ const peerListUpdatedSubscription =
1308
+ HMSNativeEventListener.addListener(
1309
+ this.id,
1310
+ HMSUpdateListenerActions.ON_PEER_LIST_UPDATED,
1311
+ this.onPeerListUpdatedListener
1312
+ );
1313
+ this.emitterSubscriptions[
1314
+ HMSUpdateListenerActions.ON_PEER_LIST_UPDATED
1315
+ ] = peerListUpdatedSubscription;
1316
+ }
1317
+ // Adding App Delegate listener
1318
+ this.onPeerListUpdatedDelegate = callback;
1319
+ break;
1320
+ }
1232
1321
  case HMSUpdateListenerActions.ON_TRACK_UPDATE: {
1233
1322
  // Checking if we already have ON_TRACK_UPDATE subscription
1234
1323
  if (
@@ -1554,6 +1643,25 @@ export class HMSSDK {
1554
1643
  }
1555
1644
  break;
1556
1645
  }
1646
+ case HMSPIPListenerActions.ON_PIP_MODE_CHANGED: {
1647
+ if (Platform.OS === 'android') {
1648
+ // Checking if we already have ON_PIP_MODE_CHANGED subscription
1649
+ if (
1650
+ !this.emitterSubscriptions[HMSPIPListenerActions.ON_PIP_MODE_CHANGED]
1651
+ ) {
1652
+ const pipModeChangedSubscription = HMSNativeEventListener.addListener(
1653
+ this.id,
1654
+ HMSPIPListenerActions.ON_PIP_MODE_CHANGED,
1655
+ this.onPIPModeChangedListener
1656
+ );
1657
+ this.emitterSubscriptions[HMSPIPListenerActions.ON_PIP_MODE_CHANGED] =
1658
+ pipModeChangedSubscription;
1659
+ }
1660
+ // Adding PIP mode changed Delegate listener
1661
+ this.onPIPModeChangedDelegate = callback;
1662
+ }
1663
+ break;
1664
+ }
1557
1665
  default:
1558
1666
  }
1559
1667
  };
@@ -1893,6 +2001,22 @@ export class HMSSDK {
1893
2001
  }
1894
2002
  break;
1895
2003
  }
2004
+ case HMSPIPListenerActions.ON_PIP_MODE_CHANGED: {
2005
+ if (Platform.OS === 'android') {
2006
+ const subscription =
2007
+ this.emitterSubscriptions[HMSPIPListenerActions.ON_PIP_MODE_CHANGED];
2008
+ // Removing ON_PIP_MODE_CHANGED native listener
2009
+ if (subscription) {
2010
+ subscription.remove();
2011
+
2012
+ this.emitterSubscriptions[HMSPIPListenerActions.ON_PIP_MODE_CHANGED] =
2013
+ undefined;
2014
+ }
2015
+ // Removing App Delegate listener
2016
+ this.onPIPModeChangedDelegate = null;
2017
+ }
2018
+ break;
2019
+ }
1896
2020
  default:
1897
2021
  }
1898
2022
  };
@@ -2026,6 +2150,26 @@ export class HMSSDK {
2026
2150
  }
2027
2151
  };
2028
2152
 
2153
+ onPeerListUpdatedListener = (data: any) => {
2154
+ if (data.id !== this.id) {
2155
+ return;
2156
+ }
2157
+ const addedPeers = HMSEncoder.encodeHmsPeers(data.addedPeers);
2158
+ const removedPeers = HMSEncoder.encodeHmsPeers(data.removedPeers);
2159
+
2160
+ if (this.onPeerListUpdatedDelegate) {
2161
+ logger?.verbose('#Listener ON_PEER_LIST_UPDATED_LISTENER_CALL', {
2162
+ totalAddedPeers: addedPeers.length,
2163
+ totalRemovedPeers: removedPeers.length,
2164
+ });
2165
+
2166
+ this.onPeerListUpdatedDelegate({
2167
+ addedPeers,
2168
+ removedPeers,
2169
+ });
2170
+ }
2171
+ };
2172
+
2029
2173
  onTrackListener = (data: any) => {
2030
2174
  if (data.id !== this.id) {
2031
2175
  return;
@@ -2324,12 +2468,20 @@ export class HMSSDK {
2324
2468
  }
2325
2469
  };
2326
2470
 
2471
+ onPIPModeChangedListener = (data: { isInPictureInPictureMode: boolean }) => {
2472
+ if (this.onPIPModeChangedDelegate) {
2473
+ logger?.verbose('#Listener onPIPModeChanged_CALL', data);
2474
+
2475
+ this.onPIPModeChangedDelegate(data);
2476
+ }
2477
+ }
2478
+
2327
2479
  async isPipModeSupported(): Promise<undefined | boolean> {
2328
2480
  return HMSManager.handlePipActions('isPipModeSupported', { id: this.id });
2329
2481
  }
2330
2482
 
2331
- async enablePipMode(data?: PIPConfig): Promise<undefined | boolean> {
2332
- return HMSManager.handlePipActions('enablePipMode', {
2483
+ async enterPipMode(data?: PIPConfig): Promise<undefined | boolean> {
2484
+ return HMSManager.handlePipActions('enterPipMode', {
2333
2485
  ...data,
2334
2486
  id: this.id,
2335
2487
  });
@@ -26,4 +26,5 @@ export enum HMSUpdateListenerActions {
26
26
  ON_AUDIO_DEVICE_CHANGED = 'ON_AUDIO_DEVICE_CHANGED',
27
27
  ON_SESSION_STORE_AVAILABLE = 'ON_SESSION_STORE_AVAILABLE',
28
28
  ON_SESSION_STORE_CHANGED = 'ON_SESSION_STORE_CHANGED',
29
+ ON_PEER_LIST_UPDATED = 'ON_PEER_LIST_UPDATED',
29
30
  }