summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Teo Georgescu <teog@google.com> 2025-02-03 02:47:47 -0800
committer Android (Google) Code Review <android-gerrit@google.com> 2025-02-03 02:47:47 -0800
commit7acbff030c88c60c9a99a114a76d9c2d53478e1d (patch)
tree48f3a039c684b6204dad1636bbf1d5e38eed8833
parentea14b4c33be0559071fb4a5986612f8a8950d415 (diff)
parent8c52efe5e4b70d61b76fdf638de08e56a5d7e209 (diff)
Merge "Fixes BannerMessagePreferenceGroup behaviour when: - expanding banner group - collapsing banner group - dismissing banners in expanded and collapsed modes - adding banners in expanded and collapsed modes" into main
-rw-r--r--packages/SettingsLib/BannerMessagePreference/src/com/android/settingslib/widget/BannerMessagePreferenceGroup.kt49
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