agora-appbuilder-core 3.0.8 → 4.0.0-api.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 (341) hide show
  1. package/Readme.md +6 -0
  2. package/package.json +2 -2
  3. package/template/_package-lock.json +32828 -2777
  4. package/template/agora-rn-uikit/src/AgoraUIKit.tsx +6 -6
  5. package/template/agora-rn-uikit/src/Contexts/ContentContext.tsx +10 -0
  6. package/template/agora-rn-uikit/src/Contexts/DispatchContext.tsx +22 -0
  7. package/template/agora-rn-uikit/src/Contexts/LocalUserContext.tsx +10 -6
  8. package/template/agora-rn-uikit/src/Contexts/PropsContext.tsx +28 -8
  9. package/template/agora-rn-uikit/src/Contexts/RtcContext.tsx +7 -15
  10. package/template/agora-rn-uikit/src/Controls/BtnTemplate.tsx +30 -26
  11. package/template/agora-rn-uikit/src/Controls/Icons.ts +30 -83
  12. package/template/agora-rn-uikit/src/Controls/ImageIcon.tsx +6 -6
  13. package/template/agora-rn-uikit/src/Controls/Local/LocalAudioMute.tsx +4 -2
  14. package/template/agora-rn-uikit/src/Controls/Local/LocalVideoMute.tsx +4 -2
  15. package/template/agora-rn-uikit/src/Controls/Local/Recording.tsx +0 -2
  16. package/template/agora-rn-uikit/src/Controls/Local/SwitchCamera.tsx +6 -6
  17. package/template/agora-rn-uikit/src/Controls/LocalControls.tsx +5 -5
  18. package/template/agora-rn-uikit/src/Controls/Remote/RemoteAudioMute.tsx +4 -4
  19. package/template/agora-rn-uikit/src/Controls/Remote/RemoteVideoMute.tsx +4 -4
  20. package/template/agora-rn-uikit/src/Controls/RemoteControls.tsx +2 -2
  21. package/template/agora-rn-uikit/src/Reducer/LocalMuteAudio.ts +6 -6
  22. package/template/agora-rn-uikit/src/Reducer/LocalMuteVideo.ts +6 -6
  23. package/template/agora-rn-uikit/src/Reducer/LocalPermissionState.ts +23 -0
  24. package/template/agora-rn-uikit/src/Reducer/RemoteAudioStateChanged.ts +6 -6
  25. package/template/agora-rn-uikit/src/Reducer/RemoteVideoStateChanged.ts +7 -7
  26. package/template/agora-rn-uikit/src/Reducer/UpdateDualStreamMode.ts +7 -7
  27. package/template/agora-rn-uikit/src/Reducer/UserJoined.ts +10 -10
  28. package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteAudio.ts +6 -6
  29. package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteVideo.ts +6 -6
  30. package/template/agora-rn-uikit/src/Reducer/UserOffline.ts +5 -5
  31. package/template/agora-rn-uikit/src/Reducer/UserPin.ts +11 -0
  32. package/template/agora-rn-uikit/src/Reducer/index.ts +2 -0
  33. package/template/agora-rn-uikit/src/Rtc/Create.tsx +74 -7
  34. package/template/agora-rn-uikit/src/Rtc/Join.tsx +5 -4
  35. package/template/agora-rn-uikit/src/RtcConfigure.tsx +76 -49
  36. package/template/agora-rn-uikit/src/Views/MaxVideoView.native.tsx +17 -7
  37. package/template/agora-rn-uikit/src/Views/MaxVideoView.tsx +17 -11
  38. package/template/agora-rn-uikit/src/Views/MinVideoView.tsx +2 -2
  39. package/template/agora-rn-uikit/src/index.ts +17 -9
  40. package/template/android/app/build.gradle +1 -0
  41. package/template/android/app/src/main/AndroidManifest.xml +22 -15
  42. package/template/android/app/src/main/assets/fonts/SourceSansPro-Regular.ttf +0 -0
  43. package/template/android/app/src/main/assets/fonts/icomoon.ttf +0 -0
  44. package/template/android/app/src/main/java/com/helloworld/MainActivity.java +50 -0
  45. package/template/android/app/src/main/res/values/colors.xml +7 -0
  46. package/template/android/build.gradle +3 -3
  47. package/template/babel.config.js +1 -0
  48. package/template/bridge/rtc/webNg/RtcEngine.ts +110 -17
  49. package/template/customization-api/action-library.ts +10 -14
  50. package/template/customization-api/app-state.ts +4 -6
  51. package/template/customization-api/customEvents.ts +2 -2
  52. package/template/customization-api/customize.ts +1 -1
  53. package/template/customization-api/sub-components.ts +4 -12
  54. package/template/customization-api/typeDefinition.ts +15 -38
  55. package/template/customization-implementation/createHook.ts +24 -6
  56. package/template/customization-implementation/index.ts +1 -1
  57. package/template/customization-implementation/useCustomization.tsx +5 -7
  58. package/template/electron/index.html +27 -27
  59. package/template/electron/renderer/index.js +1 -0
  60. package/template/global.d.ts +26 -4
  61. package/template/index.rsdk.tsx +1 -0
  62. package/template/index.web.js +2 -1
  63. package/template/index.wsdk.tsx +9 -2
  64. package/template/ios/HelloWorld/Info.plist +14 -1
  65. package/template/ios/HelloWorld.xcodeproj/project.pbxproj +17 -0
  66. package/template/metro.config.js +1 -1
  67. package/template/package.json +18 -7
  68. package/template/react-native-toast-message/index.d.ts +43 -43
  69. package/template/react-native-toast-message/src/colors/index.js +3 -2
  70. package/template/react-native-toast-message/src/components/base/index.js +46 -59
  71. package/template/react-native-toast-message/src/components/base/styles.js +16 -32
  72. package/template/react-native-toast-message/src/components/checkbox.js +178 -0
  73. package/template/react-native-toast-message/src/components/error.js +3 -2
  74. package/template/react-native-toast-message/src/components/info.js +3 -2
  75. package/template/react-native-toast-message/src/components/success.js +3 -2
  76. package/template/react-native-toast-message/src/index.js +122 -31
  77. package/template/react-native-toast-message/src/index.sdk.tsx +125 -35
  78. package/template/react-native-toast-message/src/styles.js +3 -4
  79. package/template/react-native-toast-message/src/styles.sdk.ts +3 -4
  80. package/template/react-native.config.js +7 -0
  81. package/template/src/App.tsx +19 -14
  82. package/template/src/AppWrapper.tsx +74 -29
  83. package/template/src/SDKAppWrapper.tsx +60 -64
  84. package/template/src/app-state/useLocalUserInfo.ts +3 -3
  85. package/template/src/assets/font-styles.css +329 -0
  86. package/template/src/assets/fonts/SourceSansPro-Regular.ttf +0 -0
  87. package/template/src/assets/fonts/icomoon.ttf +0 -0
  88. package/template/src/assets/permission.png +0 -0
  89. package/template/src/assets/selection.json +1 -0
  90. package/template/src/atoms/ActionMenu.tsx +236 -0
  91. package/template/src/atoms/AnimatedActiveSpeaker.native.tsx +71 -0
  92. package/template/src/atoms/AnimatedActiveSpeaker.tsx +84 -0
  93. package/template/src/atoms/AnimatedRings.native.tsx +68 -0
  94. package/template/src/atoms/AnimatedRings.tsx +70 -0
  95. package/template/src/atoms/Card.tsx +61 -0
  96. package/template/src/atoms/CircularProgress.native.tsx +121 -0
  97. package/template/src/atoms/CircularProgress.tsx +102 -0
  98. package/template/src/atoms/CustomIcon.tsx +88 -0
  99. package/template/src/atoms/CustomSwitch.tsx +287 -0
  100. package/template/src/atoms/Dropdown.tsx +306 -0
  101. package/template/src/atoms/HorizontalRule.tsx +3 -1
  102. package/template/src/atoms/IconButton.tsx +162 -0
  103. package/template/src/atoms/ImageIcon.tsx +98 -0
  104. package/template/src/atoms/InfoBubble.tsx +291 -0
  105. package/template/src/atoms/Input.tsx +87 -0
  106. package/template/src/atoms/InviteInfo.tsx +166 -0
  107. package/template/src/atoms/LinkButton.tsx +28 -0
  108. package/template/src/atoms/OutlineButton.tsx +61 -0
  109. package/template/src/atoms/ParticipantsCount.tsx +74 -0
  110. package/template/src/atoms/Popup.tsx +147 -0
  111. package/template/src/atoms/PrimaryButton.tsx +51 -26
  112. package/template/src/atoms/RecordingInfo.tsx +52 -0
  113. package/template/src/atoms/SecondaryButton.tsx +8 -5
  114. package/template/src/atoms/Spacer.tsx +22 -0
  115. package/template/src/atoms/TertiaryButton.tsx +78 -0
  116. package/template/src/atoms/TextInput.tsx +12 -14
  117. package/template/src/atoms/Toggle.tsx +47 -0
  118. package/template/src/atoms/Toolbar.tsx +68 -0
  119. package/template/src/atoms/ToolbarItem.tsx +63 -0
  120. package/template/src/atoms/Tooltip.native.tsx +65 -0
  121. package/template/src/atoms/Tooltip.tsx +94 -0
  122. package/template/src/atoms/UserAvatar.tsx +60 -0
  123. package/template/src/components/Chat.tsx +164 -278
  124. package/template/src/components/ChatContext.ts +8 -1
  125. package/template/src/components/ColorConfigure.tsx +1 -1
  126. package/template/src/components/ColorContext.ts +1 -1
  127. package/template/src/components/CommonStyles.ts +44 -0
  128. package/template/src/components/Controls.tsx +331 -73
  129. package/template/src/components/{Controls.native.tsx → Controls1.native.tsx} +8 -6
  130. package/template/src/components/DeviceConfigure.tsx +511 -102
  131. package/template/src/components/DeviceContext.tsx +8 -4
  132. package/template/src/components/EventsConfigure.tsx +192 -10
  133. package/template/src/components/GraphQLProvider.tsx +1 -1
  134. package/template/src/components/GridVideo.tsx +60 -45
  135. package/template/src/components/HostControlView.tsx +114 -35
  136. package/template/src/components/Navbar.tsx +219 -437
  137. package/template/src/components/Navigation.tsx +15 -1
  138. package/template/src/components/NetworkQualityContext.tsx +22 -22
  139. package/template/src/components/ParticipantsView.tsx +178 -156
  140. package/template/src/components/PinnedVideo.tsx +206 -121
  141. package/template/src/components/Precall.native.tsx +358 -119
  142. package/template/src/components/Precall.tsx +272 -138
  143. package/template/src/components/RTMConfigure.tsx +66 -19
  144. package/template/src/components/Router.electron.ts +1 -0
  145. package/template/src/components/Router.native.ts +1 -0
  146. package/template/src/components/Router.sdk.ts +1 -0
  147. package/template/src/components/Router.ts +1 -0
  148. package/template/src/components/SdkApiContext.tsx +161 -0
  149. package/template/src/components/Settings.tsx +26 -95
  150. package/template/src/components/SettingsView.tsx +251 -56
  151. package/template/src/components/Share.tsx +305 -276
  152. package/template/src/components/StorageContext.tsx +30 -3
  153. package/template/src/components/ToastComponent.tsx +8 -0
  154. package/template/src/components/chat-messages/useChatMessages.tsx +97 -50
  155. package/template/src/components/chat-ui/useChatUIControls.tsx +76 -0
  156. package/template/src/components/common/Error.tsx +20 -6
  157. package/template/src/components/common/Logo.tsx +16 -15
  158. package/template/src/components/contexts/LiveStreamDataContext.tsx +16 -11
  159. package/template/src/components/contexts/VideoMeetingDataContext.tsx +41 -11
  160. package/template/src/components/contexts/WhiteboardContext.tsx +3 -3
  161. package/template/src/components/livestream/LiveStreamContext.tsx +284 -50
  162. package/template/src/components/livestream/Types.ts +39 -14
  163. package/template/src/components/livestream/index.ts +1 -0
  164. package/template/src/components/livestream/views/LiveStreamControls.tsx +9 -4
  165. package/template/src/components/participants/AllAudienceParticipants.tsx +102 -31
  166. package/template/src/components/participants/AllHostParticipants.tsx +106 -35
  167. package/template/src/components/participants/Participant.tsx +300 -0
  168. package/template/src/components/participants/ParticipantName.tsx +13 -7
  169. package/template/src/components/participants/ParticipantSectionTitle.tsx +35 -10
  170. package/template/src/components/participants/ScreenshareParticipants.tsx +144 -12
  171. package/template/src/components/participants/UserActionMenuOptions.tsx +396 -0
  172. package/template/src/components/popups/InvitePopup.tsx +115 -0
  173. package/template/src/components/popups/StopRecordingPopup.tsx +114 -0
  174. package/template/src/components/precall/LocalMute.tsx +84 -14
  175. package/template/src/components/precall/{LocalMute.native.tsx → LocalMute1.native.tsx} +21 -5
  176. package/template/src/components/precall/PermissionHelper.native.tsx +5 -0
  177. package/template/src/components/precall/PermissionHelper.tsx +126 -0
  178. package/template/src/components/precall/PreCallSettings.tsx +52 -0
  179. package/template/src/components/precall/VideoPreview.native.tsx +51 -6
  180. package/template/src/components/precall/VideoPreview.tsx +164 -8
  181. package/template/src/components/precall/joinCallBtn.native.tsx +2 -2
  182. package/template/src/components/precall/joinCallBtn.tsx +17 -4
  183. package/template/src/components/precall/meetingTitle.tsx +17 -14
  184. package/template/src/components/precall/selectDevice.tsx +1 -21
  185. package/template/src/components/precall/textInput.tsx +34 -6
  186. package/template/src/components/precall/usePreCall.tsx +39 -1
  187. package/template/src/components/{meeting-info/useMeetingInfo.tsx → room-info/useRoomInfo.tsx} +34 -10
  188. package/template/src/components/{meeting-info/useSetMeetingInfo.tsx → room-info/useSetRoomInfo.tsx} +12 -12
  189. package/template/src/components/styles.ts +42 -21
  190. package/template/src/components/useShareLink.tsx +19 -21
  191. package/template/src/components/useToast.tsx +41 -0
  192. package/template/src/components/useUserPreference.tsx +9 -6
  193. package/template/src/components/useVideoCall.tsx +84 -0
  194. package/template/src/language/default-labels/createScreenLabels.ts +3 -3
  195. package/template/src/language/default-labels/joinScreenLabels.ts +2 -2
  196. package/template/src/language/default-labels/precallScreenLabels.ts +3 -3
  197. package/template/src/language/default-labels/shareLinkScreenLabels.ts +5 -5
  198. package/template/src/language/default-labels/videoCallScreenLabels.ts +5 -5
  199. package/template/src/pages/Authenticate.tsx +5 -15
  200. package/template/src/pages/Create.tsx +304 -191
  201. package/template/src/pages/Endcall.tsx +148 -0
  202. package/template/src/pages/Join.tsx +96 -70
  203. package/template/src/pages/VideoCall.tsx +179 -69
  204. package/template/src/pages/video-call/ActionSheet.native.tsx +215 -0
  205. package/template/src/pages/video-call/ActionSheet.tsx +226 -0
  206. package/template/src/pages/video-call/ActionSheetContent.tsx +479 -0
  207. package/template/src/pages/video-call/ActionSheetHandle.tsx +38 -0
  208. package/template/src/pages/video-call/ActionSheetStyles.css +138 -0
  209. package/template/src/pages/video-call/DefaultLayouts.ts +6 -6
  210. package/template/src/pages/video-call/NameWithMicIcon.tsx +93 -49
  211. package/template/src/pages/video-call/RenderComponent.tsx +6 -30
  212. package/template/src/pages/video-call/SidePanelHeader.tsx +186 -0
  213. package/template/src/pages/video-call/VideoCallMobileView.tsx +138 -0
  214. package/template/src/pages/video-call/VideoCallScreen.native.tsx +37 -0
  215. package/template/src/pages/video-call/VideoCallScreen.tsx +109 -66
  216. package/template/src/pages/video-call/VideoComponent.tsx +20 -4
  217. package/template/src/pages/video-call/VideoRenderer.tsx +227 -61
  218. package/template/src/pages/video-call/index.ts +35 -7
  219. package/template/src/rtm/RTMEngine.ts +8 -0
  220. package/template/src/rtm-events/constants.ts +3 -1
  221. package/template/src/rtm-events-api/Events.ts +5 -4
  222. package/template/src/rtm-events-api/LocalEvents.ts +6 -0
  223. package/template/src/rtm-events-api/types.ts +5 -5
  224. package/template/src/subComponents/ChatBubble.tsx +125 -84
  225. package/template/src/subComponents/ChatContainer.tsx +280 -93
  226. package/template/src/subComponents/ChatInput.ios.tsx +175 -0
  227. package/template/src/subComponents/ChatInput.tsx +72 -115
  228. package/template/src/subComponents/Checkbox.native.tsx +16 -5
  229. package/template/src/subComponents/Checkbox.tsx +2 -2
  230. package/template/src/subComponents/CopyJoinInfo.tsx +36 -58
  231. package/template/src/subComponents/EndcallPopup.tsx +107 -0
  232. package/template/src/subComponents/FallbackLogo.tsx +122 -40
  233. package/template/src/subComponents/LanguageSelector.tsx +1 -1
  234. package/template/src/subComponents/LayoutIconButton.tsx +201 -0
  235. package/template/src/subComponents/LayoutIconDropdown.tsx +131 -134
  236. package/template/src/subComponents/{LayoutIconDropdown.native.tsx → LayoutIconDropdown1.native.tsx} +4 -18
  237. package/template/src/subComponents/LocalAudioMute.tsx +119 -27
  238. package/template/src/subComponents/LocalEndCall.tsx +73 -35
  239. package/template/src/subComponents/LocalSwitchCamera.tsx +19 -32
  240. package/template/src/subComponents/LocalVideoMute.tsx +117 -27
  241. package/template/src/subComponents/Logo.tsx +3 -4
  242. package/template/src/subComponents/LogoutButton.tsx +1 -1
  243. package/template/src/subComponents/NetworkQualityPill.tsx +66 -68
  244. package/template/src/subComponents/OpenInNativeButton.tsx +3 -3
  245. package/template/src/subComponents/Recording.tsx +28 -29
  246. package/template/src/subComponents/RemoteAudioMute.tsx +83 -29
  247. package/template/src/subComponents/RemoteEndCall.tsx +8 -5
  248. package/template/src/subComponents/RemoteMutePopup.tsx +193 -0
  249. package/template/src/subComponents/RemoteVideoMute.tsx +74 -21
  250. package/template/src/subComponents/RemoveMeetingPopup.tsx +109 -0
  251. package/template/src/subComponents/RemoveScreensharePopup.tsx +109 -0
  252. package/template/src/subComponents/ScreenShareNotice.tsx +83 -8
  253. package/template/src/subComponents/SelectDevice.tsx +404 -61
  254. package/template/src/subComponents/SelectDeviceSettings.backup.tsx +207 -0
  255. package/template/src/subComponents/SelectOAuth.tsx +9 -8
  256. package/template/src/subComponents/SidePanelButtons.ts +0 -3
  257. package/template/src/subComponents/SidePanelHeader.tsx +112 -0
  258. package/template/src/subComponents/ToastConfig.tsx +150 -10
  259. package/template/src/subComponents/chat/ChatParticipants.tsx +188 -79
  260. package/template/src/subComponents/livestream/CurrentLiveStreamRequestsView.tsx +97 -34
  261. package/template/src/subComponents/livestream/controls/LocalRaiseHand.tsx +29 -33
  262. package/template/src/subComponents/livestream/controls/RemoteLiveStreamApprovedRequestRecall.tsx +8 -8
  263. package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestApprove.tsx +24 -11
  264. package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestReject.tsx +17 -10
  265. package/template/src/subComponents/recording/useRecording.tsx +81 -29
  266. package/template/src/subComponents/screenshare/ScreenshareButton.tsx +52 -70
  267. package/template/src/subComponents/screenshare/ScreenshareConfigure.native.tsx +23 -12
  268. package/template/src/subComponents/screenshare/ScreenshareConfigure.tsx +44 -19
  269. package/template/src/theme/index.ts +46 -0
  270. package/template/src/utils/PlatformWrapper.tsx +21 -0
  271. package/template/src/utils/SdkEvents.ts +23 -14
  272. package/template/src/utils/SdkMethodEvents.ts +81 -0
  273. package/template/src/utils/common.tsx +155 -1
  274. package/template/src/utils/hexadecimalTransparency.ts +108 -0
  275. package/template/src/utils/index.tsx +19 -0
  276. package/template/src/utils/isMobileOrTablet.ts +7 -2
  277. package/template/src/utils/pendingStateUpdateHelper.ts +19 -0
  278. package/template/src/utils/useActiveSpeaker.ts +42 -0
  279. package/template/src/utils/{useCreateMeeting.ts → useCreateRoom.ts} +19 -14
  280. package/template/src/utils/{useButtonTemplate.tsx → useFocus.tsx} +19 -16
  281. package/template/src/utils/useGetMeetingPhrase.ts +10 -10
  282. package/template/src/utils/useIsAudioEnabled.ts +3 -3
  283. package/template/src/utils/useIsHandRaised.ts +13 -0
  284. package/template/src/utils/useIsPSTN.ts +3 -3
  285. package/template/src/utils/useIsVideoEnabled.ts +3 -3
  286. package/template/src/utils/{useJoinMeeting.ts → useJoinRoom.ts} +27 -21
  287. package/template/src/utils/useMutePSTN.ts +2 -2
  288. package/template/src/utils/useMuteToggleLocal.ts +58 -5
  289. package/template/src/utils/useRemoteEndCall.ts +4 -4
  290. package/template/src/utils/useRemoteEndScreenshare.ts +26 -0
  291. package/template/src/utils/useRemoteMute.ts +7 -7
  292. package/template/src/utils/useRemoteRequest.ts +84 -0
  293. package/template/src/utils/useSwitchCamera.native.tsx +25 -0
  294. package/template/src/utils/useSwitchCamera.tsx +19 -0
  295. package/template/src/utils/useToolbar.tsx +59 -0
  296. package/template/web/index.html +5 -0
  297. package/template/webpack.commons.js +13 -8
  298. package/template/webpack.rsdk.config.js +1 -2
  299. package/template/webpack.web.config.js +1 -0
  300. package/template/agora-rn-uikit/.git/HEAD +0 -1
  301. package/template/agora-rn-uikit/.git/config +0 -16
  302. package/template/agora-rn-uikit/.git/description +0 -1
  303. package/template/agora-rn-uikit/.git/hooks/applypatch-msg.sample +0 -15
  304. package/template/agora-rn-uikit/.git/hooks/commit-msg.sample +0 -24
  305. package/template/agora-rn-uikit/.git/hooks/fsmonitor-watchman.sample +0 -174
  306. package/template/agora-rn-uikit/.git/hooks/post-update.sample +0 -8
  307. package/template/agora-rn-uikit/.git/hooks/pre-applypatch.sample +0 -14
  308. package/template/agora-rn-uikit/.git/hooks/pre-commit.sample +0 -49
  309. package/template/agora-rn-uikit/.git/hooks/pre-merge-commit.sample +0 -13
  310. package/template/agora-rn-uikit/.git/hooks/pre-push.sample +0 -53
  311. package/template/agora-rn-uikit/.git/hooks/pre-rebase.sample +0 -169
  312. package/template/agora-rn-uikit/.git/hooks/pre-receive.sample +0 -24
  313. package/template/agora-rn-uikit/.git/hooks/prepare-commit-msg.sample +0 -42
  314. package/template/agora-rn-uikit/.git/hooks/push-to-checkout.sample +0 -78
  315. package/template/agora-rn-uikit/.git/hooks/update.sample +0 -128
  316. package/template/agora-rn-uikit/.git/index +0 -0
  317. package/template/agora-rn-uikit/.git/info/exclude +0 -6
  318. package/template/agora-rn-uikit/.git/logs/HEAD +0 -2
  319. package/template/agora-rn-uikit/.git/logs/refs/heads/master +0 -1
  320. package/template/agora-rn-uikit/.git/logs/refs/heads/release/fpe-1.0.1 +0 -1
  321. package/template/agora-rn-uikit/.git/logs/refs/remotes/origin/HEAD +0 -1
  322. package/template/agora-rn-uikit/.git/objects/pack/pack-baa9cf4109c3e8528f39535764621cee252b2b77.idx +0 -0
  323. package/template/agora-rn-uikit/.git/objects/pack/pack-baa9cf4109c3e8528f39535764621cee252b2b77.pack +0 -0
  324. package/template/agora-rn-uikit/.git/packed-refs +0 -49
  325. package/template/agora-rn-uikit/.git/refs/heads/master +0 -1
  326. package/template/agora-rn-uikit/.git/refs/heads/release/fpe-1.0.1 +0 -1
  327. package/template/agora-rn-uikit/.git/refs/remotes/origin/HEAD +0 -1
  328. package/template/agora-rn-uikit/.gitignore +0 -63
  329. package/template/agora-rn-uikit/package-lock.json +0 -7612
  330. package/template/agora-rn-uikit/src/Contexts/RenderContext.tsx +0 -10
  331. package/template/package-lock.json +0 -22543
  332. package/template/react-native-toast-message/.gitignore +0 -5
  333. package/template/react-native-toast-message/.npmignore +0 -5
  334. package/template/react-native-toast-message/package-lock.json +0 -10553
  335. package/template/src/.DS_Store +0 -0
  336. package/template/src/assets/icons.ts +0 -102
  337. package/template/src/components/chat-ui/useChatUIControl.tsx +0 -69
  338. package/template/src/components/participants/MeParticipant.tsx +0 -38
  339. package/template/src/components/participants/RemoteParticipants.tsx +0 -71
  340. package/template/src/pages/video-call/CustomUserContextHolder.tsx +0 -20
  341. package/template/src/subComponents/.DS_Store +0 -0
