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

Commit 2546a4c2 authored by Jacky Wang's avatar Jacky Wang Committed by Android (Google) Code Review
Browse files

Merge "[Catalyst] Provide PreferenceDataStore before binding" into main

parents 7ed58e66 e5635ccb
Loading
Loading
Loading
Loading
+4 −5
Original line number Original line Diff line number Diff line
@@ -23,7 +23,6 @@ import androidx.preference.PreferenceScreen
import androidx.preference.SwitchPreferenceCompat
import androidx.preference.SwitchPreferenceCompat
import androidx.preference.TwoStatePreference
import androidx.preference.TwoStatePreference
import com.android.settingslib.metadata.EXTRA_BINDING_SCREEN_KEY
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.PreferenceMetadata
import com.android.settingslib.metadata.PreferenceScreenMetadata
import com.android.settingslib.metadata.PreferenceScreenMetadata
import com.android.settingslib.metadata.PreferenceTitleProvider
import com.android.settingslib.metadata.PreferenceTitleProvider
@@ -71,10 +70,10 @@ interface TwoStatePreferenceBinding : PreferenceBinding {


    override fun bind(preference: Preference, metadata: PreferenceMetadata) {
    override fun bind(preference: Preference, metadata: PreferenceMetadata) {
        super.bind(preference, metadata)
        super.bind(preference, metadata)
        (metadata as? PersistentPreference<*>)
        (preference as TwoStatePreference).apply {
            ?.storage(preference.context)
            // "false" is kind of placeholder, metadata datastore should provide the default value
            ?.getValue(metadata.key, Boolean::class.javaObjectType)
            isChecked = preferenceDataStore!!.getBoolean(key, false)
            ?.let { (preference as TwoStatePreference).isChecked = it }
        }
    }
    }
}
}


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