summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jacky Wang <jiannan@google.com> 2025-03-10 15:03:34 +0800
committer Jacky Wang <jiannan@google.com> 2025-03-10 18:25:03 +0800
commitb12b709e3886dee9068f0b29cb740c317d292eb4 (patch)
tree490efbca87be4646ff4ec1c9bc98e487e15d9df1
parent59973416bb0cabd552bc5d051a99f67e466f3266 (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.kt7
-rw-r--r--packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceBinding.kt14
-rw-r--r--packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceBindingFactory.kt1
-rw-r--r--packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceBindings.kt27
-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
}