feat(calendars): "Add to phone calendar" intent + multi-day bars in month grid

- New IconButton in the detail screen opens the system event composer
  (Google Calendar / Samsung / iCloud) pre-filled with title, range,
  location, and description via Intent.ACTION_INSERT on CalendarContract.
  Falls back to the .ics share path if no calendar app is installed.
- Replaced the per-cell event-dot row with horizontal bars that span the
  cells a multi-day event covers. Bars are laid out by a greedy
  lowest-lane assignment so overlapping events stack rather than collide;
  cells removed their horizontal padding so adjacent bars merge into one
  uninterrupted line.
- Bars round their ends only at the event's actual start/end (or at week
  boundaries), so a 3-day conference reads as one continuous pill across
  the row.
- Added MonthGridBarsTest (7 tests) covering single/multi-day, lane
  collision, longer-event tiebreak, and the empty/ghost edge cases.
This commit is contained in:
Claude
2026-05-19 19:51:01 +00:00
parent 971e9e4846
commit ab5d884b34
7 changed files with 431 additions and 33 deletions
@@ -97,6 +97,7 @@ object MaterialSymbols {
val EmojiEmotions = MaterialSymbol("\uEA22")
val Error = MaterialSymbol("\uF8B6")
val ErrorOutline = MaterialSymbol("\uF8B6")
val EventAvailable = MaterialSymbol("\uE614")
val ExpandLess = MaterialSymbol("\uE5CE")
val ExpandMore = MaterialSymbol("\uE5CF")
val Explore = MaterialSymbol("\uE87A")