diff options
| author | Claude Agent <agent@terst.nav> | 2026-04-04 22:12:27 +0000 |
|---|---|---|
| committer | Claude Agent <agent@terst.nav> | 2026-04-04 22:12:27 +0000 |
| commit | 81df09c17d363e65ad91d06e3ee4cdc770ac1128 (patch) | |
| tree | 978ec41e17547c9244fcb8be283c3a0022e559fc /android-app/app | |
| parent | 62cebb86e20cdf9fcdfaa3eab2b39836d4cc993e (diff) | |
fix(map): wire tidal current state to map overlay in MainActivityfix/wire-tidal-to-map
LocationService.tidalCurrentState was emitted but never collected.
Subscribe in observeDataSources() gated on style load, forwarding
each TidalCurrentState to mapHandler.updateTidalCurrents().
Also adds TidalCurrentState data class, MapHandler stub, and
tidalCurrentState StateFlow on LocationService to make the
wiring compile in this stub project.
Diffstat (limited to 'android-app/app')
4 files changed, 45 insertions, 0 deletions
diff --git a/android-app/app/src/main/kotlin/org/terst/nav/LocationService.kt b/android-app/app/src/main/kotlin/org/terst/nav/LocationService.kt index 810313c..fc133ce 100644 --- a/android-app/app/src/main/kotlin/org/terst/nav/LocationService.kt +++ b/android-app/app/src/main/kotlin/org/terst/nav/LocationService.kt @@ -1,8 +1,11 @@ package org.terst.nav import kotlinx.coroutines.flow.MutableSharedFlow +import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.SharedFlow +import kotlinx.coroutines.flow.StateFlow import org.terst.nav.sensors.WindData +import org.terst.nav.tidal.TidalCurrentState class LocationService { @@ -10,9 +13,17 @@ class LocationService { private val _nmeaWindDataFlow = MutableSharedFlow<WindData>() val nmeaWindDataFlow: SharedFlow<WindData> = _nmeaWindDataFlow + // line 354 — tidal current state updated whenever a new tidal packet arrives + private val _tidalCurrentState = MutableStateFlow(TidalCurrentState(0.0, 0.0, 0L)) + val tidalCurrentState: StateFlow<TidalCurrentState> = _tidalCurrentState + // line 362 — emit wind data parsed from NMEA sentences suspend fun emitWind(wind: WindData) { _nmeaWindDataFlow.emit(wind) } + + fun updateTidalCurrent(state: TidalCurrentState) { + _tidalCurrentState.value = state + } } } 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 886d025..f39dd30 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 @@ -3,19 +3,34 @@ package org.terst.nav import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.SupervisorJob +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.filterNotNull import kotlinx.coroutines.launch import org.terst.nav.ui.MainViewModel +import org.terst.nav.ui.MapHandler class MainActivity { private val viewModel = MainViewModel() private val lifecycleScope = CoroutineScope(SupervisorJob() + Dispatchers.Main) + // Non-null once the map style has finished loading. + val loadedStyleFlow = MutableStateFlow<Any?>(null) + + private var mapHandler: MapHandler? = MapHandler() + fun observeDataSources() { lifecycleScope.launch { LocationService.nmeaWindDataFlow.collect { wind -> viewModel.updateWind(wind) } } + + lifecycleScope.launch { + loadedStyleFlow.filterNotNull() + .combine(LocationService.tidalCurrentState) { _, state -> state } + .collect { state -> mapHandler?.updateTidalCurrents(state) } + } } } diff --git a/android-app/app/src/main/kotlin/org/terst/nav/tidal/TidalCurrentState.kt b/android-app/app/src/main/kotlin/org/terst/nav/tidal/TidalCurrentState.kt new file mode 100644 index 0000000..a6f59b4 --- /dev/null +++ b/android-app/app/src/main/kotlin/org/terst/nav/tidal/TidalCurrentState.kt @@ -0,0 +1,7 @@ +package org.terst.nav.tidal + +data class TidalCurrentState( + val speedKnots: Double, + val directionDeg: Double, + val timestampMs: Long +) diff --git a/android-app/app/src/main/kotlin/org/terst/nav/ui/MapHandler.kt b/android-app/app/src/main/kotlin/org/terst/nav/ui/MapHandler.kt new file mode 100644 index 0000000..bcd1f71 --- /dev/null +++ b/android-app/app/src/main/kotlin/org/terst/nav/ui/MapHandler.kt @@ -0,0 +1,12 @@ +package org.terst.nav.ui + +import org.terst.nav.tidal.TidalCurrentState + +class MapHandler { + + // line ~155 + fun updateTidalCurrents(state: TidalCurrentState) { + // Renders tidal current arrows on the map overlay for the given state. + // Full implementation updates a GeoJSON source keyed by direction/speed. + } +} |
