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

Commit 29b84978 authored by Jacky Wang's avatar Jacky Wang
Browse files

[Catalyst] Allow specify default PreferenceBindingFactory

Bug: 377600992
Flag: EXEMPT library
Test: manual
Change-Id: I535ed305f756a54aac16f0cb7045d46eebfd933c
parent d700176d
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -115,7 +115,7 @@ interface PreferenceScreenCreator : PreferenceScreenMetadata, PreferenceScreenPr
    fun isFlagEnabled(context: Context): Boolean = true

    val preferenceBindingFactory: PreferenceBindingFactory
        get() = DefaultPreferenceBindingFactory
        get() = PreferenceBindingFactory.defaultFactory

    override fun createPreferenceScreen(factory: PreferenceScreenFactory) =
        factory.getOrCreatePreferenceScreen().apply {
+8 −2
Original line number Diff line number Diff line
@@ -45,10 +45,15 @@ interface PreferenceBindingFactory {

    /** Returns the [PreferenceBinding] associated with the [PreferenceMetadata]. */
    fun getPreferenceBinding(metadata: PreferenceMetadata): PreferenceBinding?

    companion object {
        /** Default preference binding factory. */
        @JvmStatic var defaultFactory: PreferenceBindingFactory = DefaultPreferenceBindingFactory()
    }
}

/** Default [PreferenceBindingFactory]. */
object DefaultPreferenceBindingFactory : PreferenceBindingFactory {
open class DefaultPreferenceBindingFactory : PreferenceBindingFactory {

    override fun getPreferenceBinding(metadata: PreferenceMetadata) =
        metadata as? PreferenceBinding
@@ -66,5 +71,6 @@ class KeyedPreferenceBindingFactory(private val bindings: Map<String, Preference
    PreferenceBindingFactory {

    override fun getPreferenceBinding(metadata: PreferenceMetadata) =
        bindings[metadata.key] ?: DefaultPreferenceBindingFactory.getPreferenceBinding(metadata)
        bindings[metadata.key]
            ?: PreferenceBindingFactory.defaultFactory.getPreferenceBinding(metadata)
}
+1 −1
Original line number Diff line number Diff line
@@ -25,7 +25,7 @@ import com.android.settingslib.metadata.PreferenceMetadata
/** Creates [Preference] widget and binds with metadata. */
@VisibleForTesting
fun <P : Preference> PreferenceMetadata.createAndBindWidget(context: Context): P {
    val binding = DefaultPreferenceBindingFactory.getPreferenceBinding(this)
    val binding = PreferenceBindingFactory.defaultFactory.getPreferenceBinding(this)!!
    return (binding.createWidget(context) as P).also {
        if (this is PersistentPreference<*>) {
            storage(context)?.let { keyValueStore ->