Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3902e53d authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "[Catalyst] Add BooleanPreference" into main

parents 894c2794 c80b4e90
Loading
Loading
Loading
Loading
+9 −3
Original line number Diff line number Diff line
@@ -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
                    }
                }
            }
        }
    }
+3 −2
Original line number Diff line number Diff line
@@ -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
+14 −9
Original line number Diff line number Diff line
@@ -78,6 +78,14 @@ annotation class SensitivityLevel {
/** Preference interface that has a value persisted in datastore. */
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.
     *
@@ -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>
+1 −1
Original line number Diff line number Diff line
@@ -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