From f1bbe53ba6c20b8c528e9ff3a8f8b130be35fe19 Mon Sep 17 00:00:00 2001 From: vndangkhoa Date: Mon, 16 Feb 2026 08:45:53 +0700 Subject: [PATCH] V3.4 Release: Prevent screen sleep during playback (Web & Android TV) --- .../java/com/streamflow/tv/ui/screens/PlayerScreen.kt | 1 + frontend-react/src/hooks/useWatchMovie.ts | 10 ++++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/android-tv/app/src/main/java/com/streamflow/tv/ui/screens/PlayerScreen.kt b/android-tv/app/src/main/java/com/streamflow/tv/ui/screens/PlayerScreen.kt index e7b6cab..b51062b 100644 --- a/android-tv/app/src/main/java/com/streamflow/tv/ui/screens/PlayerScreen.kt +++ b/android-tv/app/src/main/java/com/streamflow/tv/ui/screens/PlayerScreen.kt @@ -167,6 +167,7 @@ fun PlayerScreen( setShowNextButton(false) setShowPreviousButton(false) controllerAutoShow = true + keepScreenOn = true // Prevent screen sleep during playback layoutParams = FrameLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT diff --git a/frontend-react/src/hooks/useWatchMovie.ts b/frontend-react/src/hooks/useWatchMovie.ts index 7d20fee..08fc881 100644 --- a/frontend-react/src/hooks/useWatchMovie.ts +++ b/frontend-react/src/hooks/useWatchMovie.ts @@ -88,6 +88,7 @@ export const useWatchMovie = (slug: string | undefined, episode: string | undefi let wakeLock: any = null; const requestWakeLock = async () => { + if (wakeLock !== null) return; try { if ('wakeLock' in navigator) { wakeLock = await (navigator as any).wakeLock.request('screen'); @@ -105,7 +106,7 @@ export const useWatchMovie = (slug: string | undefined, episode: string | undefi wakeLock = null; // console.log('Wake Lock released'); } catch (err) { - console.warn('Wake Lock release failed:', err); + // console.warn('Wake Lock release failed:', err); } } }; @@ -119,6 +120,11 @@ export const useWatchMovie = (slug: string | undefined, episode: string | undefi video.addEventListener('pause', onPause); video.addEventListener('ended', onEnded); + // If already playing (HLS might auto-start before this effect) + if (!video.paused) { + requestWakeLock(); + } + // Re-acquire on visibility change if playing const onVisibilityChange = () => { if (document.visibilityState === 'visible' && !video.paused) { @@ -135,7 +141,7 @@ export const useWatchMovie = (slug: string | undefined, episode: string | undefi releaseWakeLock(); }; } - }, [source]); // Re-run when source changes (new video loaded) + }, [source]); return { movie,