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:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user