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>
2.0 KiB
2.0 KiB
PROGRESS.md — eng-pad Implementation Progress
This file tracks completed work and decisions. Updated after every step. See PROJECT_PLAN.md for the full step list.
Completed
Phase 0: Project Documents (2026-03-24)
- 0.1: Created DESIGN.md — full technical design covering architecture, data model, coordinate system, rendering, input handling, and source tree.
- 0.2: Created PROJECT_PLAN.md — discrete steps grouped by phase with checkboxes and file references.
- 0.3: Created PROGRESS.md — this file.
- 0.4: Updated CLAUDE.md — build commands, source tree, project doc pointers.
Phase 1: Project Skeleton + Data Layer (2026-03-24)
- 1.1: Generated Android project — Gradle 8.14.2, AGP 8.10.1, Kotlin 2.1.20
- 1.2: Version catalog with Compose BOM 2026.03.00, Room 2.8.4, Navigation 2.9.7, Lifecycle 2.10.0
- 1.3: Lint configured — warningsAsErrors, AGP version check suppressed (AGP 9.x needs Gradle 9.x)
- 1.4: Room entities: Notebook, Page, Stroke, PageSize enum
- 1.5: Converters: FloatArray ↔ ByteArray (packed little-endian)
- 1.6: DAOs: NotebookDao, PageDao, StrokeDao
- 1.7: EngPadDatabase (Room, version 1)
- 1.8: NotebookRepository, PageRepository
- 1.9: Unit tests: StrokeBlobTest (6 tests), PageSizeTest (4 tests) — all pass
- Foojay resolver added for automatic JDK toolchain download
- compileSdk/targetSdk bumped to 36 (required by latest androidx dependencies)
In Progress
Phase 2: Notebook List Screen
Decisions & Deviations
- Language: Kotlin (chosen over Java for better Compose/coroutine support).
- Storage: Room/SQLite with packed float BLOBs for stroke points.
- Palm rejection: Hardware only (EMR digitizer handles it).
- Pressure sensitivity: None — two fixed pen sizes (0.38mm, 0.5mm).
- Coordinate system: 300 DPI canonical points (scaled to 72 DPI for PDF export).
- UI framework: Compose for chrome, custom View for canvas (Compose Canvas lacks MotionEvent access needed for stylus input).