Commit Graph

8 Commits

Author SHA1 Message Date
7cf779934d Implement Phase 5: stroke-level eraser
- Eraser mode: stylus touch/drag hit-tests against stroke bounding boxes
  expanded by 42pt radius (~3.5mm), processes historical points
- Deletes hit strokes from canvas view and Room DB
- Backing bitmap rebuilt automatically on stroke removal

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 14:36:35 -07:00
3fc9751fc4 Implement Phase 4: pinch-to-zoom and finger pan
- ScaleGestureDetector for pinch zoom (0.5x-4x) with focal-point anchoring
- Finger drag for pan with multi-pointer tracking
- Zoom/pan state managed locally in PadCanvasView for responsiveness,
  synced to EditorViewModel on gesture end

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 14:34:42 -07:00
a31e7e64d0 Upgrade to Gradle 9.4.1, AGP 9.1.0, Kotlin 2.3.20
- Gradle wrapper 8.14.2 -> 9.4.1
- AGP 8.10.1 -> 9.1.0 (built-in Kotlin, no separate kotlin.android plugin)
- Kotlin 2.1.20 -> 2.3.20
- KSP 2.1.20-1.0.32 -> 2.3.6 (new versioning scheme)
- settings.gradle.kts: removed @Suppress for dependencyResolutionManagement
- gradle.properties: added android.disallowKotlinSourceSets=false for KSP compat

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 14:30:15 -07:00
2fc4224f5a Implement Phase 3: canvas drawing with stylus input
- PadCanvasView: custom View with stylus event handling (historical points
  for smoothness), Path/Paint stroke rendering, backing bitmap at 1/4
  resolution, 60pt grid drawing, Matrix coordinate transform
- CanvasState: tool modes (fine/medium pen, eraser, select), zoom/pan state
- EditorViewModel: loads/saves strokes to Room on completion
- EditorScreen: Compose wrapper with AndroidView + FilterChip toolbar
- NavGraph: pages route auto-navigates to first page editor, page size
  passed through route params

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 14:21:17 -07:00
644b8a4732 Implement Phase 2: notebook list screen with navigation
- NotebookListScreen: lazy list, create dialog (title + page size),
  long-press delete with confirmation, empty state
- NotebookListViewModel: StateFlow-based, create/delete operations
- EngPadTheme: high-contrast light scheme for e-ink displays
- NavGraph: three routes (notebooks, pages stub, editor stub)
- MainActivity wired to NavHost with database injection

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 14:15:48 -07:00
8f41c41589 Add Makefile with build, test, run, and devrun targets
Makefile wraps Gradle commands and adds emulator/device launch targets:
- run: builds, starts DC-1 emulator if needed, installs and launches
- devrun: builds, installs and launches on connected USB device
- Updated CLAUDE.md and DESIGN.md source trees

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 14:14:08 -07:00
0b53023a25 Implement Phase 1: project skeleton and data layer
Android project with Kotlin, Jetpack Compose, and Room. Includes:
- Gradle build system with version catalog, foojay JDK resolver, lint config
- Room entities (Notebook, Page, Stroke) with packed float BLOB encoding
- DAOs and repositories for all entities
- Unit tests for blob roundtrip and PageSize enum (10 tests, all passing)
- Minimal Application class and stub MainActivity

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 14:03:57 -07:00
47778222b7 Add project documentation: design spec, implementation plan, and progress tracking
Initial project setup with README, CLAUDE.md (AI dev context), DESIGN.md
(full technical design covering architecture, data model, coordinate system,
rendering strategy), PROJECT_PLAN.md (phased implementation steps), and
PROGRESS.md (completion tracking).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-24 13:42:44 -07:00