summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java9
-rw-r--r--tests/StatusBar/src/com/android/statusbartest/NotificationTestList.java48
2 files changed, 54 insertions, 3 deletions
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 c55c87e..31311a4 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java
@@ -496,7 +496,7 @@ public class TabletStatusBar extends StatusBar {
final RemoteViews contentView = notification.notification.contentView;
- if (false) {
+ if (DEBUG) {
Slog.d(TAG, "old notification: when=" + oldNotification.notification.when
+ " ongoing=" + oldNotification.isOngoing()
+ " expanded=" + oldEntry.expanded
@@ -508,7 +508,7 @@ public class TabletStatusBar extends StatusBar {
// Can we just reapply the RemoteViews in place? If when didn't change, the order
// didn't change.
- if (notification.notification.when == oldNotification.notification.when
+ boolean orderUnchanged = (notification.notification.when == oldNotification.notification.when
&& notification.isOngoing() == oldNotification.isOngoing()
&& oldEntry.expanded != null
&& contentView != null
@@ -516,7 +516,10 @@ public class TabletStatusBar extends StatusBar {
&& 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) {
if (DEBUG) Slog.d(TAG, "reusing notification for key: " + key);
oldEntry.notification = notification;
try {
diff --git a/tests/StatusBar/src/com/android/statusbartest/NotificationTestList.java b/tests/StatusBar/src/com/android/statusbartest/NotificationTestList.java
index 0f0637f..90c2a1a 100644
--- a/tests/StatusBar/src/com/android/statusbartest/NotificationTestList.java
+++ b/tests/StatusBar/src/com/android/statusbartest/NotificationTestList.java
@@ -31,6 +31,8 @@ import android.util.Log;
import android.net.Uri;
import android.os.SystemClock;
import android.widget.RemoteViews;
+import android.widget.TextView;
+import android.widget.ProgressBar;
import android.os.PowerManager;
public class NotificationTestList extends TestActivity
@@ -44,6 +46,8 @@ public class NotificationTestList extends TestActivity
long mActivityCreateTime = System.currentTimeMillis();
long mChronometerBase = 0;
+ boolean mProgressDone = true;
+
final int[] kNumberedIconResIDs = {
R.drawable.notification0,
R.drawable.notification1,
@@ -289,6 +293,50 @@ public class NotificationTestList extends TestActivity
}
},
+ new Test("Progress #1") {
+ public void run() {
+ final boolean PROGRESS_UPDATES_WHEN = true;
+ if (!mProgressDone) return;
+ mProgressDone = false;
+ Thread t = new Thread() {
+ public void run() {
+ int x = 0;
+ while (!mProgressDone) {
+ Notification n = new Notification(R.drawable.icon1, null,
+ PROGRESS_UPDATES_WHEN
+ ? System.currentTimeMillis()
+ : mActivityCreateTime);
+ RemoteViews v = new RemoteViews(getPackageName(),
+ R.layout.progress_notification);
+
+ v.setProgressBar(R.id.progress_bar, 100, x, false);
+ v.setTextViewText(R.id.status_text, "Progress: " + x + "%");
+
+ n.contentView = v;
+ n.flags |= Notification.FLAG_ONGOING_EVENT;
+
+ mNM.notify(500, n);
+ x = (x + 7) % 100;
+
+ try {
+ Thread.sleep(1000);
+ } catch (InterruptedException e) {
+ break;
+ }
+ }
+ }
+ };
+ t.start();
+ }
+ },
+
+ new Test("Stop Progress") {
+ public void run() {
+ mProgressDone = true;
+ mNM.cancel(500);
+ }
+ },
+
new Test("Blue Lights") {
public void run()
{