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

Commit c61bc369 authored by Fan Wu's avatar Fan Wu Committed by Android (Google) Code Review
Browse files

Merge "Add MainSwitchPreference support for Catalyst" into main

parents fc76d6cc eafbae37
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -38,3 +38,11 @@ constructor(
    @StringRes override val title: Int = 0,
    @StringRes override val summary: Int = 0,
) : TwoStatePreference

/** A preference that provides a two-state toggleable option that can be used as a main switch. */
open class MainSwitchPreference
@JvmOverloads
constructor(
    override val key: String,
    @StringRes override val title: Int = 0,
) : TwoStatePreference
 No newline at end of file
+1 −0
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@ android_library {
    static_libs: [
        "SettingsLibDataStore",
        "SettingsLibMetadata",
        "SettingsLibMainSwitchPreference",
        "androidx.annotation_annotation",
        "androidx.preference_preference",
        "guava",
+2 −0
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.settingslib.preference

import com.android.settingslib.metadata.MainSwitchPreference
import com.android.settingslib.metadata.PreferenceGroup
import com.android.settingslib.metadata.PreferenceMetadata
import com.android.settingslib.metadata.SwitchPreference
@@ -36,6 +37,7 @@ object DefaultPreferenceBindingFactory : PreferenceBindingFactory {
                is SwitchPreference -> SwitchPreferenceBinding.INSTANCE
                is PreferenceGroup -> PreferenceGroupBinding.INSTANCE
                is PreferenceScreenCreator -> PreferenceScreenBinding.INSTANCE
                is MainSwitchPreference -> MainSwitchPreferenceBinding.INSTANCE
                else -> DefaultPreferenceBinding
            }
}
+21 −5
Original line number Diff line number Diff line
@@ -21,11 +21,13 @@ import androidx.preference.Preference
import androidx.preference.PreferenceCategory
import androidx.preference.PreferenceScreen
import androidx.preference.SwitchPreferenceCompat
import androidx.preference.TwoStatePreference
import com.android.settingslib.metadata.EXTRA_BINDING_SCREEN_KEY
import com.android.settingslib.metadata.PersistentPreference
import com.android.settingslib.metadata.PreferenceMetadata
import com.android.settingslib.metadata.PreferenceScreenMetadata
import com.android.settingslib.metadata.PreferenceTitleProvider
import com.android.settingslib.widget.MainSwitchPreference

/** Binding of preference group associated with [PreferenceCategory]. */
interface PreferenceScreenBinding : PreferenceBinding {
@@ -64,23 +66,37 @@ interface PreferenceGroupBinding : PreferenceBinding {
    }
}

/** A boolean value type preference associated with [SwitchPreferenceCompat]. */
interface SwitchPreferenceBinding : PreferenceBinding {

    override fun createWidget(context: Context): Preference = SwitchPreferenceCompat(context)
/** A boolean value type preference associated with the abstract [TwoStatePreference]. */
interface TwoStatePreferenceBinding : PreferenceBinding {

    override fun bind(preference: Preference, metadata: PreferenceMetadata) {
        super.bind(preference, metadata)
        (metadata as? PersistentPreference<*>)
            ?.storage(preference.context)
            ?.getValue(metadata.key, Boolean::class.javaObjectType)
            ?.let { (preference as SwitchPreferenceCompat).isChecked = it }
            ?.let { (preference as TwoStatePreference).isChecked = it }
    }
}

/** A boolean value type preference associated with [SwitchPreferenceCompat]. */
interface SwitchPreferenceBinding : TwoStatePreferenceBinding {

    override fun createWidget(context: Context): Preference = SwitchPreferenceCompat(context)

    companion object {
        @JvmStatic val INSTANCE = object : SwitchPreferenceBinding {}
    }
}

/** A boolean value type preference associated with [MainSwitchPreference]. */
interface MainSwitchPreferenceBinding : TwoStatePreferenceBinding {

    override fun createWidget(context: Context): Preference = MainSwitchPreference(context)

    companion object {
        @JvmStatic val INSTANCE = object : MainSwitchPreferenceBinding {}
    }
}

/** Default [PreferenceBinding] for [Preference]. */
object DefaultPreferenceBinding : PreferenceBinding