diff options
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.kt | 44 |
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() + } + } +} |
