summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Fan Wu <cechkahn@google.com> 2025-01-09 14:33:07 +0800
committer Fan Wu <cechkahn@google.com> 2025-01-14 23:31:36 -0800
commitc80b4e9020175e62632532cd1a2c10e5ef974a54 (patch)
tree17cdb3cdf91e053a6f06c95e81985d2ea858897e
parent9a6302eb336ee6193a5b212958c7d09eb2728506 (diff)
[Catalyst] Add BooleanPreference
Bug: 388167302 Test: atest Flag: EXEMPT refactor Change-Id: Icd1735c77e269cd68372173a7e66ad2da0d7750d
-rw-r--r--packages/SettingsLib/Graph/src/com/android/settingslib/graph/PreferenceGraphBuilder.kt12
-rw-r--r--packages/SettingsLib/Graph/src/com/android/settingslib/graph/PreferenceSetterApi.kt5
-rw-r--r--packages/SettingsLib/Metadata/src/com/android/settingslib/metadata/PersistentPreference.kt23
-rw-r--r--packages/SettingsLib/Metadata/src/com/android/settingslib/metadata/PreferenceTypes.kt2
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