From 08f8764c77205cd30ad414dec4d8b52e8eacfebe Mon Sep 17 00:00:00 2001 From: ajp_anton Date: Sun, 30 Aug 2026 23:41:58 +0000 Subject: [PATCH] Improve Cards layout number controls --- .../CardsLayoutFragment.kt | 57 +++++++++++-------- .../include_cards_grid_settings_aod.xml | 12 +++- ...include_cards_grid_settings_lockscreen.xml | 12 +++- 3 files changed, 52 insertions(+), 29 deletions(-) diff --git a/app/src/main/java/se/ajpanton/notificationsmaster/CardsLayoutFragment.kt b/app/src/main/java/se/ajpanton/notificationsmaster/CardsLayoutFragment.kt index 43c03b5..6abeca6 100644 --- a/app/src/main/java/se/ajpanton/notificationsmaster/CardsLayoutFragment.kt +++ b/app/src/main/java/se/ajpanton/notificationsmaster/CardsLayoutFragment.kt @@ -2,10 +2,8 @@ package se.ajpanton.notificationsmaster import android.os.Bundle import android.view.View -import android.widget.AdapterView -import android.widget.ArrayAdapter +import android.widget.Button import android.widget.SeekBar -import android.widget.Spinner import android.widget.TextView import androidx.fragment.app.Fragment import com.google.android.material.switchmaterial.SwitchMaterial @@ -50,10 +48,10 @@ class CardsLayoutFragment : Fragment(R.layout.fragment_cards_layout) { currentSettings: (VisibilityPolicy) -> CardsGridSettings, update: (VisibilityPolicy, CardsGridSettings) -> VisibilityPolicy, ) { - controls.rows.bindNumbers(0..5, initial.maxRows) { value -> + controls.rows.bind(0..5, initial.maxRows) { value -> save(currentSettings, update) { it.copy(maxRows = value) } } - controls.icons.bindNumbers(1..15, initial.maxIconsPerRow) { value -> + controls.icons.bind(1..15, initial.maxIconsPerRow) { value -> save(currentSettings, update) { it.copy(maxIconsPerRow = value) } } controls.even.isChecked = initial.evenDistribution @@ -90,48 +88,57 @@ class CardsLayoutFragment : Fragment(R.layout.fragment_cards_layout) { } } - private fun Spinner.bindNumbers(range: IntRange, selected: Int, changed: (Int) -> Unit) { + private fun NumberStepper.bind(range: IntRange, selected: Int, changed: (Int) -> Unit) { var current = selected - adapter = ArrayAdapter( - requireContext(), - android.R.layout.simple_spinner_dropdown_item, - range.map(Int::toString), - ) - setSelection(selected - range.first, false) - onItemSelectedListener = object : AdapterView.OnItemSelectedListener { - override fun onNothingSelected(parent: AdapterView<*>?) = Unit - override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) { - val value = range.first + position - if (value != current) { - current = value - changed(value) - } + fun show() { + value.text = current.toString() + minus.isEnabled = current > range.first + plus.isEnabled = current < range.last + } + fun step(amount: Int) { + val next = (current + amount).coerceIn(range) + if (next != current) { + current = next + show() + changed(next) } } + minus.setOnClickListener { step(-1) } + plus.setOnClickListener { step(1) } + show() } private fun controls(lockscreen: Boolean): Controls { val b = binding!! return if (lockscreen) b.lockscreenSettings.run { Controls( - lockscreenMaxRows, - lockscreenMaxIcons, + NumberStepper(lockscreenMaxRowsMinus, lockscreenMaxRows, lockscreenMaxRowsPlus), + NumberStepper(lockscreenMaxIconsMinus, lockscreenMaxIcons, lockscreenMaxIconsPlus), lockscreenEvenDistribution, lockscreenLimitWidth, lockscreenIconHeight, lockscreenIconHeightValue, ) } else b.aodSettings.run { - Controls(aodMaxRows, aodMaxIcons, aodEvenDistribution, aodLimitWidth, aodIconHeight, aodIconHeightValue) + Controls( + NumberStepper(aodMaxRowsMinus, aodMaxRows, aodMaxRowsPlus), + NumberStepper(aodMaxIconsMinus, aodMaxIcons, aodMaxIconsPlus), + aodEvenDistribution, + aodLimitWidth, + aodIconHeight, + aodIconHeightValue, + ) } } private data class Controls( - val rows: Spinner, - val icons: Spinner, + val rows: NumberStepper, + val icons: NumberStepper, val even: SwitchMaterial, val limit: SwitchMaterial, val height: SeekBar, val heightValue: TextView, ) + + private data class NumberStepper(val minus: Button, val value: TextView, val plus: Button) } diff --git a/app/src/main/res/layout/include_cards_grid_settings_aod.xml b/app/src/main/res/layout/include_cards_grid_settings_aod.xml index bacc3e4..1498bbb 100644 --- a/app/src/main/res/layout/include_cards_grid_settings_aod.xml +++ b/app/src/main/res/layout/include_cards_grid_settings_aod.xml @@ -5,9 +5,17 @@ android:orientation="vertical"> - + + + + + - + + + + + diff --git a/app/src/main/res/layout/include_cards_grid_settings_lockscreen.xml b/app/src/main/res/layout/include_cards_grid_settings_lockscreen.xml index 0829ff5..5430ef3 100644 --- a/app/src/main/res/layout/include_cards_grid_settings_lockscreen.xml +++ b/app/src/main/res/layout/include_cards_grid_settings_lockscreen.xml @@ -5,9 +5,17 @@ android:orientation="vertical"> - + + + + + - + + + + +