fix episode overview focus on mobile

This commit is contained in:
2026-08-23 15:59:36 +03:00
parent ebe29671d6
commit 996d5eeff3
@@ -52,6 +52,7 @@ import ru.shadowsparky.ui.components.ExpressiveLazyColumn
import ru.shadowsparky.ui.components.IconButton import ru.shadowsparky.ui.components.IconButton
import ru.shadowsparky.ui.components.Loading import ru.shadowsparky.ui.components.Loading
import ru.shadowsparky.ui.components.TopAppBar import ru.shadowsparky.ui.components.TopAppBar
import ru.shadowsparky.ui.components.isTv
import ru.shadowsparky.vbox.shared.domain.OfflineState import ru.shadowsparky.vbox.shared.domain.OfflineState
import ru.shadowsparky.vbox.shared.domain.OfflineVideo import ru.shadowsparky.vbox.shared.domain.OfflineVideo
import ru.shadowsparky.vbox.shared.domain.model.Episode import ru.shadowsparky.vbox.shared.domain.model.Episode
@@ -170,6 +171,7 @@ fun EpisodesOverviewList(
isSaveMode: Boolean, isSaveMode: Boolean,
onOfflineClicked: (EpisodeWithOfflineInfo) -> Unit onOfflineClicked: (EpisodeWithOfflineInfo) -> Unit
) { ) {
val isTv = isTv()
if (errorCode != null) { if (errorCode != null) {
ErrorContent( ErrorContent(
errorCode, errorCode,
@@ -190,15 +192,19 @@ fun EpisodesOverviewList(
key = { item -> item.episode.episode } key = { item -> item.episode.episode }
) { index, episode -> ) { index, episode ->
EpisodeInfo( EpisodeInfo(
Modifier.onFocusChanged { state -> if (isTv) {
if (state.isFocused) focusedIndex = index Modifier.onFocusChanged { state ->
}.then( if (state.isFocused) focusedIndex = index
if (index == focusedIndex) { }.then(
Modifier.focusRequester(requester) if (index == focusedIndex) {
} else { Modifier.focusRequester(requester)
Modifier } else {
} Modifier
), }
)
} else {
Modifier
},
onLaunch, onLaunch,
episode, episode,
onClipboardAction, onClipboardAction,
@@ -210,11 +216,12 @@ fun EpisodesOverviewList(
} }
} }
LaunchedEffect(episodes) { LaunchedEffect(episodes) {
if (episodes.isEmpty()) return@LaunchedEffect if (isTv && episodes.isNotEmpty()) {
val index = focusedIndex.coerceIn(episodes.indices) val index = focusedIndex.coerceIn(episodes.indices)
lazyListState.scrollToItem(index) lazyListState.scrollToItem(index)
withFrameNanos {} withFrameNanos {}
requester.requestFocus() requester.requestFocus()
}
} }
} else { } else {
Loading() Loading()