From 51cf08676f87b5989aa4a3819bcd6d7c71caf6d4 Mon Sep 17 00:00:00 2001 From: Bnyro Date: Fri, 25 Nov 2022 18:36:03 +0100 Subject: [PATCH] improve slider dialog accessability --- .../libretube/ui/views/SliderPreference.kt | 63 ++++++++++++++++--- app/src/main/res/drawable/ic_add.xml | 2 +- app/src/main/res/drawable/ic_remove.xml | 10 +++ app/src/main/res/layout/dialog_slider.xml | 52 ++++++++++++--- 4 files changed, 107 insertions(+), 20 deletions(-) create mode 100644 app/src/main/res/drawable/ic_remove.xml diff --git a/app/src/main/java/com/github/libretube/ui/views/SliderPreference.kt b/app/src/main/java/com/github/libretube/ui/views/SliderPreference.kt index 239df8dd6..a9ff71664 100644 --- a/app/src/main/java/com/github/libretube/ui/views/SliderPreference.kt +++ b/app/src/main/java/com/github/libretube/ui/views/SliderPreference.kt @@ -6,6 +6,7 @@ import android.view.LayoutInflater import androidx.preference.Preference import com.github.libretube.R import com.github.libretube.databinding.DialogSliderBinding +import com.github.libretube.extensions.round import com.github.libretube.util.PreferenceHelper import com.google.android.material.dialog.MaterialAlertDialogBuilder @@ -20,11 +21,33 @@ class SliderPreference( attributeSet ) { private lateinit var sliderBinding: DialogSliderBinding + private var defValue = 0f - val typedArray = context.obtainStyledAttributes(attributeSet, R.styleable.SliderPreference) + private var prefValue: Float + get() = PreferenceHelper.getString( + key, + defValue.toString() + ).toFloat() + set(value) { + PreferenceHelper.putString( + key, + value.toString() + ) + } + + private val typedArray = context.obtainStyledAttributes(attributeSet, R.styleable.SliderPreference) + + override fun onAttached() { + super.onAttached() + + defValue = typedArray.getFloat(R.styleable.SliderPreference_defValue, 1.0f) + } + + override fun getSummary(): CharSequence { + return prefValue.toString() + } override fun onClick() { - val defValue = typedArray.getFloat(R.styleable.SliderPreference_defValue, 1.0f) val valueFrom = typedArray.getFloat(R.styleable.SliderPreference_valueFrom, 1.0f) val valueTo = typedArray.getFloat(R.styleable.SliderPreference_valueTo, 10.0f) val stepSize = typedArray.getFloat(R.styleable.SliderPreference_stepSize, 1.0f) @@ -34,26 +57,46 @@ class SliderPreference( ) sliderBinding.slider.apply { - value = PreferenceHelper.getString( - key, - defValue.toString() - ).toFloat() + this.value = prefValue this.valueFrom = valueFrom this.valueTo = valueTo this.stepSize = stepSize } + sliderBinding.minus.setOnClickListener { + sliderBinding.slider.value = maxOf(valueFrom, sliderBinding.slider.value - stepSize) + } + + sliderBinding.plus.setOnClickListener { + sliderBinding.slider.value = minOf(valueTo, sliderBinding.slider.value + stepSize) + } + + sliderBinding.slider.addOnChangeListener { slider, _, _ -> + listOf(sliderBinding.minus, sliderBinding.plus).forEach { + it.alpha = 1f + } + when (slider.value) { + slider.valueFrom -> sliderBinding.minus.alpha = 0.5f + slider.valueTo -> sliderBinding.plus.alpha = 0.5f + } + updateCurrentValueText() + } + + updateCurrentValueText() + MaterialAlertDialogBuilder(context) .setTitle(title) .setView(sliderBinding.root) .setNegativeButton(R.string.cancel, null) .setPositiveButton(R.string.okay) { _, _ -> - PreferenceHelper.putString( - key, - sliderBinding.slider.value.toString() - ) + prefValue = sliderBinding.slider.value + summary = sliderBinding.slider.value.toString() } .show() super.onClick() } + + private fun updateCurrentValueText() { + sliderBinding.currentValue.text = sliderBinding.slider.value.round(2).toString() + } } diff --git a/app/src/main/res/drawable/ic_add.xml b/app/src/main/res/drawable/ic_add.xml index 9460f4eaa..0553ae300 100644 --- a/app/src/main/res/drawable/ic_add.xml +++ b/app/src/main/res/drawable/ic_add.xml @@ -1,7 +1,7 @@ + + diff --git a/app/src/main/res/layout/dialog_slider.xml b/app/src/main/res/layout/dialog_slider.xml index 2a79fc766..491afe1ba 100644 --- a/app/src/main/res/layout/dialog_slider.xml +++ b/app/src/main/res/layout/dialog_slider.xml @@ -1,17 +1,51 @@ + android:layout_height="wrap_content" + android:orientation="vertical" + android:paddingHorizontal="10dp" + android:paddingVertical="10dp"> - + + + android:orientation="horizontal"> + + + + + + + + \ No newline at end of file