@100mslive/react-native-hms 0.9.94 → 1.1.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 (285) hide show
  1. package/README.md +44 -29
  2. package/android/.gradle/6.9/fileHashes/fileHashes.bin +0 -0
  3. package/android/.gradle/6.9/fileHashes/fileHashes.lock +0 -0
  4. package/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock +0 -0
  5. package/android/.gradle/buildOutputCleanup/outputFiles.bin +0 -0
  6. package/android/.gradle/checksums/checksums.lock +0 -0
  7. package/android/.gradle/checksums/md5-checksums.bin +0 -0
  8. package/android/.gradle/checksums/sha1-checksums.bin +0 -0
  9. package/android/.idea/jarRepositories.xml +10 -0
  10. package/android/.idea/libraries/Gradle__androidx_tracing_tracing_1_1_0_aar.xml +13 -0
  11. package/android/.idea/libraries/Gradle__com_facebook_fbjni_fbjni_0_3_0_aar.xml +14 -0
  12. package/android/.idea/libraries/Gradle__com_facebook_react_react_native_0_71_0_rc_0_debug_aar.xml +14 -0
  13. package/android/.idea/libraries/{Gradle__com_github_100mslive_android_sdk_lib_2_5_0_aar.xml → Gradle__com_github_100mslive_android_sdk_lib_2_5_1_aar.xml} +3 -3
  14. package/android/.idea/libraries/{Gradle__com_github_100mslive_webrtc_m104_hms_1_2_aar.xml → Gradle__com_github_100mslive_webrtc_m104_hms_1_3_aar.xml} +3 -3
  15. package/android/.idea/modules/android.androidTest.iml +10 -8
  16. package/android/.idea/modules/android.main.iml +10 -8
  17. package/android/.idea/modules/android.unitTest.iml +10 -8
  18. package/android/.idea/sonarlint/issuestore/3/c/3c46088b6add3088181589d8ed726652742b6221 +4 -4
  19. package/android/.idea/sonarlint/issuestore/a/8/a8c9f5ddd88723818e51ae3cf8693d02355a8691 +0 -0
  20. package/android/.idea/sonarlint/issuestore/index.pb +2 -0
  21. package/android/build.gradle +5 -1
  22. package/android/src/main/java/com/reactnativehmssdk/HMSDecoder.kt +23 -23
  23. package/android/src/main/java/com/reactnativehmssdk/HMSManager.kt +421 -3
  24. package/android/src/main/java/com/reactnativehmssdk/HMSRNSDK.kt +670 -531
  25. package/android/src/main/java/com/reactnativehmssdk/PipActionReceiver.kt +66 -0
  26. package/android/src/main/res/drawable/ic_call_end_24.xml +10 -0
  27. package/android/src/main/res/drawable/ic_camera_toggle_off.xml +11 -0
  28. package/android/src/main/res/drawable/ic_camera_toggle_on.xml +10 -0
  29. package/android/src/main/res/drawable/ic_mic_24.xml +10 -0
  30. package/android/src/main/res/drawable/ic_mic_off_24.xml +10 -0
  31. package/ios/HMSDecoder.swift +10 -7
  32. package/ios/HMSHelper.swift +22 -16
  33. package/ios/HMSManager.m +4 -0
  34. package/ios/HMSManager.swift +29 -0
  35. package/ios/HMSRNSDK.swift +60 -0
  36. package/ios/Hmssdk.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  37. package/ios/Hmssdk.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  38. package/ios/Hmssdk.xcodeproj/project.xcworkspace/xcuserdata/yogesh.xcuserdatad/UserInterfaceState.xcuserstate +0 -0
  39. package/ios/Hmssdk.xcodeproj/xcuserdata/yogesh.xcuserdatad/xcschemes/xcschememanagement.plist +14 -0
  40. package/lib/commonjs/classes/HMSAudioMixerSource.js +3 -1
  41. package/lib/commonjs/classes/HMSAudioMixerSource.js.map +1 -1
  42. package/lib/commonjs/classes/HMSAudioNode.js +3 -1
  43. package/lib/commonjs/classes/HMSAudioNode.js.map +1 -1
  44. package/lib/commonjs/classes/HMSAudioSettings.js +3 -1
  45. package/lib/commonjs/classes/HMSAudioSettings.js.map +1 -1
  46. package/lib/commonjs/classes/HMSAudioTrackSettings.js +3 -1
  47. package/lib/commonjs/classes/HMSAudioTrackSettings.js.map +1 -1
  48. package/lib/commonjs/classes/HMSBrowserRecordingState.js +3 -1
  49. package/lib/commonjs/classes/HMSBrowserRecordingState.js.map +1 -1
  50. package/lib/commonjs/classes/HMSChangeTrackStateRequest.js +3 -1
  51. package/lib/commonjs/classes/HMSChangeTrackStateRequest.js.map +1 -1
  52. package/lib/commonjs/classes/HMSConfig.js +3 -1
  53. package/lib/commonjs/classes/HMSConfig.js.map +1 -1
  54. package/lib/commonjs/classes/HMSEncoder.js +2 -1
  55. package/lib/commonjs/classes/HMSEncoder.js.map +1 -1
  56. package/lib/commonjs/classes/HMSException.js +3 -1
  57. package/lib/commonjs/classes/HMSException.js.map +1 -1
  58. package/lib/commonjs/classes/HMSHLSConfig.js +3 -1
  59. package/lib/commonjs/classes/HMSHLSConfig.js.map +1 -1
  60. package/lib/commonjs/classes/HMSHLSMeetingURLVariant.js +3 -1
  61. package/lib/commonjs/classes/HMSHLSMeetingURLVariant.js.map +1 -1
  62. package/lib/commonjs/classes/HMSHLSRecordingConfig.js +3 -1
  63. package/lib/commonjs/classes/HMSHLSRecordingConfig.js.map +1 -1
  64. package/lib/commonjs/classes/HMSHLSRecordingState.js +3 -1
  65. package/lib/commonjs/classes/HMSHLSRecordingState.js.map +1 -1
  66. package/lib/commonjs/classes/HMSHLSStreamingState.js +3 -1
  67. package/lib/commonjs/classes/HMSHLSStreamingState.js.map +1 -1
  68. package/lib/commonjs/classes/HMSHLSVariant.js +3 -1
  69. package/lib/commonjs/classes/HMSHLSVariant.js.map +1 -1
  70. package/lib/commonjs/classes/HMSLocalAudioStats.js +3 -1
  71. package/lib/commonjs/classes/HMSLocalAudioStats.js.map +1 -1
  72. package/lib/commonjs/classes/HMSLocalAudioTrack.js +3 -1
  73. package/lib/commonjs/classes/HMSLocalAudioTrack.js.map +1 -1
  74. package/lib/commonjs/classes/HMSLocalPeer.js +3 -1
  75. package/lib/commonjs/classes/HMSLocalPeer.js.map +1 -1
  76. package/lib/commonjs/classes/HMSLocalVideoStats.js +3 -1
  77. package/lib/commonjs/classes/HMSLocalVideoStats.js.map +1 -1
  78. package/lib/commonjs/classes/HMSLocalVideoTrack.js +3 -1
  79. package/lib/commonjs/classes/HMSLocalVideoTrack.js.map +1 -1
  80. package/lib/commonjs/classes/HMSLogSettings.js +3 -1
  81. package/lib/commonjs/classes/HMSLogSettings.js.map +1 -1
  82. package/lib/commonjs/classes/HMSLogger.js +3 -1
  83. package/lib/commonjs/classes/HMSLogger.js.map +1 -1
  84. package/lib/commonjs/classes/HMSMessage.js +3 -1
  85. package/lib/commonjs/classes/HMSMessage.js.map +1 -1
  86. package/lib/commonjs/classes/HMSMessageRecipient.js +3 -1
  87. package/lib/commonjs/classes/HMSMessageRecipient.js.map +1 -1
  88. package/lib/commonjs/classes/HMSMessageType.js +13 -0
  89. package/lib/commonjs/classes/HMSMessageType.js.map +1 -0
  90. package/lib/commonjs/classes/HMSNetworkQuality.js +3 -1
  91. package/lib/commonjs/classes/HMSNetworkQuality.js.map +1 -1
  92. package/lib/commonjs/classes/HMSPIPListenerActions.js +12 -0
  93. package/lib/commonjs/classes/HMSPIPListenerActions.js.map +1 -0
  94. package/lib/commonjs/classes/HMSPeer.js +3 -1
  95. package/lib/commonjs/classes/HMSPeer.js.map +1 -1
  96. package/lib/commonjs/classes/HMSPermissions.js +3 -1
  97. package/lib/commonjs/classes/HMSPermissions.js.map +1 -1
  98. package/lib/commonjs/classes/HMSPublishSettings.js +3 -1
  99. package/lib/commonjs/classes/HMSPublishSettings.js.map +1 -1
  100. package/lib/commonjs/classes/HMSRTCStats.js +3 -1
  101. package/lib/commonjs/classes/HMSRTCStats.js.map +1 -1
  102. package/lib/commonjs/classes/HMSRTCStatsReport.js +3 -1
  103. package/lib/commonjs/classes/HMSRTCStatsReport.js.map +1 -1
  104. package/lib/commonjs/classes/HMSRTMPConfig.js +3 -1
  105. package/lib/commonjs/classes/HMSRTMPConfig.js.map +1 -1
  106. package/lib/commonjs/classes/HMSRemoteAudioStats.js +3 -1
  107. package/lib/commonjs/classes/HMSRemoteAudioStats.js.map +1 -1
  108. package/lib/commonjs/classes/HMSRemoteAudioTrack.js +3 -1
  109. package/lib/commonjs/classes/HMSRemoteAudioTrack.js.map +1 -1
  110. package/lib/commonjs/classes/HMSRemotePeer.js +3 -1
  111. package/lib/commonjs/classes/HMSRemotePeer.js.map +1 -1
  112. package/lib/commonjs/classes/HMSRemoteVideoStats.js +3 -1
  113. package/lib/commonjs/classes/HMSRemoteVideoStats.js.map +1 -1
  114. package/lib/commonjs/classes/HMSRemoteVideoTrack.js +3 -1
  115. package/lib/commonjs/classes/HMSRemoteVideoTrack.js.map +1 -1
  116. package/lib/commonjs/classes/HMSRole.js +3 -1
  117. package/lib/commonjs/classes/HMSRole.js.map +1 -1
  118. package/lib/commonjs/classes/HMSRoleChangeRequest.js +3 -1
  119. package/lib/commonjs/classes/HMSRoleChangeRequest.js.map +1 -1
  120. package/lib/commonjs/classes/HMSRoom.js +5 -1
  121. package/lib/commonjs/classes/HMSRoom.js.map +1 -1
  122. package/lib/commonjs/classes/HMSRtmpStreamingState.js +3 -1
  123. package/lib/commonjs/classes/HMSRtmpStreamingState.js.map +1 -1
  124. package/lib/commonjs/classes/HMSRtmpVideoResolution.js +3 -1
  125. package/lib/commonjs/classes/HMSRtmpVideoResolution.js.map +1 -1
  126. package/lib/commonjs/classes/HMSSDK.js +92 -4
  127. package/lib/commonjs/classes/HMSSDK.js.map +1 -1
  128. package/lib/commonjs/classes/HMSServerRecordingState.js +3 -1
  129. package/lib/commonjs/classes/HMSServerRecordingState.js.map +1 -1
  130. package/lib/commonjs/classes/HMSSimulcastLayerSettings.js +3 -1
  131. package/lib/commonjs/classes/HMSSimulcastLayerSettings.js.map +1 -1
  132. package/lib/commonjs/classes/HMSSimulcastSettings.js +3 -1
  133. package/lib/commonjs/classes/HMSSimulcastSettings.js.map +1 -1
  134. package/lib/commonjs/classes/HMSSpeaker.js +3 -1
  135. package/lib/commonjs/classes/HMSSpeaker.js.map +1 -1
  136. package/lib/commonjs/classes/HMSSubscribeSettings.js +3 -1
  137. package/lib/commonjs/classes/HMSSubscribeSettings.js.map +1 -1
  138. package/lib/commonjs/classes/HMSTrack.js +3 -1
  139. package/lib/commonjs/classes/HMSTrack.js.map +1 -1
  140. package/lib/commonjs/classes/HMSTrackSettings.js +3 -1
  141. package/lib/commonjs/classes/HMSTrackSettings.js.map +1 -1
  142. package/lib/commonjs/classes/HMSVideoResolution.js +3 -1
  143. package/lib/commonjs/classes/HMSVideoResolution.js.map +1 -1
  144. package/lib/commonjs/classes/HMSVideoSettings.js +3 -1
  145. package/lib/commonjs/classes/HMSVideoSettings.js.map +1 -1
  146. package/lib/commonjs/classes/HMSVideoTrack.js +3 -1
  147. package/lib/commonjs/classes/HMSVideoTrack.js.map +1 -1
  148. package/lib/commonjs/classes/HMSVideoTrackSettings.js +3 -1
  149. package/lib/commonjs/classes/HMSVideoTrackSettings.js.map +1 -1
  150. package/lib/commonjs/classes/HmsView.js +13 -1
  151. package/lib/commonjs/classes/HmsView.js.map +1 -1
  152. package/lib/commonjs/index.js +24 -0
  153. package/lib/commonjs/index.js.map +1 -1
  154. package/lib/module/classes/HMSAudioMixerSource.js +3 -1
  155. package/lib/module/classes/HMSAudioMixerSource.js.map +1 -1
  156. package/lib/module/classes/HMSAudioNode.js +3 -1
  157. package/lib/module/classes/HMSAudioNode.js.map +1 -1
  158. package/lib/module/classes/HMSAudioSettings.js +3 -1
  159. package/lib/module/classes/HMSAudioSettings.js.map +1 -1
  160. package/lib/module/classes/HMSAudioTrackSettings.js +3 -1
  161. package/lib/module/classes/HMSAudioTrackSettings.js.map +1 -1
  162. package/lib/module/classes/HMSBrowserRecordingState.js +3 -1
  163. package/lib/module/classes/HMSBrowserRecordingState.js.map +1 -1
  164. package/lib/module/classes/HMSChangeTrackStateRequest.js +3 -1
  165. package/lib/module/classes/HMSChangeTrackStateRequest.js.map +1 -1
  166. package/lib/module/classes/HMSConfig.js +3 -1
  167. package/lib/module/classes/HMSConfig.js.map +1 -1
  168. package/lib/module/classes/HMSEncoder.js +2 -1
  169. package/lib/module/classes/HMSEncoder.js.map +1 -1
  170. package/lib/module/classes/HMSException.js +3 -1
  171. package/lib/module/classes/HMSException.js.map +1 -1
  172. package/lib/module/classes/HMSHLSConfig.js +3 -1
  173. package/lib/module/classes/HMSHLSConfig.js.map +1 -1
  174. package/lib/module/classes/HMSHLSMeetingURLVariant.js +3 -1
  175. package/lib/module/classes/HMSHLSMeetingURLVariant.js.map +1 -1
  176. package/lib/module/classes/HMSHLSRecordingConfig.js +3 -1
  177. package/lib/module/classes/HMSHLSRecordingConfig.js.map +1 -1
  178. package/lib/module/classes/HMSHLSRecordingState.js +3 -1
  179. package/lib/module/classes/HMSHLSRecordingState.js.map +1 -1
  180. package/lib/module/classes/HMSHLSStreamingState.js +3 -1
  181. package/lib/module/classes/HMSHLSStreamingState.js.map +1 -1
  182. package/lib/module/classes/HMSHLSVariant.js +3 -1
  183. package/lib/module/classes/HMSHLSVariant.js.map +1 -1
  184. package/lib/module/classes/HMSLocalAudioStats.js +3 -1
  185. package/lib/module/classes/HMSLocalAudioStats.js.map +1 -1
  186. package/lib/module/classes/HMSLocalAudioTrack.js +3 -1
  187. package/lib/module/classes/HMSLocalAudioTrack.js.map +1 -1
  188. package/lib/module/classes/HMSLocalPeer.js +3 -1
  189. package/lib/module/classes/HMSLocalPeer.js.map +1 -1
  190. package/lib/module/classes/HMSLocalVideoStats.js +3 -1
  191. package/lib/module/classes/HMSLocalVideoStats.js.map +1 -1
  192. package/lib/module/classes/HMSLocalVideoTrack.js +3 -1
  193. package/lib/module/classes/HMSLocalVideoTrack.js.map +1 -1
  194. package/lib/module/classes/HMSLogSettings.js +3 -1
  195. package/lib/module/classes/HMSLogSettings.js.map +1 -1
  196. package/lib/module/classes/HMSLogger.js +3 -1
  197. package/lib/module/classes/HMSLogger.js.map +1 -1
  198. package/lib/module/classes/HMSMessage.js +3 -1
  199. package/lib/module/classes/HMSMessage.js.map +1 -1
  200. package/lib/module/classes/HMSMessageRecipient.js +3 -1
  201. package/lib/module/classes/HMSMessageRecipient.js.map +1 -1
  202. package/lib/module/classes/HMSMessageType.js +6 -0
  203. package/lib/module/classes/HMSMessageType.js.map +1 -0
  204. package/lib/module/classes/HMSNetworkQuality.js +3 -1
  205. package/lib/module/classes/HMSNetworkQuality.js.map +1 -1
  206. package/lib/module/classes/HMSPIPListenerActions.js +5 -0
  207. package/lib/module/classes/HMSPIPListenerActions.js.map +1 -0
  208. package/lib/module/classes/HMSPeer.js +3 -1
  209. package/lib/module/classes/HMSPeer.js.map +1 -1
  210. package/lib/module/classes/HMSPermissions.js +3 -1
  211. package/lib/module/classes/HMSPermissions.js.map +1 -1
  212. package/lib/module/classes/HMSPublishSettings.js +3 -1
  213. package/lib/module/classes/HMSPublishSettings.js.map +1 -1
  214. package/lib/module/classes/HMSRTCStats.js +3 -1
  215. package/lib/module/classes/HMSRTCStats.js.map +1 -1
  216. package/lib/module/classes/HMSRTCStatsReport.js +3 -1
  217. package/lib/module/classes/HMSRTCStatsReport.js.map +1 -1
  218. package/lib/module/classes/HMSRTMPConfig.js +3 -1
  219. package/lib/module/classes/HMSRTMPConfig.js.map +1 -1
  220. package/lib/module/classes/HMSRemoteAudioStats.js +3 -1
  221. package/lib/module/classes/HMSRemoteAudioStats.js.map +1 -1
  222. package/lib/module/classes/HMSRemoteAudioTrack.js +3 -1
  223. package/lib/module/classes/HMSRemoteAudioTrack.js.map +1 -1
  224. package/lib/module/classes/HMSRemotePeer.js +3 -1
  225. package/lib/module/classes/HMSRemotePeer.js.map +1 -1
  226. package/lib/module/classes/HMSRemoteVideoStats.js +3 -1
  227. package/lib/module/classes/HMSRemoteVideoStats.js.map +1 -1
  228. package/lib/module/classes/HMSRemoteVideoTrack.js +3 -1
  229. package/lib/module/classes/HMSRemoteVideoTrack.js.map +1 -1
  230. package/lib/module/classes/HMSRole.js +3 -1
  231. package/lib/module/classes/HMSRole.js.map +1 -1
  232. package/lib/module/classes/HMSRoleChangeRequest.js +3 -1
  233. package/lib/module/classes/HMSRoleChangeRequest.js.map +1 -1
  234. package/lib/module/classes/HMSRoom.js +5 -1
  235. package/lib/module/classes/HMSRoom.js.map +1 -1
  236. package/lib/module/classes/HMSRtmpStreamingState.js +3 -1
  237. package/lib/module/classes/HMSRtmpStreamingState.js.map +1 -1
  238. package/lib/module/classes/HMSRtmpVideoResolution.js +3 -1
  239. package/lib/module/classes/HMSRtmpVideoResolution.js.map +1 -1
  240. package/lib/module/classes/HMSSDK.js +92 -4
  241. package/lib/module/classes/HMSSDK.js.map +1 -1
  242. package/lib/module/classes/HMSServerRecordingState.js +3 -1
  243. package/lib/module/classes/HMSServerRecordingState.js.map +1 -1
  244. package/lib/module/classes/HMSSimulcastLayerSettings.js +3 -1
  245. package/lib/module/classes/HMSSimulcastLayerSettings.js.map +1 -1
  246. package/lib/module/classes/HMSSimulcastSettings.js +3 -1
  247. package/lib/module/classes/HMSSimulcastSettings.js.map +1 -1
  248. package/lib/module/classes/HMSSpeaker.js +3 -1
  249. package/lib/module/classes/HMSSpeaker.js.map +1 -1
  250. package/lib/module/classes/HMSSubscribeSettings.js +3 -1
  251. package/lib/module/classes/HMSSubscribeSettings.js.map +1 -1
  252. package/lib/module/classes/HMSTrack.js +3 -1
  253. package/lib/module/classes/HMSTrack.js.map +1 -1
  254. package/lib/module/classes/HMSTrackSettings.js +3 -1
  255. package/lib/module/classes/HMSTrackSettings.js.map +1 -1
  256. package/lib/module/classes/HMSVideoResolution.js +3 -1
  257. package/lib/module/classes/HMSVideoResolution.js.map +1 -1
  258. package/lib/module/classes/HMSVideoSettings.js +3 -1
  259. package/lib/module/classes/HMSVideoSettings.js.map +1 -1
  260. package/lib/module/classes/HMSVideoTrack.js +3 -1
  261. package/lib/module/classes/HMSVideoTrack.js.map +1 -1
  262. package/lib/module/classes/HMSVideoTrackSettings.js +3 -1
  263. package/lib/module/classes/HMSVideoTrackSettings.js.map +1 -1
  264. package/lib/module/classes/HmsView.js +13 -1
  265. package/lib/module/classes/HmsView.js.map +1 -1
  266. package/lib/module/index.js +2 -0
  267. package/lib/module/index.js.map +1 -1
  268. package/lib/typescript/classes/HMSMessage.d.ts +3 -2
  269. package/lib/typescript/classes/HMSMessageType.d.ts +4 -0
  270. package/lib/typescript/classes/HMSPIPListenerActions.d.ts +3 -0
  271. package/lib/typescript/classes/HMSRoom.d.ts +3 -0
  272. package/lib/typescript/classes/HMSSDK.d.ts +53 -5
  273. package/lib/typescript/index.d.ts +2 -0
  274. package/package.json +1 -1
  275. package/react-native-hms.podspec +3 -2
  276. package/src/classes/HMSEncoder.ts +1 -0
  277. package/src/classes/HMSMessage.ts +3 -2
  278. package/src/classes/HMSMessageType.ts +4 -0
  279. package/src/classes/HMSPIPListenerActions.ts +3 -0
  280. package/src/classes/HMSRoom.ts +4 -0
  281. package/src/classes/HMSSDK.tsx +149 -5
  282. package/src/classes/HmsView.tsx +15 -1
  283. package/src/index.ts +2 -0
  284. package/android/.idea/libraries/Gradle__com_facebook_fbjni_fbjni_java_only_0_2_2.xml +0 -13
  285. package/android/.idea/libraries/Gradle__com_facebook_react_react_native_0_70_3_debug_aar.xml +0 -14