@@ -1,6 +1,7 @@
1
1
  import React, {useEffect, useContext, useRef} from 'react';
2
2
  import RtcEngine from 'react-native-agora';
3
- import {RenderStateInterface, DispatchType} from '../Contexts/RtcContext';
3
+ import {ContentStateInterface} from '../Contexts/RtcContext';
4
+ import {DispatchType} from '../Contexts/DispatchContext';
4
5
  import PropsContext, {ToggleState} from '../Contexts/PropsContext';
5
6
  import {Platform} from 'react-native';
6
7
 
@@ -8,7 +9,7 @@ const Join: React.FC<{
8
9
  children: React.ReactNode;
9
10
  precall: boolean;
10
11
  engineRef: React.MutableRefObject<RtcEngine>;
11
- uidState: RenderStateInterface;
12
+ uidState: ContentStateInterface;
12
13
  dispatch: DispatchType;
13
14
  }> = ({children, precall, engineRef, uidState, dispatch}) => {
14
15
  let joinState = useRef(false);
@@ -30,9 +31,9 @@ const Join: React.FC<{
30
31
  console.error('Cannot leave the channel:', err);
31
32
  }
32
33
  }
33
- const {renderList, activeUids} = uidState;
34
+ const {defaultContent, activeUids} = uidState;
34
35
  const [maxUid] = activeUids;
