diff options
author | 2025-01-09 14:33:07 +0800 | |
---|---|---|
committer | 2025-01-14 23:31:36 -0800 | |
commit | c80b4e9020175e62632532cd1a2c10e5ef974a54 (patch) | |
tree | 17cdb3cdf91e053a6f06c95e81985d2ea858897e | |
parent | 9a6302eb336ee6193a5b212958c7d09eb2728506 (diff) |
[Catalyst] Add BooleanPreference
Bug: 388167302
Test: atest
Flag: EXEMPT refactor
Change-Id: Icd1735c77e269cd68372173a7e66ad2da0d7750d
4 files changed, 27 insertions, 15 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 f001fad69dc6..8b29b0044eea 100644 --- a/packages/SettingsLib/Graph/src/com/android/settingslib/graph/PreferenceGraphBuilder.kt +++ b/packages/SettingsLib/Graph/src/com/android/settingslib/graph/PreferenceGraphBuilder.kt @@ -40,7 +40,6 @@ 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.BooleanValue import com.android.settingslib.metadata.FloatPersistentPreference import com.android.settingslib.metadata.PersistentPreference import com.android.settingslib.metadata.PreferenceAvailabilityProvider @@ -410,18 +409,20 @@ fun PreferenceMetadata.toProto( val storage = metadata.storage(context) value = preferenceValueProto { when (metadata) { - is BooleanValue -> storage.getBoolean(metadata.key)?.let { booleanValue = it } is RangeValue -> storage.getInt(metadata.key)?.let { intValue = it } is FloatPersistentPreference -> storage.getFloat(metadata.key)?.let { floatValue = it } else -> {} } + when (metadata.valueType) { + Boolean::class.javaObjectType -> + storage.getBoolean(metadata.key)?.let { booleanValue = it } + } } } if (flags.includeValueDescriptor()) { valueDescriptor = preferenceValueDescriptorProto { when (metadata) { - is BooleanValue -> booleanType = true is RangeValue -> rangeValue = rangeValueProto { min = metadata.getMinValue(context) max = metadata.getMaxValue(context) @@ -430,6 +431,11 @@ fun PreferenceMetadata.toProto( is FloatPersistentPreference -> floatType = true else -> {} } + if (metadata is PersistentPreference<*>) { + when (metadata.valueType) { + Boolean::class.javaObjectType -> booleanType = true + } + } } } } 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 ea795542a5f6..47190648810a 100644 --- a/packages/SettingsLib/Graph/src/com/android/settingslib/graph/PreferenceSetterApi.kt +++ b/packages/SettingsLib/Graph/src/com/android/settingslib/graph/PreferenceSetterApi.kt @@ -26,7 +26,6 @@ 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.BooleanValue import com.android.settingslib.metadata.PersistentPreference import com.android.settingslib.metadata.PreferenceAvailabilityProvider import com.android.settingslib.metadata.PreferenceMetadata @@ -146,7 +145,9 @@ class PreferenceSetterApiHandler( val value = request.value try { if (value.hasBooleanValue()) { - if (metadata !is BooleanValue) return PreferenceSetterResult.INVALID_REQUEST + if (metadata.valueType != Boolean::class.javaObjectType) { + return PreferenceSetterResult.INVALID_REQUEST + } val booleanValue = value.booleanValue val resultCode = metadata.checkWritePermit(booleanValue) if (resultCode != PreferenceSetterResult.OK) return resultCode 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 83725aaec377..4cc65815a78a 100644 --- a/packages/SettingsLib/Metadata/src/com/android/settingslib/metadata/PersistentPreference.kt +++ b/packages/SettingsLib/Metadata/src/com/android/settingslib/metadata/PersistentPreference.kt @@ -79,6 +79,14 @@ annotation class SensitivityLevel { interface PersistentPreference<T> { /** + * The value type the preference is associated with. + * + * TODO(b/388167302): Remove the default implementation once all subclasses are migrated. + */ + val valueType: Class<T>? + get() = null + + /** * Returns the key-value storage of the preference. * * The default implementation returns the storage provided by @@ -143,15 +151,6 @@ sealed interface ValueDescriptor { fun isValidValue(context: Context, index: Int): Boolean } -/** - * A boolean type value. - * - * A zero value means `False`, otherwise it is `True`. - */ -interface BooleanValue : ValueDescriptor { - override fun isValidValue(context: Context, index: Int) = true -} - /** Value falls into a given array. */ interface DiscreteValue<T> : ValueDescriptor { @get:ArrayRes val values: Int @@ -221,5 +220,11 @@ interface RangeValue : ValueDescriptor { index in getMinValue(context)..getMaxValue(context) } +/** A persistent preference that has a boolean value. */ +interface BooleanPreference : PersistentPreference<Boolean> { + override val valueType: Class<Boolean> + get() = Boolean::class.javaObjectType +} + /** A persistent preference that has a float value. */ interface FloatPersistentPreference : PersistentPreference<Float> 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 87bd261bf4bd..b79a0c4f6381 100644 --- a/packages/SettingsLib/Metadata/src/com/android/settingslib/metadata/PreferenceTypes.kt +++ b/packages/SettingsLib/Metadata/src/com/android/settingslib/metadata/PreferenceTypes.kt @@ -19,7 +19,7 @@ package com.android.settingslib.metadata import androidx.annotation.StringRes /** Common base class for preferences that have two selectable states and save a boolean value. */ -interface TwoStatePreference : PreferenceMetadata, PersistentPreference<Boolean>, BooleanValue +interface TwoStatePreference : PreferenceMetadata, BooleanPreference /** A preference that provides a two-state toggleable option. */ open class SwitchPreference |