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

Commit a31e4190 authored by Daniel Sandler's avatar Daniel Sandler
Browse files

Implement priority ordering in notifications.

Ongoings are the only notifications currently given higher
priority (and it's in an internal data structure, not a
public API, so fear not about abuse---this will be no worse
than on the phone where ongoings floated to the top).

The only thing left is to give privileged customers a way to
alter the priority of their notifications.

Bug: 3412807
Bug: 3146719
Change-Id: I9e738cc413982845cf4858faa8ccd0a7dbf3187c
parent e9dea7b7
Loading
Loading
Loading
Loading
+12 −1
Original line number Diff line number Diff line
@@ -35,12 +35,18 @@ if (truncatedTicker != null && truncatedTicker.length() > maxTickerLen) {
*/

public class StatusBarNotification implements Parcelable {
    public static int PRIORITY_JIFFY_EXPRESS = -100;
    public static int PRIORITY_NORMAL        = 0;
    public static int PRIORITY_ONGOING       = 100;
    public static int PRIORITY_SYSTEM        = 200;

    public String pkg;
    public int id;
    public String tag;
    public int uid;
    public int initialPid;
    public Notification notification;
    public int priority = PRIORITY_NORMAL;

    public StatusBarNotification() {
    }
@@ -56,6 +62,9 @@ public class StatusBarNotification implements Parcelable {
        this.uid = uid;
        this.initialPid = initialPid;
        this.notification = notification;

        this.priority = ((notification.flags & Notification.FLAG_ONGOING_EVENT) != 0)
            ? PRIORITY_ONGOING : PRIORITY_NORMAL;
    }

    public StatusBarNotification(Parcel in) {
@@ -72,6 +81,7 @@ public class StatusBarNotification implements Parcelable {
        }
        this.uid = in.readInt();
        this.initialPid = in.readInt();
        this.priority = in.readInt();
        this.notification = new Notification(in);
    }

@@ -86,6 +96,7 @@ public class StatusBarNotification implements Parcelable {
        }
        out.writeInt(this.uid);
        out.writeInt(this.initialPid);
        out.writeInt(this.priority);
        this.notification.writeToParcel(out, flags);
    }

@@ -114,7 +125,7 @@ public class StatusBarNotification implements Parcelable {

    public String toString() {
        return "StatusBarNotification(package=" + pkg + " id=" + id + " tag=" + tag
                + " notification=" + notification + ")";
                + " notification=" + notification + " priority=" + priority + ")";
    }

    public boolean isOngoing() {
+6 −1
Original line number Diff line number Diff line
@@ -48,7 +48,12 @@ public class NotificationData {
    private final ArrayList<Entry> mEntries = new ArrayList<Entry>();
    private final Comparator<Entry> mEntryCmp = new Comparator<Entry>() {
        public int compare(Entry a, Entry b) {
            return (int)(a.notification.notification.when - b.notification.notification.when);
            final StatusBarNotification na = a.notification;
            final StatusBarNotification nb = b.notification;
            int priDiff = na.priority - nb.priority;
            return (priDiff != 0)
                ? priDiff
                : (int)(na.notification.when - nb.notification.when);
        }
    };

+7 −3
Original line number Diff line number Diff line
@@ -670,7 +670,8 @@ public class TabletStatusBar extends StatusBar implements
                && oldContentView.getLayoutId() == contentView.getLayoutId();
        ViewGroup rowParent = (ViewGroup) oldEntry.row.getParent();
        boolean orderUnchanged = notification.notification.when==oldNotification.notification.when
                && notification.isOngoing() == oldNotification.isOngoing();
                && notification.priority == oldNotification.priority; 
                // priority now encompasses isOngoing()
        boolean isLastAnyway = rowParent.indexOfChild(oldEntry.row) == rowParent.getChildCount()-1;
        if (contentsUnchanged && (orderUnchanged || isLastAnyway)) {
            if (DEBUG) Slog.d(TAG, "reusing notification for key: " + key);
@@ -1187,7 +1188,10 @@ public class TabletStatusBar extends StatusBar implements
        }

        // Add the icon.
        mNotns.add(entry);
        int pos = mNotns.add(entry);
        if (DEBUG) {
            Slog.d(TAG, "addNotificationViews: added at " + pos);
        }
        updateNotificationIcons();

        return iconView;
@@ -1274,7 +1278,7 @@ public class TabletStatusBar extends StatusBar implements
        for (int i=0; i<toShow.size(); i++) {
            View v = toShow.get(i);
            if (v.getParent() == null) {
                mPile.addView(toShow.get(i));
                mPile.addView(v, N-1-i); // the notification panel has newest at the bottom
            }
        }