Scaffold Android project per BRIEF.md
Single-module Kotlin/Compose app with manual DI container. Pure-Kotlin measurement math (orientation mapping, two-sample per-mode calibration, EMA smoothing, lock hysteresis, display deadband) fully unit-tested. Sensor fallback: game rotation vector -> gravity -> low-passed accelerometer. Live Level (manual Surface|Edge) and Angle (hold-to-zero) scaffolds; Ruler/Tools placeholders; stub Pro entitlement. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,42 @@
|
||||
# On the Level
|
||||
|
||||
Offline-first Android pocket toolset: a trustworthy level, angle meter, and
|
||||
calibrated screen ruler (Pro). Kotlin + Jetpack Compose, single module, no backend.
|
||||
|
||||
- **[BRIEF.md](BRIEF.md)** — the authoritative v1 product & technical brief
|
||||
- **[AUDIT.md](AUDIT.md)** — audit of the brief; the amendments it lists are incorporated
|
||||
- **resources/** — concept board (visual direction)
|
||||
|
||||
## Building
|
||||
|
||||
Open in Android Studio, or:
|
||||
|
||||
```sh
|
||||
./gradlew assembleDebug # build
|
||||
./gradlew testDebugUnitTest # measurement-math unit tests
|
||||
```
|
||||
|
||||
## Scaffold status
|
||||
|
||||
The project skeleton follows BRIEF.md §Sensor and measurement architecture.
|
||||
Implemented and tested:
|
||||
|
||||
- `core/sensors` — sensor selection (game rotation vector → gravity → low-passed
|
||||
accelerometer), device-frame gravity stream, and the pure measurement math:
|
||||
orientation mapping, two-sample per-mode calibration, EMA smoothing,
|
||||
lock hysteresis/dwell/debounce, display deadband. All unit-tested.
|
||||
- `core/settings` — DataStore preferences and per-mode calibration persistence.
|
||||
- `core/billing` — entitlement interface with a stub (free-tier) implementation.
|
||||
- `feature/level`, `feature/angle` — live numeric scaffolds wired to the real
|
||||
sensor pipeline, with manual Surface|Edge selection, lock state, hold-to-zero.
|
||||
- `feature/ruler`, `feature/tools` — static placeholders.
|
||||
|
||||
Not yet implemented (deliberately — see TODO markers):
|
||||
|
||||
- The tactile vial visuals and the spring-animated **display value** (value 3 of 3
|
||||
in the brief); scaffold screens render the deadbanded stable value directly.
|
||||
- Guided calibration flow UI (math and persistence are done).
|
||||
- Edge-mode readout counter-rotation on the portrait-locked activity.
|
||||
- Play Billing implementation of `ProEntitlementRepository`.
|
||||
- Screen ruler measurement UI and per-display scale persistence.
|
||||
- Audio cue, reduced-motion behaviors, preferences UI.
|
||||
Reference in New Issue
Block a user