From c014c143ed37a7b3322a230dd988af9903ee07f8 Mon Sep 17 00:00:00 2001 From: MM20 <15646950+MM2-0@users.noreply.github.com> Date: Sat, 3 Feb 2024 22:47:05 +0100 Subject: [PATCH] Update libraries --- .idea/kotlinc.xml | 2 +- .../ui/component/BottomSheetDialog.kt | 8 +- .../launcher2/ui/launcher/PagerScaffold.kt | 5 +- .../launcher2/ui/launcher/PullDownScaffold.kt | 2 +- .../ui/launcher/searchbar/SearchBarActions.kt | 3 +- .../launcher/sheets/ConfigureWidgetSheet.kt | 19 ++- .../ui/launcher/widgets/music/MusicWidget.kt | 49 +++++++- .../ui/launcher/widgets/notes/NotesWidget.kt | 59 ++++++--- .../ui/settings/colorscheme/ColorSwatch.kt | 2 - .../colorscheme/CorePaletteColorPreference.kt | 28 ++++- .../colorscheme/ThemeColorPreference.kt | 112 +++++++++++------- .../ui/settings/icons/IconsSettingsScreen.kt | 29 ++++- gradle/libs.versions.toml | 20 ++-- 13 files changed, 236 insertions(+), 102 deletions(-) diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml index fdf8d994..8d81632f 100644 --- a/.idea/kotlinc.xml +++ b/.idea/kotlinc.xml @@ -1,6 +1,6 @@ - \ No newline at end of file diff --git a/app/ui/src/main/java/de/mm20/launcher2/ui/component/BottomSheetDialog.kt b/app/ui/src/main/java/de/mm20/launcher2/ui/component/BottomSheetDialog.kt index f41d4669..803b7533 100644 --- a/app/ui/src/main/java/de/mm20/launcher2/ui/component/BottomSheetDialog.kt +++ b/app/ui/src/main/java/de/mm20/launcher2/ui/component/BottomSheetDialog.kt @@ -2,6 +2,7 @@ package de.mm20.launcher2.ui.component import androidx.activity.compose.BackHandler import androidx.compose.animation.core.animateFloatAsState +import androidx.compose.animation.core.exponentialDecay import androidx.compose.animation.core.spring import androidx.compose.foundation.background import androidx.compose.foundation.gestures.AnchoredDraggableState @@ -26,7 +27,6 @@ import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.imePadding import androidx.compose.foundation.layout.offset import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.systemBars import androidx.compose.foundation.layout.systemBarsPadding import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.wrapContentHeight @@ -55,7 +55,6 @@ import androidx.compose.ui.input.nestedscroll.NestedScrollSource import androidx.compose.ui.input.nestedscroll.nestedScroll import androidx.compose.ui.input.pointer.pointerInput import androidx.compose.ui.layout.onSizeChanged -import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.unit.Density import androidx.compose.ui.unit.IntOffset import androidx.compose.ui.unit.IntRect @@ -63,9 +62,7 @@ import androidx.compose.ui.unit.IntSize import androidx.compose.ui.unit.LayoutDirection import androidx.compose.ui.unit.Velocity import androidx.compose.ui.unit.dp -import androidx.compose.ui.window.Popup import androidx.compose.ui.window.PopupPositionProvider -import androidx.compose.ui.window.PopupProperties import de.mm20.launcher2.ui.ktx.toPixels import de.mm20.launcher2.ui.overlays.LocalZIndex import de.mm20.launcher2.ui.overlays.Overlay @@ -93,7 +90,8 @@ fun BottomSheetDialog( initialValue = SwipeState.Dismiss, positionalThreshold = { it * 0.5f }, velocityThreshold = { 200f }, - animationSpec = spring(), + snapAnimationSpec = spring(), + decayAnimationSpec = exponentialDecay(), confirmValueChange = { it != SwipeState.Dismiss || dismissible() } diff --git a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/PagerScaffold.kt b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/PagerScaffold.kt index 305fea0a..f2fcc412 100644 --- a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/PagerScaffold.kt +++ b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/PagerScaffold.kt @@ -398,15 +398,12 @@ fun PagerScaffold( modifier = Modifier .fillMaxSize() .nestedScroll(pagerNestedScrollConnection), - beyondBoundsPageCount = 1, + outOfBoundsPageCount = 1, reverseLayout = reverse == (LocalLayoutDirection.current == LayoutDirection.Ltr), state = pagerState, userScrollEnabled = false,//!isWidgetEditMode, flingBehavior = PagerDefaults.flingBehavior( state = pagerState, - lowVelocityAnimationSpec = spring( - stiffness = Spring.StiffnessMediumLow, - ), pagerSnapDistance = remember { object : PagerSnapDistance { override fun calculateTargetPage( diff --git a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/PullDownScaffold.kt b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/PullDownScaffold.kt index 6aec5882..a40a237d 100644 --- a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/PullDownScaffold.kt +++ b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/PullDownScaffold.kt @@ -401,7 +401,7 @@ fun PullDownScaffold( ) { VerticalPager( modifier = Modifier.fillMaxSize(), - beyondBoundsPageCount = 1, + outOfBoundsPageCount = 1, state = pagerState, reverseLayout = true, userScrollEnabled = false, diff --git a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/searchbar/SearchBarActions.kt b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/searchbar/SearchBarActions.kt index 789c8f22..0b241e32 100644 --- a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/searchbar/SearchBarActions.kt +++ b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/searchbar/SearchBarActions.kt @@ -52,9 +52,10 @@ fun ColumnScope.SearchBarActions( } else AssistChipDefaults.assistChipColors(), border = if (it == highlightedAction) { AssistChipDefaults.assistChipBorder( + true, borderColor = MaterialTheme.colorScheme.secondary, ) - } else AssistChipDefaults.assistChipBorder(), + } else AssistChipDefaults.assistChipBorder(true), onClick = { it.start(context) }, diff --git a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/sheets/ConfigureWidgetSheet.kt b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/sheets/ConfigureWidgetSheet.kt index c661321a..1491a4d5 100644 --- a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/sheets/ConfigureWidgetSheet.kt +++ b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/sheets/ConfigureWidgetSheet.kt @@ -44,10 +44,12 @@ import androidx.compose.material3.MaterialTheme import androidx.compose.material3.OutlinedButton import androidx.compose.material3.OutlinedCard import androidx.compose.material3.OutlinedTextField -import androidx.compose.material3.PlainTooltipBox +import androidx.compose.material3.PlainTooltip import androidx.compose.material3.Text import androidx.compose.material3.TextButton -import androidx.compose.material3.rememberPlainTooltipState +import androidx.compose.material3.TooltipBox +import androidx.compose.material3.TooltipDefaults +import androidx.compose.material3.rememberTooltipState import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState @@ -366,10 +368,15 @@ fun ColumnScope.ConfigureAppWidget( verticalAlignment = Alignment.CenterVertically ) { val scope = rememberCoroutineScope() - val tooltipState = rememberPlainTooltipState() - PlainTooltipBox( - tooltipState = tooltipState, - tooltip = { Text(stringResource(R.string.widget_config_appwidget_resize_hint)) } + val tooltipState = rememberTooltipState() + TooltipBox( + state = tooltipState, + positionProvider = TooltipDefaults.rememberPlainTooltipPositionProvider(), + tooltip = { + PlainTooltip { + Text(stringResource(R.string.widget_config_appwidget_resize_hint)) + } + } ) { Box( modifier = Modifier diff --git a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/music/MusicWidget.kt b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/music/MusicWidget.kt index 0918259e..27661ca3 100644 --- a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/music/MusicWidget.kt +++ b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/music/MusicWidget.kt @@ -42,13 +42,17 @@ import androidx.compose.material3.IconButton import androidx.compose.material3.IconButtonDefaults import androidx.compose.material3.LinearProgressIndicator import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.PlainTooltipBox +import androidx.compose.material3.PlainTooltip import androidx.compose.material3.Slider import androidx.compose.material3.Text +import androidx.compose.material3.TooltipBox +import androidx.compose.material3.TooltipDefaults +import androidx.compose.material3.rememberTooltipState import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -78,6 +82,7 @@ import de.mm20.launcher2.ui.launcher.transitions.EnterHomeTransitionParams import de.mm20.launcher2.ui.locals.LocalCardStyle import de.mm20.launcher2.ui.locals.LocalWindowSize import de.mm20.launcher2.widgets.MusicWidget +import kotlinx.coroutines.launch import kotlin.math.min @Composable @@ -354,11 +359,29 @@ fun CustomActions( val usedSlots = 1 + (if (actions.skipToPrevious) 1 else 0) + (if (actions.skipToNext) 1 else 0) val slots = 5 - usedSlots + val scope = rememberCoroutineScope() + for (i in 0 until min(actions.customActions.size, slots - 1)) { val action = actions.customActions[i] - PlainTooltipBox(tooltip = { Text(action.name.toString()) }) { + val tooltipState = rememberTooltipState() + TooltipBox( + positionProvider = TooltipDefaults.rememberPlainTooltipPositionProvider(), + state = tooltipState, + tooltip = { + PlainTooltip { + Text(action.name.toString()) + } + }, + ) { IconButton( - modifier = Modifier.tooltipTrigger(), + modifier = Modifier.combinedClickable( + onClick = {}, + onLongClick = { + scope.launch { + tooltipState.show() + } + } + ), onClick = { onActionSelected(action) } @@ -399,10 +422,26 @@ fun CustomActions( } } } else if (slots == actions.customActions.size) { + val tooltipState = rememberTooltipState() val action = actions.customActions.last() - PlainTooltipBox(tooltip = { Text(action.name.toString()) }) { + TooltipBox( + state = tooltipState, + positionProvider = TooltipDefaults.rememberPlainTooltipPositionProvider(), + tooltip = { + PlainTooltip { + Text(action.name.toString()) + } + } + ) { IconButton( - modifier = Modifier.tooltipTrigger(), + modifier = Modifier.combinedClickable( + onClick = {}, + onLongClick = { + scope.launch { + tooltipState.show() + } + } + ), onClick = { onActionSelected(action) } diff --git a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/notes/NotesWidget.kt b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/notes/NotesWidget.kt index 4491e830..cf102d51 100644 --- a/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/notes/NotesWidget.kt +++ b/app/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/notes/NotesWidget.kt @@ -43,18 +43,22 @@ import androidx.compose.material3.DropdownMenuItem import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.PlainTooltipBox +import androidx.compose.material3.PlainTooltip import androidx.compose.material3.SnackbarDuration import androidx.compose.material3.SnackbarResult import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.material3.TextButton +import androidx.compose.material3.TooltipBox +import androidx.compose.material3.TooltipDefaults +import androidx.compose.material3.rememberTooltipState import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -89,6 +93,8 @@ fun NotesWidget( val snackbarHostState = LocalSnackbarHostState.current val lifecycleOwner = LocalLifecycleOwner.current + val scope = rememberCoroutineScope() + var showConflictResolveSheet by remember { mutableStateOf(false) } var readWriteErrorSheetText by remember { mutableStateOf(null) } @@ -174,14 +180,20 @@ fun NotesWidget( Row( modifier = Modifier.padding(8.dp), ) { - PlainTooltipBox(tooltip = { - Text( - stringResource( - if (widget.config.linkedFile == null) R.string.note_widget_link_file - else R.string.note_widget_action_unlink_file - ) - ) - }) { + val tooltipState = rememberTooltipState() + TooltipBox( + state = tooltipState, + positionProvider = TooltipDefaults.rememberPlainTooltipPositionProvider(), + tooltip = { + PlainTooltip { + Text( + stringResource( + if (widget.config.linkedFile == null) R.string.note_widget_link_file + else R.string.note_widget_action_unlink_file + ) + ) + } + }) { IconButton( onClick = { if (widget.config.linkedFile == null) { @@ -192,8 +204,14 @@ fun NotesWidget( viewModel.unlinkFile(context) } }, - modifier = Modifier - .tooltipTrigger() + modifier = Modifier.combinedClickable( + onClick = {}, + onLongClick = { + scope.launch { + tooltipState.show() + } + } + ) ) { Icon( if (widget.config.linkedFile == null) Icons.Rounded.Link @@ -203,13 +221,26 @@ fun NotesWidget( } } if (isLastWidget == false) { - PlainTooltipBox(tooltip = { Text(stringResource(R.string.notes_widget_action_dismiss)) }) { + TooltipBox( + state = tooltipState, + positionProvider = TooltipDefaults.rememberPlainTooltipPositionProvider(), + tooltip = { + PlainTooltip { + Text(stringResource(R.string.notes_widget_action_dismiss)) + } + }) { IconButton( onClick = { viewModel.dismissNote() }, - modifier = Modifier - .tooltipTrigger() + modifier = Modifier.combinedClickable( + onClick = {}, + onLongClick = { + scope.launch { + tooltipState.show() + } + } + ) ) { Icon(Icons.Rounded.Delete, null) } diff --git a/app/ui/src/main/java/de/mm20/launcher2/ui/settings/colorscheme/ColorSwatch.kt b/app/ui/src/main/java/de/mm20/launcher2/ui/settings/colorscheme/ColorSwatch.kt index 6e363f48..34810039 100644 --- a/app/ui/src/main/java/de/mm20/launcher2/ui/settings/colorscheme/ColorSwatch.kt +++ b/app/ui/src/main/java/de/mm20/launcher2/ui/settings/colorscheme/ColorSwatch.kt @@ -24,7 +24,6 @@ fun ColorSwatch( color: Color, modifier: Modifier = Modifier, selected: Boolean = false, - onClick: (() -> Unit)? = null ) { val darkTheme = LocalDarkTheme.current val iconColor = Color(Hct.fromInt(color.toArgb()).let { @@ -48,7 +47,6 @@ fun ColorSwatch( Box( modifier = modifier .clip(CircleShape) - .clickable(enabled = onClick != null, onClick = onClick ?: {}) .border( if (selected) 4.dp else 1.dp, borderColor, diff --git a/app/ui/src/main/java/de/mm20/launcher2/ui/settings/colorscheme/CorePaletteColorPreference.kt b/app/ui/src/main/java/de/mm20/launcher2/ui/settings/colorscheme/CorePaletteColorPreference.kt index 79a18bb9..4796cd02 100644 --- a/app/ui/src/main/java/de/mm20/launcher2/ui/settings/colorscheme/CorePaletteColorPreference.kt +++ b/app/ui/src/main/java/de/mm20/launcher2/ui/settings/colorscheme/CorePaletteColorPreference.kt @@ -3,6 +3,7 @@ package de.mm20.launcher2.ui.settings.colorscheme import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.expandVertically import androidx.compose.animation.shrinkVertically +import androidx.compose.foundation.combinedClickable import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding @@ -15,13 +16,17 @@ import androidx.compose.material.icons.rounded.SettingsSuggest import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Icon -import androidx.compose.material3.PlainTooltipBox +import androidx.compose.material3.PlainTooltip import androidx.compose.material3.Text import androidx.compose.material3.TextButton +import androidx.compose.material3.TooltipBox +import androidx.compose.material3.TooltipDefaults +import androidx.compose.material3.rememberTooltipState import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -46,13 +51,28 @@ fun CorePaletteColorPreference( ) { var showDialog by remember { mutableStateOf(false) } - PlainTooltipBox(tooltip = { Text(title) }) { + val scope = rememberCoroutineScope() + val tooltipState = rememberTooltipState() + + TooltipBox( + state = tooltipState, + positionProvider = TooltipDefaults.rememberPlainTooltipPositionProvider(), + tooltip = { + PlainTooltip { + Text(title) + } + }, + ) { ColorSwatch( color = Color(value ?: defaultValue), modifier = modifier .size(48.dp) - .tooltipTrigger(), - onClick = { showDialog = true }, + .combinedClickable( + onClick = { showDialog = true }, + onLongClick = { + onValueChange(null) + } + ), ) } diff --git a/app/ui/src/main/java/de/mm20/launcher2/ui/settings/colorscheme/ThemeColorPreference.kt b/app/ui/src/main/java/de/mm20/launcher2/ui/settings/colorscheme/ThemeColorPreference.kt index 80badb06..33902128 100644 --- a/app/ui/src/main/java/de/mm20/launcher2/ui/settings/colorscheme/ThemeColorPreference.kt +++ b/app/ui/src/main/java/de/mm20/launcher2/ui/settings/colorscheme/ThemeColorPreference.kt @@ -3,6 +3,8 @@ package de.mm20.launcher2.ui.settings.colorscheme import androidx.compose.animation.AnimatedContent import androidx.compose.foundation.Canvas import androidx.compose.foundation.background +import androidx.compose.foundation.clickable +import androidx.compose.foundation.combinedClickable import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Row @@ -23,17 +25,21 @@ import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.PlainTooltipBox +import androidx.compose.material3.PlainTooltip import androidx.compose.material3.SegmentedButton import androidx.compose.material3.SegmentedButtonDefaults import androidx.compose.material3.SingleChoiceSegmentedButtonRow import androidx.compose.material3.Slider import androidx.compose.material3.Text import androidx.compose.material3.TextButton +import androidx.compose.material3.TooltipBox +import androidx.compose.material3.TooltipDefaults +import androidx.compose.material3.rememberTooltipState import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -59,6 +65,7 @@ import de.mm20.launcher2.ui.component.colorpicker.HctColorPicker import de.mm20.launcher2.ui.component.colorpicker.rememberHctColorPickerState import de.mm20.launcher2.ui.ktx.hct import hct.Hct +import kotlinx.coroutines.launch import kotlin.math.roundToInt import de.mm20.launcher2.themes.Color as ThemeColor @@ -73,13 +80,26 @@ fun ThemeColorPreference( ) { var showDialog by remember { mutableStateOf(false) } - PlainTooltipBox(tooltip = { Text(title) }) { + val scope = rememberCoroutineScope() + val tooltipState = rememberTooltipState() + + TooltipBox( + state = tooltipState, + positionProvider = TooltipDefaults.rememberPlainTooltipPositionProvider(), + tooltip = { PlainTooltip { Text(title) } } + ) { ColorSwatch( color = Color((value ?: defaultValue).get(corePalette)), modifier = modifier .size(48.dp) - .tooltipTrigger(), - onClick = { showDialog = true }, + .combinedClickable( + onClick = { showDialog = true }, + onLongClick = { + scope.launch { + tooltipState.show() + } + } + ), ) } @@ -180,14 +200,14 @@ fun ThemeColorPreference( ), modifier = Modifier .padding(8.dp) - .size(64.dp), + .size(64.dp) + .clickable { + currentValue = ColorRef( + CorePaletteColor.Primary, + tone.roundToInt() + ) + }, selected = themeColor.color == CorePaletteColor.Primary, - onClick = { - currentValue = ColorRef( - CorePaletteColor.Primary, - tone.roundToInt() - ) - }, ) Spacer(modifier = Modifier.weight(1f)) ColorSwatch( @@ -198,14 +218,14 @@ fun ThemeColorPreference( ), modifier = Modifier .padding(8.dp) - .size(64.dp), + .size(64.dp) + .clickable { + currentValue = ColorRef( + CorePaletteColor.Secondary, + tone.roundToInt() + ) + }, selected = themeColor.color == CorePaletteColor.Secondary, - onClick = { - currentValue = ColorRef( - CorePaletteColor.Secondary, - tone.roundToInt() - ) - }, ) Spacer(modifier = Modifier.weight(1f)) ColorSwatch( @@ -216,14 +236,14 @@ fun ThemeColorPreference( ), modifier = Modifier .padding(8.dp) - .size(64.dp), + .size(64.dp) + .clickable { + currentValue = ColorRef( + CorePaletteColor.Tertiary, + tone.roundToInt() + ) + }, selected = themeColor.color == CorePaletteColor.Tertiary, - onClick = { - currentValue = ColorRef( - CorePaletteColor.Tertiary, - tone.roundToInt() - ) - }, ) } Row( @@ -237,14 +257,14 @@ fun ThemeColorPreference( ), modifier = Modifier .padding(8.dp) - .size(64.dp), + .size(64.dp) + .clickable { + currentValue = ColorRef( + CorePaletteColor.Neutral, + tone.roundToInt() + ) + }, selected = themeColor.color == CorePaletteColor.Neutral, - onClick = { - currentValue = ColorRef( - CorePaletteColor.Neutral, - tone.roundToInt() - ) - }, ) Spacer(modifier = Modifier.weight(1f)) ColorSwatch( @@ -255,14 +275,14 @@ fun ThemeColorPreference( ), modifier = Modifier .padding(8.dp) - .size(64.dp), + .size(64.dp) + .clickable { + currentValue = ColorRef( + CorePaletteColor.NeutralVariant, + tone.roundToInt() + ) + }, selected = themeColor.color == CorePaletteColor.NeutralVariant, - onClick = { - currentValue = ColorRef( - CorePaletteColor.NeutralVariant, - tone.roundToInt() - ) - }, ) Spacer(modifier = Modifier.weight(1f)) ColorSwatch( @@ -273,14 +293,14 @@ fun ThemeColorPreference( ), modifier = Modifier .padding(8.dp) - .size(64.dp), + .size(64.dp) + .clickable { + currentValue = ColorRef( + CorePaletteColor.Error, + tone.roundToInt() + ) + }, selected = themeColor.color == CorePaletteColor.Error, - onClick = { - currentValue = ColorRef( - CorePaletteColor.Error, - tone.roundToInt() - ) - }, ) } Row( diff --git a/app/ui/src/main/java/de/mm20/launcher2/ui/settings/icons/IconsSettingsScreen.kt b/app/ui/src/main/java/de/mm20/launcher2/ui/settings/icons/IconsSettingsScreen.kt index 8d0c9d85..43400595 100644 --- a/app/ui/src/main/java/de/mm20/launcher2/ui/settings/icons/IconsSettingsScreen.kt +++ b/app/ui/src/main/java/de/mm20/launcher2/ui/settings/icons/IconsSettingsScreen.kt @@ -6,6 +6,7 @@ import androidx.compose.animation.AnimatedVisibility import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.background import androidx.compose.foundation.clickable +import androidx.compose.foundation.combinedClickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column @@ -24,15 +25,19 @@ import androidx.compose.material3.FilledIconToggleButton import androidx.compose.material3.Icon import androidx.compose.material3.LocalContentColor import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.PlainTooltipBox +import androidx.compose.material3.PlainTooltip import androidx.compose.material3.Surface import androidx.compose.material3.Text +import androidx.compose.material3.TooltipBox +import androidx.compose.material3.TooltipDefaults +import androidx.compose.material3.rememberTooltipState import androidx.compose.runtime.Composable import androidx.compose.runtime.collectAsState import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -65,6 +70,7 @@ import de.mm20.launcher2.ui.component.preferences.SliderPreference import de.mm20.launcher2.ui.component.preferences.SwitchPreference import de.mm20.launcher2.ui.component.preferences.label import de.mm20.launcher2.ui.component.preferences.value +import kotlinx.coroutines.launch @Composable fun IconsSettingsScreen() { @@ -257,9 +263,26 @@ fun IconsSettingsScreen() { modifier = Modifier .padding(12.dp) ) { - PlainTooltipBox(tooltip = { Text(stringResource(R.string.icon_pack_dynamic_colors)) }) { + val tooltipState = rememberTooltipState() + val scope = rememberCoroutineScope() + TooltipBox( + state = tooltipState, + positionProvider = TooltipDefaults.rememberPlainTooltipPositionProvider(), + tooltip = { + PlainTooltip { + Text(stringResource(R.string.icon_pack_dynamic_colors)) + } + }, + ) { FilledIconToggleButton( - modifier = Modifier.tooltipTrigger(), + modifier = Modifier.combinedClickable( + onClick = {}, + onLongClick = { + scope.launch { + tooltipState.show() + } + } + ), checked = icons?.iconPackThemed == true, onCheckedChange = { viewModel.setIconPackThemed(it) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index ee5cca0f..1c113a0d 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -8,25 +8,25 @@ android-gradle-plugin = "8.2.2" protobuf-gradle-plugin = "0.9.4" ksp-gradle-plugin = "1.9.0-1.0.13" -kotlin = "1.9.0" +kotlin = "1.9.22" kotlinx-coroutines = "1.7.3" kotlinx-immutable = "0.3.5" kotlinx-serialization = "1.5.1" jetbrains-markdown = "0.4.1" -androidx-compose = "1.6.0-alpha07" -androidx-compose-material3 = "1.2.0-alpha09" -androidx-compose-compiler = "1.5.2" -androidx-lifecycle = "2.6.2" +androidx-compose = "1.7.0-alpha01" +androidx-compose-material3 = "1.2.0-rc01" +androidx-compose-compiler = "1.5.8" +androidx-lifecycle = "2.7.0" androidx-core = "1.12.0" androidx-appcompat = "1.7.0-alpha03" -androidx-activity = "1.8.0" -androidx-work = "2.8.1" -androidx-browser = "1.6.0" +androidx-activity = "1.8.2" +androidx-work = "2.9.0" +androidx-browser = "1.7.0" androidx-palette = "1.0.0" -androidx-media2 = "1.2.1" -androidx-room = "2.5.2" +androidx-media2 = "1.3.0" +androidx-room = "2.6.1" accompanist = "0.33.2-alpha" coil = "2.3.0"