Make bottom sheets immune to scrolling

Fix #202, #204
This commit is contained in:
MM20 2022-11-19 19:05:42 +01:00
parent d07f0b3049
commit cea524802e
No known key found for this signature in database
GPG Key ID: 0B61A8F2DEAFA389
20 changed files with 94 additions and 158 deletions

View File

@ -42,6 +42,11 @@ import de.mm20.launcher2.ui.base.ProvideCurrentTime
import de.mm20.launcher2.ui.base.ProvideSettings
import de.mm20.launcher2.ui.component.NavBarEffects
import de.mm20.launcher2.ui.ktx.animateTo
import de.mm20.launcher2.ui.launcher.sheets.CustomizeSearchableSheet
import de.mm20.launcher2.ui.launcher.sheets.EditFavoritesSheet
import de.mm20.launcher2.ui.launcher.sheets.HiddenItemsSheet
import de.mm20.launcher2.ui.launcher.sheets.LauncherBottomSheetManager
import de.mm20.launcher2.ui.launcher.sheets.LocalBottomSheetManager
import de.mm20.launcher2.ui.launcher.transitions.HomeTransition
import de.mm20.launcher2.ui.launcher.transitions.HomeTransitionManager
import de.mm20.launcher2.ui.launcher.transitions.LocalHomeTransitionManager
@ -75,6 +80,8 @@ abstract class SharedLauncherActivity(
viewModel.setSystemInDarkMode(resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK == Configuration.UI_MODE_NIGHT_YES)
val bottomSheetManager = LauncherBottomSheetManager()
setContent {
val snackbarHostState = remember { SnackbarHostState() }
val wallpaperColors by wallpaperColorsAsState()
@ -85,6 +92,7 @@ abstract class SharedLauncherActivity(
LocalSnackbarHostState provides snackbarHostState,
LocalWallpaperColors provides wallpaperColors,
LocalPreferDarkContentOverWallpaper provides (!dimBackground && wallpaperColors.supportsDarkText),
LocalBottomSheetManager provides bottomSheetManager,
) {
LauncherTheme {
ProvideCurrentTime {
@ -215,6 +223,13 @@ abstract class SharedLauncherActivity(
it.icon?.invoke(Offset(dX, dY)) { enterTransitionProgress.value }
}
}
bottomSheetManager.customizeSearchableSheetShown.value?.let {
CustomizeSearchableSheet(searchable = it, onDismiss = { bottomSheetManager.dismissCustomizeSearchableModal() })
}
if (bottomSheetManager.editFavoritesSheetShown.value) {
EditFavoritesSheet(onDismiss = { bottomSheetManager.dismissEditFavoritesSheet() })
}
}
}
}

View File

@ -48,7 +48,6 @@ import de.mm20.launcher2.ui.component.Banner
import de.mm20.launcher2.ui.component.LauncherCard
import de.mm20.launcher2.ui.component.MissingPermissionBanner
import de.mm20.launcher2.ui.component.PartialLauncherCard
import de.mm20.launcher2.ui.launcher.modals.EditFavoritesSheet
import de.mm20.launcher2.ui.launcher.search.calculator.CalculatorItem
import de.mm20.launcher2.ui.launcher.search.common.grid.GridItem
import de.mm20.launcher2.ui.launcher.search.common.list.ListItem
@ -56,6 +55,8 @@ import de.mm20.launcher2.ui.launcher.search.favorites.SearchFavoritesVM
import de.mm20.launcher2.ui.launcher.search.unitconverter.UnitConverterItem
import de.mm20.launcher2.ui.launcher.search.website.WebsiteItem
import de.mm20.launcher2.ui.launcher.search.wikipedia.WikipediaItem
import de.mm20.launcher2.ui.launcher.sheets.HiddenItemsSheet
import de.mm20.launcher2.ui.launcher.sheets.LocalBottomSheetManager
import de.mm20.launcher2.ui.locals.LocalGridSettings
import kotlinx.collections.immutable.ImmutableList
import kotlinx.collections.immutable.toImmutableList
@ -91,6 +92,7 @@ fun SearchColumn(
val calculator by viewModel.calculatorResults.observeAsState(emptyList())
val wikipedia by viewModel.wikipediaResults.observeAsState(emptyList())
val website by viewModel.websiteResults.observeAsState(emptyList())
val hiddenResults by viewModel.hiddenResults.observeAsState(emptyList())
val isSearchEmpty by viewModel.isSearchEmpty.observeAsState(true)
@ -99,8 +101,6 @@ fun SearchColumn(
val missingContactsPermission by viewModel.missingContactsPermission.collectAsState(false)
val missingFilesPermission by viewModel.missingFilesPermission.collectAsState(false)
var showEditFavoritesDialog by remember { mutableStateOf(false) }
val pinnedTags by favoritesVM.pinnedTags.collectAsState(emptyList())
val selectedTag by favoritesVM.selectedTag.collectAsState(null)
val tagsScrollState = rememberScrollState()
@ -178,9 +178,10 @@ fun SearchColumn(
}
}
if (favoritesEditButton) {
val sheetManager = LocalBottomSheetManager.current
SmallFloatingActionButton(
elevation = FloatingActionButtonDefaults.bottomAppBarFabElevation(),
onClick = { showEditFavoritesDialog = true }
onClick = { sheetManager.showEditFavoritesSheet() }
) {
Icon(
imageVector = Icons.Rounded.Edit,
@ -359,10 +360,9 @@ fun SearchColumn(
)
}
if (showEditFavoritesDialog) {
EditFavoritesSheet(
onDismiss = { showEditFavoritesDialog = false }
)
val sheetManager = LocalBottomSheetManager.current
if (sheetManager.hiddenItemsSheetShown.value) {
HiddenItemsSheet(items = hiddenResults, onDismiss = { sheetManager.dismissHiddenItemsSheet() })
}
}

View File

@ -28,7 +28,7 @@ import de.mm20.launcher2.ui.R
import de.mm20.launcher2.ui.component.*
import de.mm20.launcher2.ui.ktx.toDp
import de.mm20.launcher2.ui.ktx.toPixels
import de.mm20.launcher2.ui.launcher.search.common.customattrs.CustomizeSearchableSheet
import de.mm20.launcher2.ui.launcher.sheets.LocalBottomSheetManager
import de.mm20.launcher2.ui.locals.LocalFavoritesEnabled
import de.mm20.launcher2.ui.locals.LocalGridSettings
import de.mm20.launcher2.ui.locals.LocalSnackbarHostState
@ -48,8 +48,6 @@ fun AppItem(
val lifecycleOwner = LocalLifecycleOwner.current
val snackbarHostState = LocalSnackbarHostState.current
var edit by remember { mutableStateOf(false) }
val scope = rememberCoroutineScope()
Column(
modifier = modifier
@ -228,10 +226,11 @@ fun AppItem(
)
)
val sheetManager = LocalBottomSheetManager.current
toolbarActions.add(DefaultToolbarAction(
label = stringResource(R.string.menu_customize),
icon = Icons.Rounded.Edit,
action = { edit = true }
action = { sheetManager.showCustomizeSearchableModal(app) }
))
val storeDetails = remember(app) { app.getStoreDetails(context) }
@ -325,13 +324,6 @@ fun AppItem(
rightActions = toolbarActions
)
}
if (edit) {
CustomizeSearchableSheet(
searchable = app,
onDismiss = { edit = false }
)
}
}
@Composable

View File

@ -29,7 +29,7 @@ import de.mm20.launcher2.ui.component.DefaultToolbarAction
import de.mm20.launcher2.ui.component.Toolbar
import de.mm20.launcher2.ui.component.ToolbarAction
import de.mm20.launcher2.ui.ktx.toDp
import de.mm20.launcher2.ui.launcher.search.common.customattrs.CustomizeSearchableSheet
import de.mm20.launcher2.ui.launcher.sheets.LocalBottomSheetManager
import de.mm20.launcher2.ui.locals.LocalDarkTheme
import de.mm20.launcher2.ui.locals.LocalFavoritesEnabled
import de.mm20.launcher2.ui.locals.LocalSnackbarHostState
@ -49,8 +49,6 @@ fun CalendarItem(
val lifecycleOwner = LocalLifecycleOwner.current
val snackbarHostState = LocalSnackbarHostState.current
var edit by remember { mutableStateOf(false) }
val darkMode = LocalDarkTheme.current
Row(
@ -237,10 +235,11 @@ fun CalendarItem(
)
)
val sheetManager = LocalBottomSheetManager.current
toolbarActions.add(DefaultToolbarAction(
label = stringResource(R.string.menu_customize),
icon = Icons.Rounded.Edit,
action = { edit = true }
action = { sheetManager.showCustomizeSearchableModal(calendar) }
))
toolbarActions.add(hideAction)
@ -260,13 +259,6 @@ fun CalendarItem(
}
}
}
if (edit) {
CustomizeSearchableSheet(
searchable = calendar,
onDismiss = { edit = false }
)
}
}
@Composable

View File

@ -20,7 +20,6 @@ import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalLifecycleOwner
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.ExperimentalUnitApi
import androidx.compose.ui.unit.dp
import androidx.lifecycle.lifecycleScope
import de.mm20.launcher2.search.data.Contact
@ -31,7 +30,7 @@ import de.mm20.launcher2.ui.icons.Telegram
import de.mm20.launcher2.ui.icons.WhatsApp
import de.mm20.launcher2.ui.ktx.toDp
import de.mm20.launcher2.ui.ktx.toPixels
import de.mm20.launcher2.ui.launcher.search.common.customattrs.CustomizeSearchableSheet
import de.mm20.launcher2.ui.launcher.sheets.LocalBottomSheetManager
import de.mm20.launcher2.ui.locals.LocalFavoritesEnabled
import de.mm20.launcher2.ui.locals.LocalGridSettings
import de.mm20.launcher2.ui.locals.LocalSnackbarHostState
@ -51,8 +50,6 @@ fun ContactItem(
val lifecycleOwner = LocalLifecycleOwner.current
val snackbarHostState = LocalSnackbarHostState.current
var edit by remember { mutableStateOf(false) }
val transition = updateTransition(showDetails, label = "ContactItem")
Column(
@ -295,10 +292,11 @@ fun ContactItem(
)
)
val sheetManager = LocalBottomSheetManager.current
toolbarActions.add(DefaultToolbarAction(
label = stringResource(R.string.menu_customize),
icon = Icons.Rounded.Edit,
action = { edit = true }
action = { sheetManager.showCustomizeSearchableModal(contact) }
))
toolbarActions.add(hideAction)
@ -317,13 +315,6 @@ fun ContactItem(
}
}
}
if (edit) {
CustomizeSearchableSheet(
searchable = contact,
onDismiss = { edit = false }
)
}
}
@Composable

