From 6fc04aa3162d3d0eb9b869574ddadc032d6d3754 Mon Sep 17 00:00:00 2001 From: Peter Stone Date: Mon, 13 Jul 2026 09:47:41 +0000 Subject: fix(widget): stop tomorrow's events from stretching today's grid bounds calcGridStart/calcGridEnd only looked at hour-of-day, so a tomorrow event's early or late hour could inflate today's grid range with empty rows, pushing the non-scrolling TomorrowSection below the widget's visible area. Filter to today-only events before computing bounds. --- .../src/main/java/org/terst/doot/widget/ui/DootWidget.kt | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'android/app/src/main/java/org/terst/doot/widget') diff --git a/android/app/src/main/java/org/terst/doot/widget/ui/DootWidget.kt b/android/app/src/main/java/org/terst/doot/widget/ui/DootWidget.kt index ae749fb..4a352fc 100644 --- a/android/app/src/main/java/org/terst/doot/widget/ui/DootWidget.kt +++ b/android/app/src/main/java/org/terst/doot/widget/ui/DootWidget.kt @@ -94,8 +94,13 @@ fun WidgetRoot(items: List, now: Instant, isRefreshing: Boolean) { val scheduledEvents = allScheduled.filter { it.type != "task" || Instant.parse(it.start!!) >= now } val floating = rest.filter { it.start == null } val fragments = SlotPacker.pack(pastTasks + floating, scheduledEvents, now) - val gridStart = calcGridStart(scheduledEvents, nowZoned.hour) - val gridEnd = calcGridEnd(scheduledEvents, nowZoned.hour) + // Grid bounds must only reflect TODAY's events -- a tomorrow event's hour-of-day + // would otherwise stretch today's grid (see calcGridStart/calcGridEnd), manufacturing + // empty hour rows that push the non-scrolling TomorrowSection below the widget's + // visible area. + val todayScheduledEvents = scheduledEvents.filter { Instant.parse(it.start!!) < tomorrowStart } + val gridStart = calcGridStart(todayScheduledEvents, nowZoned.hour) + val gridEnd = calcGridEnd(todayScheduledEvents, nowZoned.hour) val tomorrowItems = scheduledEvents .filter { Instant.parse(it.start!!) >= tomorrowStart && Instant.parse(it.start!!) < tomorrowEnd } @@ -479,7 +484,7 @@ private fun hourLabel(hour: Int): String = when { else -> "${hour - 12}p" } -private fun calcGridStart(events: List, nowHour: Int): Int { +internal fun calcGridStart(events: List, nowHour: Int): Int { val earliest = events.mapNotNull { it.start } .mapNotNull { runCatching { Instant.parse(it) }.getOrNull() } .minOrNull() @@ -488,7 +493,7 @@ private fun calcGridStart(events: List, nowHour: Int): Int { return maxOf(0, minOf(earliest, nowHour) - 1) } -private fun calcGridEnd(events: List, nowHour: Int): Int { +internal fun calcGridEnd(events: List, nowHour: Int): Int { val latest = events.mapNotNull { it.end } .mapNotNull { runCatching { Instant.parse(it) }.getOrNull() } .maxOrNull() -- cgit v1.2.3