From d912e12443718d239df4ac0c2357762c4b0e2592 Mon Sep 17 00:00:00 2001 From: Shahe Shahinyan Date: Wed, 3 Apr 2024 11:58:35 +0400 Subject: [PATCH 1/6] Fix an inconsistency between the mute status icon in full screen mode and mini player mode --- src/components/VideoPlayer/BaseVideoPlayer.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/components/VideoPlayer/BaseVideoPlayer.js b/src/components/VideoPlayer/BaseVideoPlayer.js index 7016de3fa86c3..dcda27a3a8f61 100644 --- a/src/components/VideoPlayer/BaseVideoPlayer.js +++ b/src/components/VideoPlayer/BaseVideoPlayer.js @@ -8,6 +8,7 @@ import Hoverable from '@components/Hoverable'; import PressableWithoutFeedback from '@components/Pressable/PressableWithoutFeedback'; import {useFullScreenContext} from '@components/VideoPlayerContexts/FullScreenContext'; import {usePlaybackContext} from '@components/VideoPlayerContexts/PlaybackContext'; +import {useVolumeContext} from '@components/VideoPlayerContexts/VolumeContext'; import VideoPopoverMenu from '@components/VideoPopoverMenu'; import useNetwork from '@hooks/useNetwork'; import useThemeStyles from '@hooks/useThemeStyles'; @@ -73,6 +74,7 @@ function BaseVideoPlayer({ const isCurrentlyURLSet = currentlyPlayingURL === url; const isUploading = _.some(CONST.ATTACHMENT_LOCAL_URL_PREFIX, (prefix) => url.startsWith(prefix)); const videoStateRef = useRef(null); + const {updateVolume} = useVolumeContext(); const togglePlayCurrentVideo = useCallback(() => { videoResumeTryNumber.current = 0; @@ -134,6 +136,15 @@ function BaseVideoPlayer({ const handleFullscreenUpdate = useCallback( (e) => { onFullscreenUpdate(e); + + if (e.fullscreenUpdate === VideoFullscreenUpdate.PLAYER_DID_DISMISS) { + currentVideoPlayerRef.current.getStatusAsync().then((status) => { + if (status.volume === 0 || status.isMuted === true) { + updateVolume(0); + } + }); + } + // fix for iOS native and mWeb: when switching to fullscreen and then exiting // the fullscreen mode while playing, the video pauses if (e.fullscreenUpdate === VideoFullscreenUpdate.PLAYER_DID_DISMISS) { From 82039cc1c5a483a56ca0efe185fe1ba2c3328512 Mon Sep 17 00:00:00 2001 From: Shahe Shahinyan Date: Wed, 3 Apr 2024 18:30:43 +0400 Subject: [PATCH 2/6] fix eslint error --- src/components/VideoPlayer/BaseVideoPlayer.js | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/components/VideoPlayer/BaseVideoPlayer.js b/src/components/VideoPlayer/BaseVideoPlayer.js index dcda27a3a8f61..d04db56795f97 100644 --- a/src/components/VideoPlayer/BaseVideoPlayer.js +++ b/src/components/VideoPlayer/BaseVideoPlayer.js @@ -139,9 +139,11 @@ function BaseVideoPlayer({ if (e.fullscreenUpdate === VideoFullscreenUpdate.PLAYER_DID_DISMISS) { currentVideoPlayerRef.current.getStatusAsync().then((status) => { - if (status.volume === 0 || status.isMuted === true) { - updateVolume(0); + if (status.volume > 0 && !status.isMuted) { + return } + + updateVolume(0); }); } @@ -158,7 +160,7 @@ function BaseVideoPlayer({ } } }, - [isFullScreenRef, onFullscreenUpdate, pauseVideo, playVideo, videoResumeTryNumber], + [isFullScreenRef, onFullscreenUpdate, pauseVideo, playVideo, videoResumeTryNumber, updateVolume, currentVideoPlayerRef], ); const bindFunctions = useCallback(() => { From 71d5de8cf33e7de1abce8acf7d311526bd19da52 Mon Sep 17 00:00:00 2001 From: Shahe Shahinyan Date: Wed, 3 Apr 2024 18:41:21 +0400 Subject: [PATCH 3/6] run prettier --- src/components/VideoPlayer/BaseVideoPlayer.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/VideoPlayer/BaseVideoPlayer.js b/src/components/VideoPlayer/BaseVideoPlayer.js index d04db56795f97..5972989dc2b30 100644 --- a/src/components/VideoPlayer/BaseVideoPlayer.js +++ b/src/components/VideoPlayer/BaseVideoPlayer.js @@ -140,7 +140,7 @@ function BaseVideoPlayer({ if (e.fullscreenUpdate === VideoFullscreenUpdate.PLAYER_DID_DISMISS) { currentVideoPlayerRef.current.getStatusAsync().then((status) => { if (status.volume > 0 && !status.isMuted) { - return + return; } updateVolume(0); From 2b75d3d035be93df58c5c171c1858bbdf0ebb235 Mon Sep 17 00:00:00 2001 From: Shahe Shahinyan Date: Mon, 8 Apr 2024 18:07:20 +0400 Subject: [PATCH 4/6] Comment addressed --- src/components/VideoPlayer/BaseVideoPlayer.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/VideoPlayer/BaseVideoPlayer.tsx b/src/components/VideoPlayer/BaseVideoPlayer.tsx index 92da2066f0d54..2784fc35472b2 100644 --- a/src/components/VideoPlayer/BaseVideoPlayer.tsx +++ b/src/components/VideoPlayer/BaseVideoPlayer.tsx @@ -160,7 +160,7 @@ function BaseVideoPlayer({ return; } - updateVolume(status.isMuted ? 0 : status.volume); + updateVolume(status.isMuted ? 0 : status.volume || 1); }); } }, From 6487872eee5f418ba1b2432831844f81a9dc22ba Mon Sep 17 00:00:00 2001 From: Shahe Shahinyan Date: Tue, 9 Apr 2024 23:34:08 +0400 Subject: [PATCH 5/6] Fix extra pause => play video --- src/components/VideoPlayer/BaseVideoPlayer.tsx | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/components/VideoPlayer/BaseVideoPlayer.tsx b/src/components/VideoPlayer/BaseVideoPlayer.tsx index 2784fc35472b2..5bfbe79188499 100644 --- a/src/components/VideoPlayer/BaseVideoPlayer.tsx +++ b/src/components/VideoPlayer/BaseVideoPlayer.tsx @@ -147,13 +147,6 @@ function BaseVideoPlayer({ if (event.fullscreenUpdate === VideoFullscreenUpdate.PLAYER_DID_DISMISS) { isFullScreenRef.current = false; - // we need to use video state ref to check if video is playing, to catch proper state after exiting fullscreen - // and also fix a bug with fullscreen mode dismissing when handleFullscreenUpdate function changes - if (videoStateRef.current && (!('isPlaying' in videoStateRef.current) || videoStateRef.current.isPlaying)) { - pauseVideo(); - playVideo(); - videoResumeTryNumber.current = 3; - } currentVideoPlayerRef.current?.getStatusAsync?.().then((status) => { if (!('isMuted' in status)) { @@ -162,6 +155,14 @@ function BaseVideoPlayer({ updateVolume(status.isMuted ? 0 : status.volume || 1); }); + + // we need to use video state ref to check if video is playing, to catch proper state after exiting fullscreen + // and also fix a bug with fullscreen mode dismissing when handleFullscreenUpdate function changes + if (videoStateRef.current && (!('isPlaying' in videoStateRef.current) || videoStateRef.current.isPlaying)) { + pauseVideo(); + playVideo(); + videoResumeTryNumber.current = 3; + } } }, [isFullScreenRef, onFullscreenUpdate, pauseVideo, playVideo, videoResumeTryNumber, updateVolume, currentVideoPlayerRef], From 461030b9d399220f7c70efd294a21cd4181e6137 Mon Sep 17 00:00:00 2001 From: Shahe Shahinyan Date: Fri, 12 Apr 2024 13:20:40 +0400 Subject: [PATCH 6/6] Add comment --- src/components/VideoPlayer/BaseVideoPlayer.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/VideoPlayer/BaseVideoPlayer.tsx b/src/components/VideoPlayer/BaseVideoPlayer.tsx index 5bfbe79188499..7073f386c397a 100644 --- a/src/components/VideoPlayer/BaseVideoPlayer.tsx +++ b/src/components/VideoPlayer/BaseVideoPlayer.tsx @@ -148,6 +148,7 @@ function BaseVideoPlayer({ if (event.fullscreenUpdate === VideoFullscreenUpdate.PLAYER_DID_DISMISS) { isFullScreenRef.current = false; + // Sync volume updates in full screen mode after leaving it currentVideoPlayerRef.current?.getStatusAsync?.().then((status) => { if (!('isMuted' in status)) { return;