summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Fan Wu <cechkahn@google.com> 2025-01-17 06:38:06 +0000
committer Fan Wu <cechkahn@google.com> 2025-01-19 19:20:31 -0800
commit016a60c966cd118b873d902859f852ef8a88a307 (patch)
tree49bafb879869dd85492c8ba2ba406ddc7e612224
parent60c19d645631c46c165f1928f7c02065a22219fc (diff)
[Catalyst] Introduce IntRangeValuePreference
Bug: 388167302 Test: atest and manual Flag: EXEMPT refactor Change-Id: I66a9d7d2a8078b00b38f761af0e21fbb2e325c68
-rw-r--r--packages/SettingsLib/Graph/src/com/android/settingslib/graph/PreferenceGraphBuilder.kt10
-rw-r--r--packages/SettingsLib/Graph/src/com/android/settingslib/graph/PreferenceSetterApi.kt7
-rw-r--r--packages/SettingsLib/Metadata/src/com/android/settingslib/metadata/PersistentPreference.kt17
-rw-r--r--packages/SettingsLib/Metadata/src/com/android/settingslib/metadata/PreferenceTypes.kt19
-rw-r--r--packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceBinding.kt4
5 files changed, 31 insertions, 26 deletions
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 ce66a360a99f..c0d244989044 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
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)
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 47190648810a..728055c2f837 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.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)
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 be705b583974..63f1050df94e 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 @@ 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)
-}
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 fecf3e50800a..edd45d38f14a 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 @@ 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
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 c61c6a5c75fa..59141c99e587 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.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)