Use RememberTabManager

This commit is contained in:
Damontecres 2025-10-22 19:27:18 -04:00
parent 5681710b7a
commit 89d8f50a4b
No known key found for this signature in database

View file

@ -23,7 +23,6 @@ import androidx.compose.ui.focus.focusRequester
import androidx.compose.ui.focus.focusRestorer import androidx.compose.ui.focus.focusRestorer
import androidx.compose.ui.focus.onFocusChanged import androidx.compose.ui.focus.onFocusChanged
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.datastore.core.DataStore
import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
import androidx.lifecycle.MutableLiveData import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
@ -37,9 +36,7 @@ import androidx.tv.material3.Text
import com.github.damontecres.wholphin.data.ServerRepository import com.github.damontecres.wholphin.data.ServerRepository
import com.github.damontecres.wholphin.data.model.BaseItem import com.github.damontecres.wholphin.data.model.BaseItem
import com.github.damontecres.wholphin.data.model.GetItemsFilter import com.github.damontecres.wholphin.data.model.GetItemsFilter
import com.github.damontecres.wholphin.preferences.AppPreferences
import com.github.damontecres.wholphin.preferences.UserPreferences import com.github.damontecres.wholphin.preferences.UserPreferences
import com.github.damontecres.wholphin.preferences.rememberTab
import com.github.damontecres.wholphin.ui.components.CollectionFolderGrid import com.github.damontecres.wholphin.ui.components.CollectionFolderGrid
import com.github.damontecres.wholphin.ui.components.ErrorMessage import com.github.damontecres.wholphin.ui.components.ErrorMessage
import com.github.damontecres.wholphin.ui.detail.livetv.DvrSchedule import com.github.damontecres.wholphin.ui.detail.livetv.DvrSchedule
@ -50,6 +47,7 @@ import com.github.damontecres.wholphin.ui.nav.Destination
import com.github.damontecres.wholphin.ui.nav.NavigationManager import com.github.damontecres.wholphin.ui.nav.NavigationManager
import com.github.damontecres.wholphin.ui.setValueOnMain import com.github.damontecres.wholphin.ui.setValueOnMain
import com.github.damontecres.wholphin.ui.tryRequestFocus import com.github.damontecres.wholphin.ui.tryRequestFocus
import com.github.damontecres.wholphin.util.RememberTabManager
import dagger.hilt.android.lifecycle.HiltViewModel import dagger.hilt.android.lifecycle.HiltViewModel
import org.jellyfin.sdk.api.client.ApiClient import org.jellyfin.sdk.api.client.ApiClient
import org.jellyfin.sdk.api.client.extensions.liveTvApi import org.jellyfin.sdk.api.client.extensions.liveTvApi
@ -63,8 +61,9 @@ class LiveTvCollectionViewModel
val api: ApiClient, val api: ApiClient,
val serverRepository: ServerRepository, val serverRepository: ServerRepository,
val navigationManager: NavigationManager, val navigationManager: NavigationManager,
val preferenceDataStore: DataStore<AppPreferences>, val rememberTabManager: RememberTabManager,
) : ViewModel() { ) : ViewModel(),
RememberTabManager by rememberTabManager {
val recordingFolders = MutableLiveData<List<TabId>>() val recordingFolders = MutableLiveData<List<TabId>>()
init { init {
@ -91,13 +90,8 @@ fun CollectionFolderLiveTv(
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
viewModel: LiveTvCollectionViewModel = hiltViewModel(), viewModel: LiveTvCollectionViewModel = hiltViewModel(),
) { ) {
val uiPrefs = preferences.appPreferences.interfacePreferences
val rememberedTabIndex = val rememberedTabIndex =
if (uiPrefs.rememberSelectedTab) { remember { viewModel.getRememberedTab(preferences, destination.itemId, 0) }
uiPrefs.getRememberedTabsOrDefault(destination.itemId.toString(), 0)
} else {
0
}
val folders by viewModel.recordingFolders.observeAsState(listOf()) val folders by viewModel.recordingFolders.observeAsState(listOf())
val tabs = val tabs =
@ -113,12 +107,8 @@ fun CollectionFolderLiveTv(
val firstTabFocusRequester = remember { FocusRequester() } val firstTabFocusRequester = remember { FocusRequester() }
LaunchedEffect(Unit) { firstTabFocusRequester.tryRequestFocus() } LaunchedEffect(Unit) { firstTabFocusRequester.tryRequestFocus() }
if (uiPrefs.rememberSelectedTab) {
LaunchedEffect(selectedTabIndex) { LaunchedEffect(selectedTabIndex) {
viewModel.preferenceDataStore.updateData { viewModel.saveRememberedTab(preferences, destination.itemId, selectedTabIndex)
preferences.appPreferences.rememberTab(destination.itemId, selectedTabIndex)
}
}
} }
val onClickItem = { item: BaseItem -> val onClickItem = { item: BaseItem ->
viewModel.navigationManager.navigateTo(item.destination()) viewModel.navigationManager.navigateTo(item.destination())
@ -210,7 +200,7 @@ fun CollectionFolderLiveTv(
if (folderIndex in folders.indices) { if (folderIndex in folders.indices) {
CollectionFolderGrid( CollectionFolderGrid(
preferences = preferences, preferences = preferences,
onClickItem = { viewModel.navigationManager.navigateTo(it.destination()) }, onClickItem = onClickItem,
itemId = folders[folderIndex].id, itemId = folders[folderIndex].id,
item = null, item = null,
initialFilter = GetItemsFilter(), initialFilter = GetItemsFilter(),