fix episode overview focus on mobile
This commit is contained in:
+21
-14
@@ -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()
|
||||||
|
|||||||
Reference in New Issue
Block a user