1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
|
# SESSION_STATE.md
## Current Task Goal
Instrument Sheet Visual Redesign — IN PROGRESS (2026-04-06)
**Plan:** `docs/superpowers/plans/2026-04-04-instrument-sheet-visual-redesign.md`
**Spec:** `docs/superpowers/specs/2026-04-04-instrument-sheet-visual-redesign.md`
### Progress
- [x] Task 1: Remove report buttons + fix touch-through — **DONE** (commit `2d86c0b`)
- [x] Task 2: Update typography styles — **DONE** (commit `e79b678`)
- [ ] Task 3: Create `DirectionArrowView` — pending
- [ ] Task 4: Create `WaveView` — pending
- [ ] Task 5: Restructure `layout_instruments_sheet.xml` — pending
- [ ] Task 6: Refactor `InstrumentHandler` — pending
- [ ] Task 7: Update `MainActivity` — wire new views and fix units — pending
### What's being built
A visual redesign of the instrument bottom sheet:
- Animated wave canvas divider (swell height/period + wind waves + whitecaps) replacing the plain divider between instruments and forecast
- Sky-blue gradient above wave, ocean blue below
- `DirectionArrowView`: 14dp inline chevron compass indicator in two palettes (SKY grey / OCEAN blue)
- Direction arrows inline with numeric values in all relevant cells
- `°` baked into HDG/COG values (not a separate unit label)
- Forecast cells: value on line 1, [arrow] bearing on line 2 (swell adds period)
- Imperial units: feet for depth, wave height, swell height (all converted from metres)
- Forecast labels: "Current" (not "Curr"), "Waves" (not "Wave"), no section header
- Touch-through prevention: clickable/focusable on root layout
- Reports section removed
### Key files
| File | Status |
|---|---|
| `layout_instruments_sheet.xml` | Partially done (Task 1 applied; full restructure in Task 5) |
| `DirectionArrowView.kt` | Not created yet |
| `WaveView.kt` | Not created yet |
| `InstrumentHandler.kt` | Not refactored yet |
| `MainActivity.kt` | Task 1 applied; Task 7 changes pending |
| `themes.xml` / `dimens.xml` | Done |
---
## Previous Task Goal
Section 7.4 Trip Reporting & Enhanced Tracks — COMPLETE (2026-04-04)
## Verified (2026-04-04)
- Build Successful: `android-app/gradlew assembleDebug` passed.
- UI Layout: `activity_main.xml` refactored to LinearLayout to prevent BottomNav overlap.
- Track Differentiation: Active (solid) vs Past (dotted) tracks verified in `MapHandler.kt`.
- Pre-Trip Logic: Sail suggestions reefing logic verified in `PreTripReportGenerator.kt`.
## Completed Items
### [APPROVED] Trip Narrative Generator + Multi-Style AI (2026-04-04)
- `android-app/app/src/main/kotlin/org/terst/nav/tripreport/TripReportGenerator.kt`: Logic for distance, speed, and stylized narratives (Professional, Adventurous, Journal, Pirate).
- `android-app/app/src/main/kotlin/org/terst/nav/tripreport/TripReportViewModel.kt`: State management for narrative generation.
- `android-app/app/src/main/kotlin/org/terst/nav/tripreport/TripReportFragment.kt`: UI for viewing and selecting narrative styles.
### [APPROVED] Pre-Trip Planning & Sail Suggestions (2026-04-04)
- `android-app/app/src/main/kotlin/org/terst/nav/tripreport/PreTripReportGenerator.kt`: Routing and reefing suggestions based on wind/waves.
- `android-app/app/src/main/kotlin/org/terst/nav/tripreport/PreTripModels.kt`: Domain models for boat profiles and suggestions.
- `android-app/app/src/main/kotlin/org/terst/nav/tripreport/PreTripReportFragment.kt`: UI for generating and viewing pre-trip plans.
### [APPROVED] Enhanced Map & Track Visualization (2026-04-04)
- `android-app/app/src/main/kotlin/org/terst/nav/ui/MapHandler.kt`: `updateTrackLayer` now supports active and past tracks with distinct styles.
- `android-app/app/src/main/res/layout/activity_main.xml`: Refactored to vertical LinearLayout root to stabilize BottomNav and FAB placement.
- `android-app/app/src/main/res/layout/layout_instruments_sheet.xml`: Added "TRIP REPORTS & PLANNING" section for direct access from main view.
- `android-app/app/src/main/kotlin/org/terst/nav/MainActivity.kt`: Wired Pre-Trip and Trip Report buttons from instrument sheet; added `showReport` navigation helper.
- `android-app/app/src/main/kotlin/org/terst/nav/track/TrackRepository.kt`: Added `pastTracks` storage.
- `test-runner/src/main/kotlin/org/terst/nav/track/TrackRepository.kt`: Synchronized with main app implementation.
### [APPROVED] GpsPosition data class (2026-03-15)
- File: `app/src/main/kotlin/org/terst/nav/gps/GpsPosition.kt`
- Fields: latitude, longitude, sog (knots), cog (degrees true), timestampMs
### [APPROVED] DeviceGpsProvider (2026-03-15)
- Wraps `LocationManager` with `GPS_PROVIDER`
- Fix-lost timer: fires `onFixLost()` after 10s with no update
### [APPROVED] NmeaParser — RMC parser (2026-03-15)
- Parses any `*RMC` sentence (GP, GN, etc.)
- HHMMSS + DDMMYY → Unix epoch millis UTC
### [APPROVED] AIS Integration (2026-03-15)
- `AisVdmParser.kt`: Parses !AIVDM/!AIVDO (Types 1, 2, 3, 5).
- `AisRepository.kt`: Upserts vessels and merges static data.
- `AisHubSource.kt`: Integration with AISHub REST API.
- `MapFragment`: GeoJSON layer for AIS vessels with rotation and labels.
### [APPROVED] Track Recording (2026-03-25)
- `MainViewModel`: TrackRepository wired; `addGpsPoint` enriches with environmental data.
- `MainActivity`: FAB for toggling recording; MapHandler for rendering.
## Next 3 Specific Steps
1. **Unit Tests for Trip Generators** — Add JVM tests in `test-runner` for `TripReportGenerator` and `PreTripReportGenerator`.
2. **Persist track to Room** — Replace in-memory `pastTracks` with a Room database for persistence across sessions.
3. **AnchorWatchHandler UI** — Re-integrate `AnchorWatchHandler` UI into `activity_main.xml` and wire it to the Safety Dashboard.
## Scripts Added
- `test-runner/` — standalone Kotlin/JVM Gradle project for fast test cycles.
## Process Improvements
- Stabilized UI layout by moving navigation out of the `CoordinatorLayout`.
- Duplicated core logic into `test-runner` to bypass Android SDK requirements for logic testing.
|