View File

@ -18,7 +18,6 @@ import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalLifecycleOwner
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.ExperimentalUnitApi
import androidx.compose.ui.unit.dp
import androidx.lifecycle.lifecycleScope
import de.mm20.launcher2.search.data.File
@ -30,7 +29,7 @@ import de.mm20.launcher2.ui.component.Toolbar
import de.mm20.launcher2.ui.component.ToolbarAction
import de.mm20.launcher2.ui.ktx.toDp
import de.mm20.launcher2.ui.ktx.toPixels
import de.mm20.launcher2.ui.launcher.search.common.customattrs.CustomizeSearchableSheet
import de.mm20.launcher2.ui.launcher.sheets.LocalBottomSheetManager
import de.mm20.launcher2.ui.locals.LocalFavoritesEnabled
import de.mm20.launcher2.ui.locals.LocalGridSettings
import de.mm20.launcher2.ui.locals.LocalSnackbarHostState
@ -49,8 +48,6 @@ fun FileItem(
val context = LocalContext.current
val viewModel = remember(file.key) { FileItemVM(file) }
var edit by remember { mutableStateOf(false) }
val lifecycleOwner = LocalLifecycleOwner.current
val snackbarHostState = LocalSnackbarHostState.current
@ -233,10 +230,11 @@ fun FileItem(
}
}
val sheetManager = LocalBottomSheetManager.current
toolbarActions.add(DefaultToolbarAction(
label = stringResource(R.string.menu_customize),
icon = Icons.Rounded.Edit,
action = { edit = true }
action = { sheetManager.showCustomizeSearchableModal(file) }
))
val isHidden by viewModel.isHidden.collectAsState(false)
@ -285,13 +283,6 @@ fun FileItem(
}
}
}
if (edit) {
CustomizeSearchableSheet(
searchable = file,
onDismiss = { edit = false }
)
}
}
@Composable

