From a8da8bc7a3380efb016a15d4be2fe329efb5c0c1 Mon Sep 17 00:00:00 2001 From: Jean-Luc Makiola Date: Fri, 23 Oct 2026 18:24:09 +0200 Subject: [PATCH] Week strip widget: this week's days with event-colour dots, today filled (#436) --- app/src/main/AndroidManifest.xml | 12 ++ .../calendula/widget/WidgetData.kt | 64 ++++++ .../calendula/widget/WidgetKind.kt | 9 + .../calendula/widget/WidgetParts.kt | 14 ++ .../calendula/widget/agenda/AgendaWidget.kt | 10 +- .../widget/config/WidgetConfigScreen.kt | 4 + .../widget/config/WidgetConfigViewModel.kt | 9 + .../calendula/widget/week/WeekStripWidget.kt | 188 ++++++++++++++++++ .../res/drawable/preview_widget_today_bg.xml | 6 + app/src/main/res/drawable/widget_dot.xml | 5 + .../res/layout/widget_preview_week_strip.xml | 24 +++ app/src/main/res/values/strings.xml | 6 + .../main/res/values/widget_preview_styles.xml | 13 ++ .../res/xml/appwidget_info_week_strip.xml | 16 ++ .../calendula/widget/WeekOfTest.kt | 18 ++ 15 files changed, 390 insertions(+), 8 deletions(-) create mode 100644 app/src/main/java/de/jeanlucmakiola/calendula/widget/WidgetParts.kt create mode 100644 app/src/main/java/de/jeanlucmakiola/calendula/widget/week/WeekStripWidget.kt create mode 100644 app/src/main/res/drawable/preview_widget_today_bg.xml create mode 100644 app/src/main/res/drawable/widget_dot.xml create mode 100644 app/src/main/res/layout/widget_preview_week_strip.xml create mode 100644 app/src/main/res/values/widget_preview_styles.xml create mode 100644 app/src/main/res/xml/appwidget_info_week_strip.xml create mode 100644 app/src/test/java/de/jeanlucmakiola/calendula/widget/WeekOfTest.kt diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 292223d..acc935c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -376,6 +376,18 @@ android:resource="@xml/appwidget_info_date" /> + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 0458ecd..cd18448 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -437,6 +437,12 @@ Calendula month Calendula quick add Calendula date + Calendula week strip + + + %1$s, %2$d event + %1$s, %2$d events + Refresh New event Open Calendula to grant calendar access diff --git a/app/src/main/res/values/widget_preview_styles.xml b/app/src/main/res/values/widget_preview_styles.xml new file mode 100644 index 0000000..29c6ff6 --- /dev/null +++ b/app/src/main/res/values/widget_preview_styles.xml @@ -0,0 +1,13 @@ + + + + + diff --git a/app/src/main/res/xml/appwidget_info_week_strip.xml b/app/src/main/res/xml/appwidget_info_week_strip.xml new file mode 100644 index 0000000..1c17bff --- /dev/null +++ b/app/src/main/res/xml/appwidget_info_week_strip.xml @@ -0,0 +1,16 @@ + + diff --git a/app/src/test/java/de/jeanlucmakiola/calendula/widget/WeekOfTest.kt b/app/src/test/java/de/jeanlucmakiola/calendula/widget/WeekOfTest.kt new file mode 100644 index 0000000..c4c0af4 --- /dev/null +++ b/app/src/test/java/de/jeanlucmakiola/calendula/widget/WeekOfTest.kt @@ -0,0 +1,18 @@ +package de.jeanlucmakiola.calendula.widget + +import com.google.common.truth.Truth.assertThat +import kotlinx.datetime.DayOfWeek +import kotlinx.datetime.LocalDate +import org.junit.jupiter.api.Test + +class WeekOfTest { + + @Test + fun `the week starts on the configured day and holds today`() { + val wednesday = LocalDate(2026, 10, 21) + assertThat(weekOf(wednesday, DayOfWeek.MONDAY)).isEqualTo(LocalDate(2026, 10, 19)..LocalDate(2026, 10, 25)) + assertThat(weekOf(wednesday, DayOfWeek.SUNDAY)).isEqualTo(LocalDate(2026, 10, 18)..LocalDate(2026, 10, 24)) + assertThat(weekOf(wednesday, DayOfWeek.WEDNESDAY).start).isEqualTo(wednesday) + assertThat(weekOf(wednesday, DayOfWeek.THURSDAY).start).isEqualTo(LocalDate(2026, 10, 15)) + } +}