mirror of
https://github.com/JustinZeus/Wholphin.git
synced 2026-11-08 16:28:36 +01:00
Fix possible crash if remembered tab no longer exists (#1613)
## Description If remember tabs is enabled and the current remembered index is somehow removed, the app would crash. I think the only way a regular user can encounter this is if the server removes a live TV recording folder that the user has selected/remembered. All other tabbed pages use a fixed list. ### Related issues None ### Testing Emulator ## Screenshots N/A ## AI or LLM usage None
This commit is contained in:
parent
f21b29fe1b
commit
7422f15bff
1 changed files with 11 additions and 4 deletions
|
|
@ -37,10 +37,14 @@ class TabViewModel
|
||||||
private val rememberedTabService: RememberedTabService,
|
private val rememberedTabService: RememberedTabService,
|
||||||
private val backdropService: BackdropService,
|
private val backdropService: BackdropService,
|
||||||
@param:Assisted private val itemId: String,
|
@param:Assisted private val itemId: String,
|
||||||
|
@param:Assisted private val tabCount: Int,
|
||||||
) : ViewModel() {
|
) : ViewModel() {
|
||||||
@AssistedFactory
|
@AssistedFactory
|
||||||
interface Factory {
|
interface Factory {
|
||||||
fun create(itemId: String): TabViewModel
|
fun create(
|
||||||
|
itemId: String,
|
||||||
|
tabCount: Int,
|
||||||
|
): TabViewModel
|
||||||
}
|
}
|
||||||
|
|
||||||
private val _state = MutableStateFlow<Int>(UNSET)
|
private val _state = MutableStateFlow<Int>(UNSET)
|
||||||
|
|
@ -52,7 +56,9 @@ class TabViewModel
|
||||||
if (shouldRememberTabs()) {
|
if (shouldRememberTabs()) {
|
||||||
Timber.v("Getting remembered tab for %s", itemId)
|
Timber.v("Getting remembered tab for %s", itemId)
|
||||||
try {
|
try {
|
||||||
rememberedTabService.getRememberedTab(itemId)
|
rememberedTabService
|
||||||
|
.getRememberedTab(itemId)
|
||||||
|
?.coerceIn(0..<tabCount)
|
||||||
} catch (ex: Exception) {
|
} catch (ex: Exception) {
|
||||||
Timber.e(ex, "Error getting tab for %s", itemId)
|
Timber.e(ex, "Error getting tab for %s", itemId)
|
||||||
null
|
null
|
||||||
|
|
@ -106,12 +112,13 @@ fun TabbedPage(
|
||||||
showTabs: Boolean = true,
|
showTabs: Boolean = true,
|
||||||
viewModel: TabViewModel =
|
viewModel: TabViewModel =
|
||||||
hiltViewModel<TabViewModel, TabViewModel.Factory>(
|
hiltViewModel<TabViewModel, TabViewModel.Factory>(
|
||||||
key = itemId,
|
key = "$itemId-${tabs.size}",
|
||||||
creationCallback = { it.create(itemId) },
|
creationCallback = { it.create(itemId, tabs.size) },
|
||||||
),
|
),
|
||||||
tabContent: @Composable (Int, TabDetails) -> Unit,
|
tabContent: @Composable (Int, TabDetails) -> Unit,
|
||||||
) {
|
) {
|
||||||
val selectedTabIndex by viewModel.state.collectAsState()
|
val selectedTabIndex by viewModel.state.collectAsState()
|
||||||
|
|
||||||
Column(
|
Column(
|
||||||
modifier = modifier,
|
modifier = modifier,
|
||||||
) {
|
) {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue