agora-appbuilder-core 3.0.9 → 4.0.0-api.1
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.
- package/Readme.md +6 -0
- package/package.json +2 -2
- package/template/_package-lock.json +5871 -4728
- package/template/agora-rn-uikit/src/AgoraUIKit.tsx +6 -6
- package/template/agora-rn-uikit/src/Contexts/ContentContext.tsx +10 -0
- package/template/agora-rn-uikit/src/Contexts/DispatchContext.tsx +22 -0
- package/template/agora-rn-uikit/src/Contexts/LocalUserContext.tsx +10 -6
- package/template/agora-rn-uikit/src/Contexts/PropsContext.tsx +28 -8
- package/template/agora-rn-uikit/src/Contexts/RtcContext.tsx +7 -15
- package/template/agora-rn-uikit/src/Controls/BtnTemplate.tsx +30 -26
- package/template/agora-rn-uikit/src/Controls/Icons.ts +30 -83
- package/template/agora-rn-uikit/src/Controls/ImageIcon.tsx +6 -6
- package/template/agora-rn-uikit/src/Controls/Local/LocalAudioMute.tsx +4 -2
- package/template/agora-rn-uikit/src/Controls/Local/LocalVideoMute.tsx +4 -2
- package/template/agora-rn-uikit/src/Controls/Local/Recording.tsx +0 -2
- package/template/agora-rn-uikit/src/Controls/Local/SwitchCamera.tsx +6 -6
- package/template/agora-rn-uikit/src/Controls/LocalControls.tsx +5 -5
- package/template/agora-rn-uikit/src/Controls/Remote/RemoteAudioMute.tsx +4 -4
- package/template/agora-rn-uikit/src/Controls/Remote/RemoteVideoMute.tsx +4 -4
- package/template/agora-rn-uikit/src/Controls/RemoteControls.tsx +2 -2
- package/template/agora-rn-uikit/src/Reducer/LocalMuteAudio.ts +6 -6
- package/template/agora-rn-uikit/src/Reducer/LocalMuteVideo.ts +6 -6
- package/template/agora-rn-uikit/src/Reducer/LocalPermissionState.ts +23 -0
- package/template/agora-rn-uikit/src/Reducer/RemoteAudioStateChanged.ts +6 -6
- package/template/agora-rn-uikit/src/Reducer/RemoteVideoStateChanged.ts +7 -7
- package/template/agora-rn-uikit/src/Reducer/UpdateDualStreamMode.ts +7 -7
- package/template/agora-rn-uikit/src/Reducer/UserJoined.ts +10 -10
- package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteAudio.ts +6 -6
- package/template/agora-rn-uikit/src/Reducer/UserMuteRemoteVideo.ts +6 -6
- package/template/agora-rn-uikit/src/Reducer/UserOffline.ts +5 -5
- package/template/agora-rn-uikit/src/Reducer/UserPin.ts +11 -0
- package/template/agora-rn-uikit/src/Reducer/index.ts +2 -0
- package/template/agora-rn-uikit/src/Rtc/Create.tsx +72 -5
- package/template/agora-rn-uikit/src/Rtc/Join.tsx +5 -4
- package/template/agora-rn-uikit/src/RtcConfigure.tsx +76 -49
- package/template/agora-rn-uikit/src/Views/MaxVideoView.native.tsx +17 -7
- package/template/agora-rn-uikit/src/Views/MaxVideoView.tsx +17 -11
- package/template/agora-rn-uikit/src/Views/MinVideoView.tsx +2 -2
- package/template/agora-rn-uikit/src/index.ts +17 -9
- package/template/android/app/build.gradle +1 -0
- package/template/android/app/src/main/AndroidManifest.xml +22 -15
- package/template/android/app/src/main/assets/fonts/SourceSansPro-Regular.ttf +0 -0
- package/template/android/app/src/main/assets/fonts/icomoon.ttf +0 -0
- package/template/android/app/src/main/java/com/helloworld/MainActivity.java +50 -0
- package/template/android/app/src/main/res/values/colors.xml +7 -0
- package/template/android/build.gradle +3 -3
- package/template/babel.config.js +1 -0
- package/template/bridge/rtc/webNg/RtcEngine.ts +110 -17
- package/template/customization-api/action-library.ts +10 -14
- package/template/customization-api/app-state.ts +4 -6
- package/template/customization-api/customEvents.ts +2 -2
- package/template/customization-api/customize.ts +1 -1
- package/template/customization-api/sub-components.ts +4 -12
- package/template/customization-api/typeDefinition.ts +15 -38
- package/template/customization-implementation/createHook.ts +24 -6
- package/template/customization-implementation/index.ts +1 -1
- package/template/customization-implementation/useCustomization.tsx +5 -7
- package/template/electron/index.html +27 -27
- package/template/electron/renderer/index.js +1 -0
- package/template/global.d.ts +26 -4
- package/template/index.rsdk.tsx +1 -0
- package/template/index.web.js +2 -1
- package/template/index.wsdk.tsx +9 -2
- package/template/ios/HelloWorld/Info.plist +14 -1
- package/template/ios/HelloWorld.xcodeproj/project.pbxproj +17 -0
- package/template/metro.config.js +1 -1
- package/template/package.json +18 -7
- package/template/react-native-toast-message/index.d.ts +43 -43
- package/template/react-native-toast-message/src/colors/index.js +3 -2
- package/template/react-native-toast-message/src/components/base/index.js +46 -59
- package/template/react-native-toast-message/src/components/base/styles.js +16 -32
- package/template/react-native-toast-message/src/components/checkbox.js +178 -0
- package/template/react-native-toast-message/src/components/error.js +3 -2
- package/template/react-native-toast-message/src/components/info.js +3 -2
- package/template/react-native-toast-message/src/components/success.js +3 -2
- package/template/react-native-toast-message/src/index.js +122 -31
- package/template/react-native-toast-message/src/index.sdk.tsx +125 -35
- package/template/react-native-toast-message/src/styles.js +3 -4
- package/template/react-native-toast-message/src/styles.sdk.ts +3 -4
- package/template/react-native.config.js +7 -0
- package/template/src/App.tsx +19 -14
- package/template/src/AppWrapper.tsx +74 -29
- package/template/src/SDKAppWrapper.tsx +60 -64
- package/template/src/app-state/useLocalUserInfo.ts +3 -3
- package/template/src/assets/font-styles.css +329 -0
- package/template/src/assets/fonts/SourceSansPro-Regular.ttf +0 -0
- package/template/src/assets/fonts/icomoon.ttf +0 -0
- package/template/src/assets/permission.png +0 -0
- package/template/src/assets/selection.json +1 -0
- package/template/src/atoms/ActionMenu.tsx +236 -0
- package/template/src/atoms/AnimatedActiveSpeaker.native.tsx +71 -0
- package/template/src/atoms/AnimatedActiveSpeaker.tsx +84 -0
- package/template/src/atoms/AnimatedRings.native.tsx +68 -0
- package/template/src/atoms/AnimatedRings.tsx +70 -0
- package/template/src/atoms/Card.tsx +61 -0
- package/template/src/atoms/CircularProgress.native.tsx +121 -0
- package/template/src/atoms/CircularProgress.tsx +102 -0
- package/template/src/atoms/CustomIcon.tsx +88 -0
- package/template/src/atoms/CustomSwitch.tsx +287 -0
- package/template/src/atoms/Dropdown.tsx +306 -0
- package/template/src/atoms/HorizontalRule.tsx +3 -1
- package/template/src/atoms/IconButton.tsx +162 -0
- package/template/src/atoms/ImageIcon.tsx +98 -0
- package/template/src/atoms/InfoBubble.tsx +291 -0
- package/template/src/atoms/Input.tsx +87 -0
- package/template/src/atoms/InviteInfo.tsx +166 -0
- package/template/src/atoms/LinkButton.tsx +28 -0
- package/template/src/atoms/OutlineButton.tsx +61 -0
- package/template/src/atoms/ParticipantsCount.tsx +74 -0
- package/template/src/atoms/Popup.tsx +147 -0
- package/template/src/atoms/PrimaryButton.tsx +51 -26
- package/template/src/atoms/RecordingInfo.tsx +52 -0
- package/template/src/atoms/SecondaryButton.tsx +8 -5
- package/template/src/atoms/Spacer.tsx +22 -0
- package/template/src/atoms/TertiaryButton.tsx +78 -0
- package/template/src/atoms/TextInput.tsx +12 -14
- package/template/src/atoms/Toggle.tsx +47 -0
- package/template/src/atoms/Toolbar.tsx +68 -0
- package/template/src/atoms/ToolbarItem.tsx +63 -0
- package/template/src/atoms/Tooltip.native.tsx +65 -0
- package/template/src/atoms/Tooltip.tsx +94 -0
- package/template/src/atoms/UserAvatar.tsx +60 -0
- package/template/src/components/Chat.tsx +164 -278
- package/template/src/components/ChatContext.ts +8 -1
- package/template/src/components/ColorConfigure.tsx +1 -1
- package/template/src/components/ColorContext.ts +1 -1
- package/template/src/components/CommonStyles.ts +44 -0
- package/template/src/components/Controls.tsx +331 -73
- package/template/src/components/{Controls.native.tsx → Controls1.native.tsx} +8 -6
- package/template/src/components/DeviceConfigure.tsx +511 -106
- package/template/src/components/DeviceContext.tsx +8 -4
- package/template/src/components/EventsConfigure.tsx +192 -10
- package/template/src/components/GraphQLProvider.tsx +1 -1
- package/template/src/components/GridVideo.tsx +60 -45
- package/template/src/components/HostControlView.tsx +114 -35
- package/template/src/components/Navbar.tsx +219 -437
- package/template/src/components/Navigation.tsx +15 -1
- package/template/src/components/NetworkQualityContext.tsx +22 -22
- package/template/src/components/ParticipantsView.tsx +178 -156
- package/template/src/components/PinnedVideo.tsx +206 -121
- package/template/src/components/Precall.native.tsx +358 -119
- package/template/src/components/Precall.tsx +272 -138
- package/template/src/components/RTMConfigure.tsx +66 -19
- package/template/src/components/Router.electron.ts +1 -0
- package/template/src/components/Router.native.ts +1 -0
- package/template/src/components/Router.sdk.ts +1 -0
- package/template/src/components/Router.ts +1 -0
- package/template/src/components/SdkApiContext.tsx +161 -0
- package/template/src/components/Settings.tsx +26 -95
- package/template/src/components/SettingsView.tsx +251 -56
- package/template/src/components/Share.tsx +305 -276
- package/template/src/components/StorageContext.tsx +30 -3
- package/template/src/components/ToastComponent.tsx +8 -0
- package/template/src/components/chat-messages/useChatMessages.tsx +100 -52
- package/template/src/components/chat-ui/useChatUIControls.tsx +76 -0
- package/template/src/components/common/Error.tsx +20 -6
- package/template/src/components/common/Logo.tsx +16 -15
- package/template/src/components/contexts/LiveStreamDataContext.tsx +16 -11
- package/template/src/components/contexts/VideoMeetingDataContext.tsx +41 -11
- package/template/src/components/contexts/WhiteboardContext.tsx +3 -3
- package/template/src/components/livestream/LiveStreamContext.tsx +284 -50
- package/template/src/components/livestream/Types.ts +39 -14
- package/template/src/components/livestream/index.ts +1 -0
- package/template/src/components/livestream/views/LiveStreamControls.tsx +9 -4
- package/template/src/components/participants/AllAudienceParticipants.tsx +102 -31
- package/template/src/components/participants/AllHostParticipants.tsx +106 -35
- package/template/src/components/participants/Participant.tsx +300 -0
- package/template/src/components/participants/ParticipantName.tsx +13 -7
- package/template/src/components/participants/ParticipantSectionTitle.tsx +35 -10
- package/template/src/components/participants/ScreenshareParticipants.tsx +144 -12
- package/template/src/components/participants/UserActionMenuOptions.tsx +396 -0
- package/template/src/components/popups/InvitePopup.tsx +115 -0
- package/template/src/components/popups/StopRecordingPopup.tsx +114 -0
- package/template/src/components/precall/LocalMute.tsx +84 -14
- package/template/src/components/precall/{LocalMute.native.tsx → LocalMute1.native.tsx} +21 -5
- package/template/src/components/precall/PermissionHelper.native.tsx +5 -0
- package/template/src/components/precall/PermissionHelper.tsx +126 -0
- package/template/src/components/precall/PreCallSettings.tsx +52 -0
- package/template/src/components/precall/VideoPreview.native.tsx +51 -6
- package/template/src/components/precall/VideoPreview.tsx +164 -8
- package/template/src/components/precall/joinCallBtn.native.tsx +2 -2
- package/template/src/components/precall/joinCallBtn.tsx +17 -4
- package/template/src/components/precall/meetingTitle.tsx +17 -14
- package/template/src/components/precall/selectDevice.tsx +1 -21
- package/template/src/components/precall/textInput.tsx +34 -6
- package/template/src/components/precall/usePreCall.tsx +39 -1
- package/template/src/components/{meeting-info/useMeetingInfo.tsx → room-info/useRoomInfo.tsx} +34 -10
- package/template/src/components/{meeting-info/useSetMeetingInfo.tsx → room-info/useSetRoomInfo.tsx} +12 -12
- package/template/src/components/styles.ts +42 -21
- package/template/src/components/useShareLink.tsx +19 -21
- package/template/src/components/useToast.tsx +41 -0
- package/template/src/components/useUserPreference.tsx +9 -6
- package/template/src/components/useVideoCall.tsx +84 -0
- package/template/src/language/default-labels/createScreenLabels.ts +3 -3
- package/template/src/language/default-labels/joinScreenLabels.ts +2 -2
- package/template/src/language/default-labels/precallScreenLabels.ts +3 -3
- package/template/src/language/default-labels/shareLinkScreenLabels.ts +5 -5
- package/template/src/language/default-labels/videoCallScreenLabels.ts +5 -5
- package/template/src/pages/Authenticate.tsx +5 -15
- package/template/src/pages/Create.tsx +304 -191
- package/template/src/pages/Endcall.tsx +148 -0
- package/template/src/pages/Join.tsx +96 -70
- package/template/src/pages/VideoCall.tsx +179 -69
- package/template/src/pages/video-call/ActionSheet.native.tsx +215 -0
- package/template/src/pages/video-call/ActionSheet.tsx +226 -0
- package/template/src/pages/video-call/ActionSheetContent.tsx +479 -0
- package/template/src/pages/video-call/ActionSheetHandle.tsx +38 -0
- package/template/src/pages/video-call/ActionSheetStyles.css +138 -0
- package/template/src/pages/video-call/DefaultLayouts.ts +6 -6
- package/template/src/pages/video-call/NameWithMicIcon.tsx +93 -49
- package/template/src/pages/video-call/RenderComponent.tsx +6 -30
- package/template/src/pages/video-call/SidePanelHeader.tsx +186 -0
- package/template/src/pages/video-call/VideoCallMobileView.tsx +138 -0
- package/template/src/pages/video-call/VideoCallScreen.native.tsx +37 -0
- package/template/src/pages/video-call/VideoCallScreen.tsx +109 -66
- package/template/src/pages/video-call/VideoComponent.tsx +20 -4
- package/template/src/pages/video-call/VideoRenderer.tsx +227 -61
- package/template/src/pages/video-call/index.ts +35 -7
- package/template/src/rtm/RTMEngine.ts +8 -0
- package/template/src/rtm-events/constants.ts +3 -1
- package/template/src/rtm-events-api/Events.ts +5 -4
- package/template/src/rtm-events-api/LocalEvents.ts +6 -0
- package/template/src/rtm-events-api/types.ts +5 -5
- package/template/src/subComponents/ChatBubble.tsx +125 -84
- package/template/src/subComponents/ChatContainer.tsx +280 -93
- package/template/src/subComponents/ChatInput.ios.tsx +175 -0
- package/template/src/subComponents/ChatInput.tsx +72 -115
- package/template/src/subComponents/Checkbox.native.tsx +16 -5
- package/template/src/subComponents/Checkbox.tsx +2 -2
- package/template/src/subComponents/CopyJoinInfo.tsx +36 -58
- package/template/src/subComponents/EndcallPopup.tsx +107 -0
- package/template/src/subComponents/FallbackLogo.tsx +122 -40
- package/template/src/subComponents/LanguageSelector.tsx +1 -1
- package/template/src/subComponents/LayoutIconButton.tsx +201 -0
- package/template/src/subComponents/LayoutIconDropdown.tsx +131 -134
- package/template/src/subComponents/{LayoutIconDropdown.native.tsx → LayoutIconDropdown1.native.tsx} +4 -18
- package/template/src/subComponents/LocalAudioMute.tsx +119 -27
- package/template/src/subComponents/LocalEndCall.tsx +73 -35
- package/template/src/subComponents/LocalSwitchCamera.tsx +19 -32
- package/template/src/subComponents/LocalVideoMute.tsx +117 -27
- package/template/src/subComponents/Logo.tsx +3 -4
- package/template/src/subComponents/LogoutButton.tsx +1 -1
- package/template/src/subComponents/NetworkQualityPill.tsx +66 -68
- package/template/src/subComponents/OpenInNativeButton.tsx +3 -3
- package/template/src/subComponents/Recording.tsx +28 -29
- package/template/src/subComponents/RemoteAudioMute.tsx +83 -29
- package/template/src/subComponents/RemoteEndCall.tsx +8 -5
- package/template/src/subComponents/RemoteMutePopup.tsx +193 -0
- package/template/src/subComponents/RemoteVideoMute.tsx +74 -21
- package/template/src/subComponents/RemoveMeetingPopup.tsx +109 -0
- package/template/src/subComponents/RemoveScreensharePopup.tsx +109 -0
- package/template/src/subComponents/ScreenShareNotice.tsx +83 -8
- package/template/src/subComponents/SelectDevice.tsx +404 -61
- package/template/src/subComponents/SelectDeviceSettings.backup.tsx +207 -0
- package/template/src/subComponents/SelectOAuth.tsx +9 -8
- package/template/src/subComponents/SidePanelButtons.ts +0 -3
- package/template/src/subComponents/SidePanelHeader.tsx +112 -0
- package/template/src/subComponents/ToastConfig.tsx +150 -10
- package/template/src/subComponents/chat/ChatParticipants.tsx +188 -79
- package/template/src/subComponents/livestream/CurrentLiveStreamRequestsView.tsx +97 -34
- package/template/src/subComponents/livestream/controls/LocalRaiseHand.tsx +29 -33
- package/template/src/subComponents/livestream/controls/RemoteLiveStreamApprovedRequestRecall.tsx +8 -8
- package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestApprove.tsx +24 -11
- package/template/src/subComponents/livestream/controls/RemoteLiveStreamRequestReject.tsx +17 -10
- package/template/src/subComponents/recording/useRecording.tsx +81 -29
- package/template/src/subComponents/screenshare/ScreenshareButton.tsx +52 -70
- package/template/src/subComponents/screenshare/ScreenshareConfigure.native.tsx +23 -12
- package/template/src/subComponents/screenshare/ScreenshareConfigure.tsx +44 -19
- package/template/src/theme/index.ts +46 -0
- package/template/src/utils/PlatformWrapper.tsx +21 -0
- package/template/src/utils/SdkEvents.ts +23 -14
- package/template/src/utils/SdkMethodEvents.ts +81 -0
- package/template/src/utils/common.tsx +155 -1
- package/template/src/utils/hexadecimalTransparency.ts +108 -0
- package/template/src/utils/index.tsx +19 -0
- package/template/src/utils/isMobileOrTablet.ts +7 -2
- package/template/src/utils/pendingStateUpdateHelper.ts +19 -0
- package/template/src/utils/useActiveSpeaker.ts +42 -0
- package/template/src/utils/{useCreateMeeting.ts → useCreateRoom.ts} +19 -14
- package/template/src/utils/{useButtonTemplate.tsx → useFocus.tsx} +19 -16
- package/template/src/utils/useGetMeetingPhrase.ts +10 -10
- package/template/src/utils/useIsAudioEnabled.ts +3 -3
- package/template/src/utils/useIsHandRaised.ts +13 -0
- package/template/src/utils/useIsPSTN.ts +3 -3
- package/template/src/utils/useIsVideoEnabled.ts +3 -3
- package/template/src/utils/{useJoinMeeting.ts → useJoinRoom.ts} +27 -21
- package/template/src/utils/useMutePSTN.ts +2 -2
- package/template/src/utils/useMuteToggleLocal.ts +58 -5
- package/template/src/utils/useRemoteEndCall.ts +4 -4
- package/template/src/utils/useRemoteEndScreenshare.ts +26 -0
- package/template/src/utils/useRemoteMute.ts +7 -7
- package/template/src/utils/useRemoteRequest.ts +84 -0
- package/template/src/utils/useSwitchCamera.native.tsx +25 -0
- package/template/src/utils/useSwitchCamera.tsx +19 -0
- package/template/src/utils/useToolbar.tsx +59 -0
- package/template/web/index.html +5 -0
- package/template/webpack.commons.js +13 -8
- package/template/webpack.rsdk.config.js +1 -2
- package/template/webpack.web.config.js +1 -0
- package/template/agora-rn-uikit/src/Contexts/RenderContext.tsx +0 -10
- package/template/src/assets/icons.ts +0 -102
- package/template/src/components/chat-ui/useChatUIControl.tsx +0 -69
- package/template/src/components/participants/MeParticipant.tsx +0 -38
- package/template/src/components/participants/RemoteParticipants.tsx +0 -71
- package/template/src/pages/video-call/CustomUserContextHolder.tsx +0 -20
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import React, {useEffect, useContext, useRef} from 'react';
|
|
2
2
|
import RtcEngine from 'react-native-agora';
|
|
3
|
-
import {
|
|
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:
|
|
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 {
|
|
34
|
+
const {defaultContent, activeUids} = uidState;
|
|
34
35
|
const [maxUid] = activeUids;
|
|
35
|
-
const videoState =
|
|
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
|
-
|
|
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 {
|
|
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:
|
|
40
|
-
|
|
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
|
|
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:
|
|
79
|
+
state: ContentStateInterface,
|
|
72
80
|
action: ActionType<'UpdateRenderList'>,
|
|
73
81
|
) => {
|
|
74
82
|
const newState = {
|
|
75
83
|
...state,
|
|
76
|
-
|
|
77
|
-
...state.
|
|
84
|
+
defaultContent: {
|
|
85
|
+
...state.defaultContent,
|
|
78
86
|
[action.value[0]]: {
|
|
79
|
-
...state.
|
|
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
|
|
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:
|
|
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
|
-
|
|
103
|
-
...state.
|
|
110
|
+
defaultContent: {
|
|
111
|
+
...state.defaultContent,
|
|
104
112
|
[action.value[0]]: {
|
|
105
|
-
...state.
|
|
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:
|
|
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:
|
|
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:
|
|
229
|
+
let activeUids: ContentStateInterface['activeUids'] = [
|
|
212
230
|
...state.activeUids,
|
|
213
231
|
];
|
|
214
|
-
let
|
|
215
|
-
...state.
|
|
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
|
-
|
|
234
|
-
|
|
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
|
-
|
|
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:
|
|
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:
|
|
282
|
+
let activeUids: ContentStateInterface['activeUids'] = [
|
|
265
283
|
...state.activeUids,
|
|
266
284
|
];
|
|
267
|
-
let
|
|
268
|
-
...state.
|
|
285
|
+
let defaultContent: ContentStateInterface['defaultContent'] = {
|
|
286
|
+
...state.defaultContent,
|
|
269
287
|
};
|
|
270
|
-
if (!(newMaxUid in
|
|
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
|
-
|
|
284
|
-
|
|
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
|
-
|
|
314
|
+
defaultContent: defaultContent,
|
|
297
315
|
};
|
|
298
316
|
},
|
|
299
317
|
[dualStreamMode],
|
|
300
318
|
);
|
|
301
319
|
|
|
302
|
-
const [uidState, dispatch]: [
|
|
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
|
-
<
|
|
316
|
-
|
|
317
|
-
RtcEngine: engineRef.current,
|
|
318
|
-
dispatch,
|
|
319
|
-
setDualStreamMode,
|
|
320
|
-
}}>
|
|
321
|
-
<RenderProvider
|
|
331
|
+
<DispatchProvider value={{dispatch}}>
|
|
332
|
+
<RtcProvider
|
|
322
333
|
value={{
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
lastJoinedUid: uidState.lastJoinedUid,
|
|
334
|
+
RtcEngineUnsafe: engineRef.current,
|
|
335
|
+
setDualStreamMode,
|
|
326
336
|
}}>
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
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, {
|
|
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:
|
|
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={{
|
|
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={{
|
|
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, {
|
|
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:
|
|
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
|
|
34
|
+
<div
|
|
35
|
+
style={{
|
|
36
|
+
flex: 1,
|
|
37
|
+
overflow: 'hidden',
|
|
38
|
+
display: props.user.video ? 'flex' : 'none',
|
|
39
|
+
}}>
|
|
36
40
|
<RemoteView
|
|
37
|
-
style={
|
|
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
|
|
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, {
|
|
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:
|
|
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
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
} from './Contexts/
|
|
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
|
-
|
|
32
|
-
|
|
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
|
-
|
|
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';
|
|
@@ -1,27 +1,34 @@
|
|
|
1
|
-
<manifest
|
|
1
|
+
<manifest
|
|
2
|
+
xmlns:android="http://schemas.android.com/apk/res/android"
|
|
2
3
|
package="com.helloworld">
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
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
|
-
|
|
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
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
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>
|
|
Binary file
|
|
@@ -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.
|