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

Commit 8ca664bd authored by Beverly's avatar Beverly
Browse files

Remove uninflated notifs from allNotifs list

If a notification is cancelled before it's inflated, make sure we still
remove the notification from the mAllNotifications collection

Test: atest NotificationEntryManagerTest
Fixes: 155778759
Change-Id: Ib8dc9cca4dc600278584ab52c8a73f8665840d73
parent 27f4c791
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -440,6 +440,10 @@ public class NotificationEntryManager implements
                        mLogger.logLifetimeExtended(key, extender.getClass().getName(), "pending");
                    }
                }
                if (!lifetimeExtended) {
                    // At this point, we are guaranteed the notification will be removed
                    mAllNotifications.remove(pendingEntry);
                }
            }
        }

+24 −0
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ import static junit.framework.Assert.assertNull;
import static junit.framework.Assert.assertTrue;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyInt;
@@ -93,6 +94,7 @@ import org.mockito.MockitoAnnotations;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.Set;

@@ -260,6 +262,19 @@ public class NotificationEntryManagerTest extends SysuiTestCase {
        assertNull(mEntryManager.getActiveNotificationUnfiltered(mSbn.getKey()));
    }

    @Test
    public void testRemoveUninflatedNotification_removesNotificationFromAllNotifsList() {
        // GIVEN an uninflated entry is added
        mEntryManager.addNotification(mSbn, mRankingMap);
        assertTrue(entriesContainKey(mEntryManager.getAllNotifs(), mSbn.getKey()));

        // WHEN the uninflated entry is removed
        mEntryManager.performRemoveNotification(mSbn, UNDEFINED_DISMISS_REASON);

        // THEN the entry is still removed from the allNotifications list
        assertFalse(entriesContainKey(mEntryManager.getAllNotifs(), mSbn.getKey()));
    }

    @Test
    public void testRemoveNotification_onEntryRemoveNotFiredIfEntryDoesntExist() {

@@ -545,6 +560,15 @@ public class NotificationEntryManagerTest extends SysuiTestCase {

    /* End annex */

    private boolean entriesContainKey(Collection<NotificationEntry> entries, String key) {
        for (NotificationEntry entry : entries) {
            if (entry.getSbn().getKey().equals(key)) {
                return true;
            }
        }
        return false;
    }

    private Notification.Action createAction() {
        return new Notification.Action.Builder(
                Icon.createWithResource(getContext(), android.R.drawable.sym_def_app_icon),