@@ -24,6 +24,7 @@ import androidx.core.widget.ImageViewCompat
2424import androidx.databinding.BindingAdapter
2525import androidx.databinding.InverseBindingAdapter
2626import androidx.databinding.InverseBindingListener
27+ import androidx.databinding.InverseMethod
2728import androidx.interpolator.view.animation.FastOutSlowInInterpolator
2829import androidx.recyclerview.widget.DividerItemDecoration
2930import androidx.recyclerview.widget.GridLayoutManager
@@ -33,9 +34,11 @@ import androidx.recyclerview.widget.StaggeredGridLayoutManager
3334import com.google.android.material.button.MaterialButton
3435import com.google.android.material.card.MaterialCardView
3536import com.google.android.material.chip.Chip
37+ import com.google.android.material.slider.Slider
3638import com.google.android.material.textfield.TextInputLayout
3739import com.topjohnwu.magisk.R
3840import com.topjohnwu.magisk.core.di.ServiceLocator
41+ import com.topjohnwu.magisk.core.model.su.SuPolicy
3942import com.topjohnwu.magisk.utils.TextHolder
4043import com.topjohnwu.superuser.internal.UiThreadHandler
4144import com.topjohnwu.widget.IndeterminateCheckBox
@@ -306,3 +309,38 @@ fun TextView.setText(text: TextHolder) {
306309fun Spinner.setAdapter (items : Array <Any >, layoutRes : Int ) {
307310 adapter = ArrayAdapter (context, layoutRes, items)
308311}
312+
313+ @BindingAdapter(" labelFormatter" )
314+ fun Slider.setLabelFormatter (formatter : (Float ) -> Int ) {
315+ setLabelFormatter { value -> resources.getString(formatter(value)) }
316+ }
317+
318+ @InverseBindingAdapter(attribute = " android:value" )
319+ fun Slider.getValueBinding () = value
320+
321+ @BindingAdapter(" android:valueAttrChanged" )
322+ fun Slider.setListener (attrChange : InverseBindingListener ) {
323+ addOnSliderTouchListener(object : Slider .OnSliderTouchListener {
324+ override fun onStartTrackingTouch (slider : Slider ) = Unit
325+ override fun onStopTrackingTouch (slider : Slider ) = attrChange.onChange()
326+ })
327+ }
328+
329+ @InverseMethod(" sliderValueToPolicy" )
330+ fun policyToSliderValue (policy : Int ): Float {
331+ return when (policy) {
332+ SuPolicy .DENY -> 1f
333+ SuPolicy .RESTRICT -> 2f
334+ SuPolicy .ALLOW -> 3f
335+ else -> 1f
336+ }
337+ }
338+
339+ fun sliderValueToPolicy (value : Float ): Int {
340+ return when (value) {
341+ 1f -> SuPolicy .DENY
342+ 2f -> SuPolicy .RESTRICT
343+ 3f -> SuPolicy .ALLOW
344+ else -> SuPolicy .DENY
345+ }
346+ }
0 commit comments