summaryrefslogtreecommitdiff
path: root/android-app/app/src/main/kotlin/org/terst/nav/ui
diff options
context:
space:
mode:
Diffstat (limited to 'android-app/app/src/main/kotlin/org/terst/nav/ui')
-rw-r--r--android-app/app/src/main/kotlin/org/terst/nav/ui/MainViewModel.kt44
1 files changed, 44 insertions, 0 deletions
diff --git a/android-app/app/src/main/kotlin/org/terst/nav/ui/MainViewModel.kt b/android-app/app/src/main/kotlin/org/terst/nav/ui/MainViewModel.kt
new file mode 100644
index 0000000..c5b90c3
--- /dev/null
+++ b/android-app/app/src/main/kotlin/org/terst/nav/ui/MainViewModel.kt
@@ -0,0 +1,44 @@
+package org.terst.nav.ui
+
+import kotlinx.coroutines.flow.MutableStateFlow
+import kotlinx.coroutines.flow.StateFlow
+import org.terst.nav.sensors.WindData
+import org.terst.nav.track.TrackPoint
+import org.terst.nav.track.TrackRepository
+
+class MainViewModel {
+
+ private val trackRepository = TrackRepository()
+ private var latestWind: WindData? = null
+
+ private val _trackPoints = MutableStateFlow<List<TrackPoint>>(emptyList())
+ val trackPoints: StateFlow<List<TrackPoint>> = _trackPoints
+
+ fun startTrack() {
+ trackRepository.startTrack()
+ _trackPoints.value = emptyList()
+ }
+
+ fun stopTrack() {
+ trackRepository.stopTrack()
+ }
+
+ fun updateWind(wind: WindData) {
+ latestWind = wind
+ }
+
+ fun addGpsPoint(lat: Double, lon: Double, sogKnots: Double, cogDeg: Double) {
+ val wind = latestWind
+ val point = TrackPoint(
+ lat = lat, lon = lon,
+ sogKnots = sogKnots, cogDeg = cogDeg,
+ windSpeedKnots = wind?.windSpeed ?: 0.0,
+ windAngleDeg = wind?.windAngle ?: 0.0,
+ isTrueWind = wind?.isTrueWind ?: false,
+ timestampMs = System.currentTimeMillis()
+ )
+ if (trackRepository.addPoint(point)) {
+ _trackPoints.value = trackRepository.getPoints()
+ }
+ }
+}