From 4b0a4c76d94ace1593d66f6fd485b88b3b6c4994 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 20 May 2026 16:36:35 +0000 Subject: Fix track detail sheet expansion; fix tack detection sensitivity MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- .../src/main/kotlin/org/terst/nav/track/TackDetector.kt | 16 ++++++++-------- .../main/kotlin/org/terst/nav/track/TrackDetailSheet.kt | 1 + 2 files changed, 9 insertions(+), 8 deletions(-) (limited to 'android-app/app/src') 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): List { if (points.size < 2 * HALF_WIN + 1) return emptyList() val results = mutableListOf() - 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) -- cgit v1.2.3