<feed xmlns='http://www.w3.org/2005/Atom'>
<title>nav.git/android-app/app/src/main/kotlin/org/terst/nav/settings, 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-22T09:02:46+00:00</updated>
<entry>
<title>fix+feat: CI build fixes and hardware source feature flags</title>
<updated>2026-04-22T09:02:46+00:00</updated>
<author>
<name>Claude</name>
<email>noreply@anthropic.com</email>
</author>
<published>2026-04-22T09:02:46+00:00</published>
<link rel='alternate' type='text/html' href='https://git.terst.org/nav.git/commit/?id=e141e1ef46ebb2a61f452122201a77527a5a1c9e'/>
<id>urn:sha1:e141e1ef46ebb2a61f452122201a77527a5a1c9e</id>
<content type='text'>
CI fixes:
- ParticleWindView: bounds.lonEast → bounds.northEast.longitude
  (MapLibre 13.x API; lonEast not available as property)
- VesselRegistryFragment: Vessel(id="") and CrewMember(id="") →
  include required name="" so copy() compiles

Hardware source feature flags:
- HardwareSource enum: AIS_RECEIVER, NMEA_INSTRUMENTS
- FeatureFlags: SharedPreferences-backed; all sources default OFF
  (app works phone-only out of the box)
- NavApplication: exposes featureFlags singleton
- SafetyFragment: "HARDWARE DATA SOURCES" card with two MaterialSwitch
  toggles; reads initial state from FeatureFlags; calls
  SafetyListener.onHardwareSourceChanged on change
- AIS_RECEIVER flag:
  - MainViewModel.processAisSentence() / refreshAisFromInternet() skip
    when disabled; onHardwareSourceChanged() clears targets + cpaAlerts
- NMEA_INSTRUMENTS flag:
  - LocationService skips nmeaStreamManager.start() on service launch
    when disabled
  - New ACTION_START_NMEA / ACTION_STOP_NMEA intents allow live toggle
  - MainActivity.onHardwareSourceChanged() sends the appropriate intent

Tests: 102 total, all GREEN (+7 FeatureFlagsTest)

https://claude.ai/code/session_011h2dXbgXg3PesQMmQUNTCW
</content>
</entry>
</feed>
