summaryrefslogtreecommitdiff
path: root/android-app/app/src
diff options
context:
space:
mode:
authorClaude <noreply@anthropic.com>2026-05-20 16:36:35 +0000
committerClaude <noreply@anthropic.com>2026-05-20 16:36:35 +0000
commit4b0a4c76d94ace1593d66f6fd485b88b3b6c4994 (patch)
treee277dd298ccbd6a60ac2d4e5b25e2b000fe6e97d /android-app/app/src
parentfbb6afd05383cb1a72597ed3a8e853d029645f48 (diff)
Fix track detail sheet expansion; fix tack detection sensitivity
Sheet: set isDraggable=false so scrolling the event list doesn't push the sheet up over the map. Top 50% stays map, bottom 50% stays list. Tack detector: replaced 5-index skip (~5 s at 1 Hz) with a 45-second timestamp gap. Also tightened STABILITY_MAX from 30° to 20° to reduce false positives from GPS heading noise. https://claude.ai/code/session_01YUbuZNDAoLea4cf9UGQ9qn
Diffstat (limited to 'android-app/app/src')
-rw-r--r--android-app/app/src/main/kotlin/org/terst/nav/track/TackDetector.kt16
-rw-r--r--android-app/app/src/main/kotlin/org/terst/nav/track/TrackDetailSheet.kt1
2 files changed, 9 insertions, 8 deletions
diff --git a/android-app/app/src/main/kotlin/org/terst/nav/track/TackDetector.kt b/android-app/app/src/main/kotlin/org/terst/nav/track/TackDetector.kt
index 6616acf..3c3385c 100644
--- a/android-app/app/src/main/kotlin/org/terst/nav/track/TackDetector.kt
+++ b/android-app/app/src/main/kotlin/org/terst/nav/track/TackDetector.kt
@@ -3,20 +3,20 @@ package org.terst.nav.track
import kotlin.math.abs
object TackDetector {
- private const val HALF_WIN = 2
- private const val MIN_DELTA = 60.0
- private const val MAX_DELTA = 140.0
- private const val SKIP_AFTER = 5
- private const val STABILITY_MAX = 30.0
+ private const val HALF_WIN = 2
+ private const val MIN_DELTA = 60.0
+ private const val MAX_DELTA = 140.0
+ private const val STABILITY_MAX = 20.0
+ private const val MIN_GAP_MS = 45_000L // 45 s minimum between tacks
fun detectTacks(points: List<TrackPoint>): List<TackEvent> {
if (points.size < 2 * HALF_WIN + 1) return emptyList()
val results = mutableListOf<TackEvent>()
- var nextCandidate = 0
+ var lastTackMs = Long.MIN_VALUE
for (i in HALF_WIN until points.size - HALF_WIN) {
- if (i < nextCandidate) continue
+ if (points[i].timestampMs - lastTackMs < MIN_GAP_MS) continue
val spreadBefore = abs(angleDiff(points[i - 2].cogDeg, points[i - 1].cogDeg))
val spreadAfter = abs(angleDiff(points[i + 1].cogDeg, points[i + 2].cogDeg))
@@ -28,7 +28,7 @@ object TackDetector {
if (delta in MIN_DELTA..MAX_DELTA) {
results += TackEvent(i, points[i].lat, points[i].lon, cogBefore, cogAfter)
- nextCandidate = i + SKIP_AFTER
+ lastTackMs = points[i].timestampMs
}
}
return results
diff --git a/android-app/app/src/main/kotlin/org/terst/nav/track/TrackDetailSheet.kt b/android-app/app/src/main/kotlin/org/terst/nav/track/TrackDetailSheet.kt
index 627ce89..98205fd 100644
--- a/android-app/app/src/main/kotlin/org/terst/nav/track/TrackDetailSheet.kt
+++ b/android-app/app/src/main/kotlin/org/terst/nav/track/TrackDetailSheet.kt
@@ -75,6 +75,7 @@ class TrackDetailSheet : BottomSheetDialogFragment() {
isFitToContents = false
halfExpandedRatio = 0.5f
skipCollapsed = true
+ isDraggable = false
state = BottomSheetBehavior.STATE_HALF_EXPANDED
}
dialog?.window?.setDimAmount(0.2f)