From 1faac28ce4442bf85e6001e3a57efe5b14168956 Mon Sep 17 00:00:00 2001 From: MM20 <15646950+MM2-0@users.noreply.github.com> Date: Sun, 20 Feb 2022 14:44:48 +0100 Subject: [PATCH] Add two new clock styles: analog clock and empty clock --- preferences/src/main/proto/settings.proto | 2 + .../ui/launcher/widgets/clock/ClockWidget.kt | 6 +- .../widgets/clock/clocks/AnalogClock.kt | 58 +++++++++++++++++++ .../widgets/clock/clocks/EmptyClock.kt | 12 ++++ 4 files changed, 75 insertions(+), 3 deletions(-) create mode 100644 ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/clock/clocks/AnalogClock.kt create mode 100644 ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/clock/clocks/EmptyClock.kt diff --git a/preferences/src/main/proto/settings.proto b/preferences/src/main/proto/settings.proto index 36424879..0ea22f24 100644 --- a/preferences/src/main/proto/settings.proto +++ b/preferences/src/main/proto/settings.proto @@ -48,6 +48,8 @@ message Settings { DigitalClock1 = 0; DigitalClock2 = 1; BinaryClock = 2; + AnalogClock = 3; + EmptyClock = 4; } ClockStyle clock_style = 2; } diff --git a/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/clock/ClockWidget.kt b/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/clock/ClockWidget.kt index 835ddc59..53f897f4 100644 --- a/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/clock/ClockWidget.kt +++ b/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/clock/ClockWidget.kt @@ -19,9 +19,7 @@ import androidx.lifecycle.viewmodel.compose.viewModel import de.mm20.launcher2.preferences.Settings.ClockWidgetSettings.ClockStyle import de.mm20.launcher2.preferences.Settings.ClockWidgetSettings.ClockWidgetLayout import de.mm20.launcher2.ui.launcher.widgets.clock.ClockWidgetVM -import de.mm20.launcher2.ui.launcher.widgets.clock.clocks.BinaryClock -import de.mm20.launcher2.ui.launcher.widgets.clock.clocks.DigitalClock1 -import de.mm20.launcher2.ui.launcher.widgets.clock.clocks.DigitalClock2 +import de.mm20.launcher2.ui.launcher.widgets.clock.clocks.* import de.mm20.launcher2.ui.launcher.widgets.clock.parts.DatePart @Composable @@ -120,6 +118,8 @@ fun Clock( ClockStyle.DigitalClock1 -> DigitalClock1(time, layout) ClockStyle.DigitalClock2 -> DigitalClock2(time, layout) ClockStyle.BinaryClock -> BinaryClock(time, layout) + ClockStyle.AnalogClock -> AnalogClock(time, layout) + ClockStyle.EmptyClock -> EmptyClock(time, layout) else -> {} } } diff --git a/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/clock/clocks/AnalogClock.kt b/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/clock/clocks/AnalogClock.kt new file mode 100644 index 00000000..8266df20 --- /dev/null +++ b/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/clock/clocks/AnalogClock.kt @@ -0,0 +1,58 @@ +package de.mm20.launcher2.ui.launcher.widgets.clock.clocks + +import androidx.compose.foundation.Canvas +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.material3.LocalContentColor +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.geometry.center +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.Settings +import java.util.* + +@Composable +fun AnalogClock( + time: Long, + layout: Settings.ClockWidgetSettings.ClockWidgetLayout +) { + val verticalLayout = layout == Settings.ClockWidgetSettings.ClockWidgetLayout.Vertical + val date = Calendar.getInstance() + date.timeInMillis = time + val minute = date[Calendar.MINUTE] + val hour = date[Calendar.HOUR] + + val size = if (verticalLayout) 128.dp else 56.dp + val strokeWidth = if (verticalLayout) 4.dp else 2.dp + + val color = LocalContentColor.current + Canvas(modifier = Modifier + .padding(bottom = if (verticalLayout) 8.dp else 0.dp) + .size(size)) { + drawCircle( + color, + radius = strokeWidth.toPx(), + center = this.size.center, + style = Fill + ) + rotate(hour.toFloat() / 12f * 360f + minute.toFloat() / 60f * 5f, this.size.center) { + drawLine( + color, + this.size.center, this.size.center.copy(y = this.size.height * 0.25f), + strokeWidth = strokeWidth.toPx(), + cap = StrokeCap.Round + ) + } + rotate(minute.toFloat() / 60 * 360, this.size.center) { + drawLine( + color, + this.size.center, this.size.center.copy(y = this.size.height * 0.1f), + strokeWidth = strokeWidth.toPx(), + cap = StrokeCap.Round, + ) + } + } +} \ No newline at end of file diff --git a/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/clock/clocks/EmptyClock.kt b/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/clock/clocks/EmptyClock.kt new file mode 100644 index 00000000..88ae0cbb --- /dev/null +++ b/ui/src/main/java/de/mm20/launcher2/ui/launcher/widgets/clock/clocks/EmptyClock.kt @@ -0,0 +1,12 @@ +package de.mm20.launcher2.ui.launcher.widgets.clock.clocks + +import androidx.compose.runtime.Composable +import de.mm20.launcher2.preferences.Settings + +@Composable +fun EmptyClock( + time: Long, + layout: Settings.ClockWidgetSettings.ClockWidgetLayout +) { + // Nothing to see here +} \ No newline at end of file