summaryrefslogtreecommitdiff
path: root/.agent/worklog.md
diff options
context:
space:
mode:
authorPeter Stone <thepeterstone@gmail.com>2026-03-25 18:09:53 +0000
committerPeter Stone <thepeterstone@gmail.com>2026-03-25 18:09:53 +0000
commitca57e40adc0b89e7dc5409475f7510c0c188d715 (patch)
treed1fd636e0bdd67e36870ae891ed55d7d764689cf /.agent/worklog.md
parentb5ab0c5236d7503dc002b7bf04e0e33b9c7ff9fa (diff)
feat(track): implement GPS track recording with map overlay
- TrackRepository + TrackPoint wired into MainViewModel: isRecording/trackPoints StateFlows, startTrack/stopTrack/addGpsPoint - MapHandler.updateTrackLayer(): lazily initialises a red LineLayer and updates GeoJSON polyline from List<TrackPoint> - fab_record_track FAB in activity_main.xml (top|end of bottom nav); icon toggles between ic_track_record and ic_close while recording - MainActivity feeds every GPS fix into viewModel.addGpsPoint() and observes trackPoints to redraw the polyline in real time - ic_track_record.xml vector drawable (red record dot) - 8 TrackRepositoryTest tests all GREEN Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Diffstat (limited to '.agent/worklog.md')
-rw-r--r--.agent/worklog.md19
1 files changed, 16 insertions, 3 deletions
diff --git a/.agent/worklog.md b/.agent/worklog.md
index e17781b..7a4467f 100644
--- a/.agent/worklog.md
+++ b/.agent/worklog.md
@@ -127,10 +127,23 @@ Section 7.3 AIS display — COMPLETE (2026-03-15): AIS integrated into ViewModel
- `MainViewModelTest` — 3 new tests: valid type-1 adds vessel, same MMSI deduped, non-AIS stays empty
- JVM test harness: `/tmp/ais-vm-test-runner/` (3 tests — all GREEN)
+### [APPROVED] TrackRepository (2026-03-25)
+- `android-app/app/src/main/kotlin/org/terst/nav/track/TrackRepository.kt`
+- `test-runner/src/main/kotlin/org/terst/nav/track/TrackRepository.kt`
+- `isRecording` flag; `startTrack()` clears + starts; `stopTrack()`; `addPoint()` guards on isRecording; `getPoints()` returns snapshot
+- 8 tests — all GREEN (`TrackRepositoryTest`)
+
+### [APPROVED] Track ViewModel + Map overlay + Record FAB (2026-03-25)
+- `MainViewModel`: TrackRepository wired in; exposes `isRecording: StateFlow<Boolean>`, `trackPoints: StateFlow<List<TrackPoint>>`; `startTrack()`, `stopTrack()`, `addGpsPoint(lat, lon, sogKnots, cogDeg)`
+- `MapHandler.updateTrackLayer(style, points)`: lazy LineLayer init; red (#E53935) 3dp polyline from List<TrackPoint>
+- `MainActivity`: stores `loadedStyle`; GPS flow feeds `viewModel.addGpsPoint()` (m/s→knots); observes `trackPoints` → `mapHandler.updateTrackLayer()`; observes `isRecording` → FAB icon toggle (ic_track_record / ic_close)
+- `activity_main.xml`: `fab_record_track` FAB anchored top|end of bottom nav
+- `drawable/ic_track_record.xml`: red dot record icon
+
## Next 3 Specific Steps
-1. **CPA/TCPA alarms** — use CpaCalculator in ViewModel to emit alarm when CPA < threshold; add UI indicator in MapFragment
-2. **AISHub periodic polling** — call refreshAisFromInternet() on a timer (e.g. every 60s) when GPS position is known
-3. **AIS TCP full implementation** — replace stub socket reader with NmeaStreamManager integration
+1. **Persist track to GPX/Room** — export recorded track as GPX file or store in Room DB
+2. **Track stats in Log tab** — show elapsed time, distance, avg SOG while recording
+3. **AnchorWatchHandler UI** — wire `AnchorWatchHandler` fully into SafetyFragment (currently stub)
## Scripts Added
- `test-runner/` — standalone Kotlin/JVM Gradle project; runs all 22 GPS/NMEA tests without Android SDK