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

Commit eafbae37 authored by Fan Wu's avatar Fan Wu
Browse files

Add MainSwitchPreference support for Catalyst

Bug: 374860556
Test: atest
Flag: EXEMPT framework update
Change-Id: I6b858cf8436b51bae95bd101eabf2c70479e3565
parent 7027dce7
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