From 6261b85ba8ddd7a7d300f92f40fba185d425d2b6 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 27 May 2026 15:38:39 +0000 Subject: Embed anchor watch form inline in Safety Dashboard Replaces the "Configure Anchor Watch" button with depth and rode EditTexts directly in the anchor card; radius updates live via TextWatcher. Removes the separate AnchorWatchHandler overlay flow and onConfigureAnchor() from SafetyListener. https://claude.ai/code/session_01KXYBuAHZkvv63DeUG6XaZD --- .../src/main/kotlin/org/terst/nav/MainActivity.kt | 4 -- .../org/terst/nav/ui/safety/SafetyFragment.kt | 25 ++++++- .../app/src/main/res/layout/fragment_safety.xml | 76 ++++++++++++++++++++-- 3 files changed, 93 insertions(+), 12 deletions(-) (limited to 'android-app/app/src') 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 e4bc9b5..da887f4 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 @@ -504,10 +504,6 @@ class MainActivity : AppCompatActivity(), SafetyFragment.SafetyListener { } } - override fun onConfigureAnchor() { - showOverlay(org.terst.nav.ui.anchorwatch.AnchorWatchHandler()) - } - override fun onHardwareSourceChanged(source: HardwareSource, enabled: Boolean) { viewModel.onHardwareSourceChanged(source, enabled) if (source == HardwareSource.NMEA_INSTRUMENTS) { diff --git a/android-app/app/src/main/kotlin/org/terst/nav/ui/safety/SafetyFragment.kt b/android-app/app/src/main/kotlin/org/terst/nav/ui/safety/SafetyFragment.kt index d906094..c4b6e1e 100644 --- a/android-app/app/src/main/kotlin/org/terst/nav/ui/safety/SafetyFragment.kt +++ b/android-app/app/src/main/kotlin/org/terst/nav/ui/safety/SafetyFragment.kt @@ -1,9 +1,12 @@ package org.terst.nav.ui.safety import android.os.Bundle +import android.text.Editable +import android.text.TextWatcher import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.EditText import android.widget.TextView import androidx.core.content.ContextCompat import androidx.fragment.app.Fragment @@ -14,6 +17,7 @@ import org.terst.nav.R import org.terst.nav.ais.CpaAlert import org.terst.nav.ais.CpaSeverity import org.terst.nav.ais.label +import org.terst.nav.safety.AnchorWatchState import org.terst.nav.settings.HardwareSource import org.terst.nav.ui.doc.DocFragment @@ -21,7 +25,6 @@ class SafetyFragment : Fragment() { interface SafetyListener { fun onActivateMob() - fun onConfigureAnchor() fun onHardwareSourceChanged(source: HardwareSource, enabled: Boolean) fun onQuitRequested() } @@ -52,9 +55,25 @@ class SafetyFragment : Fragment() { listener?.onActivateMob() } - view.findViewById(R.id.button_anchor_config).setOnClickListener { - listener?.onConfigureAnchor() + val etDepth = view.findViewById(R.id.et_anchor_depth) + val etRode = view.findViewById(R.id.et_anchor_rode) + val tvRadius = view.findViewById(R.id.tv_anchor_suggested_radius) + val watcher = object : TextWatcher { + override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) = Unit + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) = Unit + override fun afterTextChanged(s: Editable?) { + val depth = etDepth.text.toString().toDoubleOrNull() + val rode = etRode.text.toString().toDoubleOrNull() + tvRadius.text = if (depth != null && rode != null && depth >= 0.0 && rode > 0.0) { + val r = AnchorWatchState.calculateRecommendedWatchCircleRadius(depth, 2.0, rode) + getString(R.string.anchor_suggested_radius_fmt, r) + } else { + getString(R.string.anchor_suggested_radius_empty) + } + } } + etDepth.addTextChangedListener(watcher) + etRode.addTextChangedListener(watcher) val flags = (requireActivity().application as NavApplication).featureFlags diff --git a/android-app/app/src/main/res/layout/fragment_safety.xml b/android-app/app/src/main/res/layout/fragment_safety.xml index 1072abe..1d499ab 100644 --- a/android-app/app/src/main/res/layout/fragment_safety.xml +++ b/android-app/app/src/main/res/layout/fragment_safety.xml @@ -127,13 +127,79 @@ android:text="Status: Inactive" android:textColor="?attr/colorOnSurfaceVariant" /> - + android:orientation="horizontal" + android:layout_marginTop="16dp"> + + + + + + + + + + + + + + + + + + + + + + -- cgit v1.2.3