Save bottom sheet state

This commit is contained in:
MM20 2023-04-05 18:24:52 +02:00
parent b359cf8897
commit ca29a908aa
No known key found for this signature in database
GPG Key ID: 0B61A8F2DEAFA389
2 changed files with 43 additions and 3 deletions

View File

@ -84,7 +84,7 @@ abstract class SharedLauncherActivity(
viewModel.setSystemInDarkMode(resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK == Configuration.UI_MODE_NIGHT_YES) viewModel.setSystemInDarkMode(resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK == Configuration.UI_MODE_NIGHT_YES)
val bottomSheetManager = LauncherBottomSheetManager() val bottomSheetManager = LauncherBottomSheetManager(this)
val gestureDetector = GestureDetector() val gestureDetector = GestureDetector()
setContent { setContent {

View File

@ -1,17 +1,48 @@
package de.mm20.launcher2.ui.launcher.sheets package de.mm20.launcher2.ui.launcher.sheets
import android.os.Bundle
import androidx.compose.runtime.compositionLocalOf import androidx.compose.runtime.compositionLocalOf
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.staticCompositionLocalOf
import androidx.core.os.bundleOf
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleEventObserver
import androidx.savedstate.SavedStateRegistry
import androidx.savedstate.SavedStateRegistryOwner
import de.mm20.launcher2.search.SavableSearchable import de.mm20.launcher2.search.SavableSearchable
class LauncherBottomSheetManager { class LauncherBottomSheetManager(registryOwner: SavedStateRegistryOwner) :
SavedStateRegistry.SavedStateProvider {
val customizeSearchableSheetShown = mutableStateOf<SavableSearchable?>(null) val customizeSearchableSheetShown = mutableStateOf<SavableSearchable?>(null)
val editFavoritesSheetShown = mutableStateOf(false) val editFavoritesSheetShown = mutableStateOf(false)
val hiddenItemsSheetShown = mutableStateOf(false) val hiddenItemsSheetShown = mutableStateOf(false)
init {
registryOwner.lifecycle.addObserver(LifecycleEventObserver { _, event ->
if (event == Lifecycle.Event.ON_CREATE) {
val registry = registryOwner.savedStateRegistry
registry.registerSavedStateProvider(PROVIDER, this)
val state = registry.consumeRestoredStateForKey(PROVIDER)
editFavoritesSheetShown.value = state?.getBoolean(FAVORITES) ?: false
hiddenItemsSheetShown.value = state?.getBoolean(HIDDEN) ?: false
}
})
}
override fun saveState(): Bundle {
return bundleOf(
FAVORITES to editFavoritesSheetShown.value,
HIDDEN to hiddenItemsSheetShown.value
)
}
fun showCustomizeSearchableModal(item: SavableSearchable) { fun showCustomizeSearchableModal(item: SavableSearchable) {
customizeSearchableSheetShown.value = item customizeSearchableSheetShown.value = item
} }
fun dismissCustomizeSearchableModal() { fun dismissCustomizeSearchableModal() {
customizeSearchableSheetShown.value = null customizeSearchableSheetShown.value = null
} }
@ -19,6 +50,7 @@ class LauncherBottomSheetManager {
fun showEditFavoritesSheet() { fun showEditFavoritesSheet() {
editFavoritesSheetShown.value = true editFavoritesSheetShown.value = true
} }
fun dismissEditFavoritesSheet() { fun dismissEditFavoritesSheet() {
editFavoritesSheetShown.value = false editFavoritesSheetShown.value = false
} }
@ -26,9 +58,17 @@ class LauncherBottomSheetManager {
fun showHiddenItemsSheet() { fun showHiddenItemsSheet() {
hiddenItemsSheetShown.value = true hiddenItemsSheetShown.value = true
} }
fun dismissHiddenItemsSheet() { fun dismissHiddenItemsSheet() {
hiddenItemsSheetShown.value = false hiddenItemsSheetShown.value = false
} }
companion object {
private const val PROVIDER = "bottom_sheet_manager"
private const val FAVORITES = "favorites"
private const val HIDDEN = "hidden"
}
} }
val LocalBottomSheetManager = compositionLocalOf { LauncherBottomSheetManager() } val LocalBottomSheetManager = staticCompositionLocalOf<LauncherBottomSheetManager> { throw IllegalStateException("No BottomSheetManager provided") }