refactor(tv): improve focus management and clean up unused focus requesters

This commit is contained in:
2026-05-01 12:54:44 +02:00
parent 7401f986c6
commit 2ff6fe997e
2 changed files with 10 additions and 18 deletions

View File

@@ -42,6 +42,7 @@ import androidx.compose.ui.input.key.key
import androidx.compose.ui.input.key.onPreviewKeyEvent import androidx.compose.ui.input.key.onPreviewKeyEvent
import androidx.compose.ui.input.key.type import androidx.compose.ui.input.key.type
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalFocusManager
import androidx.compose.ui.platform.testTag import androidx.compose.ui.platform.testTag
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.viewinterop.AndroidView import androidx.compose.ui.viewinterop.AndroidView
@@ -85,9 +86,13 @@ fun TvPlayerScreen(
val controlsAutoHideBlocked = isPlaylistExpanded || trackPanelType != null val controlsAutoHideBlocked = isPlaylistExpanded || trackPanelType != null
val context = LocalContext.current val context = LocalContext.current
LaunchedEffect(Unit) { val focusManager = LocalFocusManager.current
viewModel.setControlsAutoHideDelay(TV_CONTROLS_AUTO_HIDE_MS) 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) { LaunchedEffect(uiState.isPlaying) {
val activity = context as? Activity val activity = context as? Activity
if (uiState.isPlaying) { 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 = { val expandPlaylist: () -> Unit = {
if (!isPlaylistExpanded) { if (!isPlaylistExpanded) {
isPlaylistExpanded = true isPlaylistExpanded = true
@@ -194,7 +193,7 @@ fun TvPlayerScreen(
skipButtonFocusRequester.requestFocus() skipButtonFocusRequester.requestFocus()
return@LaunchedEffect return@LaunchedEffect
} }
hiddenControlFocusRequester.requestFocus() focusManager.clearFocus()
} }
} }
@@ -243,7 +242,7 @@ fun TvPlayerScreen(
modifier = Modifier modifier = Modifier
.fillMaxSize() .fillMaxSize()
.background(Color.Black) .background(Color.Black)
.focusRequester(hiddenControlFocusRequester) .focusRequester(rootFocusRequester)
.onPreviewKeyEvent { event -> .onPreviewKeyEvent { event ->
handleTvPlayerRootKeyEvent( handleTvPlayerRootKeyEvent(
event = event, event = event,

View File

@@ -103,13 +103,6 @@ internal fun TvSeasonTabs(
Modifier Modifier
} }
) )
.then(
if (index == 0 && firstItemTestTag != null) {
Modifier.testTag(firstItemTestTag)
} else {
Modifier
}
)
) )
} }
} }