diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/ListDumper.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/ListDumper.java index 6be8a491eeadd..e98ae8db41221 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/ListDumper.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/ListDumper.java @@ -121,6 +121,12 @@ public class ListDumper { sb.append(" (parent=") .append(entry.getParent() != null ? entry.getParent().getKey() : null) .append(")"); + + NotificationEntry notifEntry = entry.getRepresentativeEntry(); + if (notifEntry != null) { + sb.append(" rank=") + .append(notifEntry.getRanking().getRank()); + } } if (entry.getSection() != null) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotifCollection.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotifCollection.java index 6085096ee124e..410593ac54934 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotifCollection.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/NotifCollection.java @@ -609,12 +609,21 @@ public class NotifCollection implements Dumpable { } checkForReentrantCall(); + NotificationEntry collectionEntry = getEntry(entry.getKey()); + String logKey = logKey(entry); + String collectionEntryIs = collectionEntry == null ? "null" + : entry == collectionEntry ? "same" : "different"; + + if (entry != collectionEntry) { + // TODO: We should probably make this throw, but that's too risky right now + mLogger.logEntryBeingExtendedNotInCollection(entry, extender, collectionEntryIs); + } + if (!entry.mLifetimeExtenders.remove(extender)) { throw mEulogizer.record(new IllegalStateException( - String.format( - "Cannot end lifetime extension for extender \"%s\" (%s)", - extender.getName(), - extender))); + String.format("Cannot end lifetime extension for extender \"%s\"" + + " of entry %s (collection entry is %s)", + extender.getName(), logKey, collectionEntryIs))); } mLogger.logLifetimeExtensionEnded( diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/NotifSection.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/NotifSection.kt index 263737e20a133..ea66f3b6dd429 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/NotifSection.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/listbuilder/NotifSection.kt @@ -25,12 +25,9 @@ data class NotifSection( val sectioner: NotifSectioner, val index: Int ) { - val label: String - get() = "Section($index, $bucket, \"${sectioner.name}\")" - + @PriorityBucket + val bucket: Int = sectioner.bucket + val label: String = "$index:$bucket:${sectioner.name}" val headerController: NodeController? = sectioner.headerNodeController - val comparator: NotifComparator? = sectioner.comparator - - @PriorityBucket val bucket: Int = sectioner.bucket } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/notifcollection/NotifCollectionLogger.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/notifcollection/NotifCollectionLogger.kt index 7e7936717b84e..ac0b1ee6c442a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/notifcollection/NotifCollectionLogger.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/notifcollection/NotifCollectionLogger.kt @@ -248,6 +248,20 @@ class NotifCollectionLogger @Inject constructor( }) } + fun logEntryBeingExtendedNotInCollection( + entry: NotificationEntry, + extender: NotifLifetimeExtender, + collectionEntryIs: String + ) { + buffer.log(TAG, WARNING, { + str1 = entry.logKey + str2 = extender.name + str3 = collectionEntryIs + }, { + "While ending lifetime extension by $str2 of $str1, entry in collection is $str3" + }) + } + fun logFutureDismissalReused(dismissal: FutureDismissal) { buffer.log(TAG, INFO, { str1 = dismissal.label