[WIP] Custom widgets as watch face

This commit is contained in:
MM20
2024-04-06 22:44:59 +02:00
parent efc50eb0a8
commit 3288d933c5
23 changed files with 682 additions and 373 deletions
@@ -845,6 +845,7 @@
<string name="widget_config_appwidget_resize_hint">Drag to resize</string>
<string name="widget_config_weather_integration_settings">Weather integration settings</string>
<string name="widget_config_calendar_no_calendars">No calendars found</string>
<string name="widget_pick_widget">Pick widget</string>
<string name="app_widget_loading_failed">App widget failed to load.</string>
<string name="widget_config_music_integration_settings">Media control integration settings</string>
<string name="note_widget_link_file">Link to file</string>
@@ -909,6 +910,7 @@
<string name="clock_style_analog">Hands</string>
<string name="clock_style_segment">7-segment</string>
<string name="clock_style_empty">No clock</string>
<string name="clock_style_custom">Custom widget</string>
<string name="clock_variant_standard">Standard</string>
<string name="clock_variant_outlined">Outlined</string>
</resources>
@@ -30,6 +30,7 @@ data class LauncherSettingsData internal constructor(
@SerialName("clockWidgetStyle2")
internal val clockWidgetStyle: ClockWidgetStyleEnum = ClockWidgetStyleEnum.Digital1,
val clockWidgetDigital1: ClockWidgetStyle.Digital1 = ClockWidgetStyle.Digital1(),
val clockWidgetCustom: ClockWidgetStyle.Custom = ClockWidgetStyle.Custom(),
val clockWidgetColors: ClockWidgetColors = ClockWidgetColors.Auto,
val clockWidgetShowSeconds: Boolean = false,
val clockWidgetUseThemeColor: Boolean = false,
@@ -192,6 +193,7 @@ internal enum class ClockWidgetStyleEnum {
Binary,
Segment,
Empty,
Custom,
}
@Serializable
@@ -234,6 +236,10 @@ sealed interface ClockWidgetStyle {
@Serializable
@SerialName("empty")
data object Empty : ClockWidgetStyle
@Serializable
@SerialName("custom")
data class Custom(val widgetId: Int? = null) : ClockWidgetStyle
}
@Serializable
@@ -99,17 +99,22 @@ class ClockWidgetSettings internal constructor(
ClockWidgetStyleEnum.Binary -> ClockWidgetStyle.Binary
ClockWidgetStyleEnum.Segment -> ClockWidgetStyle.Segment
ClockWidgetStyleEnum.Empty -> ClockWidgetStyle.Empty
ClockWidgetStyleEnum.Custom -> it.clockWidgetCustom
}
}
val digital1: Flow<ClockWidgetStyle.Digital1>
get() = launcherDataStore.data.map { it.clockWidgetDigital1 }
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,
)
}
}
@@ -151,4 +156,5 @@ internal val ClockWidgetStyle.enumValue
is ClockWidgetStyle.Binary -> ClockWidgetStyleEnum.Binary
is ClockWidgetStyle.Segment -> ClockWidgetStyleEnum.Segment
is ClockWidgetStyle.Empty -> ClockWidgetStyleEnum.Empty
is ClockWidgetStyle.Custom -> ClockWidgetStyleEnum.Custom
}