Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f0048ce6 authored by Chris Wren's avatar Chris Wren
Browse files

heads up notifications always take the top spot

If it was important enough to be a heads up, it should get top spot.
Make this sticky so bumping out of the HUN doesn't require a shade sort.
Split view creation and insertion so we can get the shade order correct.

Bug: 10001616
Change-Id: I4c1f2581e11a94241269984a01b92289a8943065
parent d4db6cbc
Loading
Loading
Loading
Loading
+8 −3
Original line number Diff line number Diff line
@@ -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() {
+12 −3
Original line number Diff line number Diff line
@@ -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);
            }
        }
    };

+6 −4
Original line number Diff line number Diff line
@@ -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);