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

Commit e6efbb41 authored by Jeff DeCew's avatar Jeff DeCew
Browse files

Do not dismiss priority children of a group being dismissed

These notifications are never visually part of the group, and should not be dismissed.  The NotificationManagerService already checks the channel for this exception, but the SystemUI NotifCollection was not.

Fixes: 287747787
Test: atest NotifCollectionTest
Merged-In: I6ee36618889b4fe1c8999ff149034a7db63fcbb7
Change-Id: I6ee36618889b4fe1c8999ff149034a7db63fcbb7
parent b541d4cd
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -840,6 +840,7 @@ public class NotifCollection implements Dumpable, PipelineDumpable {
                && !hasFlag(entry, Notification.FLAG_ONGOING_EVENT)
                && !hasFlag(entry, Notification.FLAG_BUBBLE)
                && !hasFlag(entry, Notification.FLAG_NO_CLEAR)
                && (entry.getChannel() == null || !entry.getChannel().isImportantConversation())
                && entry.getDismissState() != DISMISSED;
    }

+29 −4
Original line number Diff line number Diff line
@@ -1674,12 +1674,22 @@ public class NotifCollectionTest extends SysuiTestCase {
        verifyNoMoreInteractions(mStatusBarService);
    }

    @Test
    public void testCanDismissOtherNotificationChildren() {
        // GIVEN an ongoing notification
        final NotificationEntry container = new NotificationEntryBuilder()
                .setGroup(mContext, "group")
                .build();

        // THEN its children are dismissible
        assertTrue(mCollection.shouldAutoDismissChildren(
                container, container.getSbn().getGroupKey()));
    }

    @Test
    public void testCannotDismissOngoingNotificationChildren() {
        // GIVEN an ongoing notification
        final NotificationEntry container = new NotificationEntryBuilder()
                .setPkg(TEST_PACKAGE)
                .setId(47)
                .setGroup(mContext, "group")
                .setFlag(mContext, FLAG_ONGOING_EVENT, true)
                .build();
@@ -1693,6 +1703,7 @@ public class NotifCollectionTest extends SysuiTestCase {
    public void testCannotDismissNoClearNotifications() {
        // GIVEN an no-clear notification
        final NotificationEntry container = new NotificationEntryBuilder()
                .setGroup(mContext, "group")
                .setFlag(mContext, FLAG_NO_CLEAR, true)
                .build();

@@ -1701,12 +1712,26 @@ public class NotifCollectionTest extends SysuiTestCase {
                container, container.getSbn().getGroupKey()));
    }

    @Test
    public void testCannotDismissPriorityConversations() {
        // GIVEN an no-clear notification
        NotificationChannel channel =
                new NotificationChannel("foo", "Foo", NotificationManager.IMPORTANCE_HIGH);
        channel.setImportantConversation(true);
        final NotificationEntry container = new NotificationEntryBuilder()
                .setGroup(mContext, "group")
                .setChannel(channel)
                .build();

        // THEN its children are not dismissible
        assertFalse(mCollection.shouldAutoDismissChildren(
                container, container.getSbn().getGroupKey()));
    }

    @Test
    public void testCanDismissFgsNotificationChildren() {
        // GIVEN an FGS but not ongoing notification
        final NotificationEntry container = new NotificationEntryBuilder()
                .setPkg(TEST_PACKAGE)
                .setId(47)
                .setGroup(mContext, "group")
                .setFlag(mContext, FLAG_FOREGROUND_SERVICE, true)
                .build();