@@ -2,7 +2,16 @@ package com.reactnativehmssdk
2
2
 
3
3
  import android.app.Activity
4
4
  import android.app.Application
5
+ import android.app.PendingIntent
6
+ import android.app.PictureInPictureParams
7
+ import android.app.RemoteAction
8
+ import android.content.Intent
9
+ import android.content.pm.PackageManager
10
+ import android.graphics.drawable.Icon
11
+ import android.os.Build
5
12
  import android.os.Bundle
13
+ import android.util.Rational
14
+ import androidx.annotation.RequiresApi
6
15
  import com.facebook.react.bridge.*
7
16
  import com.facebook.react.module.annotations.ReactModule
8
17
  import com.facebook.react.modules.core.DeviceEventManagerModule
@@ -11,11 +20,12 @@ import java.util.UUID
11
20
 
12
21
  @ReactModule(name = REACT_CLASS)
13
22
  class HMSManager(reactContext: ReactApplicationContext) :
14
- ReactContextBaseJavaModule(reactContext), Application.ActivityLifecycleCallbacks {
23
+ ReactContextBaseJavaModule(reactContext), Application.ActivityLifecycleCallbacks {
15
24
  companion object {
16
25
  const val REACT_CLASS = "HMSManager"
17
26
  var hmsCollection = mutableMapOf<String, HMSRNSDK>()
18
27
  }
28
+
19
29
  override fun getName(): String {
20
30
  return "HMSManager"
21
31
  }
@@ -110,6 +120,7 @@ class HMSManager(reactContext: ReactApplicationContext) :
110
120
  hms?.sendDirectMessage(data, callback)
111
121
  }
112
122
 
123
+ @kotlin.Deprecated("Use #Function changeRoleOfPeer instead")
113
124
  @ReactMethod
114
125
  fun changeRole(data: ReadableMap, callback: Promise?) {
115
126
  val hms = HMSHelper.getHms(data, hmsCollection)
@@ -117,6 +128,20 @@ class HMSManager(reactContext: ReactApplicationContext) :
117
128
  hms?.changeRole(data, callback)
118
129
  }
119
130
 
131
+ @ReactMethod
132
+ fun changeRoleOfPeer(data: ReadableMap, promise: Promise?) {
133
+ val hms = HMSHelper.getHms(data, hmsCollection)
134
+
135
+ hms?.changeRoleOfPeer(data, promise)
136
+ }
137
+
138
+ @ReactMethod
139
+ fun changeRoleOfPeersWithRoles(data: ReadableMap, promise: Promise?) {
140
+ val hms = HMSHelper.getHms(data, hmsCollection)
141
+
142
+ hms?.changeRoleOfPeersWithRoles(data, promise)
143
+ }
144
+
120
145
  @ReactMethod
121
146
  fun changeTrackState(data: ReadableMap, callback: Promise?) {
122
147
  val hms = HMSHelper.getHms(data, hmsCollection)
@@ -411,10 +436,399 @@ class HMSManager(reactContext: ReactApplicationContext) :
411
436
  hms?.setAudioDeviceChangeListener()
412
437
  }
413
438
 
439
+ @ReactMethod
440
+ fun setSessionMetaData(data: ReadableMap, callback: Promise?) {
441
+ val hms = HMSHelper.getHms(data, hmsCollection)
442
+
443
+ hms?.setSessionMetaData(data, callback)
444
+ }
445
+
446
+ @ReactMethod
447
+ fun getSessionMetaData(data: ReadableMap, callback: Promise?) {
448
+ val hms = HMSHelper.getHms(data, hmsCollection)
449
+
450
+ hms?.getSessionMetaData(callback)
451
+ }
452
+
453
+ // region Person-In-Person Mode Action handing
454
+ private val pipReceiver by lazy {
455
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
456
+ PipActionReceiver(
457
+ toggleLocalAudio = {
458
+ toggleLocalAudio()
459
+ updatePIPRemoteActions(PipActionReceiver.PIPActions.localAudio.requestCode)
460
+ },
461
+ toggleLocalVideo = {
462
+ toggleLocalVideo()
463
+ updatePIPRemoteActions(PipActionReceiver.PIPActions.localVideo.requestCode)
464
+ },
465
+ endMeeting = {
466
+ endMeeting()
467
+ }
468
+ )
469
+ } else {
470
+ null
471
+ }
472
+ }
473
+
474
+ private var pipRemoteActionsList: MutableList<RemoteAction> = mutableListOf()
475
+
476
+ @RequiresApi(Build.VERSION_CODES.O)
477
+ private fun toggleLocalAudio() {
478
+ val hmssdk = getHmsInstance()[PipActionReceiver.sdkIdForPIP!!]?.hmsSDK
479
+
480
+ val localAudioTrack = hmssdk?.getLocalPeer()?.audioTrack
481
+ val isMuted = localAudioTrack?.isMute
482
+
483
+ if (isMuted !== null) {
484
+ localAudioTrack?.setMute(!isMuted)
485
+ }
486
+ }
487
+
488
+ @RequiresApi(Build.VERSION_CODES.O)
489
+ private fun toggleLocalVideo() {
490
+ val hmssdk = getHmsInstance()[PipActionReceiver.sdkIdForPIP!!]?.hmsSDK
491
+
492
+ val localVideoTrack = hmssdk?.getLocalPeer()?.videoTrack
493
+ val isMuted = localVideoTrack?.isMute
494
+
495
+ if (isMuted !== null) {
496
+ localVideoTrack?.setMute(!isMuted)
497
+ }
498
+ }
499
+
500
+ @RequiresApi(Build.VERSION_CODES.O)
501
+ private fun endMeeting() {
502
+ val hms = getHmsInstance()[PipActionReceiver.sdkIdForPIP!!]
503
+
504
+ hms?.leave(callback = null, fromPIP = true)
505
+ }
506
+
507
+ @RequiresApi(Build.VERSION_CODES.O)
508
+ private fun updatePIPRemoteActions(code: Int) {
509
+ val activity = currentActivity
510
+
511
+ if (activity !== null) {
512
+ val hmssdk = getHmsInstance()[PipActionReceiver.sdkIdForPIP!!]?.hmsSDK
513
+
514
+ when (code) {
515
+ PipActionReceiver.PIPActions.localAudio.requestCode -> {
516
+ val audioActionIdx = pipRemoteActionsList.indexOfFirst { it.title == PipActionReceiver.PIPActions.localAudio.title }
517
+ if (audioActionIdx >= 0) {
518
+ pipRemoteActionsList[audioActionIdx] = RemoteAction(
519
+ Icon.createWithResource(
520
+ reactApplicationContext,
521
+ if (hmssdk?.getLocalPeer()?.audioTrack?.isMute === true) R.drawable.ic_mic_off_24 else R.drawable.ic_mic_24
522
+ ),
523
+ PipActionReceiver.PIPActions.localAudio.title,
524
+ PipActionReceiver.PIPActions.localAudio.description,
525
+ PendingIntent.getBroadcast(
526
+ reactApplicationContext,
527
+ PipActionReceiver.PIPActions.localAudio.requestCode,
528
+ Intent(PipActionReceiver.PIP_INTENT_ACTION).putExtra(PipActionReceiver.PIPActions.localAudio.title, PipActionReceiver.PIPActions.localAudio.requestCode),
529
+ PendingIntent.FLAG_IMMUTABLE
530
+ )
531
+ )
532
+ }
533
+ }
534
+ PipActionReceiver.PIPActions.localVideo.requestCode -> {
535
+ val videoActionIdx = pipRemoteActionsList.indexOfFirst { it.title == PipActionReceiver.PIPActions.localVideo.title }
536
+ if (videoActionIdx >= 0) {
537
+ pipRemoteActionsList[videoActionIdx] = RemoteAction(
538
+ Icon.createWithResource(
539
+ reactApplicationContext,
540
+ if (hmssdk?.getLocalPeer()?.videoTrack?.isMute === true) R.drawable.ic_camera_toggle_off else R.drawable.ic_camera_toggle_on
541
+ ),
542
+ PipActionReceiver.PIPActions.localVideo.title,
543
+ PipActionReceiver.PIPActions.localVideo.description,
544
+ PendingIntent.getBroadcast(
545
+ reactApplicationContext,
546
+ PipActionReceiver.PIPActions.localVideo.requestCode,
547
+ Intent(PipActionReceiver.PIP_INTENT_ACTION).putExtra(PipActionReceiver.PIPActions.localVideo.title, PipActionReceiver.PIPActions.localVideo.requestCode),
548
+ PendingIntent.FLAG_IMMUTABLE
549
+ )
550
+ )
551
+ }
552
+ }
553
+ }
554
+
555
+ val pipParams = PictureInPictureParams.Builder().let {
556
+ it.setActions(pipRemoteActionsList)
557
+ it.build()
558
+ }
559
+
560
+ activity.setPictureInPictureParams(pipParams)
561
+ }
562
+ }
563
+ // endregion
564
+
565
+ private data class PipParamConfig(
566
+ val aspectRatio: Pair<Int, Int>?,
567
+ val showEndButton: Boolean,
568
+ val showVideoButton: Boolean,
569
+ val showAudioButton: Boolean
570
+ )
571
+
572
+ @ReactMethod
573
+ fun handlePipActions(action: String, data: ReadableMap, promise: Promise?) {
574
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
575
+ promise?.reject(Throwable("PIP mode is not supported!"))
576
+ return
577
+ }
578
+
579
+ if (!data.hasKey("id")) {
580
+ promise?.reject(Throwable("HMS Instance Id is required!"))
581
+ return
582
+ }
583
+
584
+ try {
585
+ PipActionReceiver.sdkIdForPIP = data.getString("id")
586
+
587
+ when (action) {
588
+ "isPipModeSupported" -> {
589
+ val result = isPipModeSupported()
590
+ promise?.resolve(result)
591
+ }
592
+ "enablePipMode" -> {
593
+ val result = enablePipMode(data)
594
+ promise?.resolve(result)
595
+ }
596
+ "setPictureInPictureParams" -> {
597
+ val result = setPictureInPictureParams(data)
598
+ promise?.resolve(result)
599
+ }
600
+ }
601
+ } catch (e: Exception) {
602
+ promise?.reject(e)
603
+ }
604
+ }
605
+
606
+ @RequiresApi(Build.VERSION_CODES.O)
607
+ private fun getPIPRemoteActions(endAction: Boolean = false, audioAction: Boolean = false, videoAction: Boolean = false): MutableList<RemoteAction> {
608
+ val hmssdk = getHmsInstance()[PipActionReceiver.sdkIdForPIP!!]?.hmsSDK
609
+
610
+ pipRemoteActionsList.clear()
611
+
612
+ val localPeer = hmssdk?.getLocalPeer()
613
+ val allowedPublishing = localPeer?.hmsRole?.publishParams?.allowed
614
+
615
+ if (audioAction && allowedPublishing?.contains("audio") === true) {
616
+ pipRemoteActionsList.add(
617
+ RemoteAction(
618
+ Icon.createWithResource(
619
+ reactApplicationContext,
620
+ if (localPeer?.audioTrack?.isMute === true) R.drawable.ic_mic_off_24 else R.drawable.ic_mic_24
621
+ ),
622
+ PipActionReceiver.PIPActions.localAudio.title,
623
+ PipActionReceiver.PIPActions.localAudio.description,
624
+ PendingIntent.getBroadcast(
625
+ reactApplicationContext,
626
+ PipActionReceiver.PIPActions.localAudio.requestCode,
627
+ Intent(PipActionReceiver.PIP_INTENT_ACTION).putExtra(PipActionReceiver.PIPActions.localAudio.title, PipActionReceiver.PIPActions.localAudio.requestCode),
628
+ PendingIntent.FLAG_IMMUTABLE
629
+ )
630
+ )
631
+ )
632
+ }
633
+
634
+ if (endAction) {
635
+ pipRemoteActionsList.add(
636
+ RemoteAction(
637
+ Icon.createWithResource(reactApplicationContext, R.drawable.ic_call_end_24),
638
+ PipActionReceiver.PIPActions.endMeet.title,
639
+ PipActionReceiver.PIPActions.endMeet.description,
640
+ PendingIntent.getBroadcast(
641
+ reactApplicationContext,
642
+ PipActionReceiver.PIPActions.endMeet.requestCode,
643
+ Intent(PipActionReceiver.PIP_INTENT_ACTION).putExtra(
644
+ PipActionReceiver.PIPActions.endMeet.title,
645
+ PipActionReceiver.PIPActions.endMeet.requestCode
646
+ ),
647
+ PendingIntent.FLAG_IMMUTABLE
648
+ )
649
+ )
650
+ )
651
+ }
652
+
653
+ if (videoAction && allowedPublishing?.contains("video") === true) {
654
+ pipRemoteActionsList.add(
655
+ RemoteAction(
656
+ Icon.createWithResource(
657
+ reactApplicationContext,
658
+ if (localPeer?.videoTrack?.isMute === true) R.drawable.ic_camera_toggle_off else R.drawable.ic_camera_toggle_on
659
+ ),
660
+ PipActionReceiver.PIPActions.localVideo.title,
661
+ PipActionReceiver.PIPActions.localVideo.description,
662
+ PendingIntent.getBroadcast(
663
+ reactApplicationContext,
664
+ PipActionReceiver.PIPActions.localVideo.requestCode,
665
+ Intent(PipActionReceiver.PIP_INTENT_ACTION).putExtra(
666
+ PipActionReceiver.PIPActions.localVideo.title,
667
+ PipActionReceiver.PIPActions.localVideo.requestCode
668
+ ),
669
+ PendingIntent.FLAG_IMMUTABLE
670
+ )
671
+ )
672
+ )
673
+ }
674
+
675
+ return pipRemoteActionsList
676
+ }
677
+
678
+ // Builds and returns PictureInPictureParams as per given config
679
+ @RequiresApi(Build.VERSION_CODES.O)
680
+ private fun buildPipParams(config: PipParamConfig): PictureInPictureParams {
681
+ val pipParams = PictureInPictureParams.Builder().let {
682
+ if (config.aspectRatio !== null) {
683
+ it.setAspectRatio(
684
+ Rational(
685
+ config.aspectRatio.first,
686
+ config.aspectRatio.second
687
+ )
688
+ )
689
+ }
690
+
691
+ // TODO:= We need compileSdkVersion >= 31 for autoEnterEnabled
692
+ // if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S && config.autoEnterEnabled !== null)
693
+ // it.setAutoEnterEnabled(config.autoEnterEnabled)
694
+ // }
695
+
696
+ it.setActions(
697
+ getPIPRemoteActions(
698
+ endAction = config.showEndButton,
699
+ audioAction = config.showAudioButton,
700
+ videoAction = config.showVideoButton
701
+ )
702
+ )
703
+
704
+ it.build()
705
+ }
706
+
707
+ return pipParams
708
+ }
709
+
710
+ @RequiresApi(Build.VERSION_CODES.O)
711
+ private fun readableMapToPipParamConfig(data: ReadableMap?): PipParamConfig {
712
+ var aspectRatio: Pair<Int, Int> = Pair(16, 9)
713
+ var showEndButton = false
714
+ var showAudioButton = false
715
+ var showVideoButton = false
716
+
717
+ // TODO:= We need compileSdkVersion >= 31 for autoEnterEnabled
718
+ // var autoEnterEnabled: Boolean? = null;
719
+
720
+ if (data !== null) {
721
+ if (data.hasKey("aspectRatio")) {
722
+ val aspectRatioArray = data.getArray("aspectRatio")
723
+
724
+ if (aspectRatioArray !== null) {
725
+ val firstItemType = aspectRatioArray.getType(0)
726
+ var firstItem: Int? = null
727
+ if (firstItemType === ReadableType.Number) {
728
+ firstItem = aspectRatioArray.getInt(0)
729
+ }
730
+
731
+ val secondItemType = aspectRatioArray.getType(1)
732
+ var secondItem: Int? = null
733
+ if (secondItemType === ReadableType.Number) {
734
+ secondItem = aspectRatioArray.getInt(1)
735
+ }
736
+
737
+ if (firstItem !== null && secondItem !== null) {
738
+ aspectRatio = Pair(firstItem, secondItem)
739
+ }
740
+ }
741
+ }
742
+
743
+ if (data.hasKey("endButton")) {
744
+ showEndButton = data.getBoolean("endButton")
745
+ }
746
+
747
+ if (data.hasKey("audioButton")) {
748
+ showAudioButton = data.getBoolean("audioButton")
749
+ }
750
+
751
+ if (data.hasKey("videoButton")) {
752
+ showVideoButton = data.getBoolean("videoButton")
753
+ }
754
+
755
+ // TODO:= We need compileSdkVersion >= 31 for autoEnterEnabled
756
+ // if (data.hasKey("autoEnterEnabled")) {
757
+ // val autoEnterEnabledType = data.getType("autoEnterEnabled")
758
+ //
759
+ // if (autoEnterEnabledType === ReadableType.Boolean) {
760
+ // autoEnterEnabled = data.getBoolean("autoEnterEnabled")
761
+ // }
762
+ // }
763
+ }
764
+
765
+ return PipParamConfig(
766
+ aspectRatio = aspectRatio,
767
+ showEndButton = showEndButton,
768
+ showAudioButton = showAudioButton,
769
+ showVideoButton = showVideoButton
770
+ )
771
+ }
772
+
773
+ @RequiresApi(Build.VERSION_CODES.O)
774
+ private fun setPictureInPictureParams(data: ReadableMap): Boolean {
775
+ try {
776
+ if (!isPipModeSupported()) {
777
+ throw Throwable(message = "PIP Mode is not supported!")
778
+ }
779
+
780
+ val activity = currentActivity
781
+
782
+ if (activity !== null) {
783
+ val pipParamConfig = readableMapToPipParamConfig(data)
784
+ val pipParams = buildPipParams(pipParamConfig)
785
+
786
+ activity.setPictureInPictureParams(pipParams)
787
+ return true
788
+ }
789
+
790
+ return false
791
+ } catch (e: Exception) {
792
+ throw e
793
+ }
794
+ }
795
+
796
+ @RequiresApi(Build.VERSION_CODES.O)
797
+ private fun isPipModeSupported(): Boolean {
798
+ return reactApplicationContext.packageManager.hasSystemFeature(PackageManager.FEATURE_PICTURE_IN_PICTURE)
799
+ }
800
+
801
+ @RequiresApi(Build.VERSION_CODES.O)
802
+ private fun enablePipMode(data: ReadableMap): Boolean {
803
+ try {
804
+ if (!isPipModeSupported()) {
805
+ throw Throwable(message = "PIP Mode is not supported!")
806
+ }
807
+
808
+ val activity = currentActivity
809
+
810
+ if (activity !== null) {
811
+ val pipParamConfig = readableMapToPipParamConfig(data)
812
+ val pipParams = buildPipParams(pipParamConfig)
813
+
814
+ pipReceiver?.register(activity)
815
+ val entered = activity.enterPictureInPictureMode(pipParams)
816
+ if (entered === false) {
817
+ pipReceiver?.unregister(activity)
818
+ }
819
+ return entered
820
+ }
821
+
822
+ return false
823
+ } catch (e: Exception) {
824
+ throw e
825
+ }
826
+ }
827
+
414
828
  fun emitEvent(event: String, data: WritableMap) {
415
829
  reactApplicationContext
416
- .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java)
417
- .emit(event, data)
830
+ .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java)
831
+ .emit(event, data)
418
832
  }
419
833
 
420
834
  override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {}
@@ -440,6 +854,10 @@ class HMSManager(reactContext: ReactApplicationContext) :
440
854
  }
441
855
  currentActivity?.application?.unregisterActivityLifecycleCallbacks(this)
442
856
  hmsCollection = mutableMapOf()
857
+ // unregistering pip actions on activity destroy.
858
+ if (pipReceiver !== null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
859
+ pipReceiver?.unregister(activity)
860
+ }
443
861
  }
444
862
  } catch (e: Exception) {
445
863
  // Log.d("error", e.message)