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

Commit 1fd7bf9f authored by Beverly Tai's avatar Beverly Tai Committed by Automerger Merge Worker
Browse files

Merge "Revert "Don't readd pending notifs to NEM's allNotifs list"" into...

Merge "Revert "Don't readd pending notifs to NEM's allNotifs list"" into rvc-dev am: a1ad29da am: e00843da

Change-Id: I1e1bb4979259e26108054d7a82d302d6e8472280
parents d27bccb7 e00843da
Loading
Loading
Loading
Loading
+21 −33
Original line number Original line Diff line number Diff line
@@ -151,16 +151,6 @@ public class NotificationEntryManager implements
    @Override
    @Override
    public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
    public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
        pw.println("NotificationEntryManager state:");
        pw.println("NotificationEntryManager state:");
        pw.println("  mAllNotifications=");
        if (mAllNotifications.size() == 0) {
            pw.println("null");
        } else {
            int i = 0;
            for (NotificationEntry entry : mAllNotifications) {
                dumpEntry(pw, "  ", i, entry);
                i++;
            }
        }
        pw.print("  mPendingNotifications=");
        pw.print("  mPendingNotifications=");
        if (mPendingNotifications.size() == 0) {
        if (mPendingNotifications.size() == 0) {
            pw.println("null");
            pw.println("null");
@@ -360,8 +350,8 @@ public class NotificationEntryManager implements
    private final NotificationHandler mNotifListener = new NotificationHandler() {
    private final NotificationHandler mNotifListener = new NotificationHandler() {
        @Override
        @Override
        public void onNotificationPosted(StatusBarNotification sbn, RankingMap rankingMap) {
        public void onNotificationPosted(StatusBarNotification sbn, RankingMap rankingMap) {
            final boolean isUpdateToInflatedNotif = mActiveNotifications.containsKey(sbn.getKey());
            final boolean isUpdate = mActiveNotifications.containsKey(sbn.getKey());
            if (isUpdateToInflatedNotif) {
            if (isUpdate) {
                updateNotification(sbn, rankingMap);
                updateNotification(sbn, rankingMap);
            } else {
            } else {
                addNotification(sbn, rankingMap);
                addNotification(sbn, rankingMap);
@@ -452,12 +442,16 @@ public class NotificationEntryManager implements
                }
                }
                if (!lifetimeExtended) {
                if (!lifetimeExtended) {
                    // At this point, we are guaranteed the notification will be removed
                    // At this point, we are guaranteed the notification will be removed
                    abortExistingInflation(key, "removeNotification");
                    mAllNotifications.remove(pendingEntry);
                    mAllNotifications.remove(pendingEntry);
                    mLeakDetector.trackGarbage(pendingEntry);
                }
                }
            }
            }
        } else {
        }

        if (!lifetimeExtended) {
            abortExistingInflation(key, "removeNotification");
        }

        if (entry != null) {
            // If a manager needs to keep the notification around for whatever reason, we
            // If a manager needs to keep the notification around for whatever reason, we
            // keep the notification
            // keep the notification
            boolean entryDismissed = entry.isRowDismissed();
            boolean entryDismissed = entry.isRowDismissed();
@@ -475,8 +469,6 @@ public class NotificationEntryManager implements


            if (!lifetimeExtended) {
            if (!lifetimeExtended) {
                // At this point, we are guaranteed the notification will be removed
                // At this point, we are guaranteed the notification will be removed
                abortExistingInflation(key, "removeNotification");
                mAllNotifications.remove(entry);


                // Ensure any managers keeping the lifetime extended stop managing the entry
                // Ensure any managers keeping the lifetime extended stop managing the entry
                cancelLifetimeExtension(entry);
                cancelLifetimeExtension(entry);
@@ -485,10 +477,13 @@ public class NotificationEntryManager implements
                    entry.removeRow();
                    entry.removeRow();
                }
                }


                mAllNotifications.remove(entry);

                // Let's remove the children if this was a summary
                // Let's remove the children if this was a summary
                handleGroupSummaryRemoved(key);
                handleGroupSummaryRemoved(key);
                removeVisibleNotification(key);
                removeVisibleNotification(key);
                updateNotifications("removeNotificationInternal");
                updateNotifications("removeNotificationInternal");
                mLeakDetector.trackGarbage(entry);
                removedByUser |= entryDismissed;
                removedByUser |= entryDismissed;


                mLogger.logNotifRemoved(entry.getKey(), removedByUser);
                mLogger.logNotifRemoved(entry.getKey(), removedByUser);
@@ -502,7 +497,6 @@ public class NotificationEntryManager implements
                for (NotifCollectionListener listener : mNotifCollectionListeners) {
                for (NotifCollectionListener listener : mNotifCollectionListeners) {
                    listener.onEntryCleanUp(entry);
                    listener.onEntryCleanUp(entry);
                }
                }
                mLeakDetector.trackGarbage(entry);
            }
            }
        }
        }
    }
    }
@@ -562,24 +556,17 @@ public class NotificationEntryManager implements
        Ranking ranking = new Ranking();
        Ranking ranking = new Ranking();
        rankingMap.getRanking(key, ranking);
        rankingMap.getRanking(key, ranking);


        NotificationEntry entry = mPendingNotifications.get(key);
        NotificationEntry entry = new NotificationEntry(
        if (entry != null) {
            entry.setSbn(notification);
        } else {
            entry = new NotificationEntry(
                notification,
                notification,
                ranking,
                ranking,
                mFgsFeatureController.isForegroundServiceDismissalEnabled(),
                mFgsFeatureController.isForegroundServiceDismissalEnabled(),
                SystemClock.uptimeMillis());
                SystemClock.uptimeMillis());
            mAllNotifications.add(entry);
            mLeakDetector.trackInstance(entry);
        }

        abortExistingInflation(key, "addNotification");

        for (NotifCollectionListener listener : mNotifCollectionListeners) {
        for (NotifCollectionListener listener : mNotifCollectionListeners) {
            listener.onEntryBind(entry, notification);
            listener.onEntryBind(entry, notification);
        }
        }
        mAllNotifications.add(entry);

        mLeakDetector.trackInstance(entry);


        for (NotifCollectionListener listener : mNotifCollectionListeners) {
        for (NotifCollectionListener listener : mNotifCollectionListeners) {
            listener.onEntryInit(entry);
            listener.onEntryInit(entry);
@@ -594,6 +581,7 @@ public class NotificationEntryManager implements
                            mInflationCallback);
                            mInflationCallback);
        }
        }


        abortExistingInflation(key, "addNotification");
        mPendingNotifications.put(key, entry);
        mPendingNotifications.put(key, entry);
        mLogger.logNotifAdded(entry.getKey());
        mLogger.logNotifAdded(entry.getKey());
        for (NotificationEntryListener listener : mNotificationEntryListeners) {
        for (NotificationEntryListener listener : mNotificationEntryListeners) {
+0 −22
Original line number Original line Diff line number Diff line
@@ -209,28 +209,6 @@ public class NotificationEntryManagerTest extends SysuiTestCase {
        setUserSentiment(mSbn.getKey(), Ranking.USER_SENTIMENT_NEUTRAL);
        setUserSentiment(mSbn.getKey(), Ranking.USER_SENTIMENT_NEUTRAL);
    }
    }


    @Test
    public void testAddNotification_noDuplicateEntriesCreated() {
        // GIVEN a notification has been added
        mEntryManager.addNotification(mSbn, mRankingMap);

        // WHEN the same notification is added multiple times before the previous entry (with
        // the same key) didn't finish inflating
        mEntryManager.addNotification(mSbn, mRankingMap);
        mEntryManager.addNotification(mSbn, mRankingMap);
        mEntryManager.addNotification(mSbn, mRankingMap);

        // THEN getAllNotifs() only contains exactly one notification with this key
        int count = 0;
        for (NotificationEntry entry : mEntryManager.getAllNotifs()) {
            if (entry.getKey().equals(mSbn.getKey())) {
                count++;
            }
        }
        assertEquals("Should only be one entry with key=" + mSbn.getKey() + " in mAllNotifs. "
                        + "Instead there are " + count, 1, count);
    }

    @Test
    @Test
    public void testAddNotification_setsUserSentiment() {
    public void testAddNotification_setsUserSentiment() {
        mEntryManager.addNotification(mSbn, mRankingMap);
        mEntryManager.addNotification(mSbn, mRankingMap);