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

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

[Catalyst] Screen binding info may not be provided

If the screen entry point is not a simple Preference (e.g.
PrimarySwitchPreference), screen binding info will not be provided.
Hence move screen info binding from PreferenceScreenBinding to
PreferenceBinding.

Bug: 388167106
Flag: com.android.settings.flags.catalyst
Test: manual
Change-Id: I3ff359435ba2f51a239895a21189038f0613a0f5
parent 41f92097
Loading
Loading
Loading
Loading
+12 −2
Original line number Diff line number Diff line
@@ -25,6 +25,8 @@ import androidx.preference.PreferenceScreen
import androidx.preference.SeekBarPreference
import com.android.settingslib.metadata.DiscreteIntValue
import com.android.settingslib.metadata.DiscreteValue
import com.android.settingslib.metadata.EXTRA_BINDING_SCREEN_ARGS
import com.android.settingslib.metadata.EXTRA_BINDING_SCREEN_KEY
import com.android.settingslib.metadata.IntRangeValuePreference
import com.android.settingslib.metadata.PreferenceAvailabilityProvider
import com.android.settingslib.metadata.PreferenceMetadata
@@ -72,8 +74,16 @@ interface PreferenceBinding {
                preference.icon = null
            }
            val isPreferenceScreen = preference is PreferenceScreen
            // extras
            preference.peekExtras()?.clear()
            extras(context)?.let { preference.extras.putAll(it) }
            if (!isPreferenceScreen && this is PreferenceScreenMetadata) {
                val extras = preference.extras
                // Pass the preference key to fragment, so that the fragment could find associated
                // preference screen registered in PreferenceScreenRegistry
                extras.putString(EXTRA_BINDING_SCREEN_KEY, preference.key)
                arguments?.let { extras.putBundle(EXTRA_BINDING_SCREEN_ARGS, it) }
            }
            preference.title = getPreferenceTitle(context)
            if (!isPreferenceScreen) {
                preference.summary = getPreferenceSummary(context)
@@ -82,12 +92,12 @@ interface PreferenceBinding {
            preference.isVisible =
                (this as? PreferenceAvailabilityProvider)?.isAvailable(context) != false
            preference.isPersistent = isPersistent(context)
            // PreferenceRegistry will notify dependency change, so we do not need to set
            // PreferenceScreenBindingHelper will notify dependency change, so we do not need to set
            // dependency here. This simplifies dependency management and avoid the
            // IllegalStateException when call Preference.setDependency
            preference.dependency = null
            if (!isPreferenceScreen) { // avoid recursive loop when build graph
                preference.fragment = (this as? PreferenceScreenCreator)?.fragmentClass()?.name
                preference.fragment = (this as? PreferenceScreenMetadata)?.fragmentClass()?.name
                preference.intent = intent(context)
            }
            if (preference is DialogPreference) {
+2 −9
Original line number Diff line number Diff line
@@ -22,8 +22,6 @@ import androidx.preference.PreferenceCategory
import androidx.preference.PreferenceScreen
import androidx.preference.SwitchPreferenceCompat
import androidx.preference.TwoStatePreference
import com.android.settingslib.metadata.EXTRA_BINDING_SCREEN_ARGS
import com.android.settingslib.metadata.EXTRA_BINDING_SCREEN_KEY
import com.android.settingslib.metadata.PreferenceMetadata
import com.android.settingslib.metadata.PreferenceScreenMetadata
import com.android.settingslib.metadata.PreferenceTitleProvider
@@ -34,14 +32,9 @@ interface PreferenceScreenBinding : PreferenceBinding {

    override fun bind(preference: Preference, metadata: PreferenceMetadata) {
        super.bind(preference, metadata)
        if (preference is PreferenceScreen) {
            val context = preference.context
            val screenMetadata = metadata as PreferenceScreenMetadata
        val extras = preference.extras
        // Pass the preference key to fragment, so that the fragment could find associated
        // preference screen registered in PreferenceScreenRegistry
        extras.putString(EXTRA_BINDING_SCREEN_KEY, preference.key)
        screenMetadata.arguments?.let { extras.putBundle(EXTRA_BINDING_SCREEN_ARGS, it) }
        if (preference is PreferenceScreen) {
            val screenTitle = screenMetadata.screenTitle
            preference.title =
                if (screenTitle != 0) {