From e288007454ed814dc5ae0fbb7ee4dedfec8b2f78 Mon Sep 17 00:00:00 2001 From: WardPearce Date: Fri, 2 Jan 2026 21:06:09 +1300 Subject: [PATCH] Hide UI after X seconds on Android --- materialious/src/lib/components/Player.svelte | 49 +++++++++++-------- 1 file changed, 28 insertions(+), 21 deletions(-) diff --git a/materialious/src/lib/components/Player.svelte b/materialious/src/lib/components/Player.svelte index deb01c38..538cb8c9 100644 --- a/materialious/src/lib/components/Player.svelte +++ b/materialious/src/lib/components/Player.svelte @@ -98,6 +98,11 @@ let playerVideoEndTimePretty: string = $state(''); let playerBufferedTo: number = $state(0); let playerCloestTimestamp: Timestamp | undefined = $state(); + let playerControls: HTMLElement | undefined = $state(); + + // eslint-disable-next-line no-undef + let playerAndroidUITimeout: NodeJS.Timeout; + let playerAndroidforceHideControls = $state(false); let clickCount = $state(0); // eslint-disable-next-line no-undef @@ -951,12 +956,22 @@ playerTimelineTooltipVisible = false; } - let androidFirstTap = true; function onVideoClick( event: MouseEvent & { currentTarget: EventTarget & HTMLDivElement; } ) { + if (Capacitor.getPlatform() === 'android') { + if (playerAndroidUITimeout) { + clearTimeout(playerAndroidUITimeout); + playerAndroidforceHideControls = false; + } + + playerAndroidUITimeout = setTimeout(() => { + playerAndroidforceHideControls = true; + }, 3000); + } + if ( event.target && event.target instanceof HTMLElement && @@ -965,13 +980,6 @@ ) { clickCount++; - // Force android to tap an addtional time. - if (Capacitor.getPlatform() === 'android' && androidFirstTap) { - clickCount = 0; - androidFirstTap = false; - return; - } - const container = event.currentTarget; const rect = container.getBoundingClientRect(); @@ -984,18 +992,6 @@ if (clickCount == 1) { toggleVideoPlaybackStatus(); } - - if ( - Capacitor.getPlatform() === 'android' && - event.target && - event.target instanceof HTMLElement && - parseFloat(getComputedStyle(event.target).opacity) > 0 - ) { - androidFirstTap = false; - } else { - androidFirstTap = true; - } - clickCount = 0; }, 200); @@ -1061,8 +1057,10 @@ class:contain-video={!$isAndroidTvStore} class:tv-contain-video={$isAndroidTvStore} class:hide={showVideoRetry} + class:force-hide-controls={playerAndroidforceHideControls} role="presentation" onclick={onVideoClick} + bind:this={playerContainer} >