Round out the read-only model so the detail view shows everything CalendarContract actually stores, ahead of write support. Data layer: - New domain types: Reminder, EventStatus, Availability, AccessLevel, AttendeeRelationship, AttendeeType; EventDetail gains reminders, status, availability, accessLevel, eventTimezone, selfStatus and Attendee gains relationship + type (all defaulted so existing callers compile) - EventDetailProjection reads STATUS / AVAILABILITY / ACCESS_LEVEL / EVENT_TIMEZONE / SELF_ATTENDEE_STATUS; AttendeeProjection reads RELATIONSHIP + TYPE; new ReminderProjection queries CalendarContract.Reminders - Mappers translate each provider integer code, guarding STATUS's null-vs-0 ambiguity (0 == TENTATIVE) so an absent status reads as Confirmed - Mapper unit tests cover every new column's codes Detail UI: - Status / availability / access chips under the title; cancelled also strikes the title through - Reminders card with humanised lead times (plurals, DE + EN) - Foreign-timezone card, shown only for timed events in a non-device zone - Attendee role badges + the user's own "Your response: …" line - http(s) URLs in the description are now tappable URL field cut: CalendarContract exposes no Events.URL column (only the CUSTOM_APP_URI app deep-link), so URLs are surfaced by linkifying the description instead. Recorded in ROADMAP/CHANGELOG. Version bumped to 0.6.0 / 6. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2.6 KiB
2.6 KiB
Calendula — Roadmap
v0.x — Pre-Release
| Version | Milestone | Status |
|---|---|---|
| v0.1 | Foundation & CI | complete |
| v0.2 | Data Layer & Permission Flow | complete |
| v0.3 | Month + Week + Day views, view switcher | complete |
| v0.4 | Event Detail (S4) + humanized recurrence | complete |
| v0.5 | Calendar filter (M3) + Settings (M4) | complete |
| v0.6 | Full event read — surface every readable field | complete |
| v1.0 | Polish pass, F-Droid release | pending |
Delivery ran ahead of the original table: Day view (S3) shipped in v0.3 and Event Detail (S4) in v0.4, so the Filter/Settings milestone became v0.5.
Jump-to-date (the date-picker half of M2) was cut from scope and will not ship. The "Today" half of M2 already shipped in v0.5 (drawer entry).
v0.6 — Full event read
Round out the read-only model so a detail view shows everything the system
actually stores, before write support starts. Scope = CalendarContract
columns we don't yet read/display:
- Reminders (
VALARM) — readCalendarContract.Reminders, list lead times - Status — Confirmed / Tentative / Cancelled (cancelled shown struck-through)
- Availability (
TRANSP) — Free / Busy chip - Attendee extras — role (required / optional / organizer) + the user's own
SELF_ATTENDEE_STATUS - Timezone (
EVENT_TIMEZONE) — shown only when it differs from the device zone - URL —
tappable link cardcut:CalendarContractexposes noEvents.URLcolumn (onlyCUSTOM_APP_URI, an originating-app deep-link). URLs are instead surfaced by linkifying the description text - Access level / class (private / confidential) — small chip (optional, trivial)
All of the above shipped in v0.6.0 (2026-06-11).
Deliberately out of v0.6:
- Recurrence exception / modified-occurrence badges —
Instancesalready resolves correct per-occurrence times for display; this only matters for editing, so it folds into v2 CATEGORIES,ATTACH— not reliably exposed byCalendarContract(provider limitation, not our choice)
v1.0 — First Public Release
All V1 features shipped, polished, on F-Droid. Read-only calendar. Remaining before v1.0: a UI polish/QA pass.
v2.0 — Write Support
- Event create / edit / delete via
CalendarContractwrites - Quick-add sheet
- Conflict UX (event modified externally during edit)
v3.0 — Power-User Features
- Home-screen widget
- Full-text search
- Tablet / foldable layouts
- Optional: ICS file import (drag-and-drop)
Order is indicative — community feedback after V1 may re-prioritize.