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