summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--android-app/app/src/main/kotlin/org/terst/nav/MainActivity.kt2
-rw-r--r--android-app/app/src/main/kotlin/org/terst/nav/ui/LayerPickerSheet.kt126
2 files changed, 89 insertions, 39 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 4b090e7..7de7da8 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
@@ -436,6 +436,8 @@ class MainActivity : AppCompatActivity(), SafetyFragment.SafetyListener {
val style = loadedStyleFlow.value ?: return@LayerPickerSheet
layerManager.setSstEnabled(style, enabled)
},
+ onAtonChanged = { _ -> },
+ onTssChanged = { _ -> },
unitPrefs = unitPrefs,
onUnitsChanged = { refreshUnits() }
)
diff --git a/android-app/app/src/main/kotlin/org/terst/nav/ui/LayerPickerSheet.kt b/android-app/app/src/main/kotlin/org/terst/nav/ui/LayerPickerSheet.kt
index b83b638..b60af50 100644
--- a/android-app/app/src/main/kotlin/org/terst/nav/ui/LayerPickerSheet.kt
+++ b/android-app/app/src/main/kotlin/org/terst/nav/ui/LayerPickerSheet.kt
@@ -1,12 +1,16 @@
package org.terst.nav.ui
+import android.app.Dialog
import android.os.Bundle
+import android.util.TypedValue
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
+import com.google.android.material.bottomsheet.BottomSheetBehavior
+import com.google.android.material.bottomsheet.BottomSheetDialog
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
-import com.google.android.material.chip.ChipGroup
import com.google.android.material.card.MaterialCardView
+import com.google.android.material.chip.ChipGroup
import com.google.android.material.switchmaterial.SwitchMaterial
import org.terst.nav.DepthUnit
import org.terst.nav.PressureUnit
@@ -25,55 +29,98 @@ class LayerPickerSheet(
private val onDepthChanged: (Boolean) -> Unit,
private val onFadsChanged: (Boolean) -> Unit,
private val onSstChanged: (Boolean) -> Unit,
+ private val onAtonChanged: (Boolean) -> Unit,
+ private val onTssChanged: (Boolean) -> Unit,
private val unitPrefs: UnitPrefs,
private val onUnitsChanged: () -> Unit
) : BottomSheetDialogFragment() {
+ override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
+ val dialog = super.onCreateDialog(savedInstanceState) as BottomSheetDialog
+ dialog.setOnShowListener {
+ val sheet = dialog.findViewById<View>(com.google.android.material.R.id.design_bottom_sheet)
+ sheet?.let {
+ val behavior = BottomSheetBehavior.from(it)
+ behavior.state = BottomSheetBehavior.STATE_EXPANDED
+ behavior.skipCollapsed = true
+ it.layoutParams.height = ViewGroup.LayoutParams.MATCH_PARENT
+ }
+ }
+ return dialog
+ }
+
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View =
inflater.inflate(R.layout.layout_layer_picker_sheet, container, false)
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
- // ── Base map cards (TODO Task 7: wire up click listeners) ────────────
- // chip_group_base / chip_ocean / chip_satellite / chip_charts / chip_hybrid
- // replaced by card_ocean / card_satellite / card_charts / card_hybrid
- // Full wiring deferred to Task 7 rewrite.
-
- // ── Wind overlay switch ───────────────────────────────────────────────
- val windSwitch = view.findViewById<SwitchMaterial>(R.id.switch_wind)
- windSwitch.isChecked = manager.windEnabled
- windSwitch.setOnCheckedChangeListener { _, checked -> onWindChanged(checked) }
-
- // ── Particles switch ──────────────────────────────────────────────────
- val particlesSwitch = view.findViewById<SwitchMaterial>(R.id.switch_particles)
- particlesSwitch.isChecked = manager.particlesEnabled
- particlesSwitch.setOnCheckedChangeListener { _, checked -> onParticlesChanged(checked) }
+ bindBaseMapCards(view)
+ bindOverlayToggles(view)
+ bindUnits(view)
+ }
- // ── Past tracks switch ────────────────────────────────────────────────
- val pastTracksSwitch = view.findViewById<SwitchMaterial>(R.id.switch_past_tracks)
- pastTracksSwitch.isChecked = manager.pastTracksEnabled
- pastTracksSwitch.setOnCheckedChangeListener { _, checked -> onPastTracksChanged(checked) }
+ private fun bindBaseMapCards(view: View) {
+ val cards = listOf(R.id.card_ocean, R.id.card_satellite, R.id.card_charts, R.id.card_hybrid)
+ .map { view.findViewById<MaterialCardView>(it) }
+ val presets = listOf(MapBasePreset.OCEAN, MapBasePreset.SATELLITE, MapBasePreset.CHARTS, MapBasePreset.HYBRID)
+ val selectedStroke = dpToPx(2)
- // ── Seamarks switch ───────────────────────────────────────────────────
- val seamarksSwitch = view.findViewById<SwitchMaterial>(R.id.switch_seamarks)
- seamarksSwitch.isChecked = manager.seamarksEnabled
- seamarksSwitch.setOnCheckedChangeListener { _, checked -> onSeamarksChanged(checked) }
+ fun select(preset: MapBasePreset) {
+ cards.forEachIndexed { i, card ->
+ card.strokeWidth = if (presets[i] == preset) selectedStroke else 0
+ }
+ }
- // ── Depth contours switch ─────────────────────────────────────────────
- val depthSwitch = view.findViewById<SwitchMaterial>(R.id.switch_depth)
- depthSwitch.isChecked = manager.depthEnabled
- depthSwitch.setOnCheckedChangeListener { _, checked -> onDepthChanged(checked) }
+ select(manager.basePreset)
+ cards.forEachIndexed { i, card ->
+ card.setOnClickListener {
+ select(presets[i])
+ onBaseChanged(presets[i])
+ }
+ }
+ }
- // ── FADs switch ───────────────────────────────────────────────────────
- val fadsSwitch = view.findViewById<SwitchMaterial>(R.id.switch_fads)
- fadsSwitch.isChecked = manager.fadsEnabled
- fadsSwitch.setOnCheckedChangeListener { _, checked -> onFadsChanged(checked) }
+ private fun bindOverlayToggles(view: View) {
+ fun switch(id: Int): SwitchMaterial = view.findViewById(id)
- // ── SST switch ────────────────────────────────────────────────────────
- val sstSwitch = view.findViewById<SwitchMaterial>(R.id.switch_sst)
- sstSwitch.isChecked = manager.sstEnabled
- sstSwitch.setOnCheckedChangeListener { _, checked -> onSstChanged(checked) }
+ switch(R.id.switch_wind).apply {
+ isChecked = manager.windEnabled
+ setOnCheckedChangeListener { _, checked -> onWindChanged(checked) }
+ }
+ switch(R.id.switch_particles).apply {
+ isChecked = manager.particlesEnabled
+ setOnCheckedChangeListener { _, checked -> onParticlesChanged(checked) }
+ }
+ switch(R.id.switch_past_tracks).apply {
+ isChecked = manager.pastTracksEnabled
+ setOnCheckedChangeListener { _, checked -> onPastTracksChanged(checked) }
+ }
+ switch(R.id.switch_seamarks).apply {
+ isChecked = manager.seamarksEnabled
+ setOnCheckedChangeListener { _, checked -> onSeamarksChanged(checked) }
+ }
+ switch(R.id.switch_depth).apply {
+ isChecked = manager.depthEnabled
+ setOnCheckedChangeListener { _, checked -> onDepthChanged(checked) }
+ }
+ switch(R.id.switch_fads).apply {
+ isChecked = manager.fadsEnabled
+ setOnCheckedChangeListener { _, checked -> onFadsChanged(checked) }
+ }
+ switch(R.id.switch_sst).apply {
+ isChecked = manager.sstEnabled
+ setOnCheckedChangeListener { _, checked -> onSstChanged(checked) }
+ }
+ switch(R.id.switch_aton).apply {
+ isChecked = manager.atonEnabled
+ setOnCheckedChangeListener { _, checked -> onAtonChanged(checked) }
+ }
+ switch(R.id.switch_tss).apply {
+ isChecked = manager.tssEnabled
+ setOnCheckedChangeListener { _, checked -> onTssChanged(checked) }
+ }
+ }
- // ── Temperature chips ─────────────────────────────────────────────────
+ private fun bindUnits(view: View) {
val chipTemp = view.findViewById<ChipGroup>(R.id.chip_group_temp)
chipTemp.check(when (unitPrefs.tempUnit) {
TempUnit.FAHRENHEIT -> R.id.chip_fahrenheit
@@ -88,7 +135,6 @@ class LayerPickerSheet(
onUnitsChanged()
}
- // ── Depth chips ───────────────────────────────────────────────────────
val chipDepth = view.findViewById<ChipGroup>(R.id.chip_group_depth)
chipDepth.check(when (unitPrefs.depthUnit) {
DepthUnit.FEET -> R.id.chip_feet
@@ -103,7 +149,6 @@ class LayerPickerSheet(
onUnitsChanged()
}
- // ── Pressure chips ────────────────────────────────────────────────────
val chipPressure = view.findViewById<ChipGroup>(R.id.chip_group_pressure)
chipPressure.check(when (unitPrefs.pressureUnit) {
PressureUnit.HPA -> R.id.chip_hpa
@@ -118,7 +163,6 @@ class LayerPickerSheet(
onUnitsChanged()
}
- // ── Speed chips ───────────────────────────────────────────────────────
val chipSpeed = view.findViewById<ChipGroup>(R.id.chip_group_speed)
chipSpeed.check(when (unitPrefs.speedUnit) {
SpeedUnit.KNOTS -> R.id.chip_knots
@@ -135,4 +179,8 @@ class LayerPickerSheet(
onUnitsChanged()
}
}
+
+ private fun dpToPx(dp: Int): Int =
+ TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp.toFloat(),
+ resources.displayMetrics).toInt()
}