From 81d4e778e3c1a9c6121adb777ac9d9e091c87176 Mon Sep 17 00:00:00 2001 From: Fredrik Burmester Date: Tue, 26 Nov 2024 21:24:39 +0100 Subject: [PATCH] fix: lower opacity for video when show controls --- app/(auth)/player/direct-player.tsx | 8 +++++++- app/(auth)/player/transcoding-player.tsx | 8 +++++++- components/video-player/controls/Controls.tsx | 14 ++++++++++---- 3 files changed, 24 insertions(+), 6 deletions(-) diff --git a/app/(auth)/player/direct-player.tsx b/app/(auth)/player/direct-player.tsx index 2ea2d756..4e8a2fad 100644 --- a/app/(auth)/player/direct-player.tsx +++ b/app/(auth)/player/direct-player.tsx @@ -40,7 +40,7 @@ export default function page() { const api = useAtomValue(apiAtom); const [isPlaybackStopped, setIsPlaybackStopped] = useState(false); - const [showControls, setShowControls] = useState(true); + const [showControls, _setShowControls] = useState(true); const [ignoreSafeAreas, setIgnoreSafeAreas] = useState(false); const [isPlaying, setIsPlaying] = useState(false); const [isBuffering, setIsBuffering] = useState(true); @@ -53,6 +53,11 @@ export default function page() { const { getDownloadedItem } = useDownload(); const revalidateProgressCache = useRevalidatePlaybackProgressCache(); + const setShowControls = useCallback((show: boolean) => { + _setShowControls(show); + Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light); + }, []); + const { itemId, audioIndex: audioIndexStr, @@ -410,6 +415,7 @@ export default function page() { position: "relative", flexDirection: "column", justifyContent: "center", + opacity: showControls ? 0.5 : 1, }} > { const revalidateProgressCache = useRevalidatePlaybackProgressCache(); const [isPlaybackStopped, setIsPlaybackStopped] = useState(false); - const [showControls, setShowControls] = useState(true); + const [showControls, _setShowControls] = useState(true); const [ignoreSafeAreas, setIgnoreSafeAreas] = useState(false); const [isPlaying, setIsPlaying] = useState(false); const [isBuffering, setIsBuffering] = useState(true); + const setShowControls = useCallback((show: boolean) => { + _setShowControls(show); + Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light); + }, []); + const progress = useSharedValue(0); const isSeeking = useSharedValue(false); const cacheProgress = useSharedValue(0); @@ -401,6 +406,7 @@ const Player = () => { position: "relative", flexDirection: "column", justifyContent: "center", + opacity: showControls ? 0.5 : 1, }} > {videoSource ? ( diff --git a/components/video-player/controls/Controls.tsx b/components/video-player/controls/Controls.tsx index 0090fe63..1d7f3174 100644 --- a/components/video-player/controls/Controls.tsx +++ b/components/video-player/controls/Controls.tsx @@ -48,6 +48,7 @@ import { VideoRef } from "react-native-video"; import { ControlProvider } from "./contexts/ControlContext"; import { VideoProvider } from "./contexts/VideoContext"; import DropdownView from "./DropdownView"; +import * as Haptics from "expo-haptics"; interface Props { item: BaseItemDto; @@ -143,6 +144,8 @@ export const Controls: React.FC = ({ const goToPreviousItem = useCallback(() => { if (!previousItem || !settings) return; + Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light); + const { bitrate, mediaSource, audioIndex, subtitleIndex } = getDefaultPlaySettings(previousItem, settings); @@ -166,6 +169,8 @@ export const Controls: React.FC = ({ const goToNextItem = useCallback(() => { if (!nextItem || !settings) return; + Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light); + const { bitrate, mediaSource, audioIndex, subtitleIndex } = getDefaultPlaySettings(nextItem, settings); @@ -273,6 +278,7 @@ export const Controls: React.FC = ({ const handleSkipBackward = useCallback(async () => { if (!settings?.rewindSkipTime) return; wasPlayingRef.current = isPlaying; + Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light); try { const curr = progress.value; if (curr !== undefined) { @@ -290,6 +296,7 @@ export const Controls: React.FC = ({ const handleSkipForward = useCallback(async () => { if (!settings?.forwardSkipTime) return; wasPlayingRef.current = isPlaying; + Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light); try { const curr = progress.value; console.log(curr); @@ -307,6 +314,7 @@ export const Controls: React.FC = ({ const toggleIgnoreSafeAreas = useCallback(() => { setIgnoreSafeAreas((prev) => !prev); + Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Light); }, []); return ( @@ -381,8 +389,6 @@ export const Controls: React.FC = ({ position: "absolute", width: Dimensions.get("window").width, height: Dimensions.get("window").height, - opacity: showControls ? 0.5 : 0, - backgroundColor: "black", }} > @@ -448,7 +454,7 @@ export const Controls: React.FC = ({ }, ]} pointerEvents={showControls ? "auto" : "none"} - className={`flex flex-col p-4 `} + className={`flex flex-col p-4`} > {item?.Name} @@ -463,7 +469,7 @@ export const Controls: React.FC = ({ )}