Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -312,7 +313,8 @@ fun Clock(
compact,
showSeconds,
useThemeColor,
darkColors
darkColors,
style
)

is ClockWidgetStyle.Orbit -> OrbitClock(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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),
Expand Down Expand Up @@ -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)) },
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand All @@ -23,6 +24,7 @@ fun AnalogClock(
showSeconds: Boolean,
useThemeColor: Boolean,
darkColors: Boolean,
style: ClockWidgetStyle.Analog,
) {
val verticalLayout = !compact
val date = Calendar.getInstance()
Expand Down Expand Up @@ -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,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,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,
Expand Down
1 change: 1 addition & 0 deletions core/i18n/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -861,6 +861,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>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,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,
Expand Down Expand Up @@ -248,7 +249,9 @@ sealed interface ClockWidgetStyle {

@Serializable
@SerialName("analog")
data object Analog : ClockWidgetStyle
data class Analog(
val showTicks: Boolean = false
) : ClockWidgetStyle

@Serializable
@SerialName("binary")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,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
Expand All @@ -107,15 +107,19 @@ 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 }

fun setClockStyle(clockStyle: ClockWidgetStyle) {
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,
)
}
}
Expand Down