View File

@ -1,44 +0,0 @@
package de.mm20.launcher2.ui.launcher.search.hidden
import androidx.compose.foundation.layout.*
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.rounded.VisibilityOff
import androidx.compose.material3.*
import androidx.compose.runtime.*
import androidx.compose.runtime.livedata.observeAsState
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import androidx.lifecycle.viewmodel.compose.viewModel
import de.mm20.launcher2.ui.launcher.modals.HiddenItemsSheet
import de.mm20.launcher2.ui.launcher.search.SearchVM
@Composable
fun HiddenResults() {
val viewModel: SearchVM = viewModel()
val hiddenResults by viewModel.hiddenResults.observeAsState(
emptyList()
)
var showHiddenItems by remember { mutableStateOf(false) }
if (hiddenResults.isNotEmpty()) {
Row(
modifier = Modifier
.fillMaxWidth()
.padding(horizontal = 8.dp, vertical = 4.dp),
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.End
) {
FloatingActionButton(
elevation = FloatingActionButtonDefaults.loweredElevation(),
onClick = { showHiddenItems = true }) {
Icon(imageVector = Icons.Rounded.VisibilityOff, contentDescription = null)
}
}
}
if (showHiddenItems) {
HiddenItemsSheet(hiddenResults, onDismiss = {showHiddenItems = false})
}
}

