<feed xmlns='http://www.w3.org/2005/Atom'>
<title>nav.git/android-app/app/src/main/res/drawable, branch main</title>
<subtitle>nav — android navigation app
</subtitle>
<id>https://git.terst.org/nav.git/atom?h=main</id>
<link rel='self' href='https://git.terst.org/nav.git/atom?h=main'/>
<link rel='alternate' type='text/html' href='https://git.terst.org/nav.git/'/>
<updated>2026-04-06T18:03:39+00:00</updated>
<entry>
<title>feat(nav): replace Map+Instruments with Map+Layers in bottom nav</title>
<updated>2026-04-06T18:03:39+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-04-06T18:03:39+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/nav.git/commit/?id=d98b441f2f9ca8b11a04406240dd19ecc0cac7ab'/>
<id>urn:sha1:d98b441f2f9ca8b11a04406240dd19ecc0cac7ab</id>
<content type='text'>
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 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>feat(track): implement GPS track recording with map overlay</title>
<updated>2026-03-25T18:09:53+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-03-25T18:09:53+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/nav.git/commit/?id=ca57e40adc0b89e7dc5409475f7510c0c188d715'/>
<id>urn:sha1:ca57e40adc0b89e7dc5409475f7510c0c188d715</id>
<content type='text'>
- TrackRepository + TrackPoint wired into MainViewModel:
  isRecording/trackPoints StateFlows, startTrack/stopTrack/addGpsPoint
- MapHandler.updateTrackLayer(): lazily initialises a red LineLayer
  and updates GeoJSON polyline from List&lt;TrackPoint&gt;
- 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 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>feat: refactor UI to BottomNavigationView with Safety and Doc fragments</title>
<updated>2026-03-23T04:16:32+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-03-23T04:16:32+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/nav.git/commit/?id=77892d354eda07d98e2dfa5d00fca1ed1f808d8b'/>
<id>urn:sha1:77892d354eda07d98e2dfa5d00fca1ed1f808d8b</id>
<content type='text'>
Replace FAB-based navigation with a 4-tab BottomNavigationView (Map,
Instruments, Log, Safety). Instruments use a collapsible bottom sheet;
Log and Safety display as full-screen overlay fragments.

