Skip to content

alpha.24: calendar overhaul, timer notifications, unattended screen-time capture - #25

Merged
codebooo merged 1 commit into
mainfrom
claude/lifeos-production-plan-v3-dmynx3
Aug 5, 2026
Merged

alpha.24: calendar overhaul, timer notifications, unattended screen-time capture#25
codebooo merged 1 commit into
mainfrom
claude/lifeos-production-plan-v3-dmynx3

Conversation

@codebooo

@codebooo codebooo commented Aug 5, 2026

Copy link
Copy Markdown
Owner

Calendar

  • Many calendars, with colour. 12 swatches or any hex, one marked default, each hideable from a colour key across the top. Events are drawn in their calendar's colour and choose their calendar when saved.
  • Pinch-to-zoom works now. The old detectTransformGestures never fired: the vertical scroll and the day columns' tap/long-press handlers consumed the pointers first, and the closure captured the hour height from its first composition. The new gesture watches the initial pointer pass, only claims once a second finger is down, and reads the live height through a state holder.
  • Animated period swipes in month, week, day and the new Agenda list. The loaded window is padded a whole period either side, so the page sliding in already has its events instead of flashing empty.
  • Proton-style stacked alerts replace the single 30-minute toggle: at start, 5/10/15/30/60/120 min, 1/2 days, a week, or a typed value. Editing an event cancels its old alarms first (new CancelRemindersFor action, so the phone can't ring for a time that no longer exists).
  • Location autocomplete via OpenStreetMap Nominatim, debounced, no key.
  • Overlap-aware timeline: clashing events share the column width instead of hiding each other (greedy interval colouring per cluster). The timeline opens on the current hour, the title bar jumps to any date, and there is event search, duplicate and day-shift.
  • Live subscriptions: any ICS or webcal link becomes a read-only coloured calendar, keyed by ICS UID so refreshes update rather than duplicate, wiped-and-rewritten each pull so upstream cancellations disappear, refreshed on open and every six hours by a worker. The ICS codec now reads and writes UID, all-day dates and VALARM offsets.
  • Jarvis tools: event_full (calendar, alerts, location), calendar_new, calendar_subscribe, calendar_sync, plus a provider that reads out calendars, colours, defaults, subscription state and what is coming up.

Clock and Focus

  • Clock's timer, Clock's stopwatch and the Focus timer each post an ongoing notification with Pause/Resume and Reset. The number is drawn by the system chronometer from an absolute instant, so it needs no per-second updates and stays correct while the app is away.
  • Clock's timer and stopwatch moved into singletons, so leaving the tab no longer resets them.
  • Fixed the "Show seconds" button overlapping the countdown — the fade container stacks its children, so each timer mode now owns its own column.

Screen time and backups

  • A worker re-derives the last 45 days every four hours whether or not the module is opened; Android purges raw usage after about a month, so a rarely-opened app would silently lose the gap.
  • A daily worker takes an encrypted database backup on its own, once a passphrase is set (never a silent plaintext dump without one).

Data

Schema 18 adds the calendars table plus calendarId, reminderMinutes and externalUid on events, with an auto-migration and exported schema.

Verification

  • :app:assembleDebug and :app:assembleRelease (R8, minified) both green.
  • gradle test green; 7 new unit tests cover reminder encoding, the palette and the ICS reader (UID, all-day dates, VALARM offsets).

🤖 Generated with Claude Code

https://claude.ai/code/session_011kSsXNrSk6NDjM2FjFZ7Y9


Generated by Claude Code

…ime capture

Calendar
- Multiple calendars, each with a colour (12 swatches or any hex), one default,
  hidden individually from a colour key across the top. Events are drawn in
  their calendar's colour and pick their calendar when saved.
- Pinch-to-zoom finally works in week and day view: the gesture is claimed on
  the initial pointer pass, before the vertical scroll and the day columns can
  consume it, and reads the live hour height instead of a stale capture.
- Swiping (or the arrows) slides the period in from the side it came from, in
  month, week, day and the new Agenda list. The loaded window is padded a
  period either side so the incoming page already has its events.
- Proton-style stacked alerts replace the single 30-minute toggle: at start,
  5/10/15/30/60/120 minutes, 1/2 days, a week, or a typed value. Editing an
  event cancels its previous alarms (new CancelRemindersFor action).
- Locations autocomplete through OpenStreetMap Nominatim, debounced.
- Clashing events share the column width instead of hiding each other, the
  timeline opens on the current hour, the title jumps to any date, and there
  is event search plus duplicate and day-shift.
- Subscriptions: any ICS or webcal link becomes a read-only coloured calendar,
  keyed by ICS UID, wiped and rewritten each pull so upstream cancellations
  disappear, refreshed on open and every six hours by a worker. The ICS codec
  now reads and writes UID, all-day dates and VALARM offsets.
- Jarvis gains event_full, calendar_new, calendar_subscribe and calendar_sync
  plus a provider describing calendars, colours, defaults and what is coming.

Clock and Focus
- Running timers and the stopwatch post ongoing notifications with
  Pause/Resume and Reset. The number is drawn by the system chronometer from an
  absolute instant, so it needs no per-second updates and stays correct while
  the app is away.
- Clock's timer and stopwatch moved into singletons, so leaving the tab no
  longer resets them.
- Fixed the "Show seconds" button sitting on top of the countdown: the fade
  container stacks its children, so each mode now owns its own column.

Screen time and backups
- A worker re-derives the last 45 days every four hours whether or not the
  module is opened, because Android purges raw usage after about a month.
- A daily worker takes an encrypted database backup on its own once a
  passphrase is set.

Schema 18 adds the calendars table plus calendarId, reminderMinutes and
externalUid on events. New unit tests cover reminder encoding, the palette and
the ICS reader.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011kSsXNrSk6NDjM2FjFZ7Y9
@codebooo
codebooo force-pushed the claude/lifeos-production-plan-v3-dmynx3 branch from 8885087 to e8d60e3 Compare August 5, 2026 14:08
@codebooo
codebooo merged commit c4c8edf into main Aug 5, 2026
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.

2 participants