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

Commit e5635ccb authored by Jacky Wang's avatar Jacky Wang
Browse files

[Catalyst] Provide PreferenceDataStore before binding

Bug: 332201912
Flag: EXEMPT library
Test: Manual
Change-Id: I409172d5b8f0a3b6b95c88ee2388c3c5faf16ec3
parent 13186b0a
Loading
Loading
Loading
Loading
+4 −5
Original line number Diff line number Diff line
@@ -23,7 +23,6 @@ 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
@@ -71,10 +70,10 @@ 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 TwoStatePreference).isChecked = it }
        (preference as TwoStatePreference).apply {
            // "false" is kind of placeholder, metadata datastore should provide the default value
            isChecked = preferenceDataStore!!.getBoolean(key, false)
        }
    }
}

+1 −1
Original line number Diff line number Diff line
@@ -40,11 +40,11 @@ fun PreferenceGroup.inflatePreferenceHierarchy(
            addPreference(preferenceGroup)
            preferenceGroup.inflatePreferenceHierarchy(preferenceBindingFactory, it)
        } else {
            preferenceBindingFactory.bind(widget, it, preferenceBinding)
            (metadata as? PersistentPreference<*>)?.storage(context)?.let { storage ->
                widget.preferenceDataStore =
                    storages.getOrPut(storage) { PreferenceDataStoreAdapter(storage) }
            }
            preferenceBindingFactory.bind(widget, it, preferenceBinding)
            // MUST add preference after binding for persistent preference to get initial value
            // (preference key is set within bind method)
            addPreference(widget)
+1 −1
Original line number Diff line number Diff line
@@ -236,12 +236,12 @@ class PreferenceScreenBindingHelper(
                    preference.bindRecursively(preferenceBindingFactory, preferences, storages)
                } else {
                    preferences[preference.key]?.let {
                        preferenceBindingFactory.bind(preference, it)
                        val metadata = it.metadata
                        (metadata as? PersistentPreference<*>)?.storage(context)?.let { storage ->
                            preference.preferenceDataStore =
                                storages.getOrPut(storage) { PreferenceDataStoreAdapter(storage) }
                        }
                        preferenceBindingFactory.bind(preference, it)
                    }
                }
            }