From 2ff6fe997e03af50c6fb015330653c2f38413210 Mon Sep 17 00:00:00 2001 From: Barnabas Balogh Date: Fri, 1 May 2026 12:54:44 +0200 Subject: [PATCH] refactor(tv): improve focus management and clean up unused focus requesters --- .../ui/screen/player/TvPlayerScreen.kt | 21 +++++++++---------- .../series/components/TvSeriesComponents.kt | 7 ------- 2 files changed, 10 insertions(+), 18 deletions(-) diff --git a/app-tv/src/main/java/hu/bbara/purefin/ui/screen/player/TvPlayerScreen.kt b/app-tv/src/main/java/hu/bbara/purefin/ui/screen/player/TvPlayerScreen.kt index f620deab..e46481b8 100644 --- a/app-tv/src/main/java/hu/bbara/purefin/ui/screen/player/TvPlayerScreen.kt +++ b/app-tv/src/main/java/hu/bbara/purefin/ui/screen/player/TvPlayerScreen.kt @@ -42,6 +42,7 @@ 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.platform.LocalContext +import androidx.compose.ui.platform.LocalFocusManager import androidx.compose.ui.platform.testTag import androidx.compose.ui.unit.dp import androidx.compose.ui.viewinterop.AndroidView @@ -85,9 +86,13 @@ fun TvPlayerScreen( val controlsAutoHideBlocked = isPlaylistExpanded || trackPanelType != null val context = LocalContext.current - LaunchedEffect(Unit) { - viewModel.setControlsAutoHideDelay(TV_CONTROLS_AUTO_HIDE_MS) - } + val focusManager = LocalFocusManager.current + val rootFocusRequester = remember { FocusRequester() } + val controlsFocusRequester = remember { FocusRequester() } + val qualityButtonFocusRequester = remember { FocusRequester() } + val audioButtonFocusRequester = remember { FocusRequester() } + val subtitlesButtonFocusRequester = remember { FocusRequester() } + val skipButtonFocusRequester = remember { FocusRequester() } LaunchedEffect(uiState.isPlaying) { val activity = context as? Activity if (uiState.isPlaying) { @@ -115,12 +120,6 @@ fun TvPlayerScreen( ) } - val hiddenControlFocusRequester = remember { FocusRequester() } - val controlsFocusRequester = remember { FocusRequester() } - val qualityButtonFocusRequester = remember { FocusRequester() } - val audioButtonFocusRequester = remember { FocusRequester() } - val subtitlesButtonFocusRequester = remember { FocusRequester() } - val skipButtonFocusRequester = remember { FocusRequester() } val expandPlaylist: () -> Unit = { if (!isPlaylistExpanded) { isPlaylistExpanded = true @@ -194,7 +193,7 @@ fun TvPlayerScreen( skipButtonFocusRequester.requestFocus() return@LaunchedEffect } - hiddenControlFocusRequester.requestFocus() + focusManager.clearFocus() } } @@ -243,7 +242,7 @@ fun TvPlayerScreen( modifier = Modifier .fillMaxSize() .background(Color.Black) - .focusRequester(hiddenControlFocusRequester) + .focusRequester(rootFocusRequester) .onPreviewKeyEvent { event -> handleTvPlayerRootKeyEvent( event = event, diff --git a/app-tv/src/main/java/hu/bbara/purefin/ui/screen/series/components/TvSeriesComponents.kt b/app-tv/src/main/java/hu/bbara/purefin/ui/screen/series/components/TvSeriesComponents.kt index 12197b11..1150b4c6 100644 --- a/app-tv/src/main/java/hu/bbara/purefin/ui/screen/series/components/TvSeriesComponents.kt +++ b/app-tv/src/main/java/hu/bbara/purefin/ui/screen/series/components/TvSeriesComponents.kt @@ -103,13 +103,6 @@ internal fun TvSeasonTabs( Modifier } ) - .then( - if (index == 0 && firstItemTestTag != null) { - Modifier.testTag(firstItemTestTag) - } else { - Modifier - } - ) ) } }