summaryrefslogtreecommitdiff
path: root/android-app/app/src/main/kotlin/org/terst
diff options
context:
space:
mode:
authorClaude <noreply@anthropic.com>2026-05-28 07:09:43 +0000
committerClaude <noreply@anthropic.com>2026-05-28 07:09:43 +0000
commitc498b33300d260bbe64bec49de9ef78d9a322a6d (patch)
tree2ee8b3fc08d759b105de0a8c2b36d4301c3f393a /android-app/app/src/main/kotlin/org/terst
parent3673ed0ef79d776c6da3bfa0db9de8b08326fd32 (diff)
Tech debt: delete com.example.androidapp ghost package, symlink TackDetector, fix forecast current hour
- Deleted all 18 stale source files in com.example.androidapp (main + test) that duplicated org.terst.nav implementations from an earlier namespace - Fixed the 3 tide model files (TidePrediction/Station/Constituent) whose package declarations read com.example.androidapp.data.model despite living in org.terst.nav.data.model directories - Fixed HarmonicTideCalculator.kt imports to match the corrected package - Fixed TideModelTest.kt package declaration - Migrated HarmonicTideCalculatorTest to org.terst.nav.tide with correct imports - Replaced test-runner's TackDetector.kt copy with a symlink to the android-app canonical source so the two can never diverge again - Fixed addGpsPoint to pick the current wall-clock hour's forecast slot instead of always using the app-start hour (first item in forecast list) https://claude.ai/code/session_01KXYBuAHZkvv63DeUG6XaZD
Diffstat (limited to 'android-app/app/src/main/kotlin/org/terst')
-rw-r--r--android-app/app/src/main/kotlin/org/terst/nav/data/model/TideConstituent.kt2
-rw-r--r--android-app/app/src/main/kotlin/org/terst/nav/data/model/TidePrediction.kt2
-rw-r--r--android-app/app/src/main/kotlin/org/terst/nav/data/model/TideStation.kt2
-rw-r--r--android-app/app/src/main/kotlin/org/terst/nav/tide/HarmonicTideCalculator.kt4
-rw-r--r--android-app/app/src/main/kotlin/org/terst/nav/ui/MainViewModel.kt11
5 files changed, 15 insertions, 6 deletions
diff --git a/android-app/app/src/main/kotlin/org/terst/nav/data/model/TideConstituent.kt b/android-app/app/src/main/kotlin/org/terst/nav/data/model/TideConstituent.kt
index deb73d6..34a502c 100644
--- a/android-app/app/src/main/kotlin/org/terst/nav/data/model/TideConstituent.kt
+++ b/android-app/app/src/main/kotlin/org/terst/nav/data/model/TideConstituent.kt
@@ -1,4 +1,4 @@
-package com.example.androidapp.data.model
+package org.terst.nav.data.model
/** A single harmonic tidal constituent used in harmonic tide prediction. */
data class TideConstituent(
diff --git a/android-app/app/src/main/kotlin/org/terst/nav/data/model/TidePrediction.kt b/android-app/app/src/main/kotlin/org/terst/nav/data/model/TidePrediction.kt
index 51eea44..f6c2b72 100644
--- a/android-app/app/src/main/kotlin/org/terst/nav/data/model/TidePrediction.kt
+++ b/android-app/app/src/main/kotlin/org/terst/nav/data/model/TidePrediction.kt
@@ -1,4 +1,4 @@
-package com.example.androidapp.data.model
+package org.terst.nav.data.model
/** A predicted tide height at a specific point in time. */
data class TidePrediction(
diff --git a/android-app/app/src/main/kotlin/org/terst/nav/data/model/TideStation.kt b/android-app/app/src/main/kotlin/org/terst/nav/data/model/TideStation.kt
index c9f96a6..4e1238e 100644
--- a/android-app/app/src/main/kotlin/org/terst/nav/data/model/TideStation.kt
+++ b/android-app/app/src/main/kotlin/org/terst/nav/data/model/TideStation.kt
@@ -1,4 +1,4 @@
-package com.example.androidapp.data.model
+package org.terst.nav.data.model
/** A tide station with harmonic constituents for offline tide prediction. */
data class TideStation(
diff --git a/android-app/app/src/main/kotlin/org/terst/nav/tide/HarmonicTideCalculator.kt b/android-app/app/src/main/kotlin/org/terst/nav/tide/HarmonicTideCalculator.kt
index b1e5652..f0c0ab2 100644
--- a/android-app/app/src/main/kotlin/org/terst/nav/tide/HarmonicTideCalculator.kt
+++ b/android-app/app/src/main/kotlin/org/terst/nav/tide/HarmonicTideCalculator.kt
@@ -1,7 +1,7 @@
package org.terst.nav.tide
-import com.example.androidapp.data.model.TidePrediction
-import com.example.androidapp.data.model.TideStation
+import org.terst.nav.data.model.TidePrediction
+import org.terst.nav.data.model.TideStation
import kotlin.math.cos
/**
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 f664aa9..33366f9 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
@@ -124,6 +124,7 @@ class MainViewModel(
fun onSafDirectorySelected(treeUri: Uri) {
trackRepository.initSafDirectory(treeUri)
_safState.value = trackRepository.safState()
+ NavApplication.logbookRepository.reload()
viewModelScope.launch { reloadPastTracks() }
}
@@ -236,10 +237,18 @@ class MainViewModel(
lastLat = lat; lastLon = lon; lastSog = sogKnots; lastCog = cogDeg
_currentPosition.value = lat to lon
val conditions = _marineConditions.value
- val forecast = _forecast.value.firstOrNull()
+ val nowHourPrefix = java.time.Instant.ofEpochMilli(System.currentTimeMillis())
+ .toString().substring(0, 13) // "2024-01-15T14" — matches Open-Meteo hourly slots
+ val forecast = _forecast.value.find { it.timeIso.startsWith(nowHourPrefix) }
+ ?: _forecast.value.firstOrNull()
+ val windDirDeg = conditions?.windDirDeg ?: forecast?.windDirDeg
+ val twa = windDirDeg?.let { ((it - cogDeg + 360.0) % 360.0) }
val point = TrackPoint(
lat = lat, lon = lon,
sogKnots = sogKnots, cogDeg = cogDeg,
+ windSpeedKnots = conditions?.windSpeedKt ?: forecast?.windKt,
+ windAngleDeg = twa,
+ isTrueWind = twa != null,
airTempC = forecast?.tempC,
waveHeightM = conditions?.waveHeightM,
currentSpeedKts = conditions?.currentSpeedKt,