summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--android-app/app/src/main/kotlin/org/terst/nav/MainActivity.kt8
-rw-r--r--android-app/app/src/main/kotlin/org/terst/nav/ui/MainViewModel.kt44
2 files changed, 48 insertions, 4 deletions
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 01971a6..d0b0d87 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
@@ -155,11 +155,13 @@ class MainActivity : AppCompatActivity(), SafetyFragment.SafetyListener {
if (!viewModel.isRecording.value) viewModel.startTrack()
}
fabRecordTrack.setOnLongClickListener {
+ it.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS)
if (viewModel.isRecording.value) {
- it.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS)
viewModel.stopTrack()
- true
- } else false
+ } else {
+ viewModel.injectTestTrack()
+ }
+ true
}
fabRecenter.setOnClickListener { mapHandler?.recenter() }
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
index df31949..6ec8c76 100644
--- 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
@@ -90,7 +90,49 @@ class MainViewModel(
}
}
- fun addGpsPoint(lat: Double, lon: Double, sogKnots: Double, cogDeg: Double) {
+ /** Dev shortcut: saves a synthetic 30-min Honokohau circuit without requiring GPS movement. */
+ fun injectTestTrack() {
+ viewModelScope.launch {
+ val startMs = System.currentTimeMillis() - 30 * 60_000L
+ val points = buildTestTrack(startMs)
+ trackRepository.startTrack()
+ points.forEach { trackRepository.addPoint(it) }
+ val summary = trackRepository.stopTrack()
+ _pastTracks.value = trackRepository.getPastTracks()
+ _trackPoints.value = emptyList()
+ _isRecording.value = false
+ summary?.let { _trackSummary.emit(it) }
+ }
+ }
+
+ private fun buildTestTrack(startMs: Long): List<TrackPoint> {
+ // Honokohau Harbor, Kona, HI: 19.669°N, 156.027°W
+ // Heads west (~270°) for first half, returns east (~90°) for second half
+ val baseLat = 19.669
+ val baseLon = -156.027
+ val nmPerDegreeLon = 60.0 * kotlin.math.cos(kotlin.math.PI / 180.0 * baseLat)
+ val sogKt = 4.5
+ val count = 16
+ return (0 until count).map { i ->
+ val tMs = startMs + i * 2 * 60_000L
+ val outbound = i < count / 2
+ val legIndex = if (outbound) i else (count - 1 - i)
+ val distNm = sogKt * (legIndex * 2.0 / 60.0)
+ val lonOffset = distNm / nmPerDegreeLon
+ val lat = baseLat + if (!outbound) 0.003 else 0.0 // slight northing on return
+ val lon = baseLon - lonOffset
+ val cogDeg = if (outbound) 270.0 else 90.0
+ val sog = sogKt + (i % 3 - 1) * 0.4 // mild variation
+ TrackPoint(
+ lat = lat, lon = lon,
+ sogKnots = sog, cogDeg = cogDeg,
+ waveHeightM = 0.6,
+ timestampMs = tMs
+ )
+ }
+ }
+
+(lat: Double, lon: Double, sogKnots: Double, cogDeg: Double) {
val conditions = _marineConditions.value
val forecast = _forecast.value.firstOrNull()
val point = TrackPoint(