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
This commit is contained in:
Jeff DeCew
2023-06-23 16:54:33 -04:00
parent b541d4cd2a
commit e6efbb4127
2 changed files with 30 additions and 4 deletions

View File

@@ -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;
}

View File

@@ -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();