From 5ad285bd15c2cb03fb80b149ec5d431e808d76de Mon Sep 17 00:00:00 2001 From: Patryk Michalik Date: Wed, 3 Mar 2021 12:38:27 +0100 Subject: [PATCH] Continue work on `CustomSeekBarPreference` --- .../res/layout/custom_seek_bar_preference.xml | 42 +++++++++++++++++++ lawnchair/res/values/attrs.xml | 2 + lawnchair/res/xml/dock_settings.xml | 4 +- .../ui/preferences/CustomSeekBarPreference.kt | 42 +++++++++++++++++-- 4 files changed, 85 insertions(+), 5 deletions(-) create mode 100644 lawnchair/res/layout/custom_seek_bar_preference.xml diff --git a/lawnchair/res/layout/custom_seek_bar_preference.xml b/lawnchair/res/layout/custom_seek_bar_preference.xml new file mode 100644 index 0000000000..9f640616ac --- /dev/null +++ b/lawnchair/res/layout/custom_seek_bar_preference.xml @@ -0,0 +1,42 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/lawnchair/res/values/attrs.xml b/lawnchair/res/values/attrs.xml index d435b24dd7..82ebfa7ed9 100644 --- a/lawnchair/res/values/attrs.xml +++ b/lawnchair/res/values/attrs.xml @@ -3,5 +3,7 @@ + + \ No newline at end of file diff --git a/lawnchair/res/xml/dock_settings.xml b/lawnchair/res/xml/dock_settings.xml index 737b427422..781cb64e0a 100644 --- a/lawnchair/res/xml/dock_settings.xml +++ b/lawnchair/res/xml/dock_settings.xml @@ -23,7 +23,9 @@ android:key="pref_dock_label_size" android:title="Label Size" app:showSeekBarValue="true" + lawnchair:snapEvery="10" lawnchair:minValue="50" - lawnchair:maxValue="150" /> + lawnchair:maxValue="150" + lawnchair:asPercentages="true" /> \ No newline at end of file diff --git a/lawnchair/src/ch/deletescape/lawnchair/settings/ui/preferences/CustomSeekBarPreference.kt b/lawnchair/src/ch/deletescape/lawnchair/settings/ui/preferences/CustomSeekBarPreference.kt index 2fef6a9ad5..75b559cb28 100644 --- a/lawnchair/src/ch/deletescape/lawnchair/settings/ui/preferences/CustomSeekBarPreference.kt +++ b/lawnchair/src/ch/deletescape/lawnchair/settings/ui/preferences/CustomSeekBarPreference.kt @@ -1,22 +1,35 @@ package ch.deletescape.lawnchair.settings.ui.preferences import android.content.Context +import android.os.Build import android.util.AttributeSet import android.util.Log +import android.widget.SeekBar +import android.widget.TextView +import androidx.annotation.RequiresApi import androidx.preference.Preference import androidx.preference.PreferenceViewHolder import androidx.preference.SeekBarPreference import com.android.launcher3.R -class CustomSeekBarPreference(context: Context, attrs: AttributeSet? = null) : SeekBarPreference(context, attrs), Preference.OnPreferenceChangeListener { +class CustomSeekBarPreference(context: Context, attrs: AttributeSet? = null) : Preference(context, attrs), Preference.OnPreferenceChangeListener { private val minValue: Int private val maxValue: Int + private val snapEvery: Int + private val asPercentages: Boolean + + private var displayedValue: Int = 0 + private var realValue: Double = 0.0 init { + widgetLayoutResource = R.layout.custom_seek_bar_preference + layoutResource = R.layout.custom_seek_bar_preference context.obtainStyledAttributes(attrs, R.styleable.CustomSeekBarPreference).apply { - minValue = this.getInt(R.styleable.CustomSeekBarPreference_minValue, 10) + minValue = this.getInt(R.styleable.CustomSeekBarPreference_minValue, 0) maxValue = this.getInt(R.styleable.CustomSeekBarPreference_maxValue, 100) + snapEvery = this.getInt(R.styleable.CustomSeekBarPreference_snapEvery, 1) + asPercentages = this.getBoolean(R.styleable.CustomSeekBarPreference_asPercentages, false) recycle() } } @@ -24,11 +37,32 @@ class CustomSeekBarPreference(context: Context, attrs: AttributeSet? = null) : S override fun onBindViewHolder(view: PreferenceViewHolder?) { super.onBindViewHolder(view) onPreferenceChangeListener = this - Log.i(null, "$minValue") + + val seekBar: SeekBar = view?.findViewById(R.id.seek_bar) as SeekBar + val valueView: TextView = view.findViewById(R.id.value_view) as TextView + + seekBar.max = (maxValue - minValue) / snapEvery + + seekBar.setOnSeekBarChangeListener(object: SeekBar.OnSeekBarChangeListener { + override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) { + displayedValue = progress * snapEvery + minValue + realValue = if (asPercentages) displayedValue.toDouble() / 100 else displayedValue.toDouble() + valueView.text = if (asPercentages) "$displayedValue%" else "$displayedValue" + } + + override fun onStartTrackingTouch(seekBar: SeekBar?) { + + } + + override fun onStopTrackingTouch(seekBar: SeekBar?) { + + } + + }) } override fun onPreferenceChange(preference: Preference?, newValue: Any?): Boolean { - TODO("Not yet implemented") + return true } } \ No newline at end of file