View File

@ -26,7 +26,7 @@ import de.mm20.launcher2.ui.component.Toolbar
import de.mm20.launcher2.ui.component.ToolbarAction
import de.mm20.launcher2.ui.ktx.toDp
import de.mm20.launcher2.ui.ktx.toPixels
import de.mm20.launcher2.ui.launcher.search.common.customattrs.CustomizeSearchableSheet
import de.mm20.launcher2.ui.launcher.sheets.LocalBottomSheetManager
import de.mm20.launcher2.ui.locals.LocalFavoritesEnabled
import de.mm20.launcher2.ui.locals.LocalGridSettings
import de.mm20.launcher2.ui.locals.LocalSnackbarHostState
@ -49,7 +49,6 @@ fun AppShortcutItem(
val snackbarHostState = LocalSnackbarHostState.current
var requestDelete by remember { mutableStateOf(false) }
var edit by remember { mutableStateOf(false) }
val transition = updateTransition(showDetails, label = "AppShortcutItem")
@ -146,11 +145,11 @@ fun AppShortcutItem(
})
val sheetManager = LocalBottomSheetManager.current
toolbarActions.add(DefaultToolbarAction(
label = stringResource(R.string.menu_customize),
icon = Icons.Rounded.Edit,
action = { edit = true }
action = { sheetManager.showCustomizeSearchableModal(shortcut) }
))
if (viewModel.canDelete) {
@ -231,13 +230,6 @@ fun AppShortcutItem(
}
)
}
if (edit) {
CustomizeSearchableSheet(
searchable = shortcut,
onDismiss = { edit = false }
)
}
}
@Composable

View File

