agora-appbuilder-core 4.0.0-api.5 → 4.0.0-api.6

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 (406) hide show
  1. package/package.json +2 -2
  2. package/template/.bundle/config +2 -0
  3. package/template/Gemfile +4 -0
  4. package/template/Gulpfile.js +29 -29
  5. package/template/_eslintrc.js +3 -3
  6. package/template/_gitignore +12 -11
  7. package/template/_package-lock.json +26471 -22749
  8. package/template/_prettierrc.js +2 -2
  9. package/template/agora-rn-uikit/src/Contexts/PropsContext.tsx +30 -10
  10. package/template/agora-rn-uikit/src/Contexts/RtcContext.tsx +19 -0
  11. package/template/agora-rn-uikit/src/Controls/BtnTemplate.tsx +1 -0
  12. package/template/agora-rn-uikit/src/Controls/Icons.ts +45 -0
  13. package/template/agora-rn-uikit/src/Controls/Local/EndCall.tsx +6 -4
  14. package/template/agora-rn-uikit/src/Controls/Local/FullScreen.tsx +3 -1
  15. package/template/agora-rn-uikit/src/Controls/Local/LocalAudioMute.tsx +1 -0
  16. package/template/agora-rn-uikit/src/Controls/Local/LocalVideoMute.tsx +1 -0
  17. package/template/agora-rn-uikit/src/Controls/Local/SwitchCamera.tsx +1 -0
  18. package/template/agora-rn-uikit/src/Controls/Remote/RemoteAudioMute.tsx +1 -0
  19. package/template/agora-rn-uikit/src/Controls/Remote/RemoteSwap.tsx +3 -1
  20. package/template/agora-rn-uikit/src/Controls/Remote/RemoteVideoMute.tsx +1 -0
  21. package/template/agora-rn-uikit/src/Reducer/ActiveSpeaker.ts +30 -0
  22. package/template/agora-rn-uikit/src/Reducer/LocalMuteAudio.ts +3 -1
  23. package/template/agora-rn-uikit/src/Reducer/LocalMuteVideo.ts +3 -1
  24. package/template/agora-rn-uikit/src/Reducer/LocalPermissionState.ts +1 -1
  25. package/template/agora-rn-uikit/src/Reducer/RemoteAudioStateChanged.ts +3 -3
  26. package/template/agora-rn-uikit/src/Reducer/RemoteVideoStateChanged.ts +5 -4
  27. package/template/agora-rn-uikit/src/Reducer/UpdateDualStreamMode.ts +1 -1
  28. package/template/agora-rn-uikit/src/Reducer/UserJoined.ts +8 -5
  29. package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteAudio.ts +1 -1
  30. package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteVideo.ts +1 -1
  31. package/template/agora-rn-uikit/src/Reducer/UserOffline.ts +1 -1
  32. package/template/agora-rn-uikit/src/Reducer/UserPin.ts +18 -1
  33. package/template/agora-rn-uikit/src/Reducer/UserSecondaryPin.ts +23 -0
  34. package/template/agora-rn-uikit/src/Reducer/index.ts +2 -0
  35. package/template/agora-rn-uikit/src/Rtc/Create.tsx +47 -21
  36. package/template/agora-rn-uikit/src/Rtc/Join.tsx +37 -15
  37. package/template/agora-rn-uikit/src/RtcConfigure.tsx +122 -12
  38. package/template/agora-rn-uikit/src/Views/MaxVideoView.native.tsx +32 -4
  39. package/template/agora-rn-uikit/src/Views/MaxVideoView.tsx +21 -2
  40. package/template/agora-rn-uikit/src/Views/MinVideoView.tsx +2 -0
  41. package/template/android/app/build.gradle +59 -156
  42. package/template/android/app/src/debug/AndroidManifest.xml +6 -1
  43. package/template/android/app/src/debug/java/com/helloworld/ReactNativeFlipper.java +7 -4
  44. package/template/android/app/src/main/AndroidManifest.xml +6 -19
  45. package/template/android/app/src/main/assets/fonts/icomoon.ttf +0 -0
  46. package/template/android/app/src/main/java/com/helloworld/MainActivity.java +17 -0
  47. package/template/android/app/src/main/java/com/helloworld/MainApplication.java +19 -36
  48. package/template/android/app/src/release/java/com/helloworld/ReactNativeFlipper.java +20 -0
  49. package/template/android/build.gradle +19 -33
  50. package/template/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  51. package/template/android/gradle/wrapper/gradle-wrapper.properties +3 -2
  52. package/template/android/gradle.properties +18 -4
  53. package/template/android/gradlew +165 -104
  54. package/template/android/gradlew.bat +12 -23
  55. package/template/android/settings.gradle +1 -0
  56. package/template/bridge/rtc/webNg/RtcEngine.ts +131 -16
  57. package/template/bridge/rtc/webNg/index.ts +72 -1
  58. package/template/bridge/rtm/web/index.ts +5 -3
  59. package/template/configTransform.js +16 -1
  60. package/template/customization-api/action-library.ts +0 -8
  61. package/template/customization-api/app-state.ts +11 -2
  62. package/template/customization-api/customEvents.ts +6 -1
  63. package/template/customization-api/index.ts +4 -0
  64. package/template/customization-api/sub-components.ts +6 -3
  65. package/template/customization-api/temp.ts +50 -0
  66. package/template/customization-api/typeDefinition.ts +26 -14
  67. package/template/customization-api/types.ts +26 -0
  68. package/template/customization-api/utils.ts +2 -0
  69. package/template/customization-implementation/index.ts +0 -1
  70. package/template/defaultConfig.js +72 -0
  71. package/template/global.d.ts +13 -1
  72. package/template/index.js +0 -4
  73. package/template/index.web.js +0 -5
  74. package/template/index.wsdk.tsx +1 -19
  75. package/template/ios/.xcode.env +11 -0
  76. package/template/ios/HelloWorld/AppDelegate.h +2 -4
  77. package/template/ios/HelloWorld/AppDelegate.mm +42 -0
  78. package/template/ios/HelloWorld/Info.plist +1 -1
  79. package/template/ios/HelloWorld/main.m +2 -1
  80. package/template/ios/HelloWorld.xcodeproj/project.pbxproj +529 -17
  81. package/template/ios/HelloWorld.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  82. package/template/ios/HelloWorld.xcworkspace/contents.xcworkspacedata +10 -0
  83. package/template/ios/HelloWorld.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  84. package/template/ios/HelloWorldTests/HelloWorldTests.m +14 -13
  85. package/template/ios/HelloWorldTests/Info.plist +2 -2
  86. package/template/ios/Podfile +53 -20
  87. package/template/ios/Podfile.lock +873 -0
  88. package/template/ios/ScreenSharing/Info.plist +15 -0
  89. package/template/ios/ScreenSharing/SampleHandler.h +9 -0
  90. package/template/ios/ScreenSharing/SampleHandler.m +70 -0
  91. package/template/jest.config.js +4 -0
  92. package/template/metro.config.js +7 -32
  93. package/template/package.json +52 -39
  94. package/template/react-native-toast-message/index.d.ts +3 -1
  95. package/template/react-native-toast-message/index.js +1 -0
  96. package/template/react-native-toast-message/src/components/base/index.js +20 -32
  97. package/template/react-native-toast-message/src/components/base/styles.js +18 -21
  98. package/template/react-native-toast-message/src/components/checkbox.js +24 -19
  99. package/template/react-native-toast-message/src/index.js +3 -1
  100. package/template/react-native-toast-message/src/index.sdk.tsx +4 -1
  101. package/template/src/App.tsx +13 -85
  102. package/template/src/AppRoutes.tsx +77 -0
  103. package/template/src/AppWrapper.tsx +38 -33
  104. package/template/src/SDKAppWrapper.tsx +79 -43
  105. package/template/src/app-state/useNoiseSupression.native.tsx +67 -0
  106. package/template/src/app-state/useNoiseSupression.tsx +107 -0
  107. package/template/src/app-state/useVideoQuality.tsx +39 -0
  108. package/template/src/assets/font-styles.css +171 -3
  109. package/template/src/assets/fonts/icomoon.ttf +0 -0
  110. package/template/src/assets/selection.json +1 -1
  111. package/template/src/atoms/ActionMenu.tsx +50 -11
  112. package/template/src/atoms/Avatar.tsx +51 -0
  113. package/template/src/atoms/Card.tsx +21 -8
  114. package/template/src/atoms/Carousel.native.tsx +105 -0
  115. package/template/src/atoms/Carousel.tsx +103 -0
  116. package/template/src/atoms/Checkbox.tsx +98 -0
  117. package/template/src/atoms/CircularProgress.tsx +0 -1
  118. package/template/src/atoms/ClipboardIconButton.tsx +91 -0
  119. package/template/src/atoms/CustomIcon.tsx +45 -0
  120. package/template/src/atoms/DropDownMulti.tsx +349 -0
  121. package/template/src/atoms/Dropdown.tsx +3 -3
  122. package/template/src/atoms/IconButton.tsx +52 -9
  123. package/template/src/atoms/ImageIcon.tsx +6 -3
  124. package/template/src/atoms/InlineNotification.tsx +81 -0
  125. package/template/src/atoms/MeetingLink.tsx +160 -0
  126. package/template/src/atoms/ParticipantsCount.tsx +18 -7
  127. package/template/src/atoms/Popup.tsx +49 -27
  128. package/template/src/atoms/PrimaryButton.tsx +19 -5
  129. package/template/src/atoms/RecordingInfo.tsx +2 -2
  130. package/template/src/atoms/SecondaryButton.tsx +2 -0
  131. package/template/src/atoms/Spacer.tsx +1 -0
  132. package/template/src/atoms/TertiaryButton.tsx +35 -5
  133. package/template/src/atoms/TextInput.tsx +2 -1
  134. package/template/src/atoms/Toolbar.tsx +64 -30
  135. package/template/src/atoms/ToolbarItem.tsx +11 -5
  136. package/template/src/atoms/ToolbarPreset.tsx +13 -2
  137. package/template/src/atoms/Tooltip.tsx +26 -4
  138. package/template/src/auth/AuthProvider.tsx +500 -0
  139. package/template/src/auth/AuthRoute.tsx +94 -0
  140. package/template/src/auth/IDPAuth.electron.tsx +31 -0
  141. package/template/src/auth/IDPAuth.tsx +67 -0
  142. package/template/src/auth/IDPLogoutComponent.tsx +158 -0
  143. package/template/src/auth/UserCancelPopup.tsx +115 -0
  144. package/template/src/auth/config.ts +52 -0
  145. package/template/src/auth/openIDPURL.electron.tsx +39 -0
  146. package/template/src/auth/openIDPURL.native.tsx +51 -0
  147. package/template/src/auth/openIDPURL.tsx +20 -0
  148. package/template/src/auth/useIDPAuth.electron.tsx +65 -0
  149. package/template/src/auth/useIDPAuth.native.tsx +70 -0
  150. package/template/src/auth/useIDPAuth.tsx +63 -0
  151. package/template/src/auth/useTokenAuth.tsx +194 -0
  152. package/template/src/components/Chat.tsx +5 -8
  153. package/template/src/components/ChatContext.ts +4 -0
  154. package/template/src/components/ColorConfigure.tsx +0 -1
  155. package/template/src/components/CommonStyles.ts +9 -2
  156. package/template/src/components/Controls.tsx +659 -52
  157. package/template/src/components/DeviceConfigure.tsx +362 -156
  158. package/template/src/components/DeviceContext.tsx +2 -0
  159. package/template/src/components/EventsConfigure.tsx +713 -109
  160. package/template/src/components/GraphQLProvider.tsx +62 -36
  161. package/template/src/components/GridVideo.tsx +23 -13
  162. package/template/src/components/HostControlView.tsx +11 -14
  163. package/template/src/components/JoinPhrase.tsx +0 -1
  164. package/template/src/components/Leftbar.tsx +4 -3
  165. package/template/src/components/Navbar.tsx +110 -42
  166. package/template/src/components/NavbarMobile.tsx +47 -36
  167. package/template/src/components/Navigation.native.tsx +1 -15
  168. package/template/src/{subComponents/screenshare/ScreenshareButton.native.tsx → components/Navigation.sdk.tsx} +17 -3
  169. package/template/src/components/Navigation.tsx +1 -15
  170. package/template/src/components/ParticipantsView.tsx +56 -48
  171. package/template/src/components/PinnedVideo.tsx +188 -114
  172. package/template/src/components/Precall.native.tsx +169 -67
  173. package/template/src/components/Precall.tsx +237 -71
  174. package/template/src/components/RTMConfigure.tsx +167 -55
  175. package/template/src/components/Rightbar.tsx +4 -3
  176. package/template/src/components/Router.electron.ts +1 -0
  177. package/template/src/components/Router.native.ts +1 -0
  178. package/template/src/components/Router.sdk.ts +1 -0
  179. package/template/src/components/Router.ts +1 -0
  180. package/template/src/components/SdkApiContext.tsx +179 -27
  181. package/template/src/components/SdkMuteToggleListener.tsx +88 -0
  182. package/template/src/components/SessionContext.tsx +0 -1
  183. package/template/src/components/Settings.tsx +25 -3
  184. package/template/src/components/SettingsView.tsx +44 -9
  185. package/template/src/components/Share.tsx +149 -71
  186. package/template/src/components/StorageContext.tsx +19 -5
  187. package/template/src/components/ToastComponent.tsx +3 -0
  188. package/template/src/components/WhiteboardLayout.tsx +291 -0
  189. package/template/src/components/chat-messages/useChatMessages.tsx +420 -207
  190. package/template/src/components/common/Error.tsx +2 -0
  191. package/template/src/components/common/Logo.tsx +2 -2
  192. package/template/src/components/contexts/LiveStreamDataContext.tsx +5 -4
  193. package/template/src/components/contexts/ScreenShareContext.tsx +15 -1
  194. package/template/src/components/contexts/WaitingRoomContext.tsx +50 -0
  195. package/template/src/components/contexts/WhiteboardContext.tsx +54 -54
  196. package/template/src/components/disable-chat/useDisableChat.tsx +32 -0
  197. package/template/src/components/livestream/LiveStreamContext.tsx +262 -177
  198. package/template/src/components/livestream/Types.ts +34 -18
  199. package/template/src/components/livestream/views/LiveStreamAttendeeLandingTile.tsx +295 -0
  200. package/template/src/components/livestream/views/LiveStreamControls.tsx +2 -4
  201. package/template/src/components/meeting-info-invite/MeetingInfo.tsx +82 -0
  202. package/template/src/components/meeting-info-invite/MeetingInfoCardHeader.tsx +86 -0
  203. package/template/src/components/meeting-info-invite/MeetingInfoGridTile.tsx +218 -0
  204. package/template/src/components/meeting-info-invite/MeetingInfoLinks.tsx +122 -0
  205. package/template/src/components/participants/AllAudienceParticipants.tsx +4 -5
  206. package/template/src/components/participants/AllHostParticipants.tsx +5 -6
  207. package/template/src/components/participants/Participant.tsx +40 -9
  208. package/template/src/components/participants/ParticipantSectionTitle.tsx +5 -2
  209. package/template/src/components/participants/ScreenshareParticipants.tsx +15 -17
  210. package/template/src/components/participants/UserActionMenuOptions.tsx +157 -49
  211. package/template/src/components/participants/WaitingRoomParticipants.tsx +74 -0
  212. package/template/src/components/popups/InvitePopup.tsx +110 -45
  213. package/template/src/components/popups/StartScreenSharePopup.native.tsx +182 -0
  214. package/template/src/components/popups/StartScreenSharePopup.tsx +6 -0
  215. package/template/src/components/popups/StopRecordingPopup.tsx +11 -5
  216. package/template/src/components/popups/StopScreenSharePopup.native.tsx +135 -0
  217. package/template/src/components/popups/StopScreenSharePopup.tsx +6 -0
  218. package/template/src/components/popups/WhiteboardClearAllPopup.tsx +123 -0
  219. package/template/src/components/precall/LocalMute.tsx +69 -45
  220. package/template/src/components/precall/PermissionHelper.tsx +52 -24
  221. package/template/src/components/precall/PreCallSettings.tsx +1 -0
  222. package/template/src/components/precall/VideoFallback.tsx +173 -0
  223. package/template/src/components/precall/VideoPreview.native.tsx +16 -50
  224. package/template/src/components/precall/VideoPreview.tsx +27 -162
  225. package/template/src/components/precall/index.tsx +2 -0
  226. package/template/src/components/precall/joinCallBtn.native.tsx +10 -3
  227. package/template/src/components/precall/joinCallBtn.tsx +11 -2
  228. package/template/src/components/precall/joinWaitingRoomBtn.native.tsx +210 -0
  229. package/template/src/components/precall/joinWaitingRoomBtn.tsx +250 -0
  230. package/template/src/components/precall/meetingTitle.tsx +35 -9
  231. package/template/src/components/precall/selectDevice.tsx +5 -5
  232. package/template/src/components/precall/textInput.tsx +16 -18
  233. package/template/src/components/precall/usePreCall.tsx +14 -4
  234. package/template/src/components/room-info/useRoomInfo.tsx +34 -0
  235. package/template/src/components/useShareLink.tsx +24 -59
  236. package/template/src/components/useUserPreference.tsx +73 -10
  237. package/template/src/components/useVideoCall.tsx +76 -3
  238. package/template/src/components/virtual-background/VBButton.tsx +64 -0
  239. package/template/src/components/virtual-background/VBCard.native.tsx +282 -0
  240. package/template/src/components/virtual-background/VBCard.tsx +272 -0
  241. package/template/src/components/virtual-background/VBPanel.tsx +279 -0
  242. package/template/src/components/virtual-background/VButils.native.ts +37 -0
  243. package/template/src/components/virtual-background/VButils.ts +104 -0
  244. package/template/src/components/virtual-background/VideoPreview.native.tsx +43 -0
  245. package/template/src/components/virtual-background/VideoPreview.tsx +106 -0
  246. package/template/src/components/virtual-background/imagePaths.ts +87 -0
  247. package/template/src/components/virtual-background/images/beachImageBase64.ts +1 -0
  248. package/template/src/components/virtual-background/images/bedroomImageBase64.ts +1 -0
  249. package/template/src/components/virtual-background/images/bookImageBase64.ts +1 -0
  250. package/template/src/components/virtual-background/images/earthImageBase64.ts +1 -0
  251. package/template/src/components/virtual-background/images/index.ts +37 -0
  252. package/template/src/components/virtual-background/images/lampImageBase64.ts +1 -0
  253. package/template/src/components/virtual-background/images/mountainsImageBase64.ts +1 -0
  254. package/template/src/components/virtual-background/images/office1ImageBase64.ts +1 -0
  255. package/template/src/components/virtual-background/images/officeImageBase64.ts +1 -0
  256. package/template/src/components/virtual-background/images/plantsImageBase64.ts +1 -0
  257. package/template/src/components/virtual-background/images/skyImageBase64.ts +1 -0
  258. package/template/src/components/virtual-background/images/wallImageBase64.ts +1 -0
  259. package/template/src/components/virtual-background/useVB.native.tsx +188 -0
  260. package/template/src/components/virtual-background/useVB.tsx +267 -0
  261. package/template/src/components/whiteboard/StrokeWidthTool.tsx +137 -0
  262. package/template/src/components/whiteboard/WhiteboardButton.tsx +93 -0
  263. package/template/src/components/whiteboard/WhiteboardCanvas.tsx +99 -0
  264. package/template/src/components/whiteboard/WhiteboardConfigure.native.tsx +137 -0
  265. package/template/src/components/whiteboard/WhiteboardConfigure.tsx +441 -0
  266. package/template/src/components/whiteboard/WhiteboardCursor.tsx +152 -0
  267. package/template/src/components/whiteboard/WhiteboardToolBox.tsx +1246 -0
  268. package/template/src/components/whiteboard/WhiteboardView.native.tsx +109 -0
  269. package/template/src/components/whiteboard/WhiteboardView.tsx +81 -0
  270. package/template/src/components/whiteboard/WhiteboardWidget.tsx +674 -0
  271. package/template/src/components/whiteboard/WhiteboardWrapper.tsx +38 -0
  272. package/template/src/language/default-labels/commonLabels.ts +51 -14
  273. package/template/src/language/default-labels/createScreenLabels.ts +97 -17
  274. package/template/src/language/default-labels/joinScreenLabels.ts +45 -6
  275. package/template/src/language/default-labels/precallScreenLabels.ts +145 -23
  276. package/template/src/language/default-labels/shareLinkScreenLabels.ts +85 -37
  277. package/template/src/language/default-labels/videoCallScreenLabels.ts +1137 -158
  278. package/template/src/pages/Create.tsx +125 -80
  279. package/template/src/pages/Join.tsx +76 -34
  280. package/template/src/pages/Login.tsx +26 -0
  281. package/template/src/pages/VideoCall.tsx +229 -114
  282. package/template/src/pages/video-call/ActionSheet.native.tsx +54 -7
  283. package/template/src/pages/video-call/ActionSheet.tsx +55 -16
  284. package/template/src/pages/video-call/ActionSheetContent.tsx +366 -291
  285. package/template/src/pages/video-call/ActionSheetHandle.tsx +7 -1
  286. package/template/src/pages/video-call/DefaultLayouts.ts +11 -5
  287. package/template/src/pages/video-call/NameWithMicIcon.tsx +17 -9
  288. package/template/src/pages/video-call/PinchableView.tsx +119 -0
  289. package/template/src/pages/video-call/RenderComponent.tsx +12 -3
  290. package/template/src/pages/video-call/SidePanelHeader.tsx +208 -6
  291. package/template/src/pages/video-call/VideoCallMobileView.tsx +140 -106
  292. package/template/src/pages/video-call/VideoCallScreen.native.tsx +3 -2
  293. package/template/src/pages/video-call/VideoCallScreen.tsx +113 -66
  294. package/template/src/pages/video-call/VideoComponent.tsx +53 -5
  295. package/template/src/pages/video-call/VideoRenderer.tsx +309 -52
  296. package/template/src/pages/video-call/VisibilitySensor.tsx +104 -0
  297. package/template/src/pages/video-call/ZoomableWrapper.native.tsx +34 -0
  298. package/template/src/pages/video-call/ZoomableWrapper.tsx +5 -0
  299. package/template/src/pages/video-call/index.ts +2 -0
  300. package/template/src/rtm/RTMEngine.ts +9 -4
  301. package/template/src/rtm-events/constants.ts +20 -0
  302. package/template/src/rtm-events-api/Events.ts +2 -0
  303. package/template/src/rtm-events-api/LocalEvents.ts +8 -0
  304. package/template/src/selection.json +1 -0
  305. package/template/src/subComponents/ChatBubble.tsx +81 -64
  306. package/template/src/subComponents/ChatContainer.tsx +20 -13
  307. package/template/src/subComponents/ChatInput.ios.tsx +11 -2
  308. package/template/src/subComponents/ChatInput.tsx +12 -3
  309. package/template/src/subComponents/Checkbox.native.tsx +46 -46
  310. package/template/src/subComponents/Checkbox.tsx +7 -6
  311. package/template/src/subComponents/CopyJoinInfo.tsx +26 -11
  312. package/template/src/subComponents/EndcallPopup.tsx +83 -12
  313. package/template/src/subComponents/LanguageSelector.tsx +34 -30
  314. package/template/src/subComponents/LayoutIconButton.tsx +30 -8
  315. package/template/src/subComponents/LayoutIconDropdown.tsx +19 -3
  316. package/template/src/subComponents/Loading.tsx +60 -0
  317. package/template/src/subComponents/LocalAudioMute.tsx +106 -30
  318. package/template/src/subComponents/LocalEndCall.tsx +91 -15
  319. package/template/src/subComponents/LocalSwitchCamera.tsx +50 -11
  320. package/template/src/subComponents/LocalVideoMute.tsx +126 -32
  321. package/template/src/subComponents/LogoutButton.tsx +1 -1
  322. package/template/src/subComponents/NetworkQualityPill.tsx +14 -31
  323. package/template/src/subComponents/Recording.tsx +23 -6
  324. package/template/src/subComponents/RemoteAudioMute.tsx +3 -3
  325. package/template/src/subComponents/RemoteMutePopup.tsx +55 -14
  326. package/template/src/subComponents/RemoteVideoMute.tsx +3 -3
  327. package/template/src/subComponents/RemoveMeetingPopup.tsx +19 -6
  328. package/template/src/subComponents/RemoveScreensharePopup.tsx +20 -5
  329. package/template/src/subComponents/ScreenShareNotice.tsx +11 -6
  330. package/template/src/subComponents/SelectDevice.tsx +98 -32
  331. package/template/src/subComponents/SidePanelEnum.tsx +2 -0
  332. package/template/src/subComponents/SidePanelHeader.tsx +97 -63
  333. package/template/src/subComponents/ToastConfig.tsx +70 -61
  334. package/template/src/subComponents/caption/Caption.tsx +130 -0
  335. package/template/src/subComponents/caption/CaptionContainer.tsx +302 -0
  336. package/template/src/subComponents/caption/CaptionIcon.tsx +111 -0
  337. package/template/src/subComponents/caption/CaptionText.tsx +182 -0
  338. package/template/src/subComponents/caption/DownloadTranscriptBtn.tsx +65 -0
  339. package/template/src/subComponents/caption/LanguageSelectorPopup.tsx +192 -0
  340. package/template/src/subComponents/caption/Transcript.tsx +449 -0
  341. package/template/src/subComponents/caption/TranscriptIcon.tsx +123 -0
  342. package/template/src/subComponents/caption/TranscriptText.tsx +98 -0
  343. package/template/src/subComponents/caption/index.ts +3 -0
  344. package/template/src/subComponents/caption/proto/ptoto.js +91 -0
  345. package/template/src/subComponents/caption/proto/test.proto +23 -0
  346. package/template/src/subComponents/caption/useCaption.tsx +123 -0
  347. package/template/src/subComponents/caption/useCaptionWidth.ts +27 -0
  348. package/template/src/subComponents/caption/useSTTAPI.tsx +179 -0
  349. package/template/src/subComponents/caption/useStreamMessageUtils.native.ts +211 -0
  350. package/template/src/subComponents/caption/useStreamMessageUtils.ts +235 -0
  351. package/template/src/subComponents/caption/useTranscriptDownload.native.ts +68 -0
  352. package/template/src/subComponents/caption/useTranscriptDownload.ts +52 -0
  353. package/template/src/subComponents/caption/utils.ts +125 -0
  354. package/template/src/subComponents/chat/ChatParticipants.tsx +53 -17
  355. package/template/src/subComponents/livestream/CurrentLiveStreamRequestsView.tsx +11 -13
  356. package/template/src/subComponents/livestream/controls/LocalRaiseHand.tsx +33 -9
  357. package/template/src/subComponents/livestream/controls/RemoteLiveStreamApprovedRequestRecall.tsx +1 -0
  358. package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestApprove.tsx +10 -6
  359. package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestReject.tsx +28 -19
  360. package/template/src/subComponents/recording/useRecording.tsx +49 -20
  361. package/template/src/subComponents/recording/useRecordingLayoutQuery.tsx +0 -1
  362. package/template/src/subComponents/screenshare/ScreenshareButton.tsx +29 -10
  363. package/template/src/subComponents/screenshare/ScreenshareConfigure.native.tsx +270 -66
  364. package/template/src/subComponents/screenshare/ScreenshareConfigure.tsx +182 -95
  365. package/template/src/subComponents/screenshare/useScreenshare.tsx +2 -0
  366. package/template/src/subComponents/waiting-rooms/WaitingRoomControls.tsx +85 -0
  367. package/template/src/subComponents/waiting-rooms/useWaitingRoomAPI.ts +75 -0
  368. package/template/src/theme/index.ts +9 -0
  369. package/template/src/utils/SdkEvents.ts +14 -0
  370. package/template/src/utils/SdkMethodEvents.ts +23 -3
  371. package/template/src/utils/axiomLogger.ts +117 -0
  372. package/template/src/utils/book.jpg +0 -0
  373. package/template/src/utils/common.tsx +118 -6
  374. package/template/src/utils/endCallEveryOne.ts +7 -0
  375. package/template/src/utils/getCustomRoute.ts +7 -0
  376. package/template/src/utils/index.tsx +23 -0
  377. package/template/src/utils/useActionSheet.tsx +50 -0
  378. package/template/src/utils/useActiveSpeaker.ts +3 -7
  379. package/template/src/utils/useAppState.ts +17 -0
  380. package/template/src/utils/useAsyncEffect.ts +138 -0
  381. package/template/src/utils/useCreateRoom.ts +8 -12
  382. package/template/src/utils/useDisableButton.tsx +37 -0
  383. package/template/src/utils/useFindActiveSpeaker.native.ts +4 -0
  384. package/template/src/utils/useFindActiveSpeaker.ts +335 -0
  385. package/template/src/utils/useIsLocalUserSpeaking.native.ts +4 -0
  386. package/template/src/utils/useIsLocalUserSpeaking.ts +98 -0
  387. package/template/src/utils/useJoinRoom.ts +97 -36
  388. package/template/src/utils/useMuteToggleLocal.ts +114 -96
  389. package/template/src/utils/useString.ts +13 -3
  390. package/template/static.d.ts +42 -0
  391. package/template/tsconfig_rsdk_index.json +3 -3
  392. package/template/tsconfig_wsdk_index.json +1 -1
  393. package/template/web/index.html +20 -0
  394. package/template/webpack.commons.js +21 -10
  395. package/template/webpack.web.config.js +7 -3
  396. package/template/_buckconfig +0 -6
  397. package/template/_gitattributes +0 -1
  398. package/template/android/app/_BUCK +0 -55
  399. package/template/android/app/build_defs.bzl +0 -19
  400. package/template/ios/HelloWorld/AppDelegate.m +0 -74
  401. package/template/src/components/OAuth.electron.tsx +0 -41
  402. package/template/src/components/OAuth.native.tsx +0 -55
  403. package/template/src/components/OAuth.tsx +0 -30
  404. package/template/src/components/OAuthConfig.ts +0 -77
  405. package/template/src/components/Settings.native.tsx +0 -21
  406. package/template/src/components/StoreToken.tsx +0 -39
