diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/ShadeListBuilder.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/ShadeListBuilder.java index 369ef343a4e23..2baa0797b41f1 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/ShadeListBuilder.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/ShadeListBuilder.java @@ -230,7 +230,13 @@ public class ShadeListBuilder implements Dumpable { mPipelineState.requireState(STATE_IDLE); mNotifSections.clear(); + NotifSectioner lastSection = null; for (NotifSectioner sectioner : sectioners) { + if (lastSection != null && lastSection.getBucket() > sectioner.getBucket()) { + throw new IllegalArgumentException("setSectioners with non contiguous sections " + + lastSection.getName() + " - " + lastSection.getBucket() + " & " + + sectioner.getName() + " - " + sectioner.getBucket()); + } final NotifSection section = new NotifSection(sectioner, mNotifSections.size()); final NotifComparator sectionComparator = section.getComparator(); mNotifSections.add(section); @@ -238,6 +244,7 @@ public class ShadeListBuilder implements Dumpable { if (sectionComparator != null) { sectionComparator.setInvalidationListener(this::onNotifComparatorInvalidated); } + lastSection = sectioner; } mNotifSections.add(new NotifSection(DEFAULT_SECTIONER, mNotifSections.size())); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/NodeSpecBuilder.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/NodeSpecBuilder.kt index c35b77cfb4e06..6db544c77f876 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/NodeSpecBuilder.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/render/NodeSpecBuilder.kt @@ -57,6 +57,7 @@ class NodeSpecBuilder( var currentSection: NotifSection? = null val prevSections = mutableSetOf() + var lastSection: NotifSection? = null val showHeaders = sectionHeaderVisibilityProvider.sectionHeadersVisible val sectionOrder = mutableListOf() val sectionHeaders = mutableMapOf() @@ -65,6 +66,14 @@ class NodeSpecBuilder( for (entry in notifList) { val section = entry.section!! + lastSection?.let { + if (it.bucket > section.bucket) { + throw IllegalStateException("buildNodeSpec with non contiguous section " + + "buckets ${it.sectioner.name} - ${it.bucket} & " + + "${it.sectioner.name} - ${it.bucket}") + } + } + lastSection = section if (prevSections.contains(section)) { throw java.lang.RuntimeException("Section ${section.label} has been duplicated") }