- Add SafetyFragment with MOB and Anchor Watch controls
- Add DocFragment for in-app markdown help (Markwon: core, tables, images)
- Add layout_instruments_sheet with 3x3 instrument grid and PolarDiagramView
- Add fragment_safety and fragment_doc layouts
- Add vector drawables: ic_map, ic_instruments, ic_log, ic_safety, ic_close
- Update activity_main.xml to CoordinatorLayout with bottom sheet + overlay
- Fix: set isHideable=true before STATE_HIDDEN to avoid silent no-op from
  behavior_hideable=false default; restore false on Map/Instruments tabs

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>feat: integrate AIS into ViewModel and MapFragment with vessel symbol layer</title>
<updated>2026-03-15T14:20:21+00:00</updated>
<author>
<name>Claudomator Agent</name>
<email>agent@claudomator</email>
</author>
<published>2026-03-15T14:20:21+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/nav.git/commit/?id=ff5854b75f2ba7c77d467fd9523e2a23060a7c46'/>
<id>urn:sha1:ff5854b75f2ba7c77d467fd9523e2a23060a7c46</id>
<content type='text'>
- MainViewModel: add _aisTargets StateFlow, processAisSentence(), refreshAisFromInternet()
- AisRepository: add ingestVessel() for internet-sourced vessels
- MapFragment: add AIS vessel SymbolLayer with heading-based rotation and zoom-gated labels
- MainActivity: add startAisHardwareFeed() TCP stub, wire viewModel
- ic_ship_arrow.xml: new vector drawable for AIS target icons
- MainViewModelTest: 3 new AIS tests (processAisSentence happy path, dedup, non-AIS sentence)
- JVM test harness: /tmp/ais-vm-test-runner/ — 3 tests GREEN

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>merge: integrate weather/forecast feature from local remote</title>
<updated>2026-03-15T05:49:51+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-03-15T05:49:51+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/nav.git/commit/?id=c3f1178d30de7f1c5c536d0863d547299f2ab54e'/>
<id>urn:sha1:c3f1178d30de7f1c5c536d0863d547299f2ab54e</id>
<content type='text'>
Merges wind/current overlay and weather forecast implementation:
- Weather feature: WeatherRepository, MainViewModel, MapFragment, ForecastFragment, ForecastAdapter
- Data models: WindArrow, ForecastItem, WeatherResponse, MarineResponse
- API services: WeatherApiService, MarineApiService (Open-Meteo, no key required)
- Layouts: activity_weather.xml, fragment_map.xml, fragment_forecast.xml, item_forecast.xml
- Resources: merged colors (wind_slow/medium/strong), strings, themes (Theme.NavApp added)
- Manifest: added ACCESS_COARSE_LOCATION
- build.gradle: merged deps — kept Firebase+MapLibre 11.5.1, added kotlin-kapt, retrofit, moshi, turbine
- Fix: re-packaged com.example.androidapp → org.terst.nav; weather MainActivity uses ActivityWeatherBinding

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Implement tidal current overlay on the chart with toggle FAB</title>
<updated>2026-03-14T00:46:14+00:00</updated>
<author>
<name>Claudomator Agent</name>
<email>agent@claudomator</email>
</author>
<published>2026-03-14T00:46:14+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/nav.git/commit/?id=9fb49aebfc01b5df68e67e97ee088318a3621c26'/>
<id>urn:sha1:9fb49aebfc01b5df68e67e97ee088318a3621c26</id>
<content type='text'>
</content>
</entry>
<entry>
<title>refactor: update package name to org.terst.nav and setup CI/CD with Firebase App Distribution</title>
<updated>2026-03-13T23:04:12+00:00</updated>
<author>
<name>Peter Stone</name>
<email>thepeterstone@gmail.com</email>
</author>
<published>2026-03-13T23:04:02+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/nav.git/commit/?id=7f89b6d4d0bc4996c0f1802f81abcc23ce47c221'/>
<id>urn:sha1:7f89b6d4d0bc4996c0f1802f81abcc23ce47c221</id>
<content type='text'>
</content>
</entry>
<entry>
<title>feat: add wind/current map overlay and weather forecast on startup</title>
<updated>2026-03-13T19:59:01+00:00</updated>
<author>
<name>Claudomator Agent</name>
<email>agent@claudomator</email>
</author>
<published>2026-03-13T19:59:01+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/nav.git/commit/?id=51f86cff118f9532783c4e61724e07173ec029d7'/>
<id>urn:sha1:51f86cff118f9532783c4e61724e07173ec029d7</id>
<content type='text'>
Implements the wind/current map overlay and 7-day weather forecast
display that loads on application launch:

Data layer:
- Open-Meteo API (free, no key): WeatherApiService + MarineApiService
- Moshi-annotated response models (WeatherResponse, MarineResponse)
- WeatherRepository: parallel async fetch, Result&lt;T&gt; error propagation
- Domain models: WindArrow (with beaufortScale/isCalm) + ForecastItem
  (with weatherDescription/isRainy via WMO weather codes)

Presentation layer:
- MainViewModel: StateFlow&lt;UiState&gt; (Loading/Success/Error),
  windArrow and forecast streams
- MainActivity: runtime location permission, FusedLocationProvider
  GPS fetch on startup, falls back to SF Bay default
- MapFragment: MapLibre GL map with wind-arrow SymbolLayer;
  icon rotated by wind direction, size scaled by speed in knots
- ForecastFragment + ForecastAdapter: RecyclerView ListAdapter
  showing 7-day hourly forecast (time, description, wind, temp, precip)

Resources:
- ic_wind_arrow.xml vector drawable (north-pointing, rotated by MapLibre)
- BottomNavigationView: Map / Forecast tabs
- ViewBinding enabled throughout

Tests (TDD — written before implementation):
- WindArrowTest: calm detection, direction normalisation, Beaufort scale
- ForecastItemTest: weatherDescription, isRainy for WMO codes
- WeatherApiServiceTest: MockWebServer request params + response parsing
- WeatherRepositoryTest: MockK service mocks, data mapping, error paths
- MainViewModelTest: Turbine StateFlow assertions for all state transitions

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
</entry>
</feed>
