diff options
3 files changed, 26 insertions, 10 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java index 7025240..8c54b69 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java @@ -818,10 +818,10 @@ public abstract class BaseStatusBar extends SystemUI implements return entry.notification; } - protected StatusBarIconView addNotificationViews(IBinder key, + protected NotificationData.Entry createNotificationViews(IBinder key, StatusBarNotification notification) { if (DEBUG) { - Log.d(TAG, "addNotificationViews(key=" + key + ", notification=" + notification); + Log.d(TAG, "createNotificationViews(key=" + key + ", notification=" + notification); } // Construct the icon. final StatusBarIconView iconView = new StatusBarIconView(mContext, @@ -846,7 +846,10 @@ public abstract class BaseStatusBar extends SystemUI implements + notification); return null; } + return entry; + } + protected void addNotificationViews(NotificationData.Entry entry) { // Add the expanded view and icon. int pos = mNotificationData.add(entry); if (DEBUG) { @@ -854,8 +857,10 @@ public abstract class BaseStatusBar extends SystemUI implements } updateExpansionStates(); updateNotificationIcons(); + } - return iconView; + private void addNotificationViews(IBinder key, StatusBarNotification notification) { + addNotificationViews(createNotificationViews(key, notification)); } protected void updateExpansionStates() { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationData.java b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationData.java index 23950fc..5264998 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/NotificationData.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/NotificationData.java @@ -39,6 +39,7 @@ public class NotificationData { public View expanded; // the inflated RemoteViews public ImageView largeIcon; private View expandedBig; + private boolean interruption; public Entry() {} public Entry(IBinder key, StatusBarNotification n, StatusBarIconView ic) { this.key = key; @@ -58,6 +59,10 @@ public class NotificationData { public void setUserLocked(boolean userLocked) { row.setUserLocked(userLocked); } + + public void setInterruption() { + interruption = true; + } } private final ArrayList<Entry> mEntries = new ArrayList<Entry>(); private final Comparator<Entry> mEntryCmp = new Comparator<Entry>() { @@ -66,9 +71,13 @@ public class NotificationData { final StatusBarNotification na = a.notification; final StatusBarNotification nb = b.notification; int d = na.getScore() - nb.getScore(); - return (d != 0) - ? d - : (int)(na.getNotification().when - nb.getNotification().when); + if (a.interruption != b.interruption) { + return a.interruption ? 1 : -1; + } else if (d != 0) { + return d; + } else { + return (int) (na.getNotification().when - nb.getNotification().when); + } } }; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java index 6189a12..db738c4 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java @@ -897,15 +897,17 @@ public class PhoneStatusBar extends BaseStatusBar { public void addNotification(IBinder key, StatusBarNotification notification) { if (DEBUG) Log.d(TAG, "addNotification score=" + notification.getScore()); - StatusBarIconView iconView = addNotificationViews(key, notification); - if (iconView == null) return; - + Entry shadeEntry = createNotificationViews(key, notification); + if (shadeEntry == null) { + return; + } if (mUseHeadsUp && shouldInterrupt(notification)) { if (DEBUG) Log.d(TAG, "launching notification in heads up mode"); Entry interruptionCandidate = new Entry(key, notification, null); if (inflateViews(interruptionCandidate, mHeadsUpNotificationView.getHolder())) { mInterruptingNotificationTime = System.currentTimeMillis(); mInterruptingNotificationEntry = interruptionCandidate; + shadeEntry.setInterruption(); // 1. Populate mHeadsUpNotificationView mHeadsUpNotificationView.setNotification(mInterruptingNotificationEntry); @@ -935,7 +937,7 @@ public class PhoneStatusBar extends BaseStatusBar { tick(null, notification, true); } } - + addNotificationViews(shadeEntry); // Recalculate the position of the sliding windows and the titles. setAreThereNotifications(); updateExpandedViewPos(EXPANDED_LEAVE_ALONE); |