Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit aebf9919 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "[Catalyst] Introduce IntRangeValuePreference" into main

parents d4ad87bf 016a60c9
Loading
Loading
Loading
Loading
+4 −6
Original line number Diff line number Diff line
@@ -40,6 +40,7 @@ import com.android.settingslib.graph.proto.PreferenceProto
import com.android.settingslib.graph.proto.PreferenceProto.ActionTarget
import com.android.settingslib.graph.proto.PreferenceScreenProto
import com.android.settingslib.graph.proto.TextProto
import com.android.settingslib.metadata.IntRangeValuePreference
import com.android.settingslib.metadata.PersistentPreference
import com.android.settingslib.metadata.PreferenceAvailabilityProvider
import com.android.settingslib.metadata.PreferenceHierarchy
@@ -50,7 +51,6 @@ import com.android.settingslib.metadata.PreferenceScreenMetadata
import com.android.settingslib.metadata.PreferenceScreenRegistry
import com.android.settingslib.metadata.PreferenceSummaryProvider
import com.android.settingslib.metadata.PreferenceTitleProvider
import com.android.settingslib.metadata.RangeValue
import com.android.settingslib.metadata.ReadWritePermit
import com.android.settingslib.preference.PreferenceScreenFactory
import com.android.settingslib.preference.PreferenceScreenProvider
@@ -407,22 +407,20 @@ fun PreferenceMetadata.toProto(
        ) {
            val storage = metadata.storage(context)
            value = preferenceValueProto {
                when (metadata) {
                    is RangeValue -> storage.getInt(metadata.key)?.let { intValue = it }
                    else -> {}
                }
                when (metadata.valueType) {
                    Int::class.javaObjectType -> storage.getInt(metadata.key)?.let { intValue = it }
                    Boolean::class.javaObjectType ->
                        storage.getBoolean(metadata.key)?.let { booleanValue = it }
                    Float::class.javaObjectType ->
                        storage.getFloat(metadata.key)?.let { floatValue = it }
                    else -> {}
                }
            }
        }
        if (flags.includeValueDescriptor()) {
            valueDescriptor = preferenceValueDescriptorProto {
                when (metadata) {
                    is RangeValue -> rangeValue = rangeValueProto {
                    is IntRangeValuePreference -> rangeValue = rangeValueProto {
                            min = metadata.getMinValue(context)
                            max = metadata.getMaxValue(context)
                            step = metadata.getIncrementStep(context)
+5 −2
Original line number Diff line number Diff line
@@ -26,12 +26,12 @@ import com.android.settingslib.ipc.ApiHandler
import com.android.settingslib.ipc.ApiPermissionChecker
import com.android.settingslib.ipc.IntMessageCodec
import com.android.settingslib.ipc.MessageCodec
import com.android.settingslib.metadata.IntRangeValuePreference
import com.android.settingslib.metadata.PersistentPreference
import com.android.settingslib.metadata.PreferenceAvailabilityProvider
import com.android.settingslib.metadata.PreferenceMetadata
import com.android.settingslib.metadata.PreferenceRestrictionProvider
import com.android.settingslib.metadata.PreferenceScreenRegistry
import com.android.settingslib.metadata.RangeValue
import com.android.settingslib.metadata.ReadWritePermit
import com.android.settingslib.metadata.SensitivityLevel.Companion.HIGH_SENSITIVITY
import com.android.settingslib.metadata.SensitivityLevel.Companion.UNKNOWN_SENSITIVITY
@@ -157,7 +157,10 @@ class PreferenceSetterApiHandler(
                val intValue = value.intValue
                val resultCode = metadata.checkWritePermit(intValue)
                if (resultCode != PreferenceSetterResult.OK) return resultCode
                if (metadata is RangeValue && !metadata.isValidValue(application, intValue)) {
                if (
                    metadata is IntRangeValuePreference &&
                        !metadata.isValidValue(application, intValue)
                ) {
                    return PreferenceSetterResult.INVALID_REQUEST
                }
                storage.setInt(key, intValue)
+1 −16
Original line number Diff line number Diff line
@@ -75,7 +75,7 @@ annotation class SensitivityLevel {
    }
}

/** Preference interface that has a value persisted in datastore. */
/** Preference metadata that has a value persisted in datastore. */
interface PersistentPreference<T> : PreferenceMetadata {

    /**
@@ -204,18 +204,3 @@ interface DiscreteIntValue : DiscreteValue<Int> {
    override fun getValue(context: Context, index: Int): Int =
        context.resources.getIntArray(values)[index]
}

/** Value is between a range. */
interface RangeValue : ValueDescriptor {
    /** The lower bound (inclusive) of the range. */
    fun getMinValue(context: Context): Int

    /** The upper bound (inclusive) of the range. */
    fun getMaxValue(context: Context): Int

    /** The increment step within the range. 0 means unset, which implies step size is 1. */
    fun getIncrementStep(context: Context) = 0

    override fun isValidValue(context: Context, index: Int) =
        index in getMinValue(context)..getMaxValue(context)
}
+19 −0
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.settingslib.metadata

import android.content.Context
import androidx.annotation.StringRes

/** A persistent preference that has a boolean value. */
@@ -30,6 +31,24 @@ interface FloatValuePreference : PersistentPreference<Float> {
        get() = Float::class.javaObjectType
}

/** A persistent preference that has a int value between a range. */
interface IntRangeValuePreference : PersistentPreference<Int>, ValueDescriptor {
    override val valueType: Class<Int>
        get() = Int::class.javaObjectType

    /** The lower bound (inclusive) of the range. */
    fun getMinValue(context: Context): Int

    /** The upper bound (inclusive) of the range. */
    fun getMaxValue(context: Context): Int

    /** The increment step within the range. 0 means unset, which implies step size is 1. */
    fun getIncrementStep(context: Context) = 0

    override fun isValidValue(context: Context, index: Int) =
        index in getMinValue(context)..getMaxValue(context)
}

/** A preference that provides a two-state toggleable option. */
open class SwitchPreference
@JvmOverloads
+2 −2
Original line number Diff line number Diff line
@@ -25,10 +25,10 @@ import androidx.preference.PreferenceScreen
import androidx.preference.SeekBarPreference
import com.android.settingslib.metadata.DiscreteIntValue
import com.android.settingslib.metadata.DiscreteValue
import com.android.settingslib.metadata.IntRangeValuePreference
import com.android.settingslib.metadata.PreferenceAvailabilityProvider
import com.android.settingslib.metadata.PreferenceMetadata
import com.android.settingslib.metadata.PreferenceScreenMetadata
import com.android.settingslib.metadata.RangeValue

/** Binding of preference widget and preference metadata. */
interface PreferenceBinding {
@@ -101,7 +101,7 @@ interface PreferenceBinding {
                } else {
                    preference.setEntryValues(values)
                }
            } else if (preference is SeekBarPreference && this is RangeValue) {
            } else if (preference is SeekBarPreference && this is IntRangeValuePreference) {
                preference.min = getMinValue(context)
                preference.max = getMaxValue(context)
                preference.seekBarIncrement = getIncrementStep(context)