Merge branch 'main' of github.com:MM2-0/Kvaesitso

This commit is contained in:
MM20 2025-07-04 12:01:19 +02:00
commit 720d2ab52a
No known key found for this signature in database
GPG Key ID: 0B61A8F2DEAFA389
7 changed files with 50 additions and 8 deletions

View File

@ -24,6 +24,7 @@ import androidx.compose.material.icons.rounded.AlignVerticalBottom
import androidx.compose.material.icons.rounded.AlignVerticalCenter
import androidx.compose.material.icons.rounded.AlignVerticalTop
import androidx.compose.material.icons.rounded.AutoAwesome
import androidx.compose.material.icons.rounded.AvTimer
import androidx.compose.material.icons.rounded.BatteryFull
import androidx.compose.material.icons.rounded.ColorLens
import androidx.compose.material.icons.rounded.DarkMode
@ -312,7 +313,8 @@ fun Clock(
compact,
showSeconds,
useThemeColor,
darkColors
darkColors,
style
)
is ClockWidgetStyle.Orbit -> OrbitClock(

View File

@ -147,7 +147,9 @@ fun WatchFaceSelector(
Box {
androidx.compose.animation.AnimatedVisibility(
selected is ClockWidgetStyle.Digital1 || (selected is ClockWidgetStyle.Custom && selected.widgetId != null),
selected is ClockWidgetStyle.Digital1 ||
selected is ClockWidgetStyle.Analog ||
(selected is ClockWidgetStyle.Custom && selected.widgetId != null),
modifier = Modifier
.align(Alignment.TopEnd)
.zIndex(1f),
@ -179,6 +181,21 @@ fun WatchFaceSelector(
}
)
}
if (selected is ClockWidgetStyle.Analog) {
DropdownMenuItem(
text = { Text(stringResource(R.string.clock_variant_analog_ticks)) },
leadingIcon = {
Icon(
if (selected.showTicks) Icons.Rounded.CheckCircle
else Icons.Rounded.RadioButtonUnchecked,
null
)
},
onClick = {
onSelect(selected.copy(showTicks = !selected.showTicks))
}
)
}
if (selected is ClockWidgetStyle.Custom) {
DropdownMenuItem(
text = { Text(stringResource(R.string.widget_pick_widget)) },

View File

@ -13,6 +13,7 @@ import androidx.compose.ui.graphics.StrokeCap
import androidx.compose.ui.graphics.drawscope.Fill
import androidx.compose.ui.graphics.drawscope.rotate
import androidx.compose.ui.unit.dp
import de.mm20.launcher2.preferences.ClockWidgetStyle
import de.mm20.launcher2.ui.locals.LocalDarkTheme
import java.util.Calendar
@ -23,6 +24,7 @@ fun AnalogClock(
showSeconds: Boolean,
useThemeColor: Boolean,
darkColors: Boolean,
style: ClockWidgetStyle.Analog,
) {
val verticalLayout = !compact
val date = Calendar.getInstance()
@ -66,6 +68,19 @@ fun AnalogClock(
.padding(top = if (verticalLayout) 8.dp else 0.dp,
bottom = if (verticalLayout) 8.dp else 0.dp)
.size(size)) {
if (style.showTicks) {
for (hour in 0.. 11) {
rotate(hour.toFloat() / 12f * 360f, this.size.center) {
drawLine(
secondaryColor,
this.size.center.copy(y = this.size.height * 0.95f),
this.size.center.copy(y = this.size.height),
strokeWidth = (strokeWidth * 0.75f).toPx(),
cap = StrokeCap.Round
)
}
}
}
rotate(hour.toFloat() / 12f * 360f + ((minute.toFloat() / 60f) * 30f) + (second.toFloat() / 120f), this.size.center) {
drawLine(
color,

View File

@ -21,11 +21,11 @@ class ClockWidgetSettingsScreenVM : ViewModel(), KoinComponent {
settings.setCompact(compact)
}
val availableClockStyles = combine(settings.digital1, settings.custom) { digital1, custom ->
val availableClockStyles = combine(settings.digital1, settings.analog, settings.custom) { digital1, analog, custom ->
listOf(
digital1,
ClockWidgetStyle.Digital2,
ClockWidgetStyle.Analog,
analog,
ClockWidgetStyle.Orbit,
ClockWidgetStyle.Segment,
ClockWidgetStyle.Binary,

View File

@ -878,6 +878,7 @@
<string name="clock_style_empty">No clock</string>
<string name="clock_style_custom">Custom widget</string>
<string name="clock_variant_outlined">Outlined</string>
<string name="clock_variant_analog_ticks">Ticks</string>
<string name="menu_show_filters">Show filters</string>
<string name="menu_hide_filters">Hide filters</string>
<string name="search_filter_tools">Tools</string>

View File

@ -41,6 +41,7 @@ data class LauncherSettingsData internal constructor(
@SerialName("clockWidgetStyle2")
internal val clockWidgetStyle: ClockWidgetStyleEnum = ClockWidgetStyleEnum.Digital1,
val clockWidgetDigital1: ClockWidgetStyle.Digital1 = ClockWidgetStyle.Digital1(),
val clockWidgetAnalog: ClockWidgetStyle.Analog = ClockWidgetStyle.Analog(),
val clockWidgetCustom: ClockWidgetStyle.Custom = ClockWidgetStyle.Custom(),
val clockWidgetColors: ClockWidgetColors = ClockWidgetColors.Auto,
val clockWidgetShowSeconds: Boolean = false,
@ -249,7 +250,9 @@ sealed interface ClockWidgetStyle {
@Serializable
@SerialName("analog")
data object Analog : ClockWidgetStyle
data class Analog(
val showTicks: Boolean = false
) : ClockWidgetStyle
@Serializable
@SerialName("binary")

View File

@ -84,7 +84,7 @@ class ClockWidgetSettings internal constructor(
ClockWidgetStyleEnum.Digital1 -> it.clockWidgetDigital1
ClockWidgetStyleEnum.Digital2 -> ClockWidgetStyle.Digital2
ClockWidgetStyleEnum.Orbit -> ClockWidgetStyle.Orbit
ClockWidgetStyleEnum.Analog -> ClockWidgetStyle.Analog
ClockWidgetStyleEnum.Analog -> it.clockWidgetAnalog
ClockWidgetStyleEnum.Binary -> ClockWidgetStyle.Binary
ClockWidgetStyleEnum.Segment -> ClockWidgetStyle.Segment
ClockWidgetStyleEnum.Empty -> ClockWidgetStyle.Empty
@ -95,6 +95,9 @@ class ClockWidgetSettings internal constructor(
val digital1: Flow<ClockWidgetStyle.Digital1>
get() = launcherDataStore.data.map { it.clockWidgetDigital1 }
val analog: Flow<ClockWidgetStyle.Analog>
get() = launcherDataStore.data.map { it.clockWidgetAnalog }
val custom: Flow<ClockWidgetStyle.Custom>
get() = launcherDataStore.data.map { it.clockWidgetCustom }
@ -102,8 +105,9 @@ class ClockWidgetSettings internal constructor(
launcherDataStore.update {
it.copy(
clockWidgetStyle = clockStyle.enumValue,
clockWidgetDigital1 = if (clockStyle is ClockWidgetStyle.Digital1) clockStyle else it.clockWidgetDigital1,
clockWidgetCustom = if (clockStyle is ClockWidgetStyle.Custom) clockStyle else it.clockWidgetCustom,
clockWidgetDigital1 = clockStyle as? ClockWidgetStyle.Digital1 ?: it.clockWidgetDigital1,
clockWidgetAnalog = clockStyle as? ClockWidgetStyle.Analog ?: it.clockWidgetAnalog,
clockWidgetCustom = clockStyle as? ClockWidgetStyle.Custom ?: it.clockWidgetCustom,
)
}
}