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)
val bottomSheetManager = LauncherBottomSheetManager()
val bottomSheetManager = LauncherBottomSheetManager(this)
val gestureDetector = GestureDetector()
setContent {

View File

@ -1,17 +1,48 @@
package de.mm20.launcher2.ui.launcher.sheets
import android.os.Bundle
import androidx.compose.runtime.compositionLocalOf
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
class LauncherBottomSheetManager {
class LauncherBottomSheetManager(registryOwner: SavedStateRegistryOwner) :
SavedStateRegistry.SavedStateProvider {
val customizeSearchableSheetShown = mutableStateOf<SavableSearchable?>(null)
val editFavoritesSheetShown = 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) {
customizeSearchableSheetShown.value = item
}
fun dismissCustomizeSearchableModal() {
customizeSearchableSheetShown.value = null
}
@ -19,6 +50,7 @@ class LauncherBottomSheetManager {
fun showEditFavoritesSheet() {
editFavoritesSheetShown.value = true
}
fun dismissEditFavoritesSheet() {
editFavoritesSheetShown.value = false
}
@ -26,9 +58,17 @@ class LauncherBottomSheetManager {
fun showHiddenItemsSheet() {
hiddenItemsSheetShown.value = true
}
fun dismissHiddenItemsSheet() {
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") }