Update libraries
This commit is contained in:
parent
73e17486a1
commit
c014c143ed
2
.idea/kotlinc.xml
generated
2
.idea/kotlinc.xml
generated
@ -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>
|
||||||
@ -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()
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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(
|
||||||
|
|||||||
@ -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,
|
||||||
|
|||||||
@ -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)
|
||||||
},
|
},
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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,
|
||||||
|
|||||||
@ -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)
|
||||||
|
}
|
||||||
|
),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -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(
|
||||||
|
|||||||
@ -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)
|
||||||
|
|||||||
@ -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"
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user