Update libraries

This commit is contained in:
MM20 2024-02-03 22:47:05 +01:00
parent 73e17486a1
commit c014c143ed
No known key found for this signature in database
GPG Key ID: 0B61A8F2DEAFA389
13 changed files with 236 additions and 102 deletions

2
.idea/kotlinc.xml generated
View File

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="KotlinJpsPluginSettings"> <component name="KotlinJpsPluginSettings">
<option name="version" value="1.9.0" /> <option name="version" value="1.9.22" />
</component> </component>
</project> </project>

View File

@ -2,6 +2,7 @@ package de.mm20.launcher2.ui.component
import androidx.activity.compose.BackHandler import androidx.activity.compose.BackHandler
import androidx.compose.animation.core.animateFloatAsState import androidx.compose.animation.core.animateFloatAsState
import androidx.compose.animation.core.exponentialDecay
import androidx.compose.animation.core.spring import androidx.compose.animation.core.spring
import androidx.compose.foundation.background import androidx.compose.foundation.background
import androidx.compose.foundation.gestures.AnchoredDraggableState 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.imePadding
import androidx.compose.foundation.layout.offset import androidx.compose.foundation.layout.offset
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.systemBars
import androidx.compose.foundation.layout.systemBarsPadding import androidx.compose.foundation.layout.systemBarsPadding
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.foundation.layout.wrapContentHeight 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.nestedscroll.nestedScroll
import androidx.compose.ui.input.pointer.pointerInput import androidx.compose.ui.input.pointer.pointerInput
import androidx.compose.ui.layout.onSizeChanged import androidx.compose.ui.layout.onSizeChanged
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.unit.Density import androidx.compose.ui.unit.Density
import androidx.compose.ui.unit.IntOffset import androidx.compose.ui.unit.IntOffset
import androidx.compose.ui.unit.IntRect 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.LayoutDirection
import androidx.compose.ui.unit.Velocity import androidx.compose.ui.unit.Velocity
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.Popup
import androidx.compose.ui.window.PopupPositionProvider import androidx.compose.ui.window.PopupPositionProvider
import androidx.compose.ui.window.PopupProperties
import de.mm20.launcher2.ui.ktx.toPixels import de.mm20.launcher2.ui.ktx.toPixels
import de.mm20.launcher2.ui.overlays.LocalZIndex import de.mm20.launcher2.ui.overlays.LocalZIndex
import de.mm20.launcher2.ui.overlays.Overlay import de.mm20.launcher2.ui.overlays.Overlay
@ -93,7 +90,8 @@ fun BottomSheetDialog(
initialValue = SwipeState.Dismiss, initialValue = SwipeState.Dismiss,
positionalThreshold = { it * 0.5f }, positionalThreshold = { it * 0.5f },
velocityThreshold = { 200f }, velocityThreshold = { 200f },
animationSpec = spring(), snapAnimationSpec = spring(),
decayAnimationSpec = exponentialDecay(),
confirmValueChange = { confirmValueChange = {
it != SwipeState.Dismiss || dismissible() it != SwipeState.Dismiss || dismissible()
} }

View File

@ -398,15 +398,12 @@ fun PagerScaffold(
modifier = Modifier modifier = Modifier
.fillMaxSize() .fillMaxSize()
.nestedScroll(pagerNestedScrollConnection), .nestedScroll(pagerNestedScrollConnection),
beyondBoundsPageCount = 1, outOfBoundsPageCount = 1,
reverseLayout = reverse == (LocalLayoutDirection.current == LayoutDirection.Ltr), reverseLayout = reverse == (LocalLayoutDirection.current == LayoutDirection.Ltr),
state = pagerState, state = pagerState,
userScrollEnabled = false,//!isWidgetEditMode, userScrollEnabled = false,//!isWidgetEditMode,
flingBehavior = PagerDefaults.flingBehavior( flingBehavior = PagerDefaults.flingBehavior(
state = pagerState, state = pagerState,
lowVelocityAnimationSpec = spring(
stiffness = Spring.StiffnessMediumLow,
),
pagerSnapDistance = remember { pagerSnapDistance = remember {
object : PagerSnapDistance { object : PagerSnapDistance {
override fun calculateTargetPage( override fun calculateTargetPage(

View File

@ -401,7 +401,7 @@ fun PullDownScaffold(
) { ) {
VerticalPager( VerticalPager(
modifier = Modifier.fillMaxSize(), modifier = Modifier.fillMaxSize(),
beyondBoundsPageCount = 1, outOfBoundsPageCount = 1,
state = pagerState, state = pagerState,
reverseLayout = true, reverseLayout = true,
userScrollEnabled = false, userScrollEnabled = false,

View File

@ -52,9 +52,10 @@ fun ColumnScope.SearchBarActions(
} else AssistChipDefaults.assistChipColors(), } else AssistChipDefaults.assistChipColors(),
border = if (it == highlightedAction) { border = if (it == highlightedAction) {
AssistChipDefaults.assistChipBorder( AssistChipDefaults.assistChipBorder(
true,
borderColor = MaterialTheme.colorScheme.secondary, borderColor = MaterialTheme.colorScheme.secondary,
) )
} else AssistChipDefaults.assistChipBorder(), } else AssistChipDefaults.assistChipBorder(true),
onClick = { onClick = {
it.start(context) it.start(context)
}, },

View File

@ -44,10 +44,12 @@ import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.OutlinedButton import androidx.compose.material3.OutlinedButton
import androidx.compose.material3.OutlinedCard import androidx.compose.material3.OutlinedCard
import androidx.compose.material3.OutlinedTextField import androidx.compose.material3.OutlinedTextField
import androidx.compose.material3.PlainTooltipBox import androidx.compose.material3.PlainTooltip
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.material3.TextButton 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.Composable
import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.collectAsState import androidx.compose.runtime.collectAsState
@ -366,10 +368,15 @@ fun ColumnScope.ConfigureAppWidget(
verticalAlignment = Alignment.CenterVertically verticalAlignment = Alignment.CenterVertically
) { ) {
val scope = rememberCoroutineScope() val scope = rememberCoroutineScope()
val tooltipState = rememberPlainTooltipState() val tooltipState = rememberTooltipState()
PlainTooltipBox( TooltipBox(
tooltipState = tooltipState, state = tooltipState,
tooltip = { Text(stringResource(R.string.widget_config_appwidget_resize_hint)) } positionProvider = TooltipDefaults.rememberPlainTooltipPositionProvider(),
tooltip = {
PlainTooltip {
Text(stringResource(R.string.widget_config_appwidget_resize_hint))
}
}
) { ) {
Box( Box(
modifier = Modifier modifier = Modifier

View File

@ -42,13 +42,17 @@ import androidx.compose.material3.IconButton
import androidx.compose.material3.IconButtonDefaults import androidx.compose.material3.IconButtonDefaults
import androidx.compose.material3.LinearProgressIndicator import androidx.compose.material3.LinearProgressIndicator
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.PlainTooltipBox import androidx.compose.material3.PlainTooltip
import androidx.compose.material3.Slider import androidx.compose.material3.Slider
import androidx.compose.material3.Text 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.Composable
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.setValue import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier 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.LocalCardStyle
import de.mm20.launcher2.ui.locals.LocalWindowSize import de.mm20.launcher2.ui.locals.LocalWindowSize
import de.mm20.launcher2.widgets.MusicWidget import de.mm20.launcher2.widgets.MusicWidget
import kotlinx.coroutines.launch
import kotlin.math.min import kotlin.math.min
@Composable @Composable
@ -354,11 +359,29 @@ fun CustomActions(
val usedSlots = 1 + (if (actions.skipToPrevious) 1 else 0) + (if (actions.skipToNext) 1 else 0) val usedSlots = 1 + (if (actions.skipToPrevious) 1 else 0) + (if (actions.skipToNext) 1 else 0)
val slots = 5 - usedSlots val slots = 5 - usedSlots
val scope = rememberCoroutineScope()
for (i in 0 until min(actions.customActions.size, slots - 1)) { for (i in 0 until min(actions.customActions.size, slots - 1)) {
val action = actions.customActions[i] 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( IconButton(
modifier = Modifier.tooltipTrigger(), modifier = Modifier.combinedClickable(
onClick = {},
onLongClick = {
scope.launch {
tooltipState.show()
}
}
),
onClick = { onClick = {
onActionSelected(action) onActionSelected(action)
} }
@ -399,10 +422,26 @@ fun CustomActions(
} }
} }
} else if (slots == actions.customActions.size) { } else if (slots == actions.customActions.size) {
val tooltipState = rememberTooltipState()
val action = actions.customActions.last() val action = actions.customActions.last()
PlainTooltipBox(tooltip = { Text(action.name.toString()) }) { TooltipBox(
state = tooltipState,
positionProvider = TooltipDefaults.rememberPlainTooltipPositionProvider(),
tooltip = {
PlainTooltip {
Text(action.name.toString())
}
}
) {
IconButton( IconButton(
modifier = Modifier.tooltipTrigger(), modifier = Modifier.combinedClickable(
onClick = {},
onLongClick = {
scope.launch {
tooltipState.show()
}
}
),
onClick = { onClick = {
onActionSelected(action) onActionSelected(action)
} }

View File

@ -43,18 +43,22 @@ import androidx.compose.material3.DropdownMenuItem
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.PlainTooltipBox import androidx.compose.material3.PlainTooltip
import androidx.compose.material3.SnackbarDuration import androidx.compose.material3.SnackbarDuration
import androidx.compose.material3.SnackbarResult import androidx.compose.material3.SnackbarResult
import androidx.compose.material3.Surface import androidx.compose.material3.Surface
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.material3.TextButton 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.Composable
import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.collectAsState import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.setValue import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
@ -89,6 +93,8 @@ fun NotesWidget(
val snackbarHostState = LocalSnackbarHostState.current val snackbarHostState = LocalSnackbarHostState.current
val lifecycleOwner = LocalLifecycleOwner.current val lifecycleOwner = LocalLifecycleOwner.current
val scope = rememberCoroutineScope()
var showConflictResolveSheet by remember { mutableStateOf(false) } var showConflictResolveSheet by remember { mutableStateOf(false) }
var readWriteErrorSheetText by remember { mutableStateOf<String?>(null) } var readWriteErrorSheetText by remember { mutableStateOf<String?>(null) }
@ -174,14 +180,20 @@ fun NotesWidget(
Row( Row(
modifier = Modifier.padding(8.dp), modifier = Modifier.padding(8.dp),
) { ) {
PlainTooltipBox(tooltip = { val tooltipState = rememberTooltipState()
Text( TooltipBox(
stringResource( state = tooltipState,
if (widget.config.linkedFile == null) R.string.note_widget_link_file positionProvider = TooltipDefaults.rememberPlainTooltipPositionProvider(),
else R.string.note_widget_action_unlink_file tooltip = {
) PlainTooltip {
) Text(
}) { stringResource(
if (widget.config.linkedFile == null) R.string.note_widget_link_file
else R.string.note_widget_action_unlink_file
)
)
}
}) {
IconButton( IconButton(
onClick = { onClick = {
if (widget.config.linkedFile == null) { if (widget.config.linkedFile == null) {
@ -192,8 +204,14 @@ fun NotesWidget(
viewModel.unlinkFile(context) viewModel.unlinkFile(context)
} }
}, },
modifier = Modifier modifier = Modifier.combinedClickable(
.tooltipTrigger() onClick = {},
onLongClick = {
scope.launch {
tooltipState.show()
}
}
)
) { ) {
Icon( Icon(
if (widget.config.linkedFile == null) Icons.Rounded.Link if (widget.config.linkedFile == null) Icons.Rounded.Link
@ -203,13 +221,26 @@ fun NotesWidget(
} }
} }
if (isLastWidget == false) { 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( IconButton(
onClick = { onClick = {
viewModel.dismissNote() viewModel.dismissNote()
}, },
modifier = Modifier modifier = Modifier.combinedClickable(
.tooltipTrigger() onClick = {},
onLongClick = {
scope.launch {
tooltipState.show()
}
}
)
) { ) {
Icon(Icons.Rounded.Delete, null) Icon(Icons.Rounded.Delete, null)
} }

View File

@ -24,7 +24,6 @@ fun ColorSwatch(
color: Color, color: Color,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
selected: Boolean = false, selected: Boolean = false,
onClick: (() -> Unit)? = null
) { ) {
val darkTheme = LocalDarkTheme.current val darkTheme = LocalDarkTheme.current
val iconColor = Color(Hct.fromInt(color.toArgb()).let { val iconColor = Color(Hct.fromInt(color.toArgb()).let {
@ -48,7 +47,6 @@ fun ColorSwatch(
Box( Box(
modifier = modifier modifier = modifier
.clip(CircleShape) .clip(CircleShape)
.clickable(enabled = onClick != null, onClick = onClick ?: {})
.border( .border(
if (selected) 4.dp else 1.dp, if (selected) 4.dp else 1.dp,
borderColor, borderColor,

View File

@ -3,6 +3,7 @@ package de.mm20.launcher2.ui.settings.colorscheme
import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.AnimatedVisibility
import androidx.compose.animation.expandVertically import androidx.compose.animation.expandVertically
import androidx.compose.animation.shrinkVertically import androidx.compose.animation.shrinkVertically
import androidx.compose.foundation.combinedClickable
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding 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.ButtonDefaults
import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.PlainTooltipBox import androidx.compose.material3.PlainTooltip
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.material3.TextButton 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.Composable
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.setValue import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
@ -46,13 +51,28 @@ fun CorePaletteColorPreference(
) { ) {
var showDialog by remember { mutableStateOf(false) } 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( ColorSwatch(
color = Color(value ?: defaultValue), color = Color(value ?: defaultValue),
modifier = modifier modifier = modifier
.size(48.dp) .size(48.dp)
.tooltipTrigger(), .combinedClickable(
onClick = { showDialog = true }, onClick = { showDialog = true },
onLongClick = {
onValueChange(null)
}
),
) )
} }

View File

@ -3,6 +3,8 @@ package de.mm20.launcher2.ui.settings.colorscheme
import androidx.compose.animation.AnimatedContent import androidx.compose.animation.AnimatedContent
import androidx.compose.foundation.Canvas import androidx.compose.foundation.Canvas
import androidx.compose.foundation.background 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.Box
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
@ -23,17 +25,21 @@ import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.PlainTooltipBox import androidx.compose.material3.PlainTooltip
import androidx.compose.material3.SegmentedButton import androidx.compose.material3.SegmentedButton
import androidx.compose.material3.SegmentedButtonDefaults import androidx.compose.material3.SegmentedButtonDefaults
import androidx.compose.material3.SingleChoiceSegmentedButtonRow import androidx.compose.material3.SingleChoiceSegmentedButtonRow
import androidx.compose.material3.Slider import androidx.compose.material3.Slider
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.material3.TextButton 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.Composable
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.setValue import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier 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.component.colorpicker.rememberHctColorPickerState
import de.mm20.launcher2.ui.ktx.hct import de.mm20.launcher2.ui.ktx.hct
import hct.Hct import hct.Hct
import kotlinx.coroutines.launch
import kotlin.math.roundToInt import kotlin.math.roundToInt
import de.mm20.launcher2.themes.Color as ThemeColor import de.mm20.launcher2.themes.Color as ThemeColor
@ -73,13 +80,26 @@ fun ThemeColorPreference(
) { ) {
var showDialog by remember { mutableStateOf(false) } 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( ColorSwatch(
color = Color((value ?: defaultValue).get(corePalette)), color = Color((value ?: defaultValue).get(corePalette)),
modifier = modifier modifier = modifier
.size(48.dp) .size(48.dp)
.tooltipTrigger(), .combinedClickable(
onClick = { showDialog = true }, onClick = { showDialog = true },
onLongClick = {
scope.launch {
tooltipState.show()
}
}
),
) )
} }
@ -180,14 +200,14 @@ fun ThemeColorPreference(
), ),
modifier = Modifier modifier = Modifier
.padding(8.dp) .padding(8.dp)
.size(64.dp), .size(64.dp)
.clickable {
currentValue = ColorRef(
CorePaletteColor.Primary,
tone.roundToInt()
)
},
selected = themeColor.color == CorePaletteColor.Primary, selected = themeColor.color == CorePaletteColor.Primary,
onClick = {
currentValue = ColorRef(
CorePaletteColor.Primary,
tone.roundToInt()
)
},
) )
Spacer(modifier = Modifier.weight(1f)) Spacer(modifier = Modifier.weight(1f))
ColorSwatch( ColorSwatch(
@ -198,14 +218,14 @@ fun ThemeColorPreference(
), ),
modifier = Modifier modifier = Modifier
.padding(8.dp) .padding(8.dp)
.size(64.dp), .size(64.dp)
.clickable {
currentValue = ColorRef(
CorePaletteColor.Secondary,
tone.roundToInt()
)
},
selected = themeColor.color == CorePaletteColor.Secondary, selected = themeColor.color == CorePaletteColor.Secondary,
onClick = {
currentValue = ColorRef(
CorePaletteColor.Secondary,
tone.roundToInt()
)
},
) )
Spacer(modifier = Modifier.weight(1f)) Spacer(modifier = Modifier.weight(1f))
ColorSwatch( ColorSwatch(
@ -216,14 +236,14 @@ fun ThemeColorPreference(
), ),
modifier = Modifier modifier = Modifier
.padding(8.dp) .padding(8.dp)
.size(64.dp), .size(64.dp)
.clickable {
currentValue = ColorRef(
CorePaletteColor.Tertiary,
tone.roundToInt()
)
},
selected = themeColor.color == CorePaletteColor.Tertiary, selected = themeColor.color == CorePaletteColor.Tertiary,
onClick = {
currentValue = ColorRef(
CorePaletteColor.Tertiary,
tone.roundToInt()
)
},
) )
} }
Row( Row(
@ -237,14 +257,14 @@ fun ThemeColorPreference(
), ),
modifier = Modifier modifier = Modifier
.padding(8.dp) .padding(8.dp)
.size(64.dp), .size(64.dp)
.clickable {
currentValue = ColorRef(
CorePaletteColor.Neutral,
tone.roundToInt()
)
},
selected = themeColor.color == CorePaletteColor.Neutral, selected = themeColor.color == CorePaletteColor.Neutral,
onClick = {
currentValue = ColorRef(
CorePaletteColor.Neutral,
tone.roundToInt()
)
},
) )
Spacer(modifier = Modifier.weight(1f)) Spacer(modifier = Modifier.weight(1f))
ColorSwatch( ColorSwatch(
@ -255,14 +275,14 @@ fun ThemeColorPreference(
), ),
modifier = Modifier modifier = Modifier
.padding(8.dp) .padding(8.dp)
.size(64.dp), .size(64.dp)
.clickable {
currentValue = ColorRef(
CorePaletteColor.NeutralVariant,
tone.roundToInt()
)
},
selected = themeColor.color == CorePaletteColor.NeutralVariant, selected = themeColor.color == CorePaletteColor.NeutralVariant,
onClick = {
currentValue = ColorRef(
CorePaletteColor.NeutralVariant,
tone.roundToInt()
)
},
) )
Spacer(modifier = Modifier.weight(1f)) Spacer(modifier = Modifier.weight(1f))
ColorSwatch( ColorSwatch(
@ -273,14 +293,14 @@ fun ThemeColorPreference(
), ),
modifier = Modifier modifier = Modifier
.padding(8.dp) .padding(8.dp)
.size(64.dp), .size(64.dp)
.clickable {
currentValue = ColorRef(
CorePaletteColor.Error,
tone.roundToInt()
)
},
selected = themeColor.color == CorePaletteColor.Error, selected = themeColor.color == CorePaletteColor.Error,
onClick = {
currentValue = ColorRef(
CorePaletteColor.Error,
tone.roundToInt()
)
},
) )
} }
Row( Row(

View File

@ -6,6 +6,7 @@ import androidx.compose.animation.AnimatedVisibility
import androidx.compose.foundation.BorderStroke import androidx.compose.foundation.BorderStroke
import androidx.compose.foundation.background import androidx.compose.foundation.background
import androidx.compose.foundation.clickable import androidx.compose.foundation.clickable
import androidx.compose.foundation.combinedClickable
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
@ -24,15 +25,19 @@ import androidx.compose.material3.FilledIconToggleButton
import androidx.compose.material3.Icon import androidx.compose.material3.Icon
import androidx.compose.material3.LocalContentColor import androidx.compose.material3.LocalContentColor
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.PlainTooltipBox import androidx.compose.material3.PlainTooltip
import androidx.compose.material3.Surface import androidx.compose.material3.Surface
import androidx.compose.material3.Text 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.Composable
import androidx.compose.runtime.collectAsState import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.derivedStateOf import androidx.compose.runtime.derivedStateOf
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.setValue import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier 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.SwitchPreference
import de.mm20.launcher2.ui.component.preferences.label import de.mm20.launcher2.ui.component.preferences.label
import de.mm20.launcher2.ui.component.preferences.value import de.mm20.launcher2.ui.component.preferences.value
import kotlinx.coroutines.launch
@Composable @Composable
fun IconsSettingsScreen() { fun IconsSettingsScreen() {
@ -257,9 +263,26 @@ fun IconsSettingsScreen() {
modifier = Modifier modifier = Modifier
.padding(12.dp) .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( FilledIconToggleButton(
modifier = Modifier.tooltipTrigger(), modifier = Modifier.combinedClickable(
onClick = {},
onLongClick = {
scope.launch {
tooltipState.show()
}
}
),
checked = icons?.iconPackThemed == true, checked = icons?.iconPackThemed == true,
onCheckedChange = { onCheckedChange = {
viewModel.setIconPackThemed(it) viewModel.setIconPackThemed(it)

View File

@ -8,25 +8,25 @@ android-gradle-plugin = "8.2.2"
protobuf-gradle-plugin = "0.9.4" protobuf-gradle-plugin = "0.9.4"
ksp-gradle-plugin = "1.9.0-1.0.13" ksp-gradle-plugin = "1.9.0-1.0.13"
kotlin = "1.9.0" kotlin = "1.9.22"
kotlinx-coroutines = "1.7.3" kotlinx-coroutines = "1.7.3"
kotlinx-immutable = "0.3.5" kotlinx-immutable = "0.3.5"
kotlinx-serialization = "1.5.1" kotlinx-serialization = "1.5.1"
jetbrains-markdown = "0.4.1" jetbrains-markdown = "0.4.1"
androidx-compose = "1.6.0-alpha07" androidx-compose = "1.7.0-alpha01"
androidx-compose-material3 = "1.2.0-alpha09" androidx-compose-material3 = "1.2.0-rc01"
androidx-compose-compiler = "1.5.2" androidx-compose-compiler = "1.5.8"
androidx-lifecycle = "2.6.2" androidx-lifecycle = "2.7.0"
androidx-core = "1.12.0" androidx-core = "1.12.0"
androidx-appcompat = "1.7.0-alpha03" androidx-appcompat = "1.7.0-alpha03"
androidx-activity = "1.8.0" androidx-activity = "1.8.2"
androidx-work = "2.8.1" androidx-work = "2.9.0"
androidx-browser = "1.6.0" androidx-browser = "1.7.0"
androidx-palette = "1.0.0" androidx-palette = "1.0.0"
androidx-media2 = "1.2.1" androidx-media2 = "1.3.0"
androidx-room = "2.5.2" androidx-room = "2.6.1"
accompanist = "0.33.2-alpha" accompanist = "0.33.2-alpha"
coil = "2.3.0" coil = "2.3.0"