@ -2,7 +2,6 @@ package de.mm20.launcher2.ui.launcher.search.website
import androidx.compose.animation.*
import androidx.compose.animation.core.tween
import androidx.compose.foundation.Image
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.*
@ -24,7 +23,7 @@ import de.mm20.launcher2.ui.component.Toolbar
import de.mm20.launcher2.ui.component.ToolbarAction
import de.mm20.launcher2.ui.R
import de.mm20.launcher2.ui.ktx.toDp
import de.mm20.launcher2.ui.launcher.search.common.customattrs.CustomizeSearchableSheet
import de.mm20.launcher2.ui.launcher.sheets.LocalBottomSheetManager
import de.mm20.launcher2.ui.locals.LocalFavoritesEnabled
@Composable
@ -36,8 +35,6 @@ fun WebsiteItem(
val context = LocalContext.current
val viewModel = remember(website) { WebsiteItemVM(website) }
var edit by remember { mutableStateOf(false) }
Column(
modifier = modifier.clickable {
viewModel.launch(context)
@ -110,10 +107,11 @@ fun WebsiteItem(
)
)
val sheetManager = LocalBottomSheetManager.current
toolbarActions.add(DefaultToolbarAction(
label = stringResource(R.string.menu_customize),
icon = Icons.Rounded.Edit,
action = { edit = true }
action = { sheetManager.showCustomizeSearchableModal(website) }
))
Toolbar(
@ -127,13 +125,6 @@ fun WebsiteItem(
rightActions = toolbarActions
)
}
if (edit) {
CustomizeSearchableSheet(
searchable = website,
onDismiss = { edit = false }
)
}
}
@Composable

View File

@ -23,7 +23,7 @@ import de.mm20.launcher2.ui.component.DefaultToolbarAction
import de.mm20.launcher2.ui.component.Toolbar
import de.mm20.launcher2.ui.component.ToolbarAction
import de.mm20.launcher2.ui.ktx.toDp
import de.mm20.launcher2.ui.launcher.search.common.customattrs.CustomizeSearchableSheet
import de.mm20.launcher2.ui.launcher.sheets.LocalBottomSheetManager
import de.mm20.launcher2.ui.locals.LocalFavoritesEnabled
import de.mm20.launcher2.ui.utils.htmlToAnnotatedString
@ -36,8 +36,6 @@ fun WikipediaItem(
val context = LocalContext.current
val viewModel = remember(wikipedia) { WikipediaItemVM(wikipedia) }
var edit by remember { mutableStateOf(false) }
Column(
modifier = modifier.clickable {
viewModel.launch(context)
@ -117,10 +115,11 @@ fun WikipediaItem(
)
)
val sheetManager = LocalBottomSheetManager.current
toolbarActions.add(DefaultToolbarAction(
label = stringResource(R.string.menu_customize),
icon = Icons.Rounded.Edit,
action = { edit = true }
action = { sheetManager.showCustomizeSearchableModal(wikipedia) }
))
Toolbar(
@ -134,13 +133,6 @@ fun WikipediaItem(
rightActions = toolbarActions
)
}
if (edit) {
CustomizeSearchableSheet(
searchable = wikipedia,
onDismiss = { edit = false }
)
}
}
@Composable

View File

@ -24,8 +24,9 @@ import de.mm20.launcher2.preferences.Settings
import de.mm20.launcher2.searchactions.actions.SearchAction
import de.mm20.launcher2.ui.component.SearchBar
import de.mm20.launcher2.ui.component.SearchBarLevel
import de.mm20.launcher2.ui.launcher.modals.HiddenItemsSheet
import de.mm20.launcher2.ui.launcher.sheets.HiddenItemsSheet
import de.mm20.launcher2.ui.launcher.search.SearchVM
import de.mm20.launcher2.ui.launcher.sheets.LocalBottomSheetManager
@Composable
fun LauncherSearchBar(
@ -44,9 +45,9 @@ fun LauncherSearchBar(
val focusManager = LocalFocusManager.current
val focusRequester = remember { FocusRequester() }
val searchVM: SearchVM = viewModel()
val sheetManager = LocalBottomSheetManager.current
var showHiddenItemsSheet by remember { mutableStateOf(false) }
val searchVM: SearchVM = viewModel()
val hiddenItems by searchVM.hiddenResults.observeAsState(emptyList())
@ -70,8 +71,8 @@ fun LauncherSearchBar(
exit = scaleOut(tween(100))
) {
FilledIconButton(
onClick = { showHiddenItemsSheet = !showHiddenItemsSheet },
colors = if (showHiddenItemsSheet) IconButtonDefaults.filledTonalIconButtonColors() else IconButtonDefaults.iconButtonColors()
onClick = { sheetManager.showHiddenItemsSheet() },
colors = if (sheetManager.hiddenItemsSheetShown.value) IconButtonDefaults.filledTonalIconButtonColors() else IconButtonDefaults.iconButtonColors()
) {
Icon(imageVector = Icons.Rounded.VisibilityOff, contentDescription = null)
}
@ -85,8 +86,4 @@ fun LauncherSearchBar(
onFocus = { onFocusChange(true) },
onUnfocus = { onFocusChange(false) },
)
if (showHiddenItemsSheet) {
HiddenItemsSheet(hiddenItems, onDismiss = { showHiddenItemsSheet = false })
}
}

View File

@ -1,4 +1,4 @@
package de.mm20.launcher2.ui.launcher.search.common.customattrs
package de.mm20.launcher2.ui.launcher.sheets
import android.graphics.drawable.InsetDrawable
import androidx.appcompat.content.res.AppCompatResources

View File

@ -1,4 +1,4 @@
package de.mm20.launcher2.ui.launcher.search.common.customattrs
package de.mm20.launcher2.ui.launcher.sheets
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.liveData

View File

@ -1,4 +1,4 @@
package de.mm20.launcher2.ui.launcher.modals
package de.mm20.launcher2.ui.launcher.sheets
import android.app.Activity
import android.content.Context

View File

@ -1,4 +1,4 @@
package de.mm20.launcher2.ui.launcher.modals
package de.mm20.launcher2.ui.launcher.sheets
import android.content.Context
import android.content.Intent

View File

@ -1,4 +1,4 @@
package de.mm20.launcher2.ui.launcher.modals
package de.mm20.launcher2.ui.launcher.sheets
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.rememberScrollState

View File

@ -1,4 +1,4 @@
package de.mm20.launcher2.ui.launcher.modals
package de.mm20.launcher2.ui.launcher.sheets
import android.content.Context
import android.content.Intent

View File

@ -0,0 +1,34 @@
package de.mm20.launcher2.ui.launcher.sheets
import androidx.compose.runtime.compositionLocalOf
import androidx.compose.runtime.mutableStateOf
import de.mm20.launcher2.search.SavableSearchable
class LauncherBottomSheetManager {
val customizeSearchableSheetShown = mutableStateOf<SavableSearchable?>(null)
val editFavoritesSheetShown = mutableStateOf(false)
val hiddenItemsSheetShown = mutableStateOf(false)
fun showCustomizeSearchableModal(item: SavableSearchable) {
customizeSearchableSheetShown.value = item
}
fun dismissCustomizeSearchableModal() {
customizeSearchableSheetShown.value = null
}
fun showEditFavoritesSheet() {
editFavoritesSheetShown.value = true
}
fun dismissEditFavoritesSheet() {
editFavoritesSheetShown.value = false
}
fun showHiddenItemsSheet() {
hiddenItemsSheetShown.value = true
}
fun dismissHiddenItemsSheet() {
hiddenItemsSheetShown.value = false
}
}
val LocalBottomSheetManager = compositionLocalOf { LauncherBottomSheetManager() }

View File

@ -14,7 +14,6 @@ import androidx.compose.material.icons.rounded.Tag
import androidx.compose.material3.FilterChip
import androidx.compose.material3.FloatingActionButtonDefaults
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.SmallFloatingActionButton
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
@ -30,8 +29,8 @@ import androidx.compose.ui.unit.dp
import androidx.lifecycle.viewmodel.compose.viewModel
import de.mm20.launcher2.ui.R
import de.mm20.launcher2.ui.component.Banner
import de.mm20.launcher2.ui.launcher.modals.EditFavoritesSheet
import de.mm20.launcher2.ui.launcher.search.common.grid.SearchResultGrid
import de.mm20.launcher2.ui.launcher.sheets.LocalBottomSheetManager
@Composable
fun FavoritesWidget() {
@ -39,7 +38,6 @@ fun FavoritesWidget() {
val favorites by remember { viewModel.favorites }.collectAsState(emptyList())
val pinnedTags by viewModel.pinnedTags.collectAsState(emptyList())
val selectedTag by viewModel.selectedTag.collectAsState(null)
var showEditFavoritesDialog by remember { mutableStateOf(false) }
val favoritesEditButton by viewModel.showEditButton.collectAsState(false)
Column {
@ -100,9 +98,10 @@ fun FavoritesWidget() {
}
}
if (favoritesEditButton) {
val bottomSheetManager = LocalBottomSheetManager.current
SmallFloatingActionButton(
elevation = FloatingActionButtonDefaults.bottomAppBarFabElevation(),
onClick = { showEditFavoritesDialog = true }
onClick = { bottomSheetManager.showEditFavoritesSheet() }
) {
Icon(imageVector = Icons.Rounded.Edit, contentDescription = null)
}
@ -110,10 +109,4 @@ fun FavoritesWidget() {
}
}
}
if (showEditFavoritesDialog) {
EditFavoritesSheet(
onDismiss = { showEditFavoritesDialog = false }
)
}
}

View File

@ -14,7 +14,7 @@ import de.mm20.launcher2.ui.component.preferences.PreferenceCategory
import de.mm20.launcher2.ui.component.preferences.PreferenceScreen
import de.mm20.launcher2.ui.component.preferences.SliderPreference
import de.mm20.launcher2.ui.component.preferences.SwitchPreference
import de.mm20.launcher2.ui.launcher.modals.EditFavoritesSheet
import de.mm20.launcher2.ui.launcher.sheets.EditFavoritesSheet
@Composable
fun FavoritesSettingsScreen() {