Allow alertOverride if the summary GROUP_ALERT_ALL

Because we still require all children to have GROUP_ALERT_PARENT, the meaning of GROUP_ALERT_ALL is equivalent to GROUP_ALERT_PARENT in any case where we would have an alertOverride, so we now allow either of those values.
Also of note, because the alertOverride absolutely needs to have GROUP_ALERT_PARENT, and the semantics of heterogeneous child alert behaviors is unclear, we're keeping the requirement that all children have GROUP_APERT_PARENT to avoid over-applying this logic.

Bug: 185680162
Test: atest NotificationGroupManagerLegacyTest
Change-Id: I63a51cc1d94fc8a8617ca76a0fa479e3829816c6
This commit is contained in:
Jeff DeCew
2022-01-14 01:52:13 +00:00
parent 3572079710
commit 6ee64f6f26
2 changed files with 63 additions and 7 deletions

View File

@@ -384,9 +384,9 @@ public class NotificationGroupManagerLegacy implements
// * Only necessary when all notifications in the group use GROUP_ALERT_SUMMARY // * Only necessary when all notifications in the group use GROUP_ALERT_SUMMARY
// * Only necessary when at least one notification in the group is on a priority channel // * Only necessary when at least one notification in the group is on a priority channel
if (group.summary.getSbn().getNotification().getGroupAlertBehavior() if (group.summary.getSbn().getNotification().getGroupAlertBehavior()
!= Notification.GROUP_ALERT_SUMMARY) { == Notification.GROUP_ALERT_CHILDREN) {
if (SPEW) { if (SPEW) {
Log.d(TAG, "getPriorityConversationAlertOverride: summary != GROUP_ALERT_SUMMARY"); Log.d(TAG, "getPriorityConversationAlertOverride: summary == GROUP_ALERT_CHILDREN");
} }
return null; return null;
} }

View File

@@ -177,21 +177,69 @@ public class NotificationGroupManagerLegacyTest extends SysuiTestCase {
helpTestAlertOverrideWithSiblings(2); helpTestAlertOverrideWithSiblings(2);
} }
/**
* Helper for testing various sibling counts
*/
private void helpTestAlertOverrideWithSiblings(int numSiblings) {
helpTestAlertOverride(
/* numSiblings */ numSiblings,
/* summaryAlert */ Notification.GROUP_ALERT_SUMMARY,
/* childAlert */ Notification.GROUP_ALERT_SUMMARY,
/* siblingAlert */ Notification.GROUP_ALERT_SUMMARY,
/* expectAlertOverride */ true);
}
@Test
public void testAlertOverrideWithParentAlertAll() {
// tests that summary can have GROUP_ALERT_ALL and this still works
helpTestAlertOverride(
/* numSiblings */ 1,
/* summaryAlert */ Notification.GROUP_ALERT_ALL,
/* childAlert */ Notification.GROUP_ALERT_SUMMARY,
/* siblingAlert */ Notification.GROUP_ALERT_SUMMARY,
/* expectAlertOverride */ true);
}
@Test
public void testAlertOverrideWithParentAlertChild() {
// Tests that if the summary alerts CHILDREN, there's no alertOverride
helpTestAlertOverride(
/* numSiblings */ 1,
/* summaryAlert */ Notification.GROUP_ALERT_CHILDREN,
/* childAlert */ Notification.GROUP_ALERT_SUMMARY,
/* siblingAlert */ Notification.GROUP_ALERT_SUMMARY,
/* expectAlertOverride */ false);
}
@Test
public void testAlertOverrideWithChildrenAlertAll() {
// Tests that if the children alert ALL, there's no alertOverride
helpTestAlertOverride(
/* numSiblings */ 1,
/* summaryAlert */ Notification.GROUP_ALERT_SUMMARY,
/* childAlert */ Notification.GROUP_ALERT_ALL,
/* siblingAlert */ Notification.GROUP_ALERT_ALL,
/* expectAlertOverride */ false);
}
/** /**
* This tests, for a group with a priority entry and the given number of siblings, that: * This tests, for a group with a priority entry and the given number of siblings, that:
* 1) the priority entry is identified as the alertOverride for the group * 1) the priority entry is identified as the alertOverride for the group
* 2) the onAlertOverrideChanged method is called at that time * 2) the onAlertOverrideChanged method is called at that time
* 3) when the priority entry is removed, these are reversed * 3) when the priority entry is removed, these are reversed
*/ */
private void helpTestAlertOverrideWithSiblings(int numSiblings) { private void helpTestAlertOverride(int numSiblings,
int groupAlert = Notification.GROUP_ALERT_SUMMARY; @Notification.GroupAlertBehavior int summaryAlert,
@Notification.GroupAlertBehavior int childAlert,
@Notification.GroupAlertBehavior int siblingAlert,
boolean expectAlertOverride) {
// Create entries in an order so that the priority entry can be deemed the newest child. // Create entries in an order so that the priority entry can be deemed the newest child.
NotificationEntry[] siblings = new NotificationEntry[numSiblings]; NotificationEntry[] siblings = new NotificationEntry[numSiblings];
for (int i = 0; i < numSiblings; i++) { for (int i = 0; i < numSiblings; i++) {
siblings[i] = mGroupTestHelper.createChildNotification(groupAlert); siblings[i] = mGroupTestHelper.createChildNotification(siblingAlert);
} }
NotificationEntry priorityEntry = mGroupTestHelper.createChildNotification(groupAlert); NotificationEntry priorityEntry = mGroupTestHelper.createChildNotification(childAlert);
NotificationEntry summaryEntry = mGroupTestHelper.createSummaryNotification(groupAlert); NotificationEntry summaryEntry = mGroupTestHelper.createSummaryNotification(summaryAlert);
// The priority entry is an important conversation. // The priority entry is an important conversation.
when(mPeopleNotificationIdentifier.getPeopleNotificationType(eq(priorityEntry))) when(mPeopleNotificationIdentifier.getPeopleNotificationType(eq(priorityEntry)))
@@ -208,6 +256,14 @@ public class NotificationGroupManagerLegacyTest extends SysuiTestCase {
} }
mGroupManager.onEntryAdded(priorityEntry); mGroupManager.onEntryAdded(priorityEntry);
if (!expectAlertOverride) {
// Test expectation is that there will NOT be an alert, so verify that!
NotificationGroup summaryGroup =
mGroupManager.getGroupForSummary(summaryEntry.getSbn());
assertNull(summaryGroup.alertOverride);
return;
}
// Verify that the summary group has the priority child as its alertOverride // Verify that the summary group has the priority child as its alertOverride
NotificationGroup summaryGroup = mGroupManager.getGroupForSummary(summaryEntry.getSbn()); NotificationGroup summaryGroup = mGroupManager.getGroupForSummary(summaryEntry.getSbn());
assertEquals(priorityEntry, summaryGroup.alertOverride); assertEquals(priorityEntry, summaryGroup.alertOverride);