From 71d2ef953408ee1d48327a971765fd43ad2c8ae6 Mon Sep 17 00:00:00 2001 From: Barnabas Balogh Date: Fri, 27 Feb 2026 18:11:23 +0100 Subject: [PATCH] feat: Show TV player controls on D-pad or OK button press --- .../bbara/purefin/tv/player/TvPlayerScreen.kt | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/app-tv/src/main/java/hu/bbara/purefin/tv/player/TvPlayerScreen.kt b/app-tv/src/main/java/hu/bbara/purefin/tv/player/TvPlayerScreen.kt index 5e4a6e5..9f1d150 100644 --- a/app-tv/src/main/java/hu/bbara/purefin/tv/player/TvPlayerScreen.kt +++ b/app-tv/src/main/java/hu/bbara/purefin/tv/player/TvPlayerScreen.kt @@ -15,6 +15,7 @@ import androidx.compose.foundation.Canvas import androidx.compose.foundation.background import androidx.compose.foundation.border import androidx.compose.foundation.clickable +import androidx.compose.foundation.focusable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column @@ -66,7 +67,14 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip +import androidx.compose.ui.focus.FocusRequester +import androidx.compose.ui.focus.focusRequester import androidx.compose.ui.focus.onFocusChanged +import androidx.compose.ui.input.key.Key +import androidx.compose.ui.input.key.KeyEventType +import androidx.compose.ui.input.key.key +import androidx.compose.ui.input.key.onPreviewKeyEvent +import androidx.compose.ui.input.key.type import androidx.compose.ui.geometry.Offset import androidx.compose.ui.geometry.Size import androidx.compose.ui.graphics.Brush @@ -128,10 +136,32 @@ fun TvPlayerScreen( if (uiState.isPlaying) showQueuePanel = false } + val focusRequester = remember { FocusRequester() } + LaunchedEffect(Unit) { + focusRequester.requestFocus() + } + Box( modifier = Modifier .fillMaxSize() .background(Color.Black) + .focusRequester(focusRequester) + .onPreviewKeyEvent { event -> + if (!controlsVisible && event.type == KeyEventType.KeyDown) { + when (event.key) { + Key.DirectionUp, Key.DirectionDown, + Key.DirectionLeft, Key.DirectionRight, + Key.DirectionCenter, Key.Enter -> { + viewModel.showControls() + true + } + else -> false + } + } else { + false + } + } + .focusable() ) { AndroidView( factory = { ctx ->