Merge "[Catalyst] Introduce IntRangeValuePreference" into main
diff --git a/packages/SettingsLib/Graph/src/com/android/settingslib/graph/PreferenceGraphBuilder.kt b/packages/SettingsLib/Graph/src/com/android/settingslib/graph/PreferenceGraphBuilder.kt
index ce66a36..c0d2449 100644
--- a/packages/SettingsLib/Graph/src/com/android/settingslib/graph/PreferenceGraphBuilder.kt
+++ b/packages/SettingsLib/Graph/src/com/android/settingslib/graph/PreferenceGraphBuilder.kt
@@ -40,6 +40,7 @@
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.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 @@
) {
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)
diff --git a/packages/SettingsLib/Graph/src/com/android/settingslib/graph/PreferenceSetterApi.kt b/packages/SettingsLib/Graph/src/com/android/settingslib/graph/PreferenceSetterApi.kt
index 4719064..728055c 100644
--- a/packages/SettingsLib/Graph/src/com/android/settingslib/graph/PreferenceSetterApi.kt
+++ b/packages/SettingsLib/Graph/src/com/android/settingslib/graph/PreferenceSetterApi.kt
@@ -26,12 +26,12 @@
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 @@
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)
diff --git a/packages/SettingsLib/Metadata/src/com/android/settingslib/metadata/PersistentPreference.kt b/packages/SettingsLib/Metadata/src/com/android/settingslib/metadata/PersistentPreference.kt
index be705b5..63f1050 100644
--- a/packages/SettingsLib/Metadata/src/com/android/settingslib/metadata/PersistentPreference.kt
+++ b/packages/SettingsLib/Metadata/src/com/android/settingslib/metadata/PersistentPreference.kt
@@ -75,7 +75,7 @@
}
}
-/** 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 @@
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)
-}
diff --git a/packages/SettingsLib/Metadata/src/com/android/settingslib/metadata/PreferenceTypes.kt b/packages/SettingsLib/Metadata/src/com/android/settingslib/metadata/PreferenceTypes.kt
index fecf3e5..edd45d3 100644
--- a/packages/SettingsLib/Metadata/src/com/android/settingslib/metadata/PreferenceTypes.kt
+++ b/packages/SettingsLib/Metadata/src/com/android/settingslib/metadata/PreferenceTypes.kt
@@ -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 @@
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
diff --git a/packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceBinding.kt b/packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceBinding.kt
index c61c6a5..59141c9 100644
--- a/packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceBinding.kt
+++ b/packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceBinding.kt
@@ -25,10 +25,10 @@
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 @@
} 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)