feat: full event read (v0.6.0) + onboarding redesign, cut v1.0.0 #2

Merged
makiolaj merged 6 commits from feat/full-event-read-v0.6.0 into main 2026-06-11 07:28:17 +00:00
Owner

Brings the branch to a release-ready state and cuts the first public release.

What's in here

  • v0.6.0 — Full event read: the detail screen now surfaces every readable
    CalendarContract field — reminders, status, availability (Free pill),
    access level, attendee roles + your own response, foreign time zones, and
    linkified description URLs. New domain enums + mapper unit tests. (No
    Events.URL column exists, so URLs are surfaced by linkifying the
    description.)
  • Onboarding redesign: Material 3 Expressive first-run grant-access screen —
    branded hero, trust rows, full-width CTA, "Read-only · no internet permission"
    footnote; denied state shares the shell.
  • v1.0.0 — First public release: separate commit bumping version to
    1.0.0 / 7 with a CHANGELOG [1.0.0] summary; roadmap/state mark V1 complete.

Tagging

Two release tags will be cut after merge:

  • v0.6.0 → commit e290c92 (version 0.6.0 / 6)
  • v1.0.0 → commit 3697a58 (version 1.0.0 / 7)

Build + lint + unit tests green. Verified the onboarding screen on-device.

🤖 Generated with Claude Code

Brings the branch to a release-ready state and cuts the first public release. ## What's in here - **v0.6.0 — Full event read**: the detail screen now surfaces every readable `CalendarContract` field — reminders, status, availability (Free pill), access level, attendee roles + your own response, foreign time zones, and linkified description URLs. New domain enums + mapper unit tests. (No `Events.URL` column exists, so URLs are surfaced by linkifying the description.) - **Onboarding redesign**: Material 3 Expressive first-run grant-access screen — branded hero, trust rows, full-width CTA, "Read-only · no internet permission" footnote; denied state shares the shell. - **v1.0.0 — First public release**: separate commit bumping version to 1.0.0 / 7 with a CHANGELOG [1.0.0] summary; roadmap/state mark V1 complete. ## Tagging Two release tags will be cut after merge: - `v0.6.0` → commit `e290c92` (version 0.6.0 / 6) - `v1.0.0` → commit `3697a58` (version 1.0.0 / 7) Build + lint + unit tests green. Verified the onboarding screen on-device. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
makiolaj added 6 commits 2026-06-11 07:25:25 +00:00
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>
The Busy availability value is the default for nearly every event, so a
"Busy" chip on every detail screen was noise. Show the pill only for Free
(the noteworthy case) and move it to the top-right of the title row instead
of the under-title chip strip. That strip now carries only status/access and
hides entirely when there's nothing noteworthy. Drops the now-unused
event_availability_busy string from both locales.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
The onboarding screen is the first thing a new user sees; it was a bare
centred title + body + button. Rebuild it as a proper Material 3 Expressive
welcome:

- Branded hero reconstructing the launcher mark (slate squircle + foreground
  vector); the denied state adds a lock badge over the corner
- App-name eyebrow, a benefit-led headline, and three trust rows (stays on
  device / every calendar together / no tracking) with tonal icon chips
- Full-width filled CTA with a trailing arrow, pinned in a Scaffold bottom bar
  clear of the navigation bar; scrollable body for short screens
- "Read-only · no internet permission" footnote — accurate: the app declares
  only READ_CALENDAR
- Denied/recovery state reuses the same shell with Open-settings (primary) and
  Try-again (text) actions
- 8dp spacing scale, edge-to-edge insets handled via Scaffold

Built with the newly installed material-3 skill's token/component guidance.
Resolves the pre-1.0 polish backlog item.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
docs: fold onboarding redesign into 0.6.0 changelog
Some checks failed
Build and Release to F-Droid / ci (push) Has been cancelled
Build and Release to F-Droid / build-and-deploy (push) Has been cancelled
e290c92d78
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
release: cut v1.0.0 — first public release
Some checks failed
CI / ci (push) Successful in 13m23s
CI / ci (pull_request) Has been cancelled
Build and Release to F-Droid / ci (push) Has been cancelled
Build and Release to F-Droid / build-and-deploy (push) Has been cancelled
3697a58e5b
Version bumped to 1.0.0 / 7. No code changes beyond the version — 1.0.0 is the
accumulated v0.1 → v0.6 work (all V1 screens, full event read, filter, settings,
onboarding polish) declared release-ready. CHANGELOG [1.0.0] summarises the
shipped feature set; ROADMAP/STATE mark V1 complete.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
makiolaj merged commit bd6ad4ae5f into main 2026-06-11 07:28:17 +00:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: makiolaj/calendula#2