diff options
author | 2025-01-17 06:38:06 +0000 | |
---|---|---|
committer | 2025-01-19 19:20:31 -0800 | |
commit | 016a60c966cd118b873d902859f852ef8a88a307 (patch) | |
tree | 49bafb879869dd85492c8ba2ba406ddc7e612224 | |
parent | 60c19d645631c46c165f1928f7c02065a22219fc (diff) |
[Catalyst] Introduce IntRangeValuePreference
Bug: 388167302
Test: atest and manual
Flag: EXEMPT refactor
Change-Id: I66a9d7d2a8078b00b38f761af0e21fbb2e325c68
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) |