summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorClaude Agent <agent@terst.nav>2026-04-04 22:12:27 +0000
committerClaude Agent <agent@terst.nav>2026-04-04 22:12:27 +0000
commit81df09c17d363e65ad91d06e3ee4cdc770ac1128 (patch)
tree978ec41e17547c9244fcb8be283c3a0022e559fc
parent62cebb86e20cdf9fcdfaa3eab2b39836d4cc993e (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.
-rw-r--r--android-app/app/src/main/kotlin/org/terst/nav/LocationService.kt11
-rw-r--r--android-app/app/src/main/kotlin/org/terst/nav/MainActivity.kt15
-rw-r--r--android-app/app/src/main/kotlin/org/terst/nav/tidal/TidalCurrentState.kt7
-rw-r--r--android-app/app/src/main/kotlin/org/terst/nav/ui/MapHandler.kt12
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.
+ }
+}