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.base.ProvideSettings
|
||||||
import de.mm20.launcher2.ui.component.NavBarEffects
|
import de.mm20.launcher2.ui.component.NavBarEffects
|
||||||
import de.mm20.launcher2.ui.ktx.animateTo
|
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.HomeTransition
|
||||||
import de.mm20.launcher2.ui.launcher.transitions.HomeTransitionManager
|
import de.mm20.launcher2.ui.launcher.transitions.HomeTransitionManager
|
||||||
import de.mm20.launcher2.ui.launcher.transitions.LocalHomeTransitionManager
|
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)
|
viewModel.setSystemInDarkMode(resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK == Configuration.UI_MODE_NIGHT_YES)
|
||||||
|
|
||||||
|
val bottomSheetManager = LauncherBottomSheetManager()
|
||||||
|
|
||||||
setContent {
|
setContent {
|
||||||
val snackbarHostState = remember { SnackbarHostState() }
|
val snackbarHostState = remember { SnackbarHostState() }
|
||||||
val wallpaperColors by wallpaperColorsAsState()
|
val wallpaperColors by wallpaperColorsAsState()
|
||||||
@ -85,6 +92,7 @@ abstract class SharedLauncherActivity(
|
|||||||
LocalSnackbarHostState provides snackbarHostState,
|
LocalSnackbarHostState provides snackbarHostState,
|
||||||
LocalWallpaperColors provides wallpaperColors,
|
LocalWallpaperColors provides wallpaperColors,
|
||||||
LocalPreferDarkContentOverWallpaper provides (!dimBackground && wallpaperColors.supportsDarkText),
|
LocalPreferDarkContentOverWallpaper provides (!dimBackground && wallpaperColors.supportsDarkText),
|
||||||
|
LocalBottomSheetManager provides bottomSheetManager,
|
||||||
) {
|
) {
|
||||||
LauncherTheme {
|
LauncherTheme {
|
||||||
ProvideCurrentTime {
|
ProvideCurrentTime {
|
||||||
@ -215,6 +223,13 @@ abstract class SharedLauncherActivity(
|
|||||||
it.icon?.invoke(Offset(dX, dY)) { enterTransitionProgress.value }
|
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.LauncherCard
|
||||||
import de.mm20.launcher2.ui.component.MissingPermissionBanner
|
import de.mm20.launcher2.ui.component.MissingPermissionBanner
|
||||||
import de.mm20.launcher2.ui.component.PartialLauncherCard
|
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.calculator.CalculatorItem
|
||||||
import de.mm20.launcher2.ui.launcher.search.common.grid.GridItem
|
import de.mm20.launcher2.ui.launcher.search.common.grid.GridItem
|
||||||
import de.mm20.launcher2.ui.launcher.search.common.list.ListItem
|
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.unitconverter.UnitConverterItem
|
||||||
import de.mm20.launcher2.ui.launcher.search.website.WebsiteItem
|
import de.mm20.launcher2.ui.launcher.search.website.WebsiteItem
|
||||||
import de.mm20.launcher2.ui.launcher.search.wikipedia.WikipediaItem
|
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 de.mm20.launcher2.ui.locals.LocalGridSettings
|
||||||
import kotlinx.collections.immutable.ImmutableList
|
import kotlinx.collections.immutable.ImmutableList
|
||||||
import kotlinx.collections.immutable.toImmutableList
|
import kotlinx.collections.immutable.toImmutableList
|
||||||
@ -91,6 +92,7 @@ fun SearchColumn(
|
|||||||
val calculator by viewModel.calculatorResults.observeAsState(emptyList())
|
val calculator by viewModel.calculatorResults.observeAsState(emptyList())
|
||||||
val wikipedia by viewModel.wikipediaResults.observeAsState(emptyList())
|
val wikipedia by viewModel.wikipediaResults.observeAsState(emptyList())
|
||||||
val website by viewModel.websiteResults.observeAsState(emptyList())
|
val website by viewModel.websiteResults.observeAsState(emptyList())
|
||||||
|
val hiddenResults by viewModel.hiddenResults.observeAsState(emptyList())
|
||||||
|
|
||||||
val isSearchEmpty by viewModel.isSearchEmpty.observeAsState(true)
|
val isSearchEmpty by viewModel.isSearchEmpty.observeAsState(true)
|
||||||
|
|
||||||
@ -99,8 +101,6 @@ fun SearchColumn(
|
|||||||
val missingContactsPermission by viewModel.missingContactsPermission.collectAsState(false)
|
val missingContactsPermission by viewModel.missingContactsPermission.collectAsState(false)
|
||||||
val missingFilesPermission by viewModel.missingFilesPermission.collectAsState(false)
|
val missingFilesPermission by viewModel.missingFilesPermission.collectAsState(false)
|
||||||
|
|
||||||
var showEditFavoritesDialog by remember { mutableStateOf(false) }
|
|
||||||
|
|
||||||
val pinnedTags by favoritesVM.pinnedTags.collectAsState(emptyList())
|
val pinnedTags by favoritesVM.pinnedTags.collectAsState(emptyList())
|
||||||
val selectedTag by favoritesVM.selectedTag.collectAsState(null)
|
val selectedTag by favoritesVM.selectedTag.collectAsState(null)
|
||||||
val tagsScrollState = rememberScrollState()
|
val tagsScrollState = rememberScrollState()
|
||||||
@ -178,9 +178,10 @@ fun SearchColumn(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (favoritesEditButton) {
|
if (favoritesEditButton) {
|
||||||
|
val sheetManager = LocalBottomSheetManager.current
|
||||||
SmallFloatingActionButton(
|
SmallFloatingActionButton(
|
||||||
elevation = FloatingActionButtonDefaults.bottomAppBarFabElevation(),
|
elevation = FloatingActionButtonDefaults.bottomAppBarFabElevation(),
|
||||||
onClick = { showEditFavoritesDialog = true }
|
onClick = { sheetManager.showEditFavoritesSheet() }
|
||||||
) {
|
) {
|
||||||
Icon(
|
Icon(
|
||||||
imageVector = Icons.Rounded.Edit,
|
imageVector = Icons.Rounded.Edit,
|
||||||
@ -359,10 +360,9 @@ fun SearchColumn(
|
|||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (showEditFavoritesDialog) {
|
val sheetManager = LocalBottomSheetManager.current
|
||||||
EditFavoritesSheet(
|
if (sheetManager.hiddenItemsSheetShown.value) {
|
||||||
onDismiss = { showEditFavoritesDialog = false }
|
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.component.*
|
||||||
import de.mm20.launcher2.ui.ktx.toDp
|
import de.mm20.launcher2.ui.ktx.toDp
|
||||||
import de.mm20.launcher2.ui.ktx.toPixels
|
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.LocalFavoritesEnabled
|
||||||
import de.mm20.launcher2.ui.locals.LocalGridSettings
|
import de.mm20.launcher2.ui.locals.LocalGridSettings
|
||||||
import de.mm20.launcher2.ui.locals.LocalSnackbarHostState
|
import de.mm20.launcher2.ui.locals.LocalSnackbarHostState
|
||||||
@ -48,8 +48,6 @@ fun AppItem(
|
|||||||
val lifecycleOwner = LocalLifecycleOwner.current
|
val lifecycleOwner = LocalLifecycleOwner.current
|
||||||
val snackbarHostState = LocalSnackbarHostState.current
|
val snackbarHostState = LocalSnackbarHostState.current
|
||||||
|
|
||||||
var edit by remember { mutableStateOf(false) }
|
|
||||||
|
|
||||||
val scope = rememberCoroutineScope()
|
val scope = rememberCoroutineScope()
|
||||||
Column(
|
Column(
|
||||||
modifier = modifier
|
modifier = modifier
|
||||||
@ -228,10 +226,11 @@ fun AppItem(
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
val sheetManager = LocalBottomSheetManager.current
|
||||||
toolbarActions.add(DefaultToolbarAction(
|
toolbarActions.add(DefaultToolbarAction(
|
||||||
label = stringResource(R.string.menu_customize),
|
label = stringResource(R.string.menu_customize),
|
||||||
icon = Icons.Rounded.Edit,
|
icon = Icons.Rounded.Edit,
|
||||||
action = { edit = true }
|
action = { sheetManager.showCustomizeSearchableModal(app) }
|
||||||
))
|
))
|
||||||
|
|
||||||
val storeDetails = remember(app) { app.getStoreDetails(context) }
|
val storeDetails = remember(app) { app.getStoreDetails(context) }
|
||||||
@ -325,13 +324,6 @@ fun AppItem(
|
|||||||
rightActions = toolbarActions
|
rightActions = toolbarActions
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (edit) {
|
|
||||||
CustomizeSearchableSheet(
|
|
||||||
searchable = app,
|
|
||||||
onDismiss = { edit = false }
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
@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.Toolbar
|
||||||
import de.mm20.launcher2.ui.component.ToolbarAction
|
import de.mm20.launcher2.ui.component.ToolbarAction
|
||||||
import de.mm20.launcher2.ui.ktx.toDp
|
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.LocalDarkTheme
|
||||||
import de.mm20.launcher2.ui.locals.LocalFavoritesEnabled
|
import de.mm20.launcher2.ui.locals.LocalFavoritesEnabled
|
||||||
import de.mm20.launcher2.ui.locals.LocalSnackbarHostState
|
import de.mm20.launcher2.ui.locals.LocalSnackbarHostState
|
||||||
@ -49,8 +49,6 @@ fun CalendarItem(
|
|||||||
val lifecycleOwner = LocalLifecycleOwner.current
|
val lifecycleOwner = LocalLifecycleOwner.current
|
||||||
val snackbarHostState = LocalSnackbarHostState.current
|
val snackbarHostState = LocalSnackbarHostState.current
|
||||||
|
|
||||||
var edit by remember { mutableStateOf(false) }
|
|
||||||
|
|
||||||
val darkMode = LocalDarkTheme.current
|
val darkMode = LocalDarkTheme.current
|
||||||
|
|
||||||
Row(
|
Row(
|
||||||
@ -237,10 +235,11 @@ fun CalendarItem(
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
val sheetManager = LocalBottomSheetManager.current
|
||||||
toolbarActions.add(DefaultToolbarAction(
|
toolbarActions.add(DefaultToolbarAction(
|
||||||
label = stringResource(R.string.menu_customize),
|
label = stringResource(R.string.menu_customize),
|
||||||
icon = Icons.Rounded.Edit,
|
icon = Icons.Rounded.Edit,
|
||||||
action = { edit = true }
|
action = { sheetManager.showCustomizeSearchableModal(calendar) }
|
||||||
))
|
))
|
||||||
|
|
||||||
toolbarActions.add(hideAction)
|
toolbarActions.add(hideAction)
|
||||||
@ -260,13 +259,6 @@ fun CalendarItem(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (edit) {
|
|
||||||
CustomizeSearchableSheet(
|
|
||||||
searchable = calendar,
|
|
||||||
onDismiss = { edit = false }
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
|
|||||||
@ -20,7 +20,6 @@ import androidx.compose.ui.platform.LocalContext
|
|||||||
import androidx.compose.ui.platform.LocalLifecycleOwner
|
import androidx.compose.ui.platform.LocalLifecycleOwner
|
||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
import androidx.compose.ui.text.style.TextOverflow
|
import androidx.compose.ui.text.style.TextOverflow
|
||||||
import androidx.compose.ui.unit.ExperimentalUnitApi
|
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
import de.mm20.launcher2.search.data.Contact
|
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.icons.WhatsApp
|
||||||
import de.mm20.launcher2.ui.ktx.toDp
|
import de.mm20.launcher2.ui.ktx.toDp
|
||||||
import de.mm20.launcher2.ui.ktx.toPixels
|
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.LocalFavoritesEnabled
|
||||||
import de.mm20.launcher2.ui.locals.LocalGridSettings
|
import de.mm20.launcher2.ui.locals.LocalGridSettings
|
||||||
import de.mm20.launcher2.ui.locals.LocalSnackbarHostState
|
import de.mm20.launcher2.ui.locals.LocalSnackbarHostState
|
||||||
@ -51,8 +50,6 @@ fun ContactItem(
|
|||||||
val lifecycleOwner = LocalLifecycleOwner.current
|
val lifecycleOwner = LocalLifecycleOwner.current
|
||||||
val snackbarHostState = LocalSnackbarHostState.current
|
val snackbarHostState = LocalSnackbarHostState.current
|
||||||
|
|
||||||
var edit by remember { mutableStateOf(false) }
|
|
||||||
|
|
||||||
val transition = updateTransition(showDetails, label = "ContactItem")
|
val transition = updateTransition(showDetails, label = "ContactItem")
|
||||||
|
|
||||||
Column(
|
Column(
|
||||||
@ -295,10 +292,11 @@ fun ContactItem(
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
val sheetManager = LocalBottomSheetManager.current
|
||||||
toolbarActions.add(DefaultToolbarAction(
|
toolbarActions.add(DefaultToolbarAction(
|
||||||
label = stringResource(R.string.menu_customize),
|
label = stringResource(R.string.menu_customize),
|
||||||
icon = Icons.Rounded.Edit,
|
icon = Icons.Rounded.Edit,
|
||||||
action = { edit = true }
|
action = { sheetManager.showCustomizeSearchableModal(contact) }
|
||||||
))
|
))
|
||||||
|
|
||||||
toolbarActions.add(hideAction)
|
toolbarActions.add(hideAction)
|
||||||
@ -317,13 +315,6 @@ fun ContactItem(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (edit) {
|
|
||||||
CustomizeSearchableSheet(
|
|
||||||
searchable = contact,
|
|
||||||
onDismiss = { edit = false }
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
|
|||||||
@ -18,7 +18,6 @@ import androidx.compose.ui.platform.LocalContext
|
|||||||
import androidx.compose.ui.platform.LocalLifecycleOwner
|
import androidx.compose.ui.platform.LocalLifecycleOwner
|
||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
import androidx.compose.ui.text.style.TextOverflow
|
import androidx.compose.ui.text.style.TextOverflow
|
||||||
import androidx.compose.ui.unit.ExperimentalUnitApi
|
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
import de.mm20.launcher2.search.data.File
|
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.component.ToolbarAction
|
||||||
import de.mm20.launcher2.ui.ktx.toDp
|
import de.mm20.launcher2.ui.ktx.toDp
|
||||||
import de.mm20.launcher2.ui.ktx.toPixels
|
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.LocalFavoritesEnabled
|
||||||
import de.mm20.launcher2.ui.locals.LocalGridSettings
|
import de.mm20.launcher2.ui.locals.LocalGridSettings
|
||||||
import de.mm20.launcher2.ui.locals.LocalSnackbarHostState
|
import de.mm20.launcher2.ui.locals.LocalSnackbarHostState
|
||||||
@ -49,8 +48,6 @@ fun FileItem(
|
|||||||
val context = LocalContext.current
|
val context = LocalContext.current
|
||||||
val viewModel = remember(file.key) { FileItemVM(file) }
|
val viewModel = remember(file.key) { FileItemVM(file) }
|
||||||
|
|
||||||
var edit by remember { mutableStateOf(false) }
|
|
||||||
|
|
||||||
val lifecycleOwner = LocalLifecycleOwner.current
|
val lifecycleOwner = LocalLifecycleOwner.current
|
||||||
val snackbarHostState = LocalSnackbarHostState.current
|
val snackbarHostState = LocalSnackbarHostState.current
|
||||||
|
|
||||||
@ -233,10 +230,11 @@ fun FileItem(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val sheetManager = LocalBottomSheetManager.current
|
||||||
toolbarActions.add(DefaultToolbarAction(
|
toolbarActions.add(DefaultToolbarAction(
|
||||||
label = stringResource(R.string.menu_customize),
|
label = stringResource(R.string.menu_customize),
|
||||||
icon = Icons.Rounded.Edit,
|
icon = Icons.Rounded.Edit,
|
||||||
action = { edit = true }
|
action = { sheetManager.showCustomizeSearchableModal(file) }
|
||||||
))
|
))
|
||||||
|
|
||||||
val isHidden by viewModel.isHidden.collectAsState(false)
|
val isHidden by viewModel.isHidden.collectAsState(false)
|
||||||
@ -285,13 +283,6 @@ fun FileItem(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (edit) {
|
|
||||||
CustomizeSearchableSheet(
|
|
||||||
searchable = file,
|
|
||||||
onDismiss = { edit = false }
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
@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.component.ToolbarAction
|
||||||
import de.mm20.launcher2.ui.ktx.toDp
|
import de.mm20.launcher2.ui.ktx.toDp
|
||||||
import de.mm20.launcher2.ui.ktx.toPixels
|
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.LocalFavoritesEnabled
|
||||||
import de.mm20.launcher2.ui.locals.LocalGridSettings
|
import de.mm20.launcher2.ui.locals.LocalGridSettings
|
||||||
import de.mm20.launcher2.ui.locals.LocalSnackbarHostState
|
import de.mm20.launcher2.ui.locals.LocalSnackbarHostState
|
||||||
@ -49,7 +49,6 @@ fun AppShortcutItem(
|
|||||||
val snackbarHostState = LocalSnackbarHostState.current
|
val snackbarHostState = LocalSnackbarHostState.current
|
||||||
|
|
||||||
var requestDelete by remember { mutableStateOf(false) }
|
var requestDelete by remember { mutableStateOf(false) }
|
||||||
var edit by remember { mutableStateOf(false) }
|
|
||||||
|
|
||||||
val transition = updateTransition(showDetails, label = "AppShortcutItem")
|
val transition = updateTransition(showDetails, label = "AppShortcutItem")
|
||||||
|
|
||||||
@ -146,11 +145,11 @@ fun AppShortcutItem(
|
|||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
val sheetManager = LocalBottomSheetManager.current
|
||||||
toolbarActions.add(DefaultToolbarAction(
|
toolbarActions.add(DefaultToolbarAction(
|
||||||
label = stringResource(R.string.menu_customize),
|
label = stringResource(R.string.menu_customize),
|
||||||
icon = Icons.Rounded.Edit,
|
icon = Icons.Rounded.Edit,
|
||||||
action = { edit = true }
|
action = { sheetManager.showCustomizeSearchableModal(shortcut) }
|
||||||
))
|
))
|
||||||
|
|
||||||
if (viewModel.canDelete) {
|
if (viewModel.canDelete) {
|
||||||
@ -231,13 +230,6 @@ fun AppShortcutItem(
|
|||||||
}
|
}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (edit) {
|
|
||||||
CustomizeSearchableSheet(
|
|
||||||
searchable = shortcut,
|
|
||||||
onDismiss = { edit = false }
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
|
|||||||
@ -2,7 +2,6 @@ package de.mm20.launcher2.ui.launcher.search.website
|
|||||||
|
|
||||||
import androidx.compose.animation.*
|
import androidx.compose.animation.*
|
||||||
import androidx.compose.animation.core.tween
|
import androidx.compose.animation.core.tween
|
||||||
import androidx.compose.foundation.Image
|
|
||||||
import androidx.compose.foundation.background
|
import androidx.compose.foundation.background
|
||||||
import androidx.compose.foundation.clickable
|
import androidx.compose.foundation.clickable
|
||||||
import androidx.compose.foundation.layout.*
|
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.component.ToolbarAction
|
||||||
import de.mm20.launcher2.ui.R
|
import de.mm20.launcher2.ui.R
|
||||||
import de.mm20.launcher2.ui.ktx.toDp
|
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.locals.LocalFavoritesEnabled
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
@ -36,8 +35,6 @@ fun WebsiteItem(
|
|||||||
val context = LocalContext.current
|
val context = LocalContext.current
|
||||||
val viewModel = remember(website) { WebsiteItemVM(website) }
|
val viewModel = remember(website) { WebsiteItemVM(website) }
|
||||||
|
|
||||||
var edit by remember { mutableStateOf(false) }
|
|
||||||
|
|
||||||
Column(
|
Column(
|
||||||
modifier = modifier.clickable {
|
modifier = modifier.clickable {
|
||||||
viewModel.launch(context)
|
viewModel.launch(context)
|
||||||
@ -110,10 +107,11 @@ fun WebsiteItem(
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
val sheetManager = LocalBottomSheetManager.current
|
||||||
toolbarActions.add(DefaultToolbarAction(
|
toolbarActions.add(DefaultToolbarAction(
|
||||||
label = stringResource(R.string.menu_customize),
|
label = stringResource(R.string.menu_customize),
|
||||||
icon = Icons.Rounded.Edit,
|
icon = Icons.Rounded.Edit,
|
||||||
action = { edit = true }
|
action = { sheetManager.showCustomizeSearchableModal(website) }
|
||||||
))
|
))
|
||||||
|
|
||||||
Toolbar(
|
Toolbar(
|
||||||
@ -127,13 +125,6 @@ fun WebsiteItem(
|
|||||||
rightActions = toolbarActions
|
rightActions = toolbarActions
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (edit) {
|
|
||||||
CustomizeSearchableSheet(
|
|
||||||
searchable = website,
|
|
||||||
onDismiss = { edit = false }
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
@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.Toolbar
|
||||||
import de.mm20.launcher2.ui.component.ToolbarAction
|
import de.mm20.launcher2.ui.component.ToolbarAction
|
||||||
import de.mm20.launcher2.ui.ktx.toDp
|
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.locals.LocalFavoritesEnabled
|
||||||
import de.mm20.launcher2.ui.utils.htmlToAnnotatedString
|
import de.mm20.launcher2.ui.utils.htmlToAnnotatedString
|
||||||
|
|
||||||
@ -36,8 +36,6 @@ fun WikipediaItem(
|
|||||||
val context = LocalContext.current
|
val context = LocalContext.current
|
||||||
val viewModel = remember(wikipedia) { WikipediaItemVM(wikipedia) }
|
val viewModel = remember(wikipedia) { WikipediaItemVM(wikipedia) }
|
||||||
|
|
||||||
var edit by remember { mutableStateOf(false) }
|
|
||||||
|
|
||||||
Column(
|
Column(
|
||||||
modifier = modifier.clickable {
|
modifier = modifier.clickable {
|
||||||
viewModel.launch(context)
|
viewModel.launch(context)
|
||||||
@ -117,10 +115,11 @@ fun WikipediaItem(
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
val sheetManager = LocalBottomSheetManager.current
|
||||||
toolbarActions.add(DefaultToolbarAction(
|
toolbarActions.add(DefaultToolbarAction(
|
||||||
label = stringResource(R.string.menu_customize),
|
label = stringResource(R.string.menu_customize),
|
||||||
icon = Icons.Rounded.Edit,
|
icon = Icons.Rounded.Edit,
|
||||||
action = { edit = true }
|
action = { sheetManager.showCustomizeSearchableModal(wikipedia) }
|
||||||
))
|
))
|
||||||
|
|
||||||
Toolbar(
|
Toolbar(
|
||||||
@ -134,13 +133,6 @@ fun WikipediaItem(
|
|||||||
rightActions = toolbarActions
|
rightActions = toolbarActions
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (edit) {
|
|
||||||
CustomizeSearchableSheet(
|
|
||||||
searchable = wikipedia,
|
|
||||||
onDismiss = { edit = false }
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
|
|||||||
@ -24,8 +24,9 @@ import de.mm20.launcher2.preferences.Settings
|
|||||||
import de.mm20.launcher2.searchactions.actions.SearchAction
|
import de.mm20.launcher2.searchactions.actions.SearchAction
|
||||||
import de.mm20.launcher2.ui.component.SearchBar
|
import de.mm20.launcher2.ui.component.SearchBar
|
||||||
import de.mm20.launcher2.ui.component.SearchBarLevel
|
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.search.SearchVM
|
||||||
|
import de.mm20.launcher2.ui.launcher.sheets.LocalBottomSheetManager
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun LauncherSearchBar(
|
fun LauncherSearchBar(
|
||||||
@ -44,9 +45,9 @@ fun LauncherSearchBar(
|
|||||||
val focusManager = LocalFocusManager.current
|
val focusManager = LocalFocusManager.current
|
||||||
val focusRequester = remember { FocusRequester() }
|
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())
|
val hiddenItems by searchVM.hiddenResults.observeAsState(emptyList())
|
||||||
|
|
||||||
@ -70,8 +71,8 @@ fun LauncherSearchBar(
|
|||||||
exit = scaleOut(tween(100))
|
exit = scaleOut(tween(100))
|
||||||
) {
|
) {
|
||||||
FilledIconButton(
|
FilledIconButton(
|
||||||
onClick = { showHiddenItemsSheet = !showHiddenItemsSheet },
|
onClick = { sheetManager.showHiddenItemsSheet() },
|
||||||
colors = if (showHiddenItemsSheet) IconButtonDefaults.filledTonalIconButtonColors() else IconButtonDefaults.iconButtonColors()
|
colors = if (sheetManager.hiddenItemsSheetShown.value) IconButtonDefaults.filledTonalIconButtonColors() else IconButtonDefaults.iconButtonColors()
|
||||||
) {
|
) {
|
||||||
Icon(imageVector = Icons.Rounded.VisibilityOff, contentDescription = null)
|
Icon(imageVector = Icons.Rounded.VisibilityOff, contentDescription = null)
|
||||||
}
|
}
|
||||||
@ -85,8 +86,4 @@ fun LauncherSearchBar(
|
|||||||
onFocus = { onFocusChange(true) },
|
onFocus = { onFocusChange(true) },
|
||||||
onUnfocus = { onFocusChange(false) },
|
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 android.graphics.drawable.InsetDrawable
|
||||||
import androidx.appcompat.content.res.AppCompatResources
|
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.MutableLiveData
|
||||||
import androidx.lifecycle.liveData
|
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.app.Activity
|
||||||
import android.content.Context
|
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.Context
|
||||||
import android.content.Intent
|
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.layout.padding
|
||||||
import androidx.compose.foundation.rememberScrollState
|
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.Context
|
||||||
import android.content.Intent
|
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.FilterChip
|
||||||
import androidx.compose.material3.FloatingActionButtonDefaults
|
import androidx.compose.material3.FloatingActionButtonDefaults
|
||||||
import androidx.compose.material3.Icon
|
import androidx.compose.material3.Icon
|
||||||
import androidx.compose.material3.MaterialTheme
|
|
||||||
import androidx.compose.material3.SmallFloatingActionButton
|
import androidx.compose.material3.SmallFloatingActionButton
|
||||||
import androidx.compose.material3.Text
|
import androidx.compose.material3.Text
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
@ -30,8 +29,8 @@ import androidx.compose.ui.unit.dp
|
|||||||
import androidx.lifecycle.viewmodel.compose.viewModel
|
import androidx.lifecycle.viewmodel.compose.viewModel
|
||||||
import de.mm20.launcher2.ui.R
|
import de.mm20.launcher2.ui.R
|
||||||
import de.mm20.launcher2.ui.component.Banner
|
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.search.common.grid.SearchResultGrid
|
||||||
|
import de.mm20.launcher2.ui.launcher.sheets.LocalBottomSheetManager
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun FavoritesWidget() {
|
fun FavoritesWidget() {
|
||||||
@ -39,7 +38,6 @@ fun FavoritesWidget() {
|
|||||||
val favorites by remember { viewModel.favorites }.collectAsState(emptyList())
|
val favorites by remember { viewModel.favorites }.collectAsState(emptyList())
|
||||||
val pinnedTags by viewModel.pinnedTags.collectAsState(emptyList())
|
val pinnedTags by viewModel.pinnedTags.collectAsState(emptyList())
|
||||||
val selectedTag by viewModel.selectedTag.collectAsState(null)
|
val selectedTag by viewModel.selectedTag.collectAsState(null)
|
||||||
var showEditFavoritesDialog by remember { mutableStateOf(false) }
|
|
||||||
val favoritesEditButton by viewModel.showEditButton.collectAsState(false)
|
val favoritesEditButton by viewModel.showEditButton.collectAsState(false)
|
||||||
|
|
||||||
Column {
|
Column {
|
||||||
@ -100,9 +98,10 @@ fun FavoritesWidget() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (favoritesEditButton) {
|
if (favoritesEditButton) {
|
||||||
|
val bottomSheetManager = LocalBottomSheetManager.current
|
||||||
SmallFloatingActionButton(
|
SmallFloatingActionButton(
|
||||||
elevation = FloatingActionButtonDefaults.bottomAppBarFabElevation(),
|
elevation = FloatingActionButtonDefaults.bottomAppBarFabElevation(),
|
||||||
onClick = { showEditFavoritesDialog = true }
|
onClick = { bottomSheetManager.showEditFavoritesSheet() }
|
||||||
) {
|
) {
|
||||||
Icon(imageVector = Icons.Rounded.Edit, contentDescription = null)
|
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.PreferenceScreen
|
||||||
import de.mm20.launcher2.ui.component.preferences.SliderPreference
|
import de.mm20.launcher2.ui.component.preferences.SliderPreference
|
||||||
import de.mm20.launcher2.ui.component.preferences.SwitchPreference
|
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
|
@Composable
|
||||||
fun FavoritesSettingsScreen() {
|
fun FavoritesSettingsScreen() {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user