From ca57e40adc0b89e7dc5409475f7510c0c188d715 Mon Sep 17 00:00:00 2001 From: Peter Stone Date: Wed, 25 Mar 2026 18:09:53 +0000 Subject: 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 - 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 --- .../app/src/main/res/drawable/ic_track_record.xml | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 android-app/app/src/main/res/drawable/ic_track_record.xml (limited to 'android-app/app/src/main/res/drawable') diff --git a/android-app/app/src/main/res/drawable/ic_track_record.xml b/android-app/app/src/main/res/drawable/ic_track_record.xml new file mode 100644 index 0000000..9016369 --- /dev/null +++ b/android-app/app/src/main/res/drawable/ic_track_record.xml @@ -0,0 +1,17 @@ + + + + + + + -- cgit v1.2.3 From d98b441f2f9ca8b11a04406240dd19ecc0cac7ab Mon Sep 17 00:00:00 2001 From: Peter Stone Date: Mon, 6 Apr 2026 18:03:39 +0000 Subject: feat(nav): replace Map+Instruments with Map+Layers in bottom nav MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Layers acts as an action button — shows LayerPickerSheet and snaps back to Map so it never stays selected. Instruments tab removed; sheet expand/collapse via swipe as before. Co-Authored-By: Claude Sonnet 4.6 --- .../app/src/main/kotlin/org/terst/nav/MainActivity.kt | 15 +++++++++++---- android-app/app/src/main/res/drawable/ic_layers.xml | 9 +++++++++ android-app/app/src/main/res/menu/bottom_nav_menu.xml | 6 +++--- 3 files changed, 23 insertions(+), 7 deletions(-) create mode 100644 android-app/app/src/main/res/drawable/ic_layers.xml (limited to 'android-app/app/src/main/res/drawable') diff --git a/android-app/app/src/main/kotlin/org/terst/nav/MainActivity.kt b/android-app/app/src/main/kotlin/org/terst/nav/MainActivity.kt index de1f4dd..0309364 100644 --- a/android-app/app/src/main/kotlin/org/terst/nav/MainActivity.kt +++ b/android-app/app/src/main/kotlin/org/terst/nav/MainActivity.kt @@ -130,10 +130,17 @@ class MainActivity : AppCompatActivity(), SafetyFragment.SafetyListener { bottomSheetBehavior.state = BottomSheetBehavior.STATE_COLLAPSED true } - R.id.nav_instruments -> { - hideOverlays() - bottomSheetBehavior.isHideable = false - bottomSheetBehavior.state = BottomSheetBehavior.STATE_EXPANDED + R.id.nav_layers -> { + // Action button — show picker then snap back to Map + val currentStyle = loadedStyleFlow.value + if (currentStyle != null) { + LayerPickerSheet( + manager = layerManager, + onBaseChanged = { preset -> layerManager.setBasePreset(currentStyle, preset) }, + onWindChanged = { enabled -> layerManager.setWindEnabled(currentStyle, enabled) } + ).show(supportFragmentManager, "layer_picker") + } + bottomNav.post { bottomNav.selectedItemId = R.id.nav_map } true } R.id.nav_log -> { diff --git a/android-app/app/src/main/res/drawable/ic_layers.xml b/android-app/app/src/main/res/drawable/ic_layers.xml new file mode 100644 index 0000000..f86f83a --- /dev/null +++ b/android-app/app/src/main/res/drawable/ic_layers.xml @@ -0,0 +1,9 @@ + + + diff --git a/android-app/app/src/main/res/menu/bottom_nav_menu.xml b/android-app/app/src/main/res/menu/bottom_nav_menu.xml index b29fb08..e7fc15d 100644 --- a/android-app/app/src/main/res/menu/bottom_nav_menu.xml +++ b/android-app/app/src/main/res/menu/bottom_nav_menu.xml @@ -5,9 +5,9 @@ android:icon="@drawable/ic_map" android:title="Map" /> + android:id="@+id/nav_layers" + android:icon="@drawable/ic_layers" + android:title="Layers" />