35
- const videoState = renderList[maxUid].video;
36
+ const videoState = defaultContent[maxUid].video;
36
37
  async function join() {
37
38
  if (
38
39
  rtcProps.encryption &&
@@ -1,23 +1,27 @@
1
1
  import React, {useState, useReducer, useContext, useCallback} from 'react';
2
2
  import {
3
3
  RtcProvider,
4
- RenderStateInterface,
5
- DispatchType,
4
+ ContentStateInterface,
6
5
  ActionType,
7
6
  UidType,
8
7
  } from './Contexts/RtcContext';
8
+ import {DispatchType} from './Contexts/DispatchContext';
9
9
  import PropsContext, {
10
10
  ToggleState,
11
11
  RtcPropsInterface,
12
12
  CallbacksInterface,
13
13
  DualStreamMode,
14
+ PermissionState,
15
+ ChannelProfile,
16
+ ClientRole,
14
17
  } from './Contexts/PropsContext';
15
- import {RenderProvider} from './Contexts/RenderContext';
18
+ import {ContentProvider} from './Contexts/ContentContext';
16
19
  import {actionTypeGuard} from './Utils/actionTypeGuard';
17
20
 
18
21
  import {
19
22
  LocalMuteAudio,
20
23
  LocalMuteVideo,
24
+ LocalPermissionState,
21
25
  RemoteAudioStateChanged,
22
26
  RemoteVideoStateChanged,
23
27
  UpdateDualStreamMode,
@@ -25,28 +29,32 @@ import {
25
29
  UserMuteRemoteAudio,
26
30
  UserMuteRemoteVideo,
27
31
  UserOffline,
32
+ UserPin,
28
33
  } from './Reducer';
29
34
  import Create from './Rtc/Create';
30
35
  import Join from './Rtc/Join';
31
36
  import useLocalUid from './Utils/useLocalUid';
37
+ import {DispatchProvider} from './Contexts/DispatchContext';
32
38
 
33
39
  const RtcConfigure = (props: {children: React.ReactNode}) => {
34
- const {callbacks, rtcProps} = useContext(PropsContext);
40
+ const {callbacks, rtcProps, mode} = useContext(PropsContext);
35
41
  let [dualStreamMode, setDualStreamMode] = useState<DualStreamMode>(
36
42
  rtcProps?.initialDualStreamMode || DualStreamMode.DYNAMIC,
37
43
  );
38
44
  const localUid = useLocalUid();
39
- const initialLocalState: RenderStateInterface = {
40
- renderList: {
45
+ const initialLocalState: ContentStateInterface = {
46
+ defaultContent: {
41
47
  [localUid]: {
42
48
  uid: localUid,
43
49
  audio: ToggleState.disabled,
44
50
  video: ToggleState.disabled,
45
51
  streamType: 'high',
46
52
  type: 'rtc',
53
+ permissionStatus: PermissionState.NOT_REQUESTED,
47
54
  },
48
55
  },
49
56
  activeUids: [localUid],
57
+ pinnedUid: undefined,
50
58
  lastJoinedUid: 0,
51
59
  };
52
60
 
@@ -60,7 +68,7 @@ const RtcConfigure = (props: {children: React.ReactNode}) => {
60
68
 
61
69
  /**
62
70
  *
63
- * @param state RenderStateInterface
71
+ * @param state ContentStateInterface
64
72
  * @param action ActionType<'UpdateRenderList'>
65
73
  * @returns void
66
74
  *
@@ -68,15 +76,15 @@ const RtcConfigure = (props: {children: React.ReactNode}) => {
68
76
  *
69
77
  */
70
78
  const UpdateRenderList = (
71
- state: RenderStateInterface,
79
+ state: ContentStateInterface,
72
80
  action: ActionType<'UpdateRenderList'>,
73
81
  ) => {
74
82
  const newState = {
75
83
  ...state,
76
- renderList: {
77
- ...state.renderList,
84
+ defaultContent: {
85
+ ...state.defaultContent,
78
86
  [action.value[0]]: {
79
- ...state.renderList[action.value[0]],
87
+ ...state.defaultContent[action.value[0]],
80
88
  ...action.value[1],
81
89
  },
82
90
  },
@@ -86,23 +94,23 @@ const RtcConfigure = (props: {children: React.ReactNode}) => {
86
94
 
87
95
  /**
88
96
  *
89
- * @param state RenderStateInterface
97
+ * @param state ContentStateInterface
90
98
  * @param action ActionType<'AddCustomContent'>
91
99
  * @returns void
92
100
  *
93
101
  * AddCustomContent use to add new data into render position and render list
94
102
  */
95
103
  const AddCustomContent = (
96
- state: RenderStateInterface,
104
+ state: ContentStateInterface,
97
105
  action: ActionType<'AddCustomContent'>,
98
106
  ) => {
99
107
  const newState = {
100
108
  ...state,
101
109
  activeUids: [...state.activeUids, action.value[0]],
102
- renderList: {
103
- ...state.renderList,
110
+ defaultContent: {
111
+ ...state.defaultContent,
104
112
  [action.value[0]]: {
105
- ...state.renderList[action.value[0]],
113
+ ...state.defaultContent[action.value[0]],
106
114
  ...action.value[1],
107
115
  },
108
116
  },
@@ -111,7 +119,7 @@ const RtcConfigure = (props: {children: React.ReactNode}) => {
111
119
  };
112
120
 
113
121
  const reducer = (
114
- state: RenderStateInterface,
122
+ state: ContentStateInterface,
115
123
  action: ActionType<keyof CallbacksInterface>,
116
124
  ) => {
117
125
  let stateUpdate = {};
@@ -172,6 +180,11 @@ const RtcConfigure = (props: {children: React.ReactNode}) => {
172
180
  stateUpdate = LocalMuteVideo(state, action, localUid);
173
181
  }
174
182
  break;
183
+ case 'LocalPermissionState':
184
+ if (actionTypeGuard(action, action.type)) {
185
+ stateUpdate = LocalPermissionState(state, action, localUid);
186
+ }
187
+ break;
175
188
  case 'RemoteAudioStateChanged':
176
189
  if (actionTypeGuard(action, action.type)) {
177
190
  stateUpdate = RemoteAudioStateChanged(state, action);
@@ -182,6 +195,11 @@ const RtcConfigure = (props: {children: React.ReactNode}) => {
182
195
  stateUpdate = RemoteVideoStateChanged(state, action);
183
196
  }
184
197
  break;
198
+ case 'UserPin':
199
+ if (actionTypeGuard(action, action.type)) {
200
+ stateUpdate = UserPin(state, action);
201
+ }
202
+ break;
185
203
  }
186
204
 
187
205
  // TODO: remove Handle event listeners
@@ -203,16 +221,16 @@ const RtcConfigure = (props: {children: React.ReactNode}) => {
203
221
  };
204
222
 
205
223
  const swapVideo = useCallback(
206
- (state: RenderStateInterface, newMaxUid: UidType) => {
224
+ (state: ContentStateInterface, newMaxUid: UidType) => {
207
225
  if (state?.activeUids?.indexOf(newMaxUid) === -1) {
208
226
  //skip the update if new max uid is not joined yet.
209
227
  return {};
210
228
  }
211
- let activeUids: RenderStateInterface['activeUids'] = [
229
+ let activeUids: ContentStateInterface['activeUids'] = [
212
230
  ...state.activeUids,
213
231
  ];
214
- let renderList: RenderStateInterface['renderList'] = {
215
- ...state.renderList,
232
+ let defaultContent: ContentStateInterface['defaultContent'] = {
233
+ ...state.defaultContent,
216
234
  };
217
235
 
218
236
  // Element which is currently maximized
@@ -230,8 +248,8 @@ const RtcConfigure = (props: {children: React.ReactNode}) => {
230
248
  }
231
249
 
232
250
  if (dualStreamMode === DualStreamMode.DYNAMIC) {
233
- renderList[currentMaxUid].streamType = 'low';
234
- renderList[newMaxUid].streamType = 'high';
251
+ defaultContent[currentMaxUid].streamType = 'low';
252
+ defaultContent[newMaxUid].streamType = 'high';
235
253
  // No need to modify the streamType if the mode is not dynamic
236
254
  }
237
255
 
@@ -246,7 +264,7 @@ const RtcConfigure = (props: {children: React.ReactNode}) => {
246
264
 
247
265
  return {
248
266
  activeUids: activeUids,
249
- renderList: renderList,
267
+ defaultContent: defaultContent,
250
268
  };
251
269
  },
252
270
  [dualStreamMode],
@@ -256,18 +274,18 @@ const RtcConfigure = (props: {children: React.ReactNode}) => {
256
274
  * deque will
257
275
  */
258
276
  const dequeVideo = useCallback(
259
- (state: RenderStateInterface, newMaxUid: UidType) => {
277
+ (state: ContentStateInterface, newMaxUid: UidType) => {
260
278
  if (state?.activeUids?.indexOf(newMaxUid) === -1) {
261
279
  //skip the update if new max uid is not joined yet.
262
280
  return {};
263
281
  }
264
- let activeUids: RenderStateInterface['activeUids'] = [
282
+ let activeUids: ContentStateInterface['activeUids'] = [
265
283
  ...state.activeUids,
266
284
  ];
267
- let renderList: RenderStateInterface['renderList'] = {
268
- ...state.renderList,
285
+ let defaultContent: ContentStateInterface['defaultContent'] = {
286
+ ...state.defaultContent,
269
287
  };
270
- if (!(newMaxUid in renderList)) {
288
+ if (!(newMaxUid in defaultContent)) {
271
289
  //skip the update if new max uid is not joined yet.
272
290
  return {};
273
291
  }
@@ -280,8 +298,8 @@ const RtcConfigure = (props: {children: React.ReactNode}) => {
280
298
  }
281
299
 
282
300
  if (dualStreamMode === DualStreamMode.DYNAMIC) {
283
- renderList[currentMaxUid].streamType = 'low';
284
- renderList[newMaxUid].streamType = 'high';
301
+ defaultContent[currentMaxUid].streamType = 'low';
302
+ defaultContent[newMaxUid].streamType = 'high';
285
303
  // No need to modify the streamType if the mode is not dynamic
286
304
  }
287
305
 
@@ -293,16 +311,14 @@ const RtcConfigure = (props: {children: React.ReactNode}) => {
293
311
 
294
312
  return {
295
313
  activeUids: activeUids,
296
- renderList: renderList,
314
+ defaultContent: defaultContent,
297
315
  };
298
316
  },
299
317
  [dualStreamMode],
300
318
  );
301
319
 
302
- const [uidState, dispatch]: [RenderStateInterface, DispatchType] = useReducer(
303
- reducer,
304
- initialState,
305
- );
320
+ const [uidState, dispatch]: [ContentStateInterface, DispatchType] =
321
+ useReducer(reducer, initialState);
306
322
 
307
323
  return (
308
324
  <Create dispatch={dispatch}>
@@ -312,21 +328,32 @@ const RtcConfigure = (props: {children: React.ReactNode}) => {
312
328
  engineRef={engineRef}
313
329
  uidState={uidState}
314
330
  dispatch={dispatch}>
315
- <RtcProvider
316
- value={{
317
- RtcEngine: engineRef.current,
318
- dispatch,
319
- setDualStreamMode,
320
- }}>
321
- <RenderProvider
331
+ <DispatchProvider value={{dispatch}}>
332
+ <RtcProvider
322
333
  value={{
323
- renderList: uidState.renderList,
324
- activeUids: uidState.activeUids,
325
- lastJoinedUid: uidState.lastJoinedUid,
334
+ RtcEngineUnsafe: engineRef.current,
335
+ setDualStreamMode,
326
336
  }}>
327
- {props.children}
328
- </RenderProvider>
329
- </RtcProvider>
337
+ <ContentProvider
338
+ value={{
339
+ defaultContent: uidState.defaultContent,
340
+ activeUids:
341
+ //In livestreaming mode ->audience should not see their local video tile
342
+ mode == ChannelProfile.LiveBroadcasting &&
343
+ rtcProps?.role == ClientRole.Audience
344
+ ? uidState.activeUids.filter((i) => i !== localUid)
345
+ : uidState.activeUids,
346
+ pinnedUid:
347
+ uidState?.pinnedUid &&
348
+ uidState?.activeUids?.indexOf(uidState.pinnedUid) !== -1
349
+ ? uidState.pinnedUid
350
+ : undefined,
351
+ lastJoinedUid: uidState.lastJoinedUid,
352
+ }}>
353
+ {props.children}
354
+ </ContentProvider>
355
+ </RtcProvider>
356
+ </DispatchProvider>
330
357
  </Join>
331
358
  )}
332
359
  </Create>
@@ -1,45 +1,55 @@
1
1
  import React, {useContext} from 'react';
2
2
  import {RtcLocalView, RtcRemoteView, VideoRenderMode} from 'react-native-agora';
3
3
  import styles from '../Style';
4
- import PropsContext, {RenderInterface} from '../Contexts/PropsContext';
5
- import {View} from 'react-native';
4
+ import PropsContext, {ContentInterface} from '../Contexts/PropsContext';
5
+ import {View, ViewStyle} from 'react-native';
6
6
  import useLocalUid from '../Utils/useLocalUid';
7
7
 
8
8
  const LocalView = RtcLocalView.SurfaceView;
9
9
  const RemoteView = RtcRemoteView.SurfaceView;
10
10
 
11
11
  interface MaxViewInterface {
12
- user: RenderInterface;
12
+ user: ContentInterface;
13
13
  fallback?: React.ComponentType;
14
+ containerStyle?: ViewStyle;
14
15
  }
15
16
 
16
17
  const MaxVideoView: React.FC<MaxViewInterface> = (props) => {
17
18
  const {styleProps, rtcProps} = useContext(PropsContext);
18
19
  const {maxViewStyles} = styleProps || {};
20
+ const {containerStyle = {}} = props;
19
21
  const Fallback = props.fallback;
20
22
  const localUid = useLocalUid();
21
23
  const uid = props.user.uid === rtcProps?.screenShareUid ? 1 : props.user.uid;
22
24
  return uid === localUid ? (
23
25
  props.user.video ? (
24
26
  <LocalView
25
- style={{...styles.fullView, ...(maxViewStyles as object)}}
27
+ style={{
28
+ ...styles.fullView,
29
+ ...(maxViewStyles as object),
30
+ ...containerStyle,
31
+ }}
26
32
  renderMode={VideoRenderMode.Fit}
27
33
  />
28
34
  ) : Fallback ? (
29
35
  <Fallback />
30
36
  ) : (
31
- <View style={{flex: 1, backgroundColor: '#000'}} />
37
+ <View style={[{flex: 1, backgroundColor: '#000'}, containerStyle]} />
32
38
  )
33
39
  ) : props.user.video ? (
34
40
  <RemoteView
35
- style={{...styles.fullView, ...(maxViewStyles as object)}}
41
+ style={{
42
+ ...styles.fullView,
43
+ ...(maxViewStyles as object),
44
+ ...containerStyle,
45
+ }}
36
46
  uid={uid as number}
37
47
  renderMode={VideoRenderMode.Fit}
38
48
  />
39
49
  ) : Fallback ? (
40
50
  <Fallback />
41
51
  ) : (
42
- <View style={{flex: 1, backgroundColor: '#000'}} />
52
+ <View style={[{flex: 1, backgroundColor: '#000'}, containerStyle]} />
43
53
  );
44
54
  };
45
55
 
@@ -1,40 +1,44 @@
1
1
  import React, {useContext} from 'react';
2
2
  import {RtcLocalView, RtcRemoteView, VideoRenderMode} from 'react-native-agora';
3
3
  import styles from '../Style';
4
- import PropsContext, {RenderInterface} from '../Contexts/PropsContext';
5
- import {View} from 'react-native';
4
+ import PropsContext, {ContentInterface} from '../Contexts/PropsContext';
5
+ import {View, ViewStyle} from 'react-native';
6
6
  import useLocalUid from '../Utils/useLocalUid';
7
7
 
8
8
  const LocalView = RtcLocalView.SurfaceView;
9
9
  const RemoteView = RtcRemoteView.SurfaceView;
10
10
 
11
11
  interface MaxViewInterface {
12
- user: RenderInterface;
12
+ user: ContentInterface;
13
13
  fallback?: React.ComponentType;
14
+ containerStyle?: ViewStyle;
14
15
  }
15
16
 
16
17
  const MaxVideoView: React.FC<MaxViewInterface> = (props) => {
17
18
  const {styleProps, rtcProps} = useContext(PropsContext);
18
19
  const {maxViewStyles} = styleProps || {};
19
20
  const Fallback = props.fallback;
21
+ const {containerStyle = {}} = props;
20
22
  const localUid = useLocalUid();
21
23
  const uid = props.user.uid === rtcProps?.screenShareUid ? 1 : props.user.uid;
22
24
  return uid === localUid ? (
23
25
  props.user.video ? (
24
- <LocalView
25
- style={{...styles.fullView, ...(maxViewStyles as object)}}
26
- renderMode={VideoRenderMode.Fit}
27
- />
26
+ <LocalView style={containerStyle} renderMode={VideoRenderMode.Fit} />
28
27
  ) : Fallback ? (
29
28
  <Fallback />
30
29
  ) : (
31
- <View style={{flex: 1, backgroundColor: '#000'}} />
30
+ <View style={[{flex: 1, backgroundColor: '#000'}, containerStyle]} />
32
31
  )
33
32
  ) : (
34
33
  <>
35
- <div style={{flex: 1, display: props.user.video ? 'flex' : 'none'}}>
34
+ <div
35
+ style={{
36
+ flex: 1,
37
+ overflow: 'hidden',
38
+ display: props.user.video ? 'flex' : 'none',
39
+ }}>
36
40
  <RemoteView
37
- style={{...styles.fullView, ...(maxViewStyles as object)}}
41
+ style={containerStyle}
38
42
  uid={uid as number}
39
43
  renderMode={VideoRenderMode.Fit}
40
44
  />
@@ -46,7 +50,9 @@ const MaxVideoView: React.FC<MaxViewInterface> = (props) => {
46
50
  {Fallback ? (
47
51
  <Fallback />
48
52
  ) : (
49
- <View style={{flex: 1, backgroundColor: '#000'}} />
53
+ <View
54
+ style={[{flex: 1, backgroundColor: '#000'}, containerStyle]}
55
+ />
50
56
  )}
51
57
  </>
52
58
  )}
@@ -4,14 +4,14 @@ import {RtcLocalView, RtcRemoteView, VideoRenderMode} from 'react-native-agora';
4
4
  import styles from '../Style';
5
5
  import icons from '../Controls/Icons';
6
6
  import RemoteControls from '../Controls/RemoteControls';
7
- import PropsContext, {RenderInterface} from '../Contexts/PropsContext';
7
+ import PropsContext, {ContentInterface} from '../Contexts/PropsContext';
8
8
  import useLocalUid from '../Utils/useLocalUid';
9
9
 
10
10
  const LocalView = RtcLocalView.SurfaceView;
11
11
  const RemoteView = RtcRemoteView.SurfaceView;
12
12
 
13
13
  interface MinViewInterface {
14
- user: RenderInterface;
14
+ user: ContentInterface;
15
15
  color?: string;
16
16
  showOverlay?: boolean;
17
17
  }
@@ -12,10 +12,16 @@ export {
12
12
  } from './Contexts/LocalUserContext';
13
13
 
14
14
  export {
15
- default as RenderContext,
16
- RenderConsumer,
17
- RenderProvider,
18
- } from './Contexts/RenderContext';
15
+ default as ContentContext,
16
+ ContentConsumer,
17
+ ContentProvider,
18
+ } from './Contexts/ContentContext';
19
+
20
+ export {
21
+ default as DispatchContext,
22
+ DispatchConsumer,
23
+ DispatchProvider,
24
+ } from './Contexts/DispatchContext';
19
25
 
20
26
  export {
21
27
  default as PropsContext,
@@ -25,11 +31,11 @@ export {
25
31
 
26
32
  export {DualStreamMode} from './Contexts/PropsContext';
27
33
 
28
- export {ToggleState} from './Contexts/PropsContext';
34
+ export {ToggleState, PermissionState} from './Contexts/PropsContext';
29
35
 
30
36
  export type {
31
- DefaultRenderInterface,
32
- RenderInterface,
37
+ DefaultContentInterface,
38
+ ContentInterface,
33
39
  RtcPropsInterface,
34
40
  CallbacksInterface,
35
41
  CustomCallbacksInterface,
@@ -46,11 +52,11 @@ export {
46
52
  export type {
47
53
  UidType,
48
54
  RtcContextInterface,
49
- DispatchType,
50
- RenderStateInterface,
55
+ ContentStateInterface,
51
56
  ActionInterface,
52
57
  ActionType,
53
58
  } from './Contexts/RtcContext';
59
+ export type {DispatchType} from './Contexts/DispatchContext';
54
60
 
55
61
  export {default as BtnTemplate} from './Controls/BtnTemplate';
56
62
  export type {BtnTemplateInterface} from './Controls/BtnTemplate';
@@ -67,4 +73,6 @@ export {default as RemoteVideoMute} from './Controls/Remote/RemoteVideoMute';
67
73
  export {default as RemoteControls} from './Controls/RemoteControls';
68
74
 
69
75
  export {default as ImageIcon} from './Controls/ImageIcon';
76
+ export {default as Icons} from './Controls/Icons';
77
+ export type {IconsInterface} from './Controls/Icons';
70
78
  export {default as useLocalUid} from './Utils/useLocalUid';
@@ -178,6 +178,7 @@ android {
178
178
 
179
179
  }
180
180
  }
181
+
181
182
  }
182
183
 
183
184
  dependencies {
@@ -1,27 +1,34 @@
1
- <manifest xmlns:android="http://schemas.android.com/apk/res/android"
1
+ <manifest
2
+ xmlns:android="http://schemas.android.com/apk/res/android"
2
3
  package="com.helloworld">
3
-
4
- <uses-permission android:name="android.permission.INTERNET" />
5
-
6
- <application
4
+ <uses-permission android:name="android.permission.INTERNET" />
5
+ <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
6
+ <uses-permission android:name="android.permission.WAKE_LOCK" />
7
+ <application
7
8
  android:name=".MainApplication"
8
9
  android:label="@string/app_name"
9
10
  android:icon="@mipmap/ic_launcher"
10
11
  android:roundIcon="@mipmap/ic_launcher_round"
11
12
  android:allowBackup="false"
12
13
  android:theme="@style/AppTheme">
13
- <activity
14
+ <activity
14
15
  android:name=".MainActivity"
15
16
  android:label="@string/app_name"
16
17
  android:configChanges="keyboard|keyboardHidden|orientation|screenSize|uiMode"
17
18
  android:launchMode="singleTask"
18
- android:windowSoftInputMode="adjustResize">
19
- <intent-filter>
20
- <action android:name="android.intent.action.MAIN" />
21
- <category android:name="android.intent.category.LAUNCHER" />
22
- </intent-filter>
23
- </activity>
24
- <activity android:name="com.facebook.react.devsupport.DevSettingsActivity" />
25
- </application>
26
-
19
+ android:windowSoftInputMode="adjustResize"
20
+ android:screenOrientation="portrait"
21
+ android:exported="true">
22
+ <intent-filter>
23
+ <action android:name="android.intent.action.MAIN" />
24
+ <category android:name="android.intent.category.LAUNCHER" />
25
+ </intent-filter>
26
+ </activity>
27
+ <activity android:name="com.facebook.react.devsupport.DevSettingsActivity" />
28
+ <meta-data android:name="com.supersami.foregroundservice.notification_channel_name" android:value="AppBuilder"/>
29
+ <meta-data android:name="com.supersami.foregroundservice.notification_channel_description" android:value="AppBuilder is running"/>
30
+ <meta-data android:name="com.supersami.foregroundservice.notification_color" android:resource="@color/blue"/>
31
+ <service android:name="com.supersami.foregroundservice.ForegroundService" />
32
+ <service android:name="com.supersami.foregroundservice.ForegroundServiceTask" />
33
+ </application>
27
34
  </manifest>
@@ -2,8 +2,58 @@ package com.helloworld;
2
2
 
3
3
  import com.facebook.react.ReactActivity;
4
4
 
5
+ // for bg audio
6
+ import android.content.Intent;
7
+ import android.util.Log;
8
+ import com.facebook.react.bridge.WritableMap;
9
+ import com.facebook.react.bridge.Arguments;
10
+ import com.facebook.react.modules.core.DeviceEventManagerModule;
11
+
5
12
  public class MainActivity extends ReactActivity {
6
13
 
14
+ // Added for bg audio till end of main activity
15
+ public boolean isOnNewIntent = false;
16
+
17
+ @Override
18
+ public void onNewIntent(Intent intent) {
19
+ super.onNewIntent(intent);
20
+ isOnNewIntent = true;
21
+ ForegroundEmitter();
22
+ }
23
+
24
+ @Override
25
+ protected void onStart() {
26
+ super.onStart();
27
+ if(isOnNewIntent == true){}else {
28
+ ForegroundEmitter();
29
+ }
30
+ }
31
+
32
+ public void ForegroundEmitter(){
33
+ // this method is to send back data from java to javascript so one can easily
34
+ // know which button from notification or the notification button is clicked
35
+ String main = getIntent().getStringExtra("mainOnPress");
36
+ String btn = getIntent().getStringExtra("buttonOnPress");
37
+ String btn2 = getIntent().getStringExtra("button2OnPress");
38
+ WritableMap map = Arguments.createMap();
39
+ if (main != null) {
40
+ map.putString("main", main);
41
+ }
42
+ if (btn != null) {
43
+ map.putString("button", btn);
44
+ }
45
+ if (btn2 != null) {
46
+ map.putString("button", btn);
47
+ }
48
+ try {
49
+ getReactInstanceManager().getCurrentReactContext()
50
+ .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class)
51
+ .emit("notificationClickHandle", map);
52
+ } catch (Exception e) {
53
+ Log.e("SuperLog", "Caught Exception: " + e.getMessage());
54
+ }
55
+ }
56
+
7
57
  /**
8
58
  * Returns the name of the main component registered from JavaScript. This is used to schedule
9
59
  * rendering of the component.
@@ -0,0 +1,7 @@
1
+ <resources>
2
+ <item name="blue" type="color">#099DFD
3
+ </item>
4
+ <integer-array name="androidcolors">
5
+ <item>@color/blue</item>
6
+ </integer-array>
7
+ </resources>