@@ -11,18 +11,7 @@
11
11
  */
12
12
  import React, {useState, useContext} from 'react';
13
13
  import {Platform} from 'react-native';
14
- import Join from './pages/Join';
15
- import VideoCall from './pages/VideoCall';
16
- import Create from './pages/Create';
17
- import {Route, Switch, Redirect} from './components/Router';
18
- import PrivateRoute from './components/PrivateRoute';
19
- import OAuth from './components/OAuth';
20
- import StoreToken from './components/StoreToken';
21
- import {shouldAuthenticate} from './utils/common';
22
14
  import KeyboardManager from 'react-native-keyboard-manager';
23
- // commented for v1 release
24
- //import {CustomRoutesInterface, CUSTOM_ROUTES_PREFIX} from 'customization-api';
25
- //import {useCustomization} from 'customization-implementation';
26
15
  import AppWrapper from './AppWrapper';
27
16
  import {
28
17
  RoomInfoContextInterface,
@@ -31,9 +20,9 @@ import {
31
20
  } from './components/room-info/useRoomInfo';
32
21
  import {SetRoomInfoProvider} from './components/room-info/useSetRoomInfo';
33
22
  import {ShareLinkProvider} from './components/useShareLink';
34
- import Endcall from './pages/Endcall';
23
+ import AppRoutes from './AppRoutes';
35
24
 
36
- //hook can't be used in the outside react function calls. so directly checking the platform.
25
+ // hook can't be used in the outside react function calls. so directly checking the platform.
37
26
  if (Platform.OS === 'ios') {
38
27
  KeyboardManager.setEnable(true);
39
28
  KeyboardManager.setEnableAutoToolbar(false);
@@ -43,48 +32,20 @@ if (Platform.OS === 'ios') {
43
32
 
44
33
  //Extending the UI Kit Type defintion to add custom attribute to render interface
45
34
  declare module 'agora-rn-uikit' {
46
- interface DefaultContentInterface {
47
- name: string;
48
- screenUid: number;
49
- offline: boolean;
50
- lastMessageTimeStamp: number;
51
- }
52
- interface RtcPropsInterface {
53
- screenShareUid: number;
54
- screenShareToken?: string;
55
- }
35
+ // interface DefaultContentInterface {
36
+ // name: string;
37
+ // screenUid: number;
38
+ // offline: boolean;
39
+ // lastMessageTimeStamp: number;
40
+ // }
41
+ // interface RtcPropsInterface {
42
+ // screenShareUid: number;
43
+ // screenShareToken?: string;
44
+ // }
56
45
  }
57
46
 
58
47
  const App: React.FC = () => {
59
48
  //commented for v1 release
60
- //const CustomRoutes = useCustomization((data) => data?.customRoutes);
61
- // const RenderCustomRoutes = () => {
62
- // try {
63
- // return (
64
- // CustomRoutes &&
65
- // Array.isArray(CustomRoutes) &&
66
- // CustomRoutes.length &&
67
- // CustomRoutes?.map((item: CustomRoutesInterface, i: number) => {
68
- // let RouteComponent = item?.isPrivateRoute ? PrivateRoute : Route;
69
- // return (
70
- // <RouteComponent
71
- // path={CUSTOM_ROUTES_PREFIX + item.path}
72
- // exact={item.exact}
73
- // key={i}
74
- // failureRedirectTo={
75
- // item.failureRedirectTo ? item.failureRedirectTo : '/'
76
- // }
77
- // {...item.routeProps}>
78
- // <item.component {...item.componentProps} />
79
- // </RouteComponent>
80
- // );
81
- // })
82
- // );
83
- // } catch (error) {
84
- // console.error('Error on rendering the custom routes');
85
- // return null;
86
- // }
87
- // };
88
49
  const [roomInfo, setRoomInfo] =
89
50
  useState<RoomInfoContextInterface>(RoomInfoDefaultValue);
90
51
 
@@ -93,40 +54,7 @@ const App: React.FC = () => {
93
54
  <SetRoomInfoProvider value={{setRoomInfo}}>
94
55
  <RoomInfoProvider value={{...roomInfo}}>
95
56
  <ShareLinkProvider>
96
- <Switch>
97
- {/* commented for v1 release */}
98
- {/* {RenderCustomRoutes()} */}
99
- <Route exact path={'/'}>
100
- <Redirect to={'/create'} />
101
- </Route>
102
- <Route exact path={'/authenticate'}>
103
- {shouldAuthenticate ? <OAuth /> : <Redirect to={'/'} />}
104
- </Route>
105
- <Route path={'/auth-token/:token'}>
106
- <StoreToken />
107
- </Route>
108
- <Route exact path={'/join'}>
109
- <Join />
110
- </Route>
111
- {/* Will be used in the future
112
- <Route exact path={'/leave'}>
113
- <Endcall />
114
- </Route> */}
115
- {shouldAuthenticate ? (
116
- <PrivateRoute
117
- path={'/create'}
118
- failureRedirectTo={'/authenticate'}>
119
- <Create />
120
- </PrivateRoute>
121
- ) : (
122
- <Route path={'/create'}>
123
- <Create />
124
- </Route>
125
- )}
126
- <Route path={'/:phrase'}>
127
- <VideoCall />
128
- </Route>
129
- </Switch>
57
+ <AppRoutes />
130
58
  </ShareLinkProvider>
131
59
  </RoomInfoProvider>
132
60
  </SetRoomInfoProvider>
@@ -0,0 +1,77 @@
1
+ /*
2
+ ********************************************
3
+ Copyright © 2021 Agora Lab, Inc., all rights reserved.
4
+ AppBuilder and all associated components, source code, APIs, services, and documentation
5
+ (the “Materials”) are owned by Agora Lab, Inc. and its licensors. The Materials may not be
6
+ accessed, used, modified, or distributed for any purpose without a license from Agora Lab, Inc.
7
+ Use without a license or in violation of any license terms and conditions (including use for
8
+ any purpose competitive to Agora Lab, Inc.’s business) is strictly prohibited. For more
9
+ information visit https://appbuilder.agora.io.
10
+ *********************************************
11
+ */
12
+ import React from 'react';
13
+ import Join from './pages/Join';
14
+ import VideoCall from './pages/VideoCall';
15
+ import Create from './pages/Create';
16
+ import {Route, Switch, Redirect} from './components/Router';
17
+ import AuthRoute from './auth/AuthRoute';
18
+ import {IDPAuth} from './auth/IDPAuth';
19
+ import {Text} from 'react-native';
20
+ import {useCustomization} from 'customization-implementation';
21
+ import {CUSTOM_ROUTES_PREFIX, CustomRoutesInterface} from 'customization-api';
22
+ import PrivateRoute from './components/PrivateRoute';
23
+
24
+ function AppRoutes() {
25
+ const CustomRoutes = useCustomization(data => data?.customRoutes);
26
+ const RenderCustomRoutes = () => {
27
+ try {
28
+ return (
29
+ CustomRoutes &&
30
+ Array.isArray(CustomRoutes) &&
31
+ CustomRoutes.length &&
32
+ CustomRoutes?.map((item: CustomRoutesInterface, i: number) => {
33
+ let RouteComponent = item?.isPrivateRoute ? PrivateRoute : Route;
34
+ return (
35
+ <RouteComponent
36
+ path={CUSTOM_ROUTES_PREFIX + item.path}
37
+ exact={item.exact}
38
+ key={i}
39
+ failureRedirectTo={
40
+ item.failureRedirectTo ? item.failureRedirectTo : '/'
41
+ }
42
+ {...item.routeProps}>
43
+ <item.component {...item.componentProps} />
44
+ </RouteComponent>
45
+ );
46
+ })
47
+ );
48
+ } catch (error) {
49
+ console.error('Error on rendering the custom routes');
50
+ return null;
51
+ }
52
+ };
53
+ return (
54
+ <Switch>
55
+ <Route exact path={'/'}>
56
+ <Redirect to={'/create'} />
57
+ </Route>
58
+ <Route exact path={'/authorize/:token?'}>
59
+ <IDPAuth />
60
+ </Route>
61
+ <AuthRoute exact path={'/join'}>
62
+ <Join />
63
+ </AuthRoute>
64
+ <AuthRoute exact path={'/create'}>
65
+ <Create />
66
+ </AuthRoute>
67
+ {RenderCustomRoutes()}
68
+ <AuthRoute path={'/:phrase'}>
69
+ <VideoCall />
70
+ </AuthRoute>
71
+ <Route path="*">
72
+ <Text>Page not found</Text>
73
+ </Route>
74
+ </Switch>
75
+ );
76
+ }
77
+ export default AppRoutes;
@@ -29,6 +29,7 @@ import Error from './components/common/Error';
29
29
  import {ErrorProvider} from './components/common';
30
30
  import {useCustomization} from 'customization-implementation';
31
31
  import {LanguageProvider} from './language/useLanguage';
32
+ import {AuthProvider} from './auth/AuthProvider';
32
33
  import {PropsConsumer} from 'agora-rn-uikit';
33
34
  import ToastComponent from './components/ToastComponent';
34
35
  import {ToastContext, ToastProvider} from './components/useToast';
@@ -65,7 +66,7 @@ const ImageBackgroundComp = (props: {
65
66
  };
66
67
 
67
68
  const AppWrapper = (props: AppWrapperProps) => {
68
- const AppRoot = useCustomization((data) => {
69
+ const AppRoot = useCustomization(data => {
69
70
  if (
70
71
  data?.components?.appRoot &&
71
72
  isValidReactComponent(data?.components?.appRoot)
@@ -84,38 +85,42 @@ const AppWrapper = (props: AppWrapperProps) => {
84
85
  // @ts-ignore textAlign not supported by TS definitions but is applied to web regardless
85
86
  style={[{flex: 1}, Platform.select({web: {textAlign: 'left'}})]}>
86
87
  <StatusBar hidden={true} />
87
- <ToastProvider>
88
- <ToastContext.Consumer>
89
- {({isActionSheetVisible}) => {
90
- return !isActionSheetVisible ? <ToastComponent /> : null;
91
- }}
92
- </ToastContext.Consumer>
93
- <StorageProvider>
94
- <GraphQLProvider>
95
- <Router
96
- /*@ts-ignore Router will be memory Router in sdk*/
97
- initialEntries={[
98
- isSDK && SdkJoinState.phrase
99
- ? `/${SdkJoinState.phrase}`
100
- : '',
101
- ]}>
102
- <SessionProvider>
103
- <ColorConfigure>
104
- <DimensionProvider>
105
- <LanguageProvider>
106
- <ErrorProvider>
107
- <Error />
108
- <Navigation />
109
- {props.children}
110
- </ErrorProvider>
111
- </LanguageProvider>
112
- </DimensionProvider>
113
- </ColorConfigure>
114
- </SessionProvider>
115
- </Router>
116
- </GraphQLProvider>
117
- </StorageProvider>
118
- </ToastProvider>
88
+ <StorageProvider>
89
+ <LanguageProvider>
90
+ <ToastProvider>
91
+ <ToastContext.Consumer>
92
+ {({isActionSheetVisible}) => {
93
+ return !isActionSheetVisible ? <ToastComponent /> : null;
94
+ }}
95
+ </ToastContext.Consumer>
96
+ <GraphQLProvider>
97
+ <Router
98
+ /*@ts-ignore Router will be memory Router in sdk*/
99
+ initialEntries={[
100
+ //@ts-ignore
101
+ isSDK && SdkJoinState.phrase
102
+ ? //@ts-ignore
103
+ `/${SdkJoinState.phrase}`
104
+ : '',
105
+ ]}>
106
+ <AuthProvider>
107
+ <SessionProvider>
108
+ <ColorConfigure>
109
+ <DimensionProvider>
110
+ <ErrorProvider>
111
+ <Error />
112
+ <Navigation />
113
+ {props.children}
114
+ </ErrorProvider>
115
+ </DimensionProvider>
116
+ </ColorConfigure>
117
+ </SessionProvider>
118
+ </AuthProvider>
119
+ </Router>
120
+ </GraphQLProvider>
121
+ </ToastProvider>
122
+ </LanguageProvider>
123
+ </StorageProvider>
119
124
  </SafeAreaView>
120
125
  </ImageBackgroundComp>
121
126
  </AppRoot>
@@ -11,60 +11,96 @@ import SDKMethodEventsManager from './utils/SdkMethodEvents';
11
11
  import App from './App';
12
12
  import SdkApiContextProvider from './components/SdkApiContext';
13
13
  import {Unsubscribe} from 'nanoevents';
14
+ import {deviceId} from './components/DeviceConfigure';
14
15
 
15
- // type makeAsync<T extends (...p: any) => void> = (
16
- // ...p: Parameters<T>
17
- // ) => PromiseLike<ReturnType<T>>;
18
- //
19
- // type takeOnlyFirstParam<T extends (...p: any) => void> = (
20
- // p: Parameters<T>[0],
21
- // ) => ReturnType<T>;
16
+ type meetingData = Partial<RoomInfoContextInterface['data']>;
22
17
 
23
- export interface SdkMethodEvents {
24
- customize: (customization: CustomizationApiInterface) => void;
25
- join(
26
- roomid: string | Partial<RoomInfoContextInterface['data']>,
27
- skipPrecall?: boolean,
28
- ): RoomInfoContextInterface['data'];
18
+ export interface AppBuilderSdkApiInterface {
19
+ customize: (customization: CustomizationApiInterface) => Promise<void>;
20
+ joinRoom: (
21
+ roomDetails: string | meetingData,
22
+ userName?: string,
23
+ ) => Promise<meetingData>;
24
+ joinPrecall: (
25
+ roomDetails: string | meetingData,
26
+ userName?: string,
27
+ ) => Promise<
28
+ [
29
+ meetingData,
30
+ (userName?: string) => Promise<RoomInfoContextInterface['data']>,
31
+ ]
32
+ >;
33
+ setMicrophone: (deviceId: deviceId) => Promise<void>;
34
+ setCamera: (deviceId: deviceId) => Promise<void>;
35
+ setSpeaker: (deviceId: deviceId) => Promise<void>;
36
+ muteAudio: (
37
+ mute: boolean | ((currentMute: boolean) => boolean),
38
+ ) => Promise<void>;
39
+ muteVideo: (
40
+ mute: boolean | ((currentMute: boolean) => boolean),
41
+ ) => Promise<void>;
42
+ createCustomization: (
43
+ customization: CustomizationApiInterface,
44
+ ) => CustomizationApiInterface;
45
+ login: (token: string) => Promise<void>;
46
+ logout: () => Promise<void>;
47
+ customEvents: typeof customEvents;
48
+ on: <T extends keyof userEventsMapInterface>(
49
+ userEventName: T,
50
+ cb: userEventsMapInterface[T],
51
+ ) => Unsubscribe;
29
52
  }
30
53
 
31
- // interface AppBuilderSdkApiInterface {
32
- // customize: makeAsync<SdkMethodEvents['customize']>;
33
- // joinRoom: makeAsync<takeOnlyFirstParam<SdkMethodEvents['join']>>;
34
- // joinPrecall: makeAsync<takeOnlyFirstParam<SdkMethodEvents['join']>>;
35
- // createCustomization: (
36
- // customization: CustomizationApiInterface,
37
- // ) => CustomizationApiInterface;
38
- // on: <T extends keyof userEventsMapInterface>(
39
- // userEventName: T,
40
- // callBack: userEventsMapInterface[T],
41
- // ) => Unsubscribe;
42
- // }
43
-
44
- export const AppBuilderSdkApi = {
45
- customize: async (customization: CustomizationApiInterface) => {
54
+ export const AppBuilderSdkApi: AppBuilderSdkApiInterface = {
55
+ login: async (token: string) => {
56
+ return await SDKMethodEventsManager.emit('login', token);
57
+ },
58
+ logout: async () => {
59
+ return await SDKMethodEventsManager.emit('logout');
60
+ },
61
+ customize: async customization => {
46
62
  return await SDKMethodEventsManager.emit('customize', customization);
47
63
  },
48
64
  customEvents: customEvents,
49
- join: async (roomDetails: string) => {
50
- await SDKMethodEventsManager.emit('join', roomDetails, false);
65
+ joinRoom: async (roomDetails, userName) => {
66
+ return await SDKMethodEventsManager.emit(
67
+ 'join',
68
+ roomDetails,
69
+ true,
70
+ userName,
71
+ );
72
+ },
73
+ joinPrecall: async (roomDetails, userName) => {
74
+ if (!$config.PRECALL)
75
+ throw new Error('Precall disabled in config, cant join precall');
76
+ const t = await SDKMethodEventsManager.emit(
77
+ 'join',
78
+ roomDetails,
79
+ false,
80
+ userName,
81
+ );
82
+ return t as unknown as [
83
+ RoomInfoContextInterface['data'],
84
+ (userName?: string) => Promise<RoomInfoContextInterface['data']>,
85
+ ];
51
86
  },
52
- joinRoom: async (
53
- roomDetails: string | Partial<RoomInfoContextInterface['data']>,
54
- ) => {
55
- return await SDKMethodEventsManager.emit('join', roomDetails, true);
87
+ setMicrophone: async deviceId => {
88
+ return await SDKMethodEventsManager.emit('microphoneDevice', deviceId);
56
89
  },
57
- joinPrecall: async (
58
- roomDetails: string | Partial<RoomInfoContextInterface['data']>,
59
- ) => {
60
- const t = await SDKMethodEventsManager.emit('join', roomDetails);
61
- return t as unknown as [RoomInfoContextInterface['data'], () => {}];
90
+ setSpeaker: async deviceId => {
91
+ return await SDKMethodEventsManager.emit('speakerDevice', deviceId);
92
+ },
93
+ setCamera: async deviceId => {
94
+ return await SDKMethodEventsManager.emit('cameraDevice', deviceId);
95
+ },
96
+ muteAudio: async state => {
97
+ return await SDKMethodEventsManager.emit('muteAudio', state);
98
+ },
99
+ muteVideo: async state => {
100
+ return await SDKMethodEventsManager.emit('muteVideo', state);
62
101
  },
63
102
  createCustomization: customize,
64
- on: <T extends keyof userEventsMapInterface>(
65
- userEventName: T,
66
- cb: userEventsMapInterface[T],
67
- ): Unsubscribe => {
103
+ on: (userEventName, cb) => {
68
104
  console.log('SDKEvents: Event Registered', userEventName);
69
105
  return SDKEvents.on(userEventName, cb);
70
106
  },
@@ -0,0 +1,67 @@
1
+ import React, {createContext, useState, useEffect} from 'react';
2
+ import {ToggleState} from '../../agora-rn-uikit';
3
+ import {createHook} from 'customization-implementation';
4
+
5
+ export interface NoiseSupressionContextInterface {
6
+ isNoiseSupressionEnabled: ToggleState;
7
+ setNoiseSupression: (
8
+ p: (currentState: boolean) => boolean | boolean,
9
+ ) => Promise<void>;
10
+ }
11
+
12
+ export const NoiseSupressionContext =
13
+ createContext<NoiseSupressionContextInterface>({
14
+ isNoiseSupressionEnabled: ToggleState.disabled,
15
+ setNoiseSupression: async () => {},
16
+ });
17
+
18
+ export function NoiseSupressionProvider(props) {
19
+ const [isNoiseSupressionEnabled, setIsNoiseSupressionEnabled] = useState(
20
+ ToggleState.disabled,
21
+ );
22
+
23
+ useEffect(() => {
24
+ if ($config.ENABLE_NOISE_CANCELLATION) {
25
+ }
26
+ }, []);
27
+
28
+ const enableNoiseSuppression = async () => {};
29
+
30
+ const disableNoiseSuppression = async () => {};
31
+
32
+ const setNoiseSupression: NoiseSupressionContextInterface['setNoiseSupression'] =
33
+ async p => {
34
+ if (
35
+ isNoiseSupressionEnabled === ToggleState.disabling ||
36
+ isNoiseSupressionEnabled === ToggleState.enabling
37
+ ) {
38
+ throw new Error('Cant change noise supression, already in transition');
39
+ }
40
+ let stateToBeSet =
41
+ typeof p === 'function'
42
+ ? p(isNoiseSupressionEnabled === ToggleState.enabled)
43
+ : p;
44
+
45
+ if (stateToBeSet) {
46
+ setIsNoiseSupressionEnabled(ToggleState.enabling);
47
+ await enableNoiseSuppression();
48
+ setIsNoiseSupressionEnabled(ToggleState.enabled);
49
+ } else {
50
+ setIsNoiseSupressionEnabled(ToggleState.disabling);
51
+ await disableNoiseSuppression();
52
+ setIsNoiseSupressionEnabled(ToggleState.disabled);
53
+ }
54
+ };
55
+
56
+ return (
57
+ <NoiseSupressionContext.Provider
58
+ value={{
59
+ isNoiseSupressionEnabled,
60
+ setNoiseSupression,
61
+ }}>
62
+ {props.children}
63
+ </NoiseSupressionContext.Provider>
64
+ );
65
+ }
66
+
67
+ export const useNoiseSupression = createHook(NoiseSupressionContext);
@@ -0,0 +1,107 @@
1
+ import React, {createContext, useState, useEffect, useRef} from 'react';
2
+ import {useRtc} from 'customization-api';
3
+ import {ToggleState} from '../../agora-rn-uikit';
4
+ import AgoraRTC from 'agora-rtc-sdk-ng';
5
+ import {AIDenoiserExtension} from 'agora-extension-ai-denoiser';
6
+ //@ts-ignore
7
+ import wasm1 from './../../node_modules/agora-extension-ai-denoiser/external/denoiser-wasm.wasm';
8
+ //@ts-ignore
9
+ import wasm2 from './../../node_modules/agora-extension-ai-denoiser/external/denoiser-wasm-simd.wasm';
10
+ import {createHook} from 'customization-implementation';
11
+ // Necessary To bypass treeshaking, dont remove
12
+ console.log('wasm files loaded are', wasm1, wasm2);
13
+
14
+ export interface NoiseSupressionContextInterface {
15
+ isNoiseSupressionEnabled: ToggleState;
16
+ setNoiseSupression: (
17
+ p: (currentState: boolean) => boolean | boolean,
18
+ ) => Promise<void>;
19
+ }
20
+
21
+ export const NoiseSupressionContext =
22
+ createContext<NoiseSupressionContextInterface>({
23
+ isNoiseSupressionEnabled: ToggleState.disabled,
24
+ setNoiseSupression: async () => {},
25
+ });
26
+
27
+ export function NoiseSupressionProvider(props) {
28
+ const {callActive} = props;
29
+ const [isNoiseSupressionEnabled, setIsNoiseSupressionEnabled] = useState(
30
+ ToggleState.disabled,
31
+ );
32
+
33
+ const {RtcEngineUnsafe} = useRtc();
34
+ let processor = useRef(null);
35
+
36
+ useEffect(() => {
37
+ if (callActive && $config.ENABLE_NOISE_CANCELLATION_BY_DEFAULT) {
38
+ setNoiseSupression(p => !p);
39
+ }
40
+ }, [callActive]);
41
+
42
+ useEffect(() => {
43
+ if ($config.ENABLE_NOISE_CANCELLATION) {
44
+ const denoiserExtension = new AIDenoiserExtension({assetsPath: 'wasm'});
45
+ AgoraRTC.registerExtensions([denoiserExtension]);
46
+ processor.current = denoiserExtension.createProcessor();
47
+ processor.current.disable();
48
+ }
49
+ }, []);
50
+
51
+ const enableNoiseSuppression = async () => {
52
+ if (!$config.ENABLE_NOISE_CANCELLATION) {
53
+ throw new Error('AINS disabled in config');
54
+ }
55
+ //@ts-ignore
56
+ const localAudioTrack = RtcEngineUnsafe?.localStream?.audio;
57
+
58
+ if (processor?.current) {
59
+ localAudioTrack
60
+ ?.pipe(processor.current)
61
+ .pipe(localAudioTrack?.processorDestination);
62
+ await processor?.current?.enable();
63
+ }
64
+ };
65
+
66
+ const disableNoiseSuppression = async () => {
67
+ if (processor?.current) {
68
+ await processor?.current?.disable();
69
+ }
70
+ };
71
+
72
+ const setNoiseSupression: NoiseSupressionContextInterface['setNoiseSupression'] =
73
+ async p => {
74
+ if (
75
+ isNoiseSupressionEnabled === ToggleState.disabling ||
76
+ isNoiseSupressionEnabled === ToggleState.enabling
77
+ ) {
78
+ throw new Error('Cant change noise supression, already in transition');
79
+ }
80
+ let stateToBeSet =
81
+ typeof p === 'function'
82
+ ? p(isNoiseSupressionEnabled === ToggleState.enabled)
83
+ : p;
84
+
85
+ if (stateToBeSet) {
86
+ setIsNoiseSupressionEnabled(ToggleState.enabling);
87
+ await enableNoiseSuppression();
88
+ setIsNoiseSupressionEnabled(ToggleState.enabled);
89
+ } else {
90
+ setIsNoiseSupressionEnabled(ToggleState.disabling);
91
+ await disableNoiseSuppression();
92
+ setIsNoiseSupressionEnabled(ToggleState.disabled);
93
+ }
94
+ };
95
+
96
+ return (
97
+ <NoiseSupressionContext.Provider
98
+ value={{
99
+ isNoiseSupressionEnabled,
100
+ setNoiseSupression,
101
+ }}>
102
+ {props.children}
103
+ </NoiseSupressionContext.Provider>
104
+ );
105
+ }
106
+
107
+ export const useNoiseSupression = createHook(NoiseSupressionContext);
@@ -0,0 +1,39 @@
1
+ import React, {createContext, useState} from 'react';
2
+ import {useRtc} from 'customization-api';
3
+ import {createHook} from 'customization-implementation';
4
+ import {Platform} from 'react-native';
5
+
6
+ export type VideoQualityType = typeof $config.PROFILE;
7
+
8
+ interface VideoQualityContextInterface {
9
+ videoQuality: VideoQualityType;
10
+ setVideoQuality: (videoQuality: VideoQualityType) => void;
11
+ }
12
+
13
+ export const VideoQualityContext = createContext<VideoQualityContextInterface>({
14
+ videoQuality: $config.PROFILE,
15
+ setVideoQuality: (_p: VideoQualityType) => {},
16
+ });
17
+
18
+ export const VideoQualityContextProvider = props => {
19
+ const [currentVideoQuality, setCurrentVideoQuality] =
20
+ useState<VideoQualityType>($config.PROFILE);
21
+ const {RtcEngineUnsafe} = useRtc();
22
+
23
+ const setVideoQuality = async (p: VideoQualityType) => {
24
+ if (Platform.OS === 'web' && RtcEngineUnsafe) {
25
+ // @ts-ignore
26
+ await RtcEngineUnsafe.setVideoProfile(p);
27
+ setCurrentVideoQuality(p);
28
+ }
29
+ };
30
+
31
+ return (
32
+ <VideoQualityContext.Provider
33
+ value={{videoQuality: currentVideoQuality, setVideoQuality}}>
34
+ {props.children}
35
+ </VideoQualityContext.Provider>
36
+ );
37
+ };
38
+
39
+ export const useVideoQuality = createHook(VideoQualityContext);