@stream-io/video-react-native-sdk 1.10.17 → 1.10.18
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/CHANGELOG.md +718 -687
- package/dist/commonjs/components/Call/CallContent/RTCViewPipIOS.js +1 -0
- package/dist/commonjs/components/Call/CallContent/RTCViewPipIOS.js.map +1 -1
- package/dist/commonjs/components/Call/CallContent/RTCViewPipNative.js +5 -5
- package/dist/commonjs/components/Call/CallContent/RTCViewPipNative.js.map +1 -1
- package/dist/commonjs/components/Call/Lobby/Lobby.js.map +1 -1
- package/dist/commonjs/components/Participant/FloatingParticipantView/FloatingView/AnimatedFloatingView.js +1 -1
- package/dist/commonjs/components/Participant/FloatingParticipantView/FloatingView/AnimatedFloatingView.js.map +1 -1
- package/dist/commonjs/components/Participant/FloatingParticipantView/FloatingView/ReanimatedFloatingView.js +5 -3
- package/dist/commonjs/components/Participant/FloatingParticipantView/FloatingView/ReanimatedFloatingView.js.map +1 -1
- package/dist/commonjs/contexts/BackgroundFilters.js +1 -1
- package/dist/commonjs/contexts/BackgroundFilters.js.map +1 -1
- package/dist/commonjs/hooks/internal/useCallMediaStreamCleanup.js +0 -1
- package/dist/commonjs/hooks/internal/useCallMediaStreamCleanup.js.map +1 -1
- package/dist/commonjs/hooks/push/useIosCallkeepWithCallingStateEffect.js +4 -4
- package/dist/commonjs/hooks/push/useIosVoipPushEventsSetupEffect.js +11 -5
- package/dist/commonjs/hooks/push/useIosVoipPushEventsSetupEffect.js.map +1 -1
- package/dist/commonjs/hooks/useScreenShareButton.js +1 -3
- package/dist/commonjs/hooks/useScreenShareButton.js.map +1 -1
- package/dist/commonjs/hooks/useTrackDimensions.js +1 -1
- package/dist/commonjs/hooks/useTrackDimensions.js.map +1 -1
- package/dist/commonjs/providers/StreamCall/DeviceStats.js +2 -2
- package/dist/commonjs/providers/StreamCall/DeviceStats.js.map +1 -1
- package/dist/commonjs/utils/internal/optionallibs/gestureHandler.js +1 -1
- package/dist/commonjs/utils/internal/optionallibs/gestureHandler.js.map +1 -1
- package/dist/commonjs/utils/internal/optionallibs/reanimated.js +1 -1
- package/dist/commonjs/utils/internal/optionallibs/reanimated.js.map +1 -1
- package/dist/commonjs/utils/internal/pushLogoutCallback.js +1 -1
- package/dist/commonjs/utils/internal/pushLogoutCallback.js.map +1 -1
- package/dist/commonjs/utils/push/internal/ios.js +104 -0
- package/dist/commonjs/utils/push/internal/ios.js.map +1 -0
- package/dist/commonjs/utils/push/ios.js +15 -107
- package/dist/commonjs/utils/push/ios.js.map +1 -1
- package/dist/commonjs/utils/push/libs/callkeep.js +1 -1
- package/dist/commonjs/utils/push/libs/callkeep.js.map +1 -1
- package/dist/commonjs/utils/push/libs/expoNotifications.js +1 -1
- package/dist/commonjs/utils/push/libs/expoNotifications.js.map +1 -1
- package/dist/commonjs/utils/push/libs/firebaseMessaging/lib.js +1 -1
- package/dist/commonjs/utils/push/libs/firebaseMessaging/lib.js.map +1 -1
- package/dist/commonjs/utils/push/libs/iosPushNotification.js +1 -1
- package/dist/commonjs/utils/push/libs/iosPushNotification.js.map +1 -1
- package/dist/commonjs/utils/push/libs/notifee/lib.js +1 -1
- package/dist/commonjs/utils/push/libs/notifee/lib.js.map +1 -1
- package/dist/commonjs/utils/push/libs/voipPushNotification.js +1 -1
- package/dist/commonjs/utils/push/libs/voipPushNotification.js.map +1 -1
- package/dist/commonjs/utils/push/setupIosCallKeepEvents.js +2 -2
- package/dist/commonjs/utils/push/setupIosCallKeepEvents.js.map +1 -1
- package/dist/commonjs/utils/push/setupIosVoipPushEvents.js +2 -2
- package/dist/commonjs/utils/push/setupIosVoipPushEvents.js.map +1 -1
- package/dist/commonjs/version.js +1 -1
- package/dist/module/components/Call/CallContent/CallContent.js +2 -2
- package/dist/module/components/Call/CallContent/CallContent.js.map +1 -1
- package/dist/module/components/Call/CallContent/RTCViewPipIOS.js +2 -1
- package/dist/module/components/Call/CallContent/RTCViewPipIOS.js.map +1 -1
- package/dist/module/components/Call/CallContent/RTCViewPipNative.js +6 -6
- package/dist/module/components/Call/CallContent/RTCViewPipNative.js.map +1 -1
- package/dist/module/components/Call/CallControls/internal/ReactionsPicker.js +1 -1
- package/dist/module/components/Call/CallControls/internal/ReactionsPicker.js.map +1 -1
- package/dist/module/components/Call/Lobby/Lobby.js.map +1 -1
- package/dist/module/components/Call/Lobby/LobbyFooter.js +1 -1
- package/dist/module/components/Call/Lobby/LobbyFooter.js.map +1 -1
- package/dist/module/components/Participant/FloatingParticipantView/FloatingView/AnimatedFloatingView.js +4 -4
- package/dist/module/components/Participant/FloatingParticipantView/FloatingView/AnimatedFloatingView.js.map +1 -1
- package/dist/module/components/Participant/FloatingParticipantView/FloatingView/ReanimatedFloatingView.js +7 -5
- package/dist/module/components/Participant/FloatingParticipantView/FloatingView/ReanimatedFloatingView.js.map +1 -1
- package/dist/module/components/Participant/ParticipantView/ParticipantReaction.js +1 -1
- package/dist/module/components/Participant/ParticipantView/ParticipantReaction.js.map +1 -1
- package/dist/module/components/Participant/ParticipantView/SpeechIndicator.js +1 -1
- package/dist/module/components/Participant/ParticipantView/SpeechIndicator.js.map +1 -1
- package/dist/module/contexts/BackgroundFilters.js +1 -1
- package/dist/module/contexts/BackgroundFilters.js.map +1 -1
- package/dist/module/hooks/internal/useCallMediaStreamCleanup.js +0 -1
- package/dist/module/hooks/internal/useCallMediaStreamCleanup.js.map +1 -1
- package/dist/module/hooks/push/useIosCallkeepWithCallingStateEffect.js +4 -4
- package/dist/module/hooks/push/useIosVoipPushEventsSetupEffect.js +12 -6
- package/dist/module/hooks/push/useIosVoipPushEventsSetupEffect.js.map +1 -1
- package/dist/module/hooks/push/useProcessPushCallEffect.js +1 -1
- package/dist/module/hooks/push/useProcessPushCallEffect.js.map +1 -1
- package/dist/module/hooks/useAndroidKeepCallAliveEffect.js +2 -2
- package/dist/module/hooks/useAndroidKeepCallAliveEffect.js.map +1 -1
- package/dist/module/hooks/usePermissionRequest.js +1 -1
- package/dist/module/hooks/usePermissionRequest.js.map +1 -1
- package/dist/module/hooks/useScreenShareButton.js +3 -5
- package/dist/module/hooks/useScreenShareButton.js.map +1 -1
- package/dist/module/hooks/useTrackDimensions.js +2 -2
- package/dist/module/hooks/useTrackDimensions.js.map +1 -1
- package/dist/module/providers/StreamCall/DeviceStats.js +4 -4
- package/dist/module/providers/StreamCall/DeviceStats.js.map +1 -1
- package/dist/module/utils/internal/optionallibs/gestureHandler.js +1 -1
- package/dist/module/utils/internal/optionallibs/gestureHandler.js.map +1 -1
- package/dist/module/utils/internal/optionallibs/reanimated.js +1 -1
- package/dist/module/utils/internal/optionallibs/reanimated.js.map +1 -1
- package/dist/module/utils/internal/pushLogoutCallback.js +1 -1
- package/dist/module/utils/internal/pushLogoutCallback.js.map +1 -1
- package/dist/module/utils/push/android.js +3 -3
- package/dist/module/utils/push/android.js.map +1 -1
- package/dist/module/utils/push/internal/ios.js +97 -0
- package/dist/module/utils/push/internal/ios.js.map +1 -0
- package/dist/module/utils/push/internal/utils.js +1 -1
- package/dist/module/utils/push/internal/utils.js.map +1 -1
- package/dist/module/utils/push/ios.js +18 -109
- package/dist/module/utils/push/ios.js.map +1 -1
- package/dist/module/utils/push/libs/callkeep.js +1 -1
- package/dist/module/utils/push/libs/callkeep.js.map +1 -1
- package/dist/module/utils/push/libs/expoNotifications.js +1 -1
- package/dist/module/utils/push/libs/expoNotifications.js.map +1 -1
- package/dist/module/utils/push/libs/firebaseMessaging/index.js.map +1 -1
- package/dist/module/utils/push/libs/firebaseMessaging/lib.js +1 -1
- package/dist/module/utils/push/libs/firebaseMessaging/lib.js.map +1 -1
- package/dist/module/utils/push/libs/iosPushNotification.js +1 -1
- package/dist/module/utils/push/libs/iosPushNotification.js.map +1 -1
- package/dist/module/utils/push/libs/notifee/index.js.map +1 -1
- package/dist/module/utils/push/libs/notifee/lib.js +1 -1
- package/dist/module/utils/push/libs/notifee/lib.js.map +1 -1
- package/dist/module/utils/push/libs/voipPushNotification.js +1 -1
- package/dist/module/utils/push/libs/voipPushNotification.js.map +1 -1
- package/dist/module/utils/push/setupIosCallKeepEvents.js +3 -4
- package/dist/module/utils/push/setupIosCallKeepEvents.js.map +1 -1
- package/dist/module/utils/push/setupIosVoipPushEvents.js +2 -2
- package/dist/module/utils/push/setupIosVoipPushEvents.js.map +1 -1
- package/dist/module/version.js +1 -1
- package/dist/typescript/components/Call/CallContent/CallContent.d.ts.map +1 -1
- package/dist/typescript/components/Call/CallContent/RTCViewPipIOS.d.ts.map +1 -1
- package/dist/typescript/components/Call/CallContent/RTCViewPipNative.d.ts.map +1 -1
- package/dist/typescript/components/Call/CallControls/AcceptCallButton.d.ts.map +1 -1
- package/dist/typescript/components/Call/CallControls/CallControls.d.ts.map +1 -1
- package/dist/typescript/components/Call/CallControls/CallControlsButton.d.ts.map +1 -1
- package/dist/typescript/components/Call/CallControls/HangupCallButton.d.ts.map +1 -1
- package/dist/typescript/components/Call/CallControls/IncomingCallControls.d.ts.map +1 -1
- package/dist/typescript/components/Call/CallControls/OutgoingCallControls.d.ts.map +1 -1
- package/dist/typescript/components/Call/CallControls/ReactionsButton.d.ts.map +1 -1
- package/dist/typescript/components/Call/CallControls/RejectCallButton.d.ts.map +1 -1
- package/dist/typescript/components/Call/CallControls/ScreenShareToggleButton.d.ts.map +1 -1
- package/dist/typescript/components/Call/CallControls/ToggleAudioPreviewButton.d.ts.map +1 -1
- package/dist/typescript/components/Call/CallControls/ToggleAudioPublishingButton.d.ts.map +1 -1
- package/dist/typescript/components/Call/CallControls/ToggleCameraFaceButton.d.ts.map +1 -1
- package/dist/typescript/components/Call/CallControls/ToggleVideoPreviewButton.d.ts.map +1 -1
- package/dist/typescript/components/Call/CallControls/ToggleVideoPublishingButton.d.ts.map +1 -1
- package/dist/typescript/components/Call/CallControls/internal/ReactionsPicker.d.ts.map +1 -1
- package/dist/typescript/components/Call/CallLayout/CallParticipantsGrid.d.ts.map +1 -1
- package/dist/typescript/components/Call/CallLayout/CallParticipantsSpotlight.d.ts.map +1 -1
- package/dist/typescript/components/Call/CallParticipantsList/CallParticipantsList.d.ts.map +1 -1
- package/dist/typescript/components/Call/Lobby/JoinCallButton.d.ts.map +1 -1
- package/dist/typescript/components/Call/Lobby/Lobby.d.ts.map +1 -1
- package/dist/typescript/components/Call/Lobby/LobbyFooter.d.ts.map +1 -1
- package/dist/typescript/components/Call/RingingCallContent/CallLeftIndicator.d.ts.map +1 -1
- package/dist/typescript/components/Call/RingingCallContent/CallPreparingIndicator.d.ts.map +1 -1
- package/dist/typescript/components/Call/RingingCallContent/IncomingCall.d.ts.map +1 -1
- package/dist/typescript/components/Call/RingingCallContent/OutgoingCall.d.ts.map +1 -1
- package/dist/typescript/components/Call/RingingCallContent/RingingCallContent.d.ts.map +1 -1
- package/dist/typescript/components/Call/RingingCallContent/TextBasedIndicator.d.ts.map +1 -1
- package/dist/typescript/components/Call/RingingCallContent/UserInfo.d.ts.map +1 -1
- package/dist/typescript/components/Livestream/HostLivestream/HostLivestream.d.ts.map +1 -1
- package/dist/typescript/components/Livestream/LivestreamControls/HostLivestreamControls.d.ts.map +1 -1
- package/dist/typescript/components/Livestream/LivestreamControls/HostStartStreamButton.d.ts.map +1 -1
- package/dist/typescript/components/Livestream/LivestreamControls/LivestreamMediaControls.d.ts.map +1 -1
- package/dist/typescript/components/Livestream/LivestreamControls/ViewerLeaveStreamButton.d.ts.map +1 -1
- package/dist/typescript/components/Livestream/LivestreamControls/ViewerLivestreamControls.d.ts.map +1 -1
- package/dist/typescript/components/Livestream/LivestreamLayout/LivestreamLayout.d.ts.map +1 -1
- package/dist/typescript/components/Livestream/LivestreamPlayer/LivestreamPlayer.d.ts.map +1 -1
- package/dist/typescript/components/Livestream/LivestreamTopView/DurationBadge.d.ts.map +1 -1
- package/dist/typescript/components/Livestream/LivestreamTopView/FollowerCount.d.ts.map +1 -1
- package/dist/typescript/components/Livestream/LivestreamTopView/HostLivestreamTopView.d.ts.map +1 -1
- package/dist/typescript/components/Livestream/LivestreamTopView/LiveIndicator.d.ts.map +1 -1
- package/dist/typescript/components/Livestream/LivestreamTopView/ViewerLivestreamTopView.d.ts.map +1 -1
- package/dist/typescript/components/Livestream/ViewerLivestream/ViewerLivestream.d.ts.map +1 -1
- package/dist/typescript/components/Participant/FloatingParticipantView/FloatingView/AnimatedFloatingView.d.ts.map +1 -1
- package/dist/typescript/components/Participant/FloatingParticipantView/FloatingView/ReanimatedFloatingView.d.ts.map +1 -1
- package/dist/typescript/components/Participant/FloatingParticipantView/index.d.ts.map +1 -1
- package/dist/typescript/components/Participant/ParticipantView/ParticipantLabel.d.ts.map +1 -1
- package/dist/typescript/components/Participant/ParticipantView/ParticipantNetworkQualityIndicator.d.ts.map +1 -1
- package/dist/typescript/components/Participant/ParticipantView/ParticipantReaction.d.ts.map +1 -1
- package/dist/typescript/components/Participant/ParticipantView/ParticipantVideoFallback.d.ts.map +1 -1
- package/dist/typescript/components/Participant/ParticipantView/ParticipantView.d.ts.map +1 -1
- package/dist/typescript/components/Participant/ParticipantView/SpeechIndicator.d.ts.map +1 -1
- package/dist/typescript/components/Participant/ParticipantView/VideoRenderer.d.ts.map +1 -1
- package/dist/typescript/components/utility/Avatar.d.ts.map +1 -1
- package/dist/typescript/components/utility/ScreenShareOverlay.d.ts.map +1 -1
- package/dist/typescript/contexts/BackgroundFilters.d.ts.map +1 -1
- package/dist/typescript/contexts/ThemeContext.d.ts.map +1 -1
- package/dist/typescript/hooks/internal/useCallMediaStreamCleanup.d.ts.map +1 -1
- package/dist/typescript/hooks/push/useIosVoipPushEventsSetupEffect.d.ts.map +1 -1
- package/dist/typescript/hooks/usePaginatedLayoutSortPreset.d.ts.map +1 -1
- package/dist/typescript/hooks/usePermissionNotification.d.ts.map +1 -1
- package/dist/typescript/hooks/useScreenShareButton.d.ts +21 -1
- package/dist/typescript/hooks/useScreenShareButton.d.ts.map +1 -1
- package/dist/typescript/icons/Back.d.ts.map +1 -1
- package/dist/typescript/icons/CameraSwitch.d.ts.map +1 -1
- package/dist/typescript/icons/IconWrapper.d.ts.map +1 -1
- package/dist/typescript/icons/Lock.d.ts.map +1 -1
- package/dist/typescript/icons/Mic.d.ts.map +1 -1
- package/dist/typescript/icons/MicOff.d.ts.map +1 -1
- package/dist/typescript/icons/Phone.d.ts.map +1 -1
- package/dist/typescript/icons/PhoneDown.d.ts.map +1 -1
- package/dist/typescript/icons/PinVertical.d.ts.map +1 -1
- package/dist/typescript/icons/Reaction.d.ts.map +1 -1
- package/dist/typescript/icons/ScreenShare.d.ts.map +1 -1
- package/dist/typescript/icons/ScreenShareIndicator.d.ts.map +1 -1
- package/dist/typescript/icons/Settings.d.ts.map +1 -1
- package/dist/typescript/icons/Spotlight.d.ts.map +1 -1
- package/dist/typescript/icons/StopScreenShare.d.ts.map +1 -1
- package/dist/typescript/icons/ThreeDots.d.ts.map +1 -1
- package/dist/typescript/icons/TopViewBackground.d.ts.map +1 -1
- package/dist/typescript/icons/Video.d.ts.map +1 -1
- package/dist/typescript/icons/VideoSlash.d.ts.map +1 -1
- package/dist/typescript/providers/StreamCall/index.d.ts.map +1 -1
- package/dist/typescript/providers/StreamVideo.d.ts.map +1 -1
- package/dist/typescript/utils/hooks/usePrevious.d.ts.map +1 -1
- package/dist/typescript/utils/index.d.ts.map +1 -1
- package/dist/typescript/utils/internal/optionallibs/gestureHandler.d.ts.map +1 -1
- package/dist/typescript/utils/internal/optionallibs/reanimated.d.ts.map +1 -1
- package/dist/typescript/utils/internal/pushLogoutCallback.d.ts +1 -1
- package/dist/typescript/utils/internal/pushLogoutCallback.d.ts.map +1 -1
- package/dist/typescript/utils/push/android.d.ts +1 -1
- package/dist/typescript/utils/push/android.d.ts.map +1 -1
- package/dist/typescript/utils/push/internal/ios.d.ts +3 -0
- package/dist/typescript/utils/push/internal/ios.d.ts.map +1 -0
- package/dist/typescript/utils/push/internal/utils.d.ts.map +1 -1
- package/dist/typescript/utils/push/ios.d.ts +0 -1
- package/dist/typescript/utils/push/ios.d.ts.map +1 -1
- package/dist/typescript/utils/push/libs/expoNotifications.d.ts +1 -1
- package/dist/typescript/utils/push/libs/expoNotifications.d.ts.map +1 -1
- package/dist/typescript/utils/push/libs/firebaseMessaging/index.d.ts.map +1 -1
- package/dist/typescript/utils/push/libs/iosPushNotification.d.ts +1 -1
- package/dist/typescript/utils/push/libs/iosPushNotification.d.ts.map +1 -1
- package/dist/typescript/utils/push/libs/notifee/index.d.ts.map +1 -1
- package/dist/typescript/utils/push/setupIosCallKeepEvents.d.ts.map +1 -1
- package/dist/typescript/version.d.ts +1 -1
- package/expo-config-plugin/dist/withAndroidManifest.js +0 -1
- package/expo-config-plugin/dist/withAppDelegate.js +1 -1
- package/expo-config-plugin/dist/withIosScreenCapture/withPlistUpdates.js +1 -1
- package/expo-config-plugin/dist/withiOSInfoPlist.js +3 -1
- package/package.json +21 -23
- package/src/components/Call/CallContent/CallContent.tsx +3 -3
- package/src/components/Call/CallContent/RTCViewPipIOS.tsx +6 -4
- package/src/components/Call/CallContent/RTCViewPipNative.tsx +5 -5
- package/src/components/Call/CallControls/CallControlsButton.tsx +1 -1
- package/src/components/Call/CallControls/LobbyControls.tsx +1 -1
- package/src/components/Call/CallControls/ScreenShareToggleButton.tsx +1 -1
- package/src/components/Call/CallControls/internal/ReactionsPicker.tsx +4 -4
- package/src/components/Call/CallLayout/CallParticipantsSpotlight.tsx +1 -1
- package/src/components/Call/CallParticipantsList/CallParticipantsList.tsx +5 -5
- package/src/components/Call/Lobby/JoinCallButton.tsx +1 -1
- package/src/components/Call/Lobby/Lobby.tsx +2 -2
- package/src/components/Call/Lobby/LobbyFooter.tsx +2 -2
- package/src/components/Call/RingingCallContent/UserInfo.tsx +1 -1
- package/src/components/Livestream/HostLivestream/HostLivestream.tsx +1 -1
- package/src/components/Livestream/LivestreamControls/LivestreamScreenShareToggleButton.tsx +1 -1
- package/src/components/Livestream/LivestreamLayout/LivestreamLayout.tsx +1 -1
- package/src/components/Livestream/LivestreamTopView/DurationBadge.tsx +1 -1
- package/src/components/Livestream/ViewerLivestream/ViewerLivestream.tsx +1 -1
- package/src/components/Participant/FloatingParticipantView/FloatingView/AnimatedFloatingView.tsx +10 -10
- package/src/components/Participant/FloatingParticipantView/FloatingView/ReanimatedFloatingView.tsx +15 -13
- package/src/components/Participant/ParticipantView/ParticipantLabel.tsx +1 -1
- package/src/components/Participant/ParticipantView/ParticipantNetworkQualityIndicator.tsx +1 -1
- package/src/components/Participant/ParticipantView/ParticipantReaction.tsx +3 -3
- package/src/components/Participant/ParticipantView/ParticipantView.tsx +1 -1
- package/src/components/Participant/ParticipantView/SpeechIndicator.tsx +3 -3
- package/src/components/Participant/ParticipantView/VideoRenderer.tsx +1 -1
- package/src/contexts/BackgroundFilters.tsx +7 -7
- package/src/contexts/StreamVideoContext.tsx +3 -3
- package/src/contexts/ThemeContext.tsx +2 -2
- package/src/hooks/internal/useCallMediaStreamCleanup.ts +2 -6
- package/src/hooks/push/useInitAndroidTokenAndRest.ts +1 -1
- package/src/hooks/push/useIosCallkeepWithCallingStateEffect.ts +25 -25
- package/src/hooks/push/useIosVoipPushEventsSetupEffect.ts +28 -19
- package/src/hooks/push/useProcessPushCallEffect.ts +8 -8
- package/src/hooks/push/useProcessPushNonRingingCallEffect.ts +1 -1
- package/src/hooks/useAndroidKeepCallAliveEffect.ts +10 -10
- package/src/hooks/useAutoEnterPiPEffect.tsx +2 -2
- package/src/hooks/useIsIosScreenshareBroadcastStarted.ts +2 -2
- package/src/hooks/usePaginatedLayoutSortPreset.ts +1 -1
- package/src/hooks/usePermissionNotification.tsx +1 -1
- package/src/hooks/usePermissionRequest.tsx +4 -4
- package/src/hooks/useScreenShareButton.ts +9 -10
- package/src/hooks/useTrackDimensions.ts +3 -3
- package/src/providers/StreamCall/AppStateListener.tsx +6 -6
- package/src/providers/StreamCall/DeviceStats.tsx +8 -8
- package/src/providers/StreamVideo.tsx +1 -1
- package/src/utils/StreamVideoRN/index.ts +4 -4
- package/src/utils/StreamVideoRN/types.ts +2 -2
- package/src/utils/enterPiPAndroid.ts +1 -1
- package/src/utils/index.ts +2 -2
- package/src/utils/internal/newNotificationCallbacks.ts +3 -3
- package/src/utils/internal/optionallibs/gestureHandler.ts +1 -1
- package/src/utils/internal/optionallibs/reanimated.ts +1 -1
- package/src/utils/internal/pushLogoutCallback.ts +1 -1
- package/src/utils/push/android.ts +33 -33
- package/src/utils/push/internal/ios.ts +133 -0
- package/src/utils/push/internal/utils.ts +10 -10
- package/src/utils/push/ios.ts +38 -164
- package/src/utils/push/libs/callkeep.ts +2 -2
- package/src/utils/push/libs/expoNotifications.ts +5 -5
- package/src/utils/push/libs/firebaseMessaging/index.ts +3 -3
- package/src/utils/push/libs/firebaseMessaging/lib.ts +1 -1
- package/src/utils/push/libs/iosPushNotification.ts +4 -4
- package/src/utils/push/libs/notifee/index.ts +7 -7
- package/src/utils/push/libs/notifee/lib.ts +1 -1
- package/src/utils/push/libs/voipPushNotification.ts +2 -2
- package/src/utils/push/setupIosCallKeepEvents.ts +17 -18
- package/src/utils/push/setupIosVoipPushEvents.ts +5 -5
- package/src/utils/push/utils.ts +2 -2
- package/src/version.ts +1 -1
|
@@ -44,20 +44,20 @@ export const AppStateListener = () => {
|
|
|
44
44
|
logger(
|
|
45
45
|
'debug',
|
|
46
46
|
'Initial PiP mode on mount (after asking native module) set to ',
|
|
47
|
-
!!isInPiP
|
|
47
|
+
!!isInPiP,
|
|
48
48
|
);
|
|
49
|
-
}
|
|
49
|
+
},
|
|
50
50
|
);
|
|
51
51
|
|
|
52
52
|
const eventEmitter = new NativeEventEmitter(
|
|
53
|
-
NativeModules.StreamVideoReactNative
|
|
53
|
+
NativeModules.StreamVideoReactNative,
|
|
54
54
|
);
|
|
55
55
|
|
|
56
56
|
const subscriptionPiPChange = eventEmitter.addListener(
|
|
57
57
|
PIP_CHANGE_EVENT,
|
|
58
58
|
(isInPiPMode: boolean) => {
|
|
59
59
|
isInPiPModeAndroid$.next(isInPiPMode);
|
|
60
|
-
}
|
|
60
|
+
},
|
|
61
61
|
);
|
|
62
62
|
|
|
63
63
|
return () => {
|
|
@@ -83,7 +83,7 @@ export const AppStateListener = () => {
|
|
|
83
83
|
});
|
|
84
84
|
logger(
|
|
85
85
|
'debug',
|
|
86
|
-
'Disable and reenable camera as app came to foreground'
|
|
86
|
+
'Disable and reenable camera as app came to foreground',
|
|
87
87
|
);
|
|
88
88
|
} else {
|
|
89
89
|
if (cameraDisabledByAppState.current) {
|
|
@@ -124,7 +124,7 @@ export const AppStateListener = () => {
|
|
|
124
124
|
}
|
|
125
125
|
disableCameraIfNeeded();
|
|
126
126
|
}
|
|
127
|
-
}
|
|
127
|
+
},
|
|
128
128
|
);
|
|
129
129
|
} else {
|
|
130
130
|
disableCameraIfNeeded();
|
|
@@ -2,10 +2,10 @@ import { useCallStateHooks } from '@stream-io/video-react-bindings';
|
|
|
2
2
|
import { useEffect } from 'react';
|
|
3
3
|
import {
|
|
4
4
|
CallingState,
|
|
5
|
-
setThermalState,
|
|
6
5
|
setPowerState,
|
|
6
|
+
setThermalState,
|
|
7
7
|
} from '@stream-io/video-client';
|
|
8
|
-
import { NativeModules, Platform
|
|
8
|
+
import { NativeEventEmitter, NativeModules, Platform } from 'react-native';
|
|
9
9
|
|
|
10
10
|
const eventEmitter = NativeModules?.StreamVideoReactNative
|
|
11
11
|
? new NativeEventEmitter(NativeModules?.StreamVideoReactNative)
|
|
@@ -24,21 +24,21 @@ export const DeviceStats = () => {
|
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
NativeModules?.StreamVideoReactNative.isLowPowerModeEnabled().then(
|
|
27
|
-
(initialPowerMode: boolean) => setPowerState(initialPowerMode)
|
|
27
|
+
(initialPowerMode: boolean) => setPowerState(initialPowerMode),
|
|
28
28
|
);
|
|
29
29
|
|
|
30
|
-
|
|
30
|
+
const powerModeSubscription = eventEmitter?.addListener(
|
|
31
31
|
'isLowPowerModeEnabled',
|
|
32
|
-
(isLowPowerMode: boolean) => setPowerState(isLowPowerMode)
|
|
32
|
+
(isLowPowerMode: boolean) => setPowerState(isLowPowerMode),
|
|
33
33
|
);
|
|
34
34
|
|
|
35
35
|
NativeModules?.StreamVideoReactNative.currentThermalState().then(
|
|
36
|
-
(initialState: string) => setThermalState(initialState)
|
|
36
|
+
(initialState: string) => setThermalState(initialState),
|
|
37
37
|
);
|
|
38
38
|
|
|
39
|
-
|
|
39
|
+
const thermalStateSubscription = eventEmitter?.addListener(
|
|
40
40
|
'thermalStateDidChange',
|
|
41
|
-
(thermalState: string) => setThermalState(thermalState)
|
|
41
|
+
(thermalState: string) => setThermalState(thermalState),
|
|
42
42
|
);
|
|
43
43
|
|
|
44
44
|
// on android we need to explicitly start and stop the thermal status updates
|
|
@@ -42,7 +42,7 @@ export class StreamVideoRN {
|
|
|
42
42
|
static updateAndroidIncomingCallChannel(
|
|
43
43
|
updateChannel: Partial<
|
|
44
44
|
NonNullable<StreamVideoConfig['push']>['android']['incomingCallChannel']
|
|
45
|
-
|
|
45
|
+
>,
|
|
46
46
|
) {
|
|
47
47
|
const prevChannel = this.config.push?.android?.incomingCallChannel;
|
|
48
48
|
if (prevChannel) {
|
|
@@ -80,7 +80,7 @@ export class StreamVideoRN {
|
|
|
80
80
|
throw new Error(
|
|
81
81
|
`Support for navigateAcceptCall or navigateToIncomingCall in pushConfig has been removed.
|
|
82
82
|
Please watch for incoming and outgoing calls in the root component of your app.
|
|
83
|
-
Please see https://getstream.io/video/docs/react-native/advanced/ringing-calls/#watch-for-incoming-and-outgoing-calls for more information
|
|
83
|
+
Please see https://getstream.io/video/docs/react-native/advanced/ringing-calls/#watch-for-incoming-and-outgoing-calls for more information.`,
|
|
84
84
|
);
|
|
85
85
|
}
|
|
86
86
|
|
|
@@ -101,7 +101,7 @@ export class StreamVideoRN {
|
|
|
101
101
|
static onPushLogout() {
|
|
102
102
|
if (pushLogoutCallbacks.current) {
|
|
103
103
|
return Promise.all(
|
|
104
|
-
pushLogoutCallbacks.current.map((callback) => callback())
|
|
104
|
+
pushLogoutCallbacks.current.map((callback) => callback()),
|
|
105
105
|
).then(() => {});
|
|
106
106
|
}
|
|
107
107
|
return Promise.resolve();
|
|
@@ -117,7 +117,7 @@ export class StreamVideoRN {
|
|
|
117
117
|
* @returns Unsubscribe function
|
|
118
118
|
*/
|
|
119
119
|
static addOnNewCallNotificationListener(
|
|
120
|
-
callback: NewCallNotificationCallback
|
|
120
|
+
callback: NewCallNotificationCallback,
|
|
121
121
|
) {
|
|
122
122
|
if (!newNotificationCallbacks.current) {
|
|
123
123
|
newNotificationCallbacks.current = [callback];
|
|
@@ -101,7 +101,7 @@ export type StreamVideoConfig = {
|
|
|
101
101
|
callNotificationTextGetters?: {
|
|
102
102
|
getTitle: (
|
|
103
103
|
type: NonRingingPushEvent,
|
|
104
|
-
createdUserName: string
|
|
104
|
+
createdUserName: string,
|
|
105
105
|
) => string;
|
|
106
106
|
getBody: (type: NonRingingPushEvent, createdUserName: string) => string;
|
|
107
107
|
};
|
|
@@ -134,7 +134,7 @@ export type StreamVideoConfig = {
|
|
|
134
134
|
/** Callback that is called when a non ringing push notification was tapped */
|
|
135
135
|
onTapNonRingingCallNotification?: (
|
|
136
136
|
call_cid: string,
|
|
137
|
-
type: NonRingingPushEvent
|
|
137
|
+
type: NonRingingPushEvent,
|
|
138
138
|
) => void;
|
|
139
139
|
};
|
|
140
140
|
foregroundService: {
|
package/src/utils/index.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
// Utility to join strings with commas and 'and'
|
|
2
2
|
export const generateCallTitle = (
|
|
3
3
|
memberUserIds: string[],
|
|
4
|
-
totalMembersToShow?: number
|
|
4
|
+
totalMembersToShow?: number,
|
|
5
5
|
) => {
|
|
6
6
|
const supportedAmountOfMemberUserIds = memberUserIds.slice(
|
|
7
7
|
0,
|
|
8
|
-
totalMembersToShow
|
|
8
|
+
totalMembersToShow,
|
|
9
9
|
);
|
|
10
10
|
if (
|
|
11
11
|
totalMembersToShow &&
|
|
@@ -3,7 +3,7 @@ import { type NonRingingPushEvent } from '../StreamVideoRN/types';
|
|
|
3
3
|
|
|
4
4
|
export type NewCallNotificationCallback = (
|
|
5
5
|
call: Call,
|
|
6
|
-
notificationType: NonRingingPushEvent
|
|
6
|
+
notificationType: NonRingingPushEvent,
|
|
7
7
|
) => void;
|
|
8
8
|
|
|
9
9
|
type NewNotificationCallbacks = {
|
|
@@ -16,11 +16,11 @@ const newNotificationCallbacks: NewNotificationCallbacks = {};
|
|
|
16
16
|
|
|
17
17
|
export const onNewCallNotification: NewCallNotificationCallback = (
|
|
18
18
|
call,
|
|
19
|
-
notificationType
|
|
19
|
+
notificationType,
|
|
20
20
|
) => {
|
|
21
21
|
if (newNotificationCallbacks.current && lastCid !== call.cid) {
|
|
22
22
|
newNotificationCallbacks.current.forEach((callback) =>
|
|
23
|
-
callback(call, notificationType)
|
|
23
|
+
callback(call, notificationType),
|
|
24
24
|
);
|
|
25
25
|
lastCid = call.cid;
|
|
26
26
|
}
|
|
@@ -4,7 +4,7 @@ type PushLogoutCallbacks = {
|
|
|
4
4
|
current?: Callback[];
|
|
5
5
|
};
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
const pushLogoutCallbacks: PushLogoutCallbacks = {};
|
|
8
8
|
|
|
9
9
|
export const setPushLogoutCallback = (callback: Callback) => {
|
|
10
10
|
if (!pushLogoutCallbacks.current) {
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import {
|
|
2
2
|
Call,
|
|
3
3
|
CallingState,
|
|
4
|
+
getLogger,
|
|
4
5
|
RxUtils,
|
|
5
6
|
StreamVideoClient,
|
|
6
|
-
getLogger,
|
|
7
7
|
} from '@stream-io/video-client';
|
|
8
8
|
import { AppState, Platform } from 'react-native';
|
|
9
9
|
import type {
|
|
@@ -11,22 +11,22 @@ import type {
|
|
|
11
11
|
StreamVideoConfig,
|
|
12
12
|
} from '../StreamVideoRN/types';
|
|
13
13
|
import {
|
|
14
|
-
|
|
15
|
-
getFirebaseMessagingLibNoThrow,
|
|
14
|
+
type FirebaseMessagingTypes,
|
|
16
15
|
getExpoNotificationsLib,
|
|
17
16
|
getExpoNotificationsLibNoThrow,
|
|
17
|
+
getFirebaseMessagingLib,
|
|
18
|
+
getFirebaseMessagingLibNoThrow,
|
|
19
|
+
getIncomingCallForegroundServiceTypes,
|
|
18
20
|
getNotifeeLibThrowIfNotInstalledForPush,
|
|
19
21
|
type NotifeeLib,
|
|
20
|
-
type FirebaseMessagingTypes,
|
|
21
|
-
getIncomingCallForegroundServiceTypes,
|
|
22
22
|
} from './libs';
|
|
23
23
|
import {
|
|
24
24
|
pushAcceptedIncomingCallCId$,
|
|
25
|
+
pushAndroidBackgroundDeliveredIncomingCallCId$,
|
|
26
|
+
pushNonRingingCallData$,
|
|
25
27
|
pushRejectedIncomingCallCId$,
|
|
26
28
|
pushTappedIncomingCallCId$,
|
|
27
|
-
pushNonRingingCallData$,
|
|
28
29
|
pushUnsubscriptionCallbacks$,
|
|
29
|
-
pushAndroidBackgroundDeliveredIncomingCallCId$,
|
|
30
30
|
} from './internal/rxSubjects';
|
|
31
31
|
import {
|
|
32
32
|
canAddPushWSSubscriptionsRef,
|
|
@@ -55,7 +55,7 @@ let lastFirebaseToken = { token: '', userId: '' };
|
|
|
55
55
|
export async function initAndroidPushToken(
|
|
56
56
|
client: StreamVideoClient,
|
|
57
57
|
pushConfig: PushConfig,
|
|
58
|
-
setUnsubscribeListener: (unsubscribe: () => void) => void
|
|
58
|
+
setUnsubscribeListener: (unsubscribe: () => void) => void,
|
|
59
59
|
) {
|
|
60
60
|
if (Platform.OS !== 'android' || !pushConfig.android.pushProviderName) {
|
|
61
61
|
return;
|
|
@@ -69,7 +69,7 @@ export async function initAndroidPushToken(
|
|
|
69
69
|
) {
|
|
70
70
|
logger(
|
|
71
71
|
'debug',
|
|
72
|
-
`Skipping setting the same token again for userId: ${userId} and token: ${token}
|
|
72
|
+
`Skipping setting the same token again for userId: ${userId} and token: ${token}`,
|
|
73
73
|
);
|
|
74
74
|
return;
|
|
75
75
|
}
|
|
@@ -96,7 +96,7 @@ export async function initAndroidPushToken(
|
|
|
96
96
|
const subscription = expoNotificationsLib.addPushTokenListener(
|
|
97
97
|
(devicePushToken) => {
|
|
98
98
|
setDeviceToken(devicePushToken.data);
|
|
99
|
-
}
|
|
99
|
+
},
|
|
100
100
|
);
|
|
101
101
|
setUnsubscribeListener(() => subscription.remove());
|
|
102
102
|
const devicePushToken =
|
|
@@ -113,7 +113,7 @@ export async function initAndroidPushToken(
|
|
|
113
113
|
if (messaging) {
|
|
114
114
|
logger('debug', `setting firebase token listeners`);
|
|
115
115
|
const unsubscribe = messaging().onTokenRefresh((refreshedToken) =>
|
|
116
|
-
setDeviceToken(refreshedToken)
|
|
116
|
+
setDeviceToken(refreshedToken),
|
|
117
117
|
);
|
|
118
118
|
setUnsubscribeListener(unsubscribe);
|
|
119
119
|
const token = await messaging().getToken();
|
|
@@ -126,7 +126,7 @@ export async function initAndroidPushToken(
|
|
|
126
126
|
* For Ringing and Non-Ringing calls.
|
|
127
127
|
*/
|
|
128
128
|
export const firebaseDataHandler = async (
|
|
129
|
-
data: FirebaseMessagingTypes.RemoteMessage['data']
|
|
129
|
+
data: FirebaseMessagingTypes.RemoteMessage['data'],
|
|
130
130
|
) => {
|
|
131
131
|
if (Platform.OS !== 'android') return;
|
|
132
132
|
/* Example data from firebase
|
|
@@ -155,7 +155,7 @@ export const firebaseDataHandler = async (
|
|
|
155
155
|
const logger = getLogger(['firebaseDataHandler']);
|
|
156
156
|
logger(
|
|
157
157
|
'debug',
|
|
158
|
-
`Notification permission not granted, unable to post ${data.type} notifications
|
|
158
|
+
`Notification permission not granted, unable to post ${data.type} notifications`,
|
|
159
159
|
);
|
|
160
160
|
return;
|
|
161
161
|
}
|
|
@@ -169,7 +169,7 @@ export const firebaseDataHandler = async (
|
|
|
169
169
|
const { mustEndCall } = shouldCallBeEnded(
|
|
170
170
|
callToCheck,
|
|
171
171
|
created_by_id,
|
|
172
|
-
receiver_id
|
|
172
|
+
receiver_id,
|
|
173
173
|
);
|
|
174
174
|
return mustEndCall;
|
|
175
175
|
};
|
|
@@ -188,7 +188,7 @@ export const firebaseDataHandler = async (
|
|
|
188
188
|
if (!client) {
|
|
189
189
|
getLogger(['firebaseMessagingOnMessageHandler'])(
|
|
190
190
|
'debug',
|
|
191
|
-
`Closing fg service as there is no client to create from push config
|
|
191
|
+
`Closing fg service as there is no client to create from push config`,
|
|
192
192
|
);
|
|
193
193
|
notifee.stopForegroundService();
|
|
194
194
|
return;
|
|
@@ -198,7 +198,7 @@ export const firebaseDataHandler = async (
|
|
|
198
198
|
if (_shouldCallBeClosed) {
|
|
199
199
|
getLogger(['firebaseMessagingOnMessageHandler'])(
|
|
200
200
|
'debug',
|
|
201
|
-
`Closing fg service callCid: ${call_cid} shouldCallBeClosed: ${_shouldCallBeClosed}
|
|
201
|
+
`Closing fg service callCid: ${call_cid} shouldCallBeClosed: ${_shouldCallBeClosed}`,
|
|
202
202
|
);
|
|
203
203
|
notifee.stopForegroundService();
|
|
204
204
|
return;
|
|
@@ -211,7 +211,7 @@ export const firebaseDataHandler = async (
|
|
|
211
211
|
getLogger(['firebaseMessagingOnMessageHandler'])(
|
|
212
212
|
'debug',
|
|
213
213
|
`Closing fg service from event callCid: ${call_cid} canListenToWS: ${_canListenToWS}`,
|
|
214
|
-
{ event }
|
|
214
|
+
{ event },
|
|
215
215
|
);
|
|
216
216
|
unsubscribeFunctions.forEach((fn) => fn());
|
|
217
217
|
notifee.stopForegroundService();
|
|
@@ -222,7 +222,7 @@ export const firebaseDataHandler = async (
|
|
|
222
222
|
getLogger(['firebaseMessagingOnMessageHandler'])(
|
|
223
223
|
'debug',
|
|
224
224
|
`Closing fg service from event callCid: ${call_cid} canListenToWS: ${_canListenToWS} shouldCallBeClosed: ${_shouldCallBeClosed}`,
|
|
225
|
-
{ event }
|
|
225
|
+
{ event },
|
|
226
226
|
);
|
|
227
227
|
unsubscribeFunctions.forEach((fn) => fn());
|
|
228
228
|
notifee.stopForegroundService();
|
|
@@ -238,7 +238,7 @@ export const firebaseDataHandler = async (
|
|
|
238
238
|
unsubscribeFunctions.forEach((fn) => fn());
|
|
239
239
|
notifee.stopForegroundService();
|
|
240
240
|
}
|
|
241
|
-
}
|
|
241
|
+
},
|
|
242
242
|
);
|
|
243
243
|
unsubscribeFunctions.push(unsubscribe);
|
|
244
244
|
unsubscribeFunctions.push(() => subscription.unsubscribe());
|
|
@@ -258,7 +258,7 @@ export const firebaseDataHandler = async (
|
|
|
258
258
|
const logger = getLogger(['firebaseMessagingOnMessageHandler']);
|
|
259
259
|
logger(
|
|
260
260
|
'error',
|
|
261
|
-
"Can't show incoming call notification as either or both incomingCallChannel and incomingCallNotificationTextGetters were not provided"
|
|
261
|
+
"Can't show incoming call notification as either or both incomingCallChannel and incomingCallNotificationTextGetters were not provided",
|
|
262
262
|
);
|
|
263
263
|
return;
|
|
264
264
|
}
|
|
@@ -279,7 +279,7 @@ export const firebaseDataHandler = async (
|
|
|
279
279
|
|
|
280
280
|
getLogger(['firebaseMessagingOnMessageHandler'])(
|
|
281
281
|
'debug',
|
|
282
|
-
`Displaying incoming call notification with callCid: ${call_cid} title: ${title} body: ${body} asForegroundService: ${asForegroundService}
|
|
282
|
+
`Displaying incoming call notification with callCid: ${call_cid} title: ${title} body: ${body} asForegroundService: ${asForegroundService}`,
|
|
283
283
|
);
|
|
284
284
|
|
|
285
285
|
const channelId = incomingCallChannel.id;
|
|
@@ -340,7 +340,7 @@ export const firebaseDataHandler = async (
|
|
|
340
340
|
if (shouldCallBeClosed(callFromPush)) {
|
|
341
341
|
getLogger(['firebaseMessagingOnMessageHandler'])(
|
|
342
342
|
'debug',
|
|
343
|
-
`Removing incoming call notification immediately with callCid: ${call_cid} as it should be closed
|
|
343
|
+
`Removing incoming call notification immediately with callCid: ${call_cid} as it should be closed`,
|
|
344
344
|
);
|
|
345
345
|
notifee.cancelDisplayedNotification(call_cid);
|
|
346
346
|
}
|
|
@@ -353,7 +353,7 @@ export const firebaseDataHandler = async (
|
|
|
353
353
|
const logger = getLogger(['firebaseMessagingOnMessageHandler']);
|
|
354
354
|
logger(
|
|
355
355
|
'debug',
|
|
356
|
-
"Can't show call notification as either or both callChannel and callNotificationTextGetters is not provided"
|
|
356
|
+
"Can't show call notification as either or both callChannel and callNotificationTextGetters is not provided",
|
|
357
357
|
);
|
|
358
358
|
return;
|
|
359
359
|
}
|
|
@@ -369,7 +369,7 @@ export const firebaseDataHandler = async (
|
|
|
369
369
|
|
|
370
370
|
getLogger(['firebaseMessagingOnMessageHandler'])(
|
|
371
371
|
'debug',
|
|
372
|
-
`Displaying NonRingingPushEvent ${type} notification with title: ${title} body: ${body}
|
|
372
|
+
`Displaying NonRingingPushEvent ${type} notification with title: ${title} body: ${body}`,
|
|
373
373
|
);
|
|
374
374
|
await notifee.displayNotification({
|
|
375
375
|
title: getTitle(type, createdUserName),
|
|
@@ -444,7 +444,7 @@ export const onAndroidNotifeeEvent = async ({
|
|
|
444
444
|
) {
|
|
445
445
|
getLogger(['onAndroidNotifeeEvent'])(
|
|
446
446
|
'debug',
|
|
447
|
-
`clearPushWSEventSubscriptions for callCId: ${call_cid} mustAccept: ${mustAccept} mustDecline: ${mustDecline}
|
|
447
|
+
`clearPushWSEventSubscriptions for callCId: ${call_cid} mustAccept: ${mustAccept} mustDecline: ${mustDecline}`,
|
|
448
448
|
);
|
|
449
449
|
clearPushWSEventSubscriptions();
|
|
450
450
|
notifee.stopForegroundService();
|
|
@@ -453,41 +453,41 @@ export const onAndroidNotifeeEvent = async ({
|
|
|
453
453
|
if (mustAccept) {
|
|
454
454
|
getLogger(['onAndroidNotifeeEvent'])(
|
|
455
455
|
'debug',
|
|
456
|
-
`pushAcceptedIncomingCallCId$ added with callCId: ${call_cid}
|
|
456
|
+
`pushAcceptedIncomingCallCId$ added with callCId: ${call_cid}`,
|
|
457
457
|
);
|
|
458
458
|
pushAcceptedIncomingCallCId$.next(call_cid);
|
|
459
459
|
// NOTE: accept will be handled by the app with rxjs observers as the app will go to foreground always
|
|
460
460
|
} else if (mustDecline) {
|
|
461
461
|
getLogger(['onAndroidNotifeeEvent'])(
|
|
462
462
|
'debug',
|
|
463
|
-
`pushRejectedIncomingCallCId$ added with callCId: ${call_cid}
|
|
463
|
+
`pushRejectedIncomingCallCId$ added with callCId: ${call_cid}`,
|
|
464
464
|
);
|
|
465
465
|
pushRejectedIncomingCallCId$.next(call_cid);
|
|
466
466
|
if (hasObservers) {
|
|
467
467
|
// if we had observers we can return here as the observers will handle the call as the app is in the foreground state
|
|
468
468
|
getLogger(['onAndroidNotifeeEvent'])(
|
|
469
469
|
'debug',
|
|
470
|
-
`Skipped processCallFromPushInBackground for Declining call with callCId: ${call_cid} as the app is in the foreground state
|
|
470
|
+
`Skipped processCallFromPushInBackground for Declining call with callCId: ${call_cid} as the app is in the foreground state`,
|
|
471
471
|
);
|
|
472
472
|
return;
|
|
473
473
|
}
|
|
474
474
|
getLogger(['onAndroidNotifeeEvent'])(
|
|
475
475
|
'debug',
|
|
476
|
-
`start processCallFromPushInBackground - Declining call with callCId: ${call_cid}
|
|
476
|
+
`start processCallFromPushInBackground - Declining call with callCId: ${call_cid}`,
|
|
477
477
|
);
|
|
478
478
|
await processCallFromPushInBackground(pushConfig, call_cid, 'decline');
|
|
479
479
|
} else {
|
|
480
480
|
if (type === notifeeLib.EventType.PRESS) {
|
|
481
481
|
getLogger(['onAndroidNotifeeEvent'])(
|
|
482
482
|
'debug',
|
|
483
|
-
`pushTappedIncomingCallCId$ added with callCId: ${call_cid}
|
|
483
|
+
`pushTappedIncomingCallCId$ added with callCId: ${call_cid}`,
|
|
484
484
|
);
|
|
485
485
|
pushTappedIncomingCallCId$.next(call_cid);
|
|
486
486
|
// pressed state will be handled by the app with rxjs observers as the app will go to foreground always
|
|
487
487
|
} else if (isBackground && type === notifeeLib.EventType.DELIVERED) {
|
|
488
488
|
getLogger(['onAndroidNotifeeEvent'])(
|
|
489
489
|
'debug',
|
|
490
|
-
`pushAndroidBackgroundDeliveredIncomingCallCId$ added with callCId: ${call_cid}
|
|
490
|
+
`pushAndroidBackgroundDeliveredIncomingCallCId$ added with callCId: ${call_cid}`,
|
|
491
491
|
);
|
|
492
492
|
pushAndroidBackgroundDeliveredIncomingCallCId$.next(call_cid);
|
|
493
493
|
// background delivered state will be handled by the app with rxjs observers as processing needs to happen only when app is opened
|
|
@@ -498,11 +498,11 @@ export const onAndroidNotifeeEvent = async ({
|
|
|
498
498
|
if (type === notifeeLib.EventType.PRESS) {
|
|
499
499
|
getLogger(['onAndroidNotifeeEvent'])(
|
|
500
500
|
'debug',
|
|
501
|
-
`onTapNonRingingCallNotification with callCId: ${call_cid}
|
|
501
|
+
`onTapNonRingingCallNotification with callCId: ${call_cid}`,
|
|
502
502
|
);
|
|
503
503
|
pushConfig.onTapNonRingingCallNotification?.(
|
|
504
504
|
call_cid,
|
|
505
|
-
data.type as NonRingingPushEvent
|
|
505
|
+
data.type as NonRingingPushEvent,
|
|
506
506
|
);
|
|
507
507
|
}
|
|
508
508
|
}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { getLogger, RxUtils } from '@stream-io/video-client';
|
|
2
|
+
import { AppState, NativeModules, Platform } from 'react-native';
|
|
3
|
+
import { getCallKeepLib, getVoipPushNotificationLib } from '../libs';
|
|
4
|
+
import {
|
|
5
|
+
pushUnsubscriptionCallbacks$,
|
|
6
|
+
voipPushNotificationCallCId$,
|
|
7
|
+
} from './rxSubjects';
|
|
8
|
+
import { canAddPushWSSubscriptionsRef, shouldCallBeEnded } from './utils';
|
|
9
|
+
import { StreamVideoConfig } from '../../StreamVideoRN/types';
|
|
10
|
+
|
|
11
|
+
export const onVoipNotificationReceived = async (
|
|
12
|
+
notification: any,
|
|
13
|
+
pushConfig: NonNullable<StreamVideoConfig['push']>,
|
|
14
|
+
) => {
|
|
15
|
+
/* --- Example payload ---
|
|
16
|
+
{
|
|
17
|
+
"aps": {
|
|
18
|
+
"alert": {
|
|
19
|
+
"body": "",
|
|
20
|
+
"title": "Vishal Narkhede is calling you"
|
|
21
|
+
},
|
|
22
|
+
"badge": 0,
|
|
23
|
+
"category": "stream.video",
|
|
24
|
+
"mutable-content": 1
|
|
25
|
+
},
|
|
26
|
+
"stream": {
|
|
27
|
+
"call_cid": "default:ixbm7y0k74pbjnq",
|
|
28
|
+
"call_display_name": "",
|
|
29
|
+
"created_by_display_name": "Vishal Narkhede",
|
|
30
|
+
"created_by_id": "vishalexpo",
|
|
31
|
+
"receiver_id": "santhoshexpo",
|
|
32
|
+
"sender": "stream.video",
|
|
33
|
+
"type": "call.ring",
|
|
34
|
+
"version": "v2"
|
|
35
|
+
}
|
|
36
|
+
} */
|
|
37
|
+
const sender = notification?.stream?.sender;
|
|
38
|
+
const type = notification?.stream?.type;
|
|
39
|
+
// do not process any other notifications other than stream.video or ringing
|
|
40
|
+
if (sender !== 'stream.video' && type !== 'call.ring') {
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
const call_cid = notification?.stream?.call_cid;
|
|
44
|
+
if (!call_cid || Platform.OS !== 'ios' || !pushConfig.ios.pushProviderName) {
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
const logger = getLogger(['setupIosVoipPushEvents']);
|
|
48
|
+
const client = await pushConfig.createStreamVideoClient();
|
|
49
|
+
if (!client) {
|
|
50
|
+
logger(
|
|
51
|
+
'debug',
|
|
52
|
+
'client not found, not processing call.ring voip push notification',
|
|
53
|
+
);
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
const callFromPush = await client.onRingingCall(call_cid);
|
|
57
|
+
let uuid = '';
|
|
58
|
+
try {
|
|
59
|
+
uuid =
|
|
60
|
+
await NativeModules?.StreamVideoReactNative?.getIncomingCallUUid(
|
|
61
|
+
call_cid,
|
|
62
|
+
);
|
|
63
|
+
} catch (error) {
|
|
64
|
+
logger('error', 'Error in getting call uuid from native module', error);
|
|
65
|
+
}
|
|
66
|
+
if (!uuid) {
|
|
67
|
+
logger(
|
|
68
|
+
'error',
|
|
69
|
+
`Not processing call.ring push notification, as no uuid found for call_cid: ${call_cid}`,
|
|
70
|
+
);
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
const created_by_id = notification?.stream?.created_by_id;
|
|
74
|
+
const receiver_id = notification?.stream?.receiver_id;
|
|
75
|
+
function closeCallIfNecessary() {
|
|
76
|
+
const { mustEndCall, callkeepReason } = shouldCallBeEnded(
|
|
77
|
+
callFromPush,
|
|
78
|
+
created_by_id,
|
|
79
|
+
receiver_id,
|
|
80
|
+
);
|
|
81
|
+
if (mustEndCall) {
|
|
82
|
+
const callkeep = getCallKeepLib();
|
|
83
|
+
logger(
|
|
84
|
+
'debug',
|
|
85
|
+
`callkeep.reportEndCallWithUUID for uuid: ${uuid}, call_cid: ${call_cid}, reason: ${callkeepReason}`,
|
|
86
|
+
);
|
|
87
|
+
callkeep.reportEndCallWithUUID(uuid, callkeepReason);
|
|
88
|
+
const voipPushNotification = getVoipPushNotificationLib();
|
|
89
|
+
voipPushNotification.onVoipNotificationCompleted(uuid);
|
|
90
|
+
return true;
|
|
91
|
+
}
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
const closed = closeCallIfNecessary();
|
|
95
|
+
const canListenToWS = () =>
|
|
96
|
+
canAddPushWSSubscriptionsRef.current && AppState.currentState !== 'active';
|
|
97
|
+
if (!closed && canListenToWS()) {
|
|
98
|
+
const unsubscribe = callFromPush.on('all', (event) => {
|
|
99
|
+
const _canListenToWS = canListenToWS();
|
|
100
|
+
if (!_canListenToWS) {
|
|
101
|
+
logger(
|
|
102
|
+
'debug',
|
|
103
|
+
`unsubscribe due to event callCid: ${call_cid} canListenToWS: ${_canListenToWS}`,
|
|
104
|
+
event,
|
|
105
|
+
);
|
|
106
|
+
unsubscribe();
|
|
107
|
+
return;
|
|
108
|
+
}
|
|
109
|
+
const _closed = closeCallIfNecessary();
|
|
110
|
+
if (_closed) {
|
|
111
|
+
logger(
|
|
112
|
+
'debug',
|
|
113
|
+
`unsubscribe due to event callCid: ${call_cid} canListenToWS: ${_canListenToWS} shouldCallBeClosed: ${_closed}`,
|
|
114
|
+
event,
|
|
115
|
+
);
|
|
116
|
+
unsubscribe();
|
|
117
|
+
}
|
|
118
|
+
});
|
|
119
|
+
const unsubscriptionCallbacks =
|
|
120
|
+
RxUtils.getCurrentValue(pushUnsubscriptionCallbacks$) ?? [];
|
|
121
|
+
pushUnsubscriptionCallbacks$.next([
|
|
122
|
+
...unsubscriptionCallbacks,
|
|
123
|
+
unsubscribe,
|
|
124
|
+
]);
|
|
125
|
+
}
|
|
126
|
+
// send the info to this subject, it is listened by callkeep events
|
|
127
|
+
// callkeep events will then accept/reject the call
|
|
128
|
+
logger(
|
|
129
|
+
'debug',
|
|
130
|
+
`call_cid:${call_cid} uuid:${uuid} received and processed from call.ring push notification`,
|
|
131
|
+
);
|
|
132
|
+
voipPushNotificationCallCId$.next(call_cid);
|
|
133
|
+
};
|