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

Commit 73bf9717 authored by Jacky Wang's avatar Jacky Wang
Browse files

[Catalyst] Add PreferenceMetadata.dependencies

Bug: 332201912
Flag: EXEMPT library
Test: manual
Change-Id: Iaab1972a9631b0c2f96802918cee5b6853af5ebd
parent daea3b48
Loading
Loading
Loading
Loading
+5 −16
Original line number Diff line number Diff line
@@ -107,20 +107,11 @@ interface PreferenceMetadata {
     *
     * UI framework normally does not allow user to interact with the preference widget when it is
     * disabled.
     *
     * [dependencyOfEnabledState] is provided to support dependency, the [shouldDisableDependents]
     * value of dependent preference is used to decide enabled state.
     */
    fun isEnabled(context: Context): Boolean {
        val dependency = dependencyOfEnabledState(context) ?: return true
        return !dependency.shouldDisableDependents(context)
    }
    fun isEnabled(context: Context): Boolean = true

    /** Returns the key of depended preference to decide the enabled state. */
    fun dependencyOfEnabledState(context: Context): PreferenceMetadata? = null

    /** Returns whether this preference's dependents should be disabled. */
    fun shouldDisableDependents(context: Context): Boolean = !isEnabled(context)
    /** Returns the keys of depended preferences. */
    fun dependencies(context: Context): Array<String> = arrayOf()

    /** Returns if the preference is persistent in datastore. */
    fun isPersistent(context: Context): Boolean = this is PersistentPreference<*>
@@ -174,13 +165,11 @@ interface PreferenceMetadata {
}

/** Metadata of preference group. */
@AnyThread
interface PreferenceGroup : PreferenceMetadata
@AnyThread interface PreferenceGroup : PreferenceMetadata

/** Metadata of preference category. */
@AnyThread
open class PreferenceCategory(override val key: String, override val title: Int) :
    PreferenceGroup
open class PreferenceCategory(override val key: String, override val title: Int) : PreferenceGroup

/** Metadata of preference screen. */
@AnyThread
+2 −10
Original line number Diff line number Diff line
@@ -16,18 +16,10 @@

package com.android.settingslib.metadata

import android.content.Context
import androidx.annotation.StringRes

/**
 * Common base class for preferences that have two selectable states, save a boolean value, and may
 * have dependent preferences that are enabled/disabled based on the current state.
 */
interface TwoStatePreference : PreferenceMetadata, PersistentPreference<Boolean>, BooleanValue {

    override fun shouldDisableDependents(context: Context) =
        storage(context).getBoolean(key) != true || super.shouldDisableDependents(context)
}
/** Common base class for preferences that have two selectable states and save a boolean value. */
interface TwoStatePreference : PreferenceMetadata, PersistentPreference<Boolean>, BooleanValue

/** A preference that provides a two-state toggleable option. */
open class SwitchPreference
+5 −5
Original line number Diff line number Diff line
@@ -97,14 +97,14 @@ class PreferenceScreenBindingHelper(
        val preferencesBuilder = ImmutableMap.builder<String, PreferenceHierarchyNode>()
        val dependenciesBuilder = ImmutableMultimap.builder<String, String>()
        val lifecycleAwarePreferences = mutableListOf<PreferenceLifecycleProvider>()
        fun PreferenceMetadata.addDependency(dependency: PreferenceMetadata) {
            dependenciesBuilder.put(key, dependency.key)
        }

        fun PreferenceHierarchyNode.addNode() {
            metadata.let {
                preferencesBuilder.put(it.key, this)
                it.dependencyOfEnabledState(context)?.addDependency(it)
                val key = it.key
                preferencesBuilder.put(key, this)
                for (dependency in it.dependencies(context)) {
                    dependenciesBuilder.put(dependency, key)
                }
                if (it is PreferenceLifecycleProvider) lifecycleAwarePreferences.add(it)
            }
        }