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

Commit 379020ae authored by Daniel Sandler's avatar Daniel Sandler
Browse files

Cleaning up the notification data structures.

Change-Id: I2e39fee81a2bd99245b9de6edd2ce5c45bd733c7
parent 6cd0cc46
Loading
Loading
Loading
Loading
+29 −42
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@ import android.view.View;

import com.android.internal.statusbar.StatusBarNotification;

import java.util.Comparator;
import java.util.ArrayList;

/**
@@ -43,30 +44,35 @@ 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);
        }
    };

    public int size() {
        return mEntries.size();
    }

    public Entry getEntryAt(int index) {
        return mEntries.get(index);
    }

    public int findEntry(IBinder key) {
        final int N = mEntries.size();
        for (int i=0; i<N; i++) {
            Entry entry = mEntries.get(i);
            if (entry.key == key) {
                return i;
    public Entry findByKey(IBinder key) {
        for (Entry e : mEntries) {
            if (e.key == key) {
                return e;
            }
        }
        return -1;
        return null;
    }

    public int add(Entry entry) {
        final int index = chooseIndex(entry.notification.notification.when);
        mEntries.add(index, entry);
        return index;
        int i;
        int N = mEntries.size();
        for (i=0; i<N; i++) {
            if (mEntryCmp.compare(mEntries.get(i), entry) > 0) {
                break;
            }
        }
        mEntries.add(i, entry);
        return i;
    }

    public int add(IBinder key, StatusBarNotification notification, View row, View content,
@@ -82,36 +88,19 @@ public class NotificationData {
    }

    public Entry remove(IBinder key) {
        final int N = mEntries.size();
        for (int i=0; i<N; i++) {
            Entry entry = mEntries.get(i);
            if (entry.key == key) {
                mEntries.remove(i);
                return entry;
            }
        }
        return null;
    }

    private int chooseIndex(final long when) {
        final int N = mEntries.size();
        for (int i=0; i<N; i++) {
            Entry entry = mEntries.get(i);
            if (entry.notification.notification.when > when) {
                return i;
            }
        Entry e = findByKey(key);
        if (e != null) {
            mEntries.remove(e);
        }
        return N;
        return e;
    }

    /**
     * Return whether there are any visible items (i.e. items without an error).
     */
    public boolean hasVisibleItems() {
        final int N = mEntries.size();
        for (int i=0; i<N; i++) {
            Entry entry = mEntries.get(i);
            if (entry.expanded != null) { // the view successfully inflated
        for (Entry e : mEntries) {
            if (e.expanded != null) { // the view successfully inflated
                return true;
            }
        }
@@ -122,11 +111,9 @@ public class NotificationData {
     * Return whether there are any clearable items (that aren't errors).
     */
    public boolean hasClearableItems() {
        final int N = mEntries.size();
        for (int i=0; i<N; i++) {
            Entry entry = mEntries.get(i);
            if (entry.expanded != null) { // the view successfully inflated
                if ((entry.notification.notification.flags & Notification.FLAG_NO_CLEAR) == 0) {
        for (Entry e : mEntries) {
            if (e.expanded != null) { // the view successfully inflated
                if ((e.notification.notification.flags & Notification.FLAG_NO_CLEAR) == 0) {
                    return true;
                }
            }
+5 −6
Original line number Diff line number Diff line
@@ -353,7 +353,7 @@ public class PhoneStatusBarService extends StatusBarService {
        if (immersive) {
            if ((notification.notification.flags & Notification.FLAG_HIGH_PRIORITY) != 0) {
                Slog.d(TAG, "Presenting high-priority notification in immersive activity");
                // @@@ special new transient ticker mode
                // special new transient ticker mode
                // 1. Populate mIntruderAlertView

                ImageView alertIcon = (ImageView) mIntruderAlertView.findViewById(R.id.alertIcon);
@@ -399,18 +399,17 @@ public class PhoneStatusBarService extends StatusBarService {
        Slog.d(TAG, "updateNotification key=" + key + " notification=" + notification);

        NotificationData oldList;
        int oldIndex = mOngoing.findEntry(key);
        if (oldIndex >= 0) {
        NotificationData.Entry oldEntry = mOngoing.findByKey(key);
        if (oldEntry != null) {
            oldList = mOngoing;
        } else {
            oldIndex = mLatest.findEntry(key);
            if (oldIndex < 0) {
            oldEntry = mLatest.findByKey(key);
            if (oldEntry == null) {
                Slog.w(TAG, "updateNotification for unknown key: " + key);
                return;
            }
            oldList = mLatest;
        }
        final NotificationData.Entry oldEntry = oldList.getEntryAt(oldIndex);
        final StatusBarNotification oldNotification = oldEntry.notification;
        final RemoteViews oldContentView = oldNotification.notification.contentView;

+4 −6
Original line number Diff line number Diff line
@@ -49,7 +49,7 @@ import com.android.systemui.statusbar.*;
import com.android.systemui.R;

public class TabletStatusBarService extends StatusBarService {
    public static final boolean DEBUG = true;
    public static final boolean DEBUG = false;
    public static final String TAG = "TabletStatusBar";

    View mStatusBarView;
@@ -195,15 +195,13 @@ public class TabletStatusBarService extends StatusBarService {

    public void updateNotification(IBinder key, StatusBarNotification notification) {
        if (DEBUG) Slog.d(TAG, "updateNotification(" + key + " -> " + notification + ") // TODO");
        NotificationData oldList = mHaps;
        
        int oldIndex = oldList.findEntry(key);
        if (oldIndex < 0) {
        final NotificationData.Entry oldEntry = mHaps.findByKey(key);
        if (oldEntry == null) {
            Slog.w(TAG, "updateNotification for unknown key: " + key);
            return;
        }

        final NotificationData.Entry oldEntry = oldList.getEntryAt(oldIndex);
        final StatusBarNotification oldNotification = oldEntry.notification;
        final RemoteViews oldContentView = oldNotification.notification.contentView;