diff --git a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/SharedLauncherActivity.kt b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/SharedLauncherActivity.kt index 3065d52c..2a07c0fb 100644 --- a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/SharedLauncherActivity.kt +++ b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/SharedLauncherActivity.kt @@ -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 { diff --git a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/sheets/LauncherBottomSheetManager.kt b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/sheets/LauncherBottomSheetManager.kt index d618f892..68e7b906 100644 --- a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/sheets/LauncherBottomSheetManager.kt +++ b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/sheets/LauncherBottomSheetManager.kt @@ -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(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() } \ No newline at end of file +val LocalBottomSheetManager = staticCompositionLocalOf { throw IllegalStateException("No BottomSheetManager provided") } \ No newline at end of file