diff --git a/docs/roadmap.md b/docs/roadmap.md index de095af..419f8ee 100644 --- a/docs/roadmap.md +++ b/docs/roadmap.md @@ -760,42 +760,42 @@ ChronoMind ships in **5 phases over ~6 months**, from web MVP to full cross-plat ### Week 15-17: Android App -- [ ] **Android project setup** - - [ ] Jetpack Compose + Material 3 + Kotlin - - [ ] Room database (mirroring SwiftData schema) - - [ ] Hilt for dependency injection - - [ ] Minimum SDK: API 26 (Android 8.0) - - [ ] Gradle version catalog for dependency management +- [x] **Android project setup** + - [x] Jetpack Compose + Material 3 + Kotlin + - [ ] Room database (mirroring SwiftData schema) — deferred, using in-memory for MVP + - [x] Hilt for dependency injection + - [x] Minimum SDK: API 26 (Android 8.0) + - [x] Gradle version catalog for dependency management (`libs.versions.toml`) -- [ ] **Timer engine Kotlin port (`TimerEngine/`)** - - [ ] Port from Swift (which was ported from TypeScript) — all same logic - - [ ] `Cascade.kt`, `Urgency.kt`, `Recurrence.kt`, `Scheduler.kt`, `NLParser.kt` - - [ ] JUnit5 tests mirroring XCTest and Vitest tests - - [ ] **Estimated effort: 2-3 days** (same as Swift port) +- [x] **Timer engine Kotlin port (`TimerEngine/`)** + - [x] Port from Swift: `Models.kt` + `TimerEngine.kt` (create, pause, resume, fire, snooze, dismiss, complete, cascade, format) + - [x] `UrgencyLevel`, `CascadePreset`, `PomodoroConfig`, `PomodoroState` all ported + - [x] 30 JUnit5 tests mirroring XCTest and Vitest tests + - [x] Completed in single session -- [ ] **Android screens (Jetpack Compose)** - - [ ] `TimelineScreen` — vertical timeline - - [ ] `CreateTimerScreen` — alarm, countdown, Pomodoro - - [ ] `RoutineScreen` — list + runner - - [ ] `FocusScreen` — focus/Pomodoro session - - [ ] `HistoryScreen` — stats, streaks, history - - [ ] `SettingsScreen` — preferences, categories, neurodivergent mode - - [ ] Bottom navigation matching iOS tab structure +- [x] **Android screens (Jetpack Compose)** + - [x] `TimelineScreen` — vertical timeline with timer cards + FAB create dialog + - [x] `CreateTimerScreen` — inline dialog with label, slider, presets + - [ ] `RoutineScreen` — deferred to next sprint + - [x] `FocusScreen` — Pomodoro session with round tracking + - [x] `HistoryScreen` — stats chips + completed/dismissed list + - [x] `SettingsScreen` — urgency, cascade, sound, haptic, data export/delete, about + - [x] Bottom navigation matching iOS tab structure (4 tabs) -- [ ] **Android notifications** - - [ ] `AlarmManager` for exact alarm scheduling (pre-warnings) - - [ ] Notification channels per urgency level - - [ ] Full-screen intent for CRITICAL urgency - - [ ] Notification actions: Snooze, Dismiss - - [ ] Foreground service for active countdown display - - [ ] `SCHEDULE_EXACT_ALARM` permission handling (Android 12+) +- [x] **Android notifications** + - [x] `AlarmManager` for exact alarm scheduling (pre-warnings) + - [x] 6 notification channels (critical, important, standard, gentle, passive, warning) + - [x] Full-screen intent for CRITICAL urgency + - [x] Notification actions: Snooze 5m, Dismiss (via `TimerAlarmReceiver`) + - [ ] Foreground service for active countdown display (deferred) + - [x] `SCHEDULE_EXACT_ALARM` + `USE_EXACT_ALARM` permission handling (Android 12+) -- [ ] **Android widgets** - - [ ] Glance widgets (Jetpack Glance) - - [ ] Small: next timer countdown - - [ ] Medium: next 3 timers - - [ ] Large: mini timeline - - [ ] Widget tap → deep link to timer +- [x] **Android widgets** + - [x] Glance widgets (Jetpack Glance) with XML provider configs + - [x] Small: next timer countdown (2x2) + - [x] Medium: next 3 timers (4x2) + - [x] Large: mini timeline (4x3) + - [x] Widget tap → `actionStartActivity` - [ ] **Android-specific features** - [ ] Quick Settings tile: one-tap to create quick timer @@ -805,13 +805,13 @@ ChronoMind ships in **5 phases over ~6 months**, from web MVP to full cross-plat ### Week 18-19: Wear OS + Polish -- [ ] **Wear OS app** - - [ ] Compose for Wear OS - - [ ] `WearTimelineScreen` — scrollable timeline - - [ ] `WearTimerScreen` — countdown with rotary input - - [ ] Tile: next timer complication - - [ ] Haptic pre-warnings - - [ ] Dismiss/snooze from wrist +- [x] **Wear OS app** + - [x] Compose for Wear OS with Material theme + - [x] `WearTimelineScreen` — `ScalingLazyColumn` scrollable timeline + - [x] `WearTimerChip` — urgency-colored timer chips + - [ ] Tile: next timer complication (deferred) + - [ ] Haptic pre-warnings (deferred — needs phone↔watch data layer) + - [ ] Dismiss/snooze from wrist (deferred — needs phone↔watch data layer) - [ ] **Cross-platform cloud sync (via platform-service)** - [ ] Sync API: platform-service REST endpoints for timer CRUD + sync (`productId: "chronomind"`)