parent
d07f0b3049
commit
cea524802e
@ -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() })
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -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() })
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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})
|
||||
}
|
||||
}
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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
|
||||
|
||||
@ -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 })
|
||||
}
|
||||
}
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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
|
||||
@ -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() }
|
||||
@ -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 }
|
||||
)
|
||||
}
|
||||
}
|
||||
@ -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() {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user