feat(detail): full event read — surface every readable field (v0.6.0)
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>
This commit is contained in:
30
CHANGELOG.md
30
CHANGELOG.md
@@ -7,6 +7,36 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
## [0.6.0] — 2026-06-11
|
||||
|
||||
### Added
|
||||
- Full event read (v0.6): the detail screen now surfaces every readable
|
||||
`CalendarContract` field that V1 had been dropping —
|
||||
- **Reminders** — each configured lead time, humanised ("10 minutes before",
|
||||
"1 day before", "At time of event"), read from `CalendarContract.Reminders`
|
||||
- **Status** — Tentative / Cancelled chip under the title; a cancelled event
|
||||
also strikes through its title (Confirmed shows no chip)
|
||||
- **Availability** — a Free / Busy chip (`Events.AVAILABILITY`, the iCal
|
||||
TRANSP field)
|
||||
- **Access level** — a Private / Confidential chip when the event isn't public
|
||||
- **Attendee role** — organizer / optional / resource badge under each
|
||||
attendee, plus the device user's own response ("Your response: …") from
|
||||
`Events.SELF_ATTENDEE_STATUS`
|
||||
- **Time zone** — shown only for timed events pinned to a zone other than the
|
||||
device's, so cross-zone events read unambiguously
|
||||
- **Linked URLs** — http(s) links in the description are now tappable
|
||||
- Domain model rounded out with `Reminder`, `EventStatus`, `Availability`,
|
||||
`AccessLevel`, `AttendeeRelationship`, `AttendeeType`, and the attendee/self
|
||||
status fields; mappers + unit tests cover every new column's integer codes
|
||||
|
||||
### Changed
|
||||
- `versionName`/`versionCode` bumped to 0.6.0 / 6
|
||||
|
||||
### Notes
|
||||
- A dedicated event **URL** field was dropped from scope: `CalendarContract`
|
||||
has no `Events.URL` column (only `CUSTOM_APP_URI`, an app deep-link), so URLs
|
||||
are surfaced by linkifying the description instead
|
||||
|
||||
## [0.5.0] — 2026-06-10
|
||||
|
||||
### Added
|
||||
|
||||
Reference in New Issue
Block a user