From c9596d6d8e9154b5f87c8e887bfabf7546b68af5 Mon Sep 17 00:00:00 2001 From: Joe Onorato Date: Wed, 12 Jan 2011 17:03:11 -0800 Subject: [PATCH] Possibly fix bad notification updates. I think what was happening is that it was using a different layout but we were trying to reapply the RemoveViews because of some bad boolean logic. This fixes that, and adds some better debugging that might show us what else is happening. Bug: 3298062 Change-Id: I0984f24cb2960166c79b9f2cc7c6a98bd75e17ba --- core/java/android/app/Notification.java | 10 +++++++++- .../systemui/statusbar/tablet/TabletStatusBar.java | 10 +++++----- .../StatusBar/res/layout/notification_builder_test.xml | 2 +- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/core/java/android/app/Notification.java b/core/java/android/app/Notification.java index 7b7cb379b302c..0243b02524e42 100644 --- a/core/java/android/app/Notification.java +++ b/core/java/android/app/Notification.java @@ -574,7 +574,15 @@ public class Notification implements Parcelable @Override public String toString() { StringBuilder sb = new StringBuilder(); - sb.append("Notification(vibrate="); + sb.append("Notification(contentView="); + if (contentView != null) { + sb.append(contentView.getPackage()); + sb.append("/0x"); + sb.append(Integer.toHexString(contentView.getLayoutId())); + } else { + sb.append("null"); + } + sb.append(" vibrate="); if (this.vibrate != null) { int N = this.vibrate.length-1; sb.append("["); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java index f858f61b1b9cd..dc1dbe209a9c6 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java @@ -598,18 +598,18 @@ public class TabletStatusBar extends StatusBar implements // Can we just reapply the RemoteViews in place? If when didn't change, the order // didn't change. - boolean orderUnchanged = (notification.notification.when == oldNotification.notification.when - && notification.isOngoing() == oldNotification.isOngoing() + boolean contentsUnchanged = notification.isOngoing() == oldNotification.isOngoing() && oldEntry.expanded != null && contentView != null && oldContentView != null && contentView.getPackage() != null && oldContentView.getPackage() != null && oldContentView.getPackage().equals(contentView.getPackage()) - && oldContentView.getLayoutId() == contentView.getLayoutId()); + && oldContentView.getLayoutId() == contentView.getLayoutId(); ViewGroup rowParent = (ViewGroup) oldEntry.row.getParent(); - boolean isLastAnyway = rowParent.indexOfChild(oldEntry.row) == rowParent.getChildCount() - 1; - if (orderUnchanged || isLastAnyway) { + boolean orderUnchanged = notification.notification.when==oldNotification.notification.when; + boolean isLastAnyway = rowParent.indexOfChild(oldEntry.row) == rowParent.getChildCount()-1; + if (contentsUnchanged && (orderUnchanged || isLastAnyway)) { if (DEBUG) Slog.d(TAG, "reusing notification for key: " + key); oldEntry.notification = notification; try { diff --git a/tests/StatusBar/res/layout/notification_builder_test.xml b/tests/StatusBar/res/layout/notification_builder_test.xml index 58c4fbb183ad7..1b27e97880ce7 100644 --- a/tests/StatusBar/res/layout/notification_builder_test.xml +++ b/tests/StatusBar/res/layout/notification_builder_test.xml @@ -322,7 +322,7 @@