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"