diff options
author | 2025-01-29 15:17:24 +0000 | |
---|---|---|
committer | 2025-02-03 02:47:13 -0800 | |
commit | 8c52efe5e4b70d61b76fdf638de08e56a5d7e209 (patch) | |
tree | 09766ddbad551a91ab9454bc81ec3f559932ac17 | |
parent | 89182a14eb416b7d50ca164abe8e080b8bcdc62f (diff) |
Fixes BannerMessagePreferenceGroup behaviour when:
- expanding banner group
- collapsing banner group
- dismissing banners in expanded and collapsed modes
- adding banners in expanded and collapsed modes
Fix: 391349698
Test: manual
Flag: NONE bug fix
Change-Id: Ic259f38f245181d21bc202ffd2f6446ed21f325e
-rw-r--r-- | packages/SettingsLib/BannerMessagePreference/src/com/android/settingslib/widget/BannerMessagePreferenceGroup.kt | 49 |
1 files changed, 43 insertions, 6 deletions
diff --git a/packages/SettingsLib/BannerMessagePreference/src/com/android/settingslib/widget/BannerMessagePreferenceGroup.kt b/packages/SettingsLib/BannerMessagePreference/src/com/android/settingslib/widget/BannerMessagePreferenceGroup.kt index 75455635fca1..8dd169b1ca86 100644 --- a/packages/SettingsLib/BannerMessagePreference/src/com/android/settingslib/widget/BannerMessagePreferenceGroup.kt +++ b/packages/SettingsLib/BannerMessagePreference/src/com/android/settingslib/widget/BannerMessagePreferenceGroup.kt @@ -23,7 +23,6 @@ import android.view.View import androidx.preference.Preference import androidx.preference.PreferenceGroup import androidx.preference.PreferenceViewHolder - import com.android.settingslib.widget.preference.banner.R /** @@ -68,6 +67,11 @@ class BannerMessagePreferenceGroup @JvmOverloads constructor( } childPreferences.add(preference) + expandPreference?.let { + it.count = childPreferences.size - 1 + } + updateExpandCollapsePreference() + updateChildrenVisibility() return super.addPreference(preference) } @@ -76,18 +80,40 @@ class BannerMessagePreferenceGroup @JvmOverloads constructor( return false } childPreferences.remove(preference) + expandPreference?.let { + it.count = childPreferences.size - 1 + } + updateChildrenVisibility() + updateExpandCollapsePreference() return super.removePreference(preference) } + override fun removePreferenceRecursively(key: CharSequence): Boolean { + val preference = findPreference<Preference>(key) ?: return false + + if (preference !is BannerMessagePreference) { + return false + } + + childPreferences.remove(preference) + expandPreference?.let { + it.count = childPreferences.size - 1 + } + updateChildrenVisibility() + updateExpandCollapsePreference() + return super.removePreferenceRecursively(key) + } + override fun onBindViewHolder(holder: PreferenceViewHolder) { super.onBindViewHolder(holder) - if (childPreferences.size >= MAX_CHILDREN - 1) { + if (childPreferences.size >= 2) { if (expandPreference == null) { expandPreference = NumberButtonPreference(context).apply { key = expandKey title = expandTitle count = childPreferences.size - 1 btnContentDescription = expandContentDescription + order = EXPAND_ORDER clickListener = View.OnClickListener { toggleExpansion() } @@ -100,6 +126,7 @@ class BannerMessagePreferenceGroup @JvmOverloads constructor( key = collapseKey title = collapseTitle icon = collapseIcon + order = COLLAPSE_ORDER setOnClickListener { toggleExpansion() } @@ -112,14 +139,20 @@ class BannerMessagePreferenceGroup @JvmOverloads constructor( } private fun updateExpandCollapsePreference() { - expandPreference?.isVisible = !isExpanded - collapsePreference?.isVisible = isExpanded + expandPreference?.isVisible = !isExpanded && childPreferences.size > 1 + collapsePreference?.isVisible = isExpanded && childPreferences.size > 1 } private fun updateChildrenVisibility() { - for (i in 1 until childPreferences.size) { + for (i in 0 until childPreferences.size) { val child = childPreferences[i] - child.isVisible = isExpanded + if (i == 0) { + // Make this explicitly visible when e.g. the first BannerMessagePreference + // in the group is dismissed + child.isVisible = true + } else { + child.isVisible = isExpanded + } } } @@ -145,5 +178,9 @@ class BannerMessagePreferenceGroup @JvmOverloads constructor( companion object { private const val MAX_CHILDREN = 3 + // Arbitrary large order numbers for the two preferences + // needed to make sure any Banners are added above them + private const val EXPAND_ORDER = 99 + private const val COLLAPSE_ORDER = 100 } }
\ No newline at end of file |