Skip to content

feat: Froyo widget in Google Calendar style, with day headers - #47

Merged
rayvader merged 8 commits into
mainfrom
feat/widget-day-headers
Nov 7, 2026
Merged

rayvader merged 8 commits into
mainfrom
feat/widget-day-headers

Conversation

@rayvader

@rayvader rayvader commented Nov 6, 2026

Copy link
Copy Markdown
Owner

Summary

The Froyo · Upcoming widget now looks like Google Calendar (Raymond's option B, "Day headers").

Part What it shows
Header Froyo · Upcoming, N open · Updated HH:mm (or as of HH:mm · <reason>), ⟳
Day header Today · Fri 6 Nov (blue, bold), Tomorrow · Sat 7 Nov, Sun 8 Nov; year only when not this year; No date last
Card rounded 10 dp, colored by type; time line (14:10, all day, or late · was Wed 4 Nov); icon; whole title, wrapped; Done chip
Type Light Dark White text
late #D93025 #C03027 4.8 / 5.7
booking / dinner / event #1A73E8 #1D69CC 4.5 / 5.3
flight #8E24AA #802698 7.0 / 7.9
deadline #B65D00 (from #E37400, 3.1:1) #A25607 4.6 / 5.4
bill / payment #188038 #1C7437 5.0 / 5.8
no date / other #008476 (from #00897B, 4.3:1) #07776C 4.6 / 5.4
  • One list, two view types: RemoteCollectionItems on API 31+, the existing RemoteViewsService below that. One tap template; a card fills in "open the app", its Done chip "mark done" (confirm, 5 s Undo, Done: <title>, unchanged).
  • Late items go under Today. All-day before timed; then by time.
  • Titles have no line limit and no ellipsis. Text follows the system font scale and the app's Auto text size.
  • Minimum size is now 4x2; the list scrolls inside. Refresh rules, open_items_live -> open_items, and the failure text are unchanged.
  • Grouping and colors live in core/UpcomingDays.

Tests

  • UpcomingDaysTest: grouping and order (today, tomorrow, later, next year, late under Today, all-day before timed, no date last), time lines, type -> color, white-text contrast >= 4.5 for every color in both themes, color resources match the tested values, a 60-character title kept whole.
  • e2e Froyo widget: existing checks on the new list (scrolling to items), plus 7 made-up items at 115% text on the phone size and at an unfolded size (smallest width over 600 dp): headers in order, every card in view has its whole title and Done chip, the 60-character title wraps, scrolling reaches the last item. Light and dark screenshots.

One scrolling list: a header per day (Today in blue and bold, Tomorrow,
then dates; the year only when not this year; No date last), then that
day's cards. Cards are rounded and colored by type, white text at 4.5:1
or better, with a 24 h time / all day / late line, the icon and the whole
title wrapped. Late items go under Today. All-day before timed.
RemoteCollectionItems on API 31+, the RemoteViewsService below it.
@rayvader
rayvader enabled auto-merge November 6, 2026 16:29
A card cut by the list's edge matched by its description while its title
was out of sight, so the long-title check read a node that was not there.
On an unfolded screen the launcher made the widget narrow and the count
pushed 'Froyo · Upcoming' down to '..'. Title and count now share the
header's width and wrap. The e2e list helpers retry the list's bounds and
fail with a message instead of stopping silently.
Sharing one line broke 'Froyo · Upcoming' mid-word on a narrow widget.
Below 290 dp (divided by the text scale) the count now gets its own line.
The e2e list walk stops only when the screen stops changing, since one
tall card can fill a whole swipe.
uiautomator crops a half-hidden card, so a card touching the list's edge
no longer counts as shown. The wrap check compares the title with its own
card's one-line time, since a short title also wraps on a narrow widget.
On a narrow unfolded widget the 60-character card is taller than the list,
so it is never wholly in view; the list scrolls through it. The check now
brings the card's top into view and checks the title wraps.
Count its lines against the header title (same text size, always on
screen) and keep the most seen while scrolling, instead of catching one
scroll position.
@rayvader
rayvader merged commit 1f09f3a into main Nov 7, 2026
8 of 9 checks passed
@rayvader
rayvader deleted the feat/widget-day-headers branch November 7, 2026 01:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant