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,6 +192,7 @@ fun EpisodesOverviewList(
key = { item -> item.episode.episode } key = { item -> item.episode.episode }
) { index, episode -> ) { index, episode ->
EpisodeInfo( EpisodeInfo(
if (isTv) {
Modifier.onFocusChanged { state -> Modifier.onFocusChanged { state ->
if (state.isFocused) focusedIndex = index if (state.isFocused) focusedIndex = index
}.then( }.then(
@@ -198,7 +201,10 @@ fun EpisodesOverviewList(
} else { } else {
Modifier Modifier
} }
), )
} else {
Modifier
},
onLaunch, onLaunch,
episode, episode,
onClipboardAction, onClipboardAction,
@@ -210,12 +216,13 @@ 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()
} }