diff options
author | 2025-03-10 15:03:34 +0800 | |
---|---|---|
committer | 2025-03-10 18:25:03 +0800 | |
commit | b12b709e3886dee9068f0b29cb740c317d292eb4 (patch) | |
tree | 490efbca87be4646ff4ec1c9bc98e487e15d9df1 | |
parent | 59973416bb0cabd552bc5d051a99f67e466f3266 (diff) |
[Catalyst] Remove PreferenceScreenBinding
Move PreferenceScreenBinding logic into PreferenceBinding, so that
preference screen with complex Preference entry point (e.g.
PrimarySwitchPreference) could be simplified significantly.
Bug: 388167106
Flag: EXEMPT refactor
Test: manual
Change-Id: Idaf91b69510de9f3af9965b1779170820e930c6d
-rw-r--r-- | packages/SettingsLib/Metadata/src/com/android/settingslib/metadata/Utils.kt | 7 | ||||
-rw-r--r-- | packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceBinding.kt | 14 | ||||
-rw-r--r-- | packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceBindingFactory.kt | 1 | ||||
-rw-r--r-- | packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceBindings.kt | 27 | ||||
-rw-r--r-- | packages/SettingsLib/src/com/android/settingslib/PrimarySwitchPreferenceBinding.kt (renamed from packages/SettingsLib/src/com/android/settingslib/PreferenceBindings.kt) | 4 |
5 files changed, 19 insertions, 34 deletions
diff --git a/packages/SettingsLib/Metadata/src/com/android/settingslib/metadata/Utils.kt b/packages/SettingsLib/Metadata/src/com/android/settingslib/metadata/Utils.kt index 77da98cec905..6d580fb47160 100644 --- a/packages/SettingsLib/Metadata/src/com/android/settingslib/metadata/Utils.kt +++ b/packages/SettingsLib/Metadata/src/com/android/settingslib/metadata/Utils.kt @@ -18,6 +18,13 @@ package com.android.settingslib.metadata import android.content.Context +/** Returns the preference screen title. */ +fun PreferenceScreenMetadata.getPreferenceScreenTitle(context: Context): CharSequence? = + when { + screenTitle != 0 -> context.getString(screenTitle) + else -> getScreenTitle(context) ?: (this as? PreferenceTitleProvider)?.getTitle(context) + } + /** Returns the preference title. */ fun PreferenceMetadata.getPreferenceTitle(context: Context): CharSequence? = when { diff --git a/packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceBinding.kt b/packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceBinding.kt index 604acaf2a380..8896af47a1c2 100644 --- a/packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceBinding.kt +++ b/packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceBinding.kt @@ -32,6 +32,7 @@ import com.android.settingslib.metadata.PreferenceAvailabilityProvider import com.android.settingslib.metadata.PreferenceMetadata import com.android.settingslib.metadata.PreferenceScreenMetadata import com.android.settingslib.metadata.getPreferenceIcon +import com.android.settingslib.metadata.getPreferenceScreenTitle import com.android.settingslib.metadata.getPreferenceSummary import com.android.settingslib.metadata.getPreferenceTitle @@ -77,17 +78,22 @@ interface PreferenceBinding { preference.icon = null } val isPreferenceScreen = preference is PreferenceScreen + val screenMetadata = this as? PreferenceScreenMetadata // extras preference.peekExtras()?.clear() extras(context)?.let { preference.extras.putAll(it) } - if (!isPreferenceScreen && this is PreferenceScreenMetadata) { + if (!isPreferenceScreen && screenMetadata != null) { 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) } + screenMetadata.arguments?.let { extras.putBundle(EXTRA_BINDING_SCREEN_ARGS, it) } } - preference.title = getPreferenceTitle(context) + preference.title = + when { + isPreferenceScreen -> screenMetadata?.getPreferenceScreenTitle(context) + else -> getPreferenceTitle(context) + } if (!isPreferenceScreen) { preference.summary = getPreferenceSummary(context) } @@ -100,7 +106,7 @@ interface PreferenceBinding { // IllegalStateException when call Preference.setDependency preference.dependency = null if (!isPreferenceScreen) { // avoid recursive loop when build graph - preference.fragment = (this as? PreferenceScreenMetadata)?.fragmentClass()?.name + preference.fragment = screenMetadata?.fragmentClass()?.name preference.intent = intent(context) } if (preference is DialogPreference) { diff --git a/packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceBindingFactory.kt b/packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceBindingFactory.kt index 6287fda86a73..33b614e19bbe 100644 --- a/packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceBindingFactory.kt +++ b/packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceBindingFactory.kt @@ -60,7 +60,6 @@ open class DefaultPreferenceBindingFactory : PreferenceBindingFactory { ?: when (metadata) { is SwitchPreference -> SwitchPreferenceBinding.INSTANCE is PreferenceCategory -> PreferenceCategoryBinding.INSTANCE - is PreferenceScreenCreator -> PreferenceScreenBinding.INSTANCE is MainSwitchPreference -> MainSwitchPreferenceBinding.INSTANCE else -> DefaultPreferenceBinding } diff --git a/packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceBindings.kt b/packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceBindings.kt index a0776822336b..71c46fa76aed 100644 --- a/packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceBindings.kt +++ b/packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceBindings.kt @@ -19,38 +19,11 @@ package com.android.settingslib.preference import android.content.Context 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.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 { - - 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 screenTitle = screenMetadata.screenTitle - preference.title = - if (screenTitle != 0) { - context.getString(screenTitle) - } else { - screenMetadata.getScreenTitle(context) - ?: (screenMetadata as? PreferenceTitleProvider)?.getTitle(context) - } - } - } - - companion object { - @JvmStatic val INSTANCE = object : PreferenceScreenBinding {} - } -} - /** Binding of preference category associated with [PreferenceCategory]. */ interface PreferenceCategoryBinding : PreferenceBinding { diff --git a/packages/SettingsLib/src/com/android/settingslib/PreferenceBindings.kt b/packages/SettingsLib/src/com/android/settingslib/PrimarySwitchPreferenceBinding.kt index a64e8cc07b15..348941335311 100644 --- a/packages/SettingsLib/src/com/android/settingslib/PreferenceBindings.kt +++ b/packages/SettingsLib/src/com/android/settingslib/PrimarySwitchPreferenceBinding.kt @@ -13,7 +13,6 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -@file:Suppress("ktlint:standard:filename") // remove once we have more bindings package com.android.settingslib @@ -29,7 +28,8 @@ interface PrimarySwitchPreferenceBinding : PreferenceBinding { override fun bind(preference: Preference, metadata: PreferenceMetadata) { super.bind(preference, metadata) - (preference as PrimarySwitchPreference).apply { + // Could bind on PreferenceScreen + (preference as? PrimarySwitchPreference)?.apply { isChecked = preferenceDataStore!!.getBoolean(key, false) isSwitchEnabled = isEnabled } |