Merge "Do not re-pin unpinned HUNs" into udc-dev

This commit is contained in:
Lyn Han
2023-05-19 00:42:31 +00:00
committed by Android (Google) Code Review
2 changed files with 62 additions and 2 deletions

View File

@@ -140,7 +140,13 @@ public abstract class HeadsUpManager extends AlertingNotificationManager {
}
protected boolean shouldHeadsUpBecomePinned(@NonNull NotificationEntry entry) {
return hasFullScreenIntent(entry);
final HeadsUpEntry headsUpEntry = getHeadsUpEntry(entry.getKey());
if (headsUpEntry == null) {
// This should not happen since shouldHeadsUpBecomePinned is always called after adding
// the NotificationEntry into AlertingNotificationManager's mAlertEntries map.
return hasFullScreenIntent(entry);
}
return hasFullScreenIntent(entry) && !headsUpEntry.wasUnpinned;
}
protected boolean hasFullScreenIntent(@NonNull NotificationEntry entry) {
@@ -151,6 +157,9 @@ public abstract class HeadsUpManager extends AlertingNotificationManager {
@NonNull HeadsUpManager.HeadsUpEntry headsUpEntry, boolean isPinned) {
mLogger.logSetEntryPinned(headsUpEntry.mEntry, isPinned);
NotificationEntry entry = headsUpEntry.mEntry;
if (!isPinned) {
headsUpEntry.wasUnpinned = true;
}
if (entry.isRowPinned() != isPinned) {
entry.setRowPinned(isPinned);
updatePinnedMode();
@@ -177,7 +186,9 @@ public abstract class HeadsUpManager extends AlertingNotificationManager {
protected void onAlertEntryAdded(AlertEntry alertEntry) {
NotificationEntry entry = alertEntry.mEntry;
entry.setHeadsUp(true);
setEntryPinned((HeadsUpEntry) alertEntry, shouldHeadsUpBecomePinned(entry));
final boolean shouldPin = shouldHeadsUpBecomePinned(entry);
setEntryPinned((HeadsUpEntry) alertEntry, shouldPin);
EventLogTags.writeSysuiHeadsUpStatus(entry.getKey(), 1 /* visible */);
for (OnHeadsUpChangedListener listener : mListeners) {
listener.onHeadsUpStateChanged(entry, true);
@@ -411,6 +422,7 @@ public abstract class HeadsUpManager extends AlertingNotificationManager {
protected class HeadsUpEntry extends AlertEntry {
public boolean remoteInputActive;
protected boolean expanded;
protected boolean wasUnpinned;
@Override
public boolean isSticky() {

View File

@@ -113,6 +113,54 @@ public class HeadsUpManagerTest extends AlertingNotificationManagerTest {
verify(mLogger, times(1)).logNotificationActuallyRemoved(eq(mEntry));
}
@Test
public void testShouldHeadsUpBecomePinned_hasFSI_notUnpinned_true() {
// Set up NotifEntry with FSI
NotificationEntry notifEntry = new NotificationEntryBuilder()
.setSbn(createNewNotification(/* id= */ 0))
.build();
notifEntry.getSbn().getNotification().fullScreenIntent = PendingIntent.getActivity(
getContext(), 0, new Intent(getContext(), this.getClass()),
PendingIntent.FLAG_MUTABLE_UNAUDITED);
// Add notifEntry to ANM mAlertEntries map and make it NOT unpinned
mHeadsUpManager.showNotification(notifEntry);
HeadsUpManager.HeadsUpEntry headsUpEntry =
mHeadsUpManager.getHeadsUpEntry(notifEntry.getKey());
headsUpEntry.wasUnpinned = false;
assertTrue(mHeadsUpManager.shouldHeadsUpBecomePinned(notifEntry));
}
@Test
public void testShouldHeadsUpBecomePinned_wasUnpinned_false() {
// Set up NotifEntry with FSI
NotificationEntry notifEntry = new NotificationEntryBuilder()
.setSbn(createNewNotification(/* id= */ 0))
.build();
notifEntry.getSbn().getNotification().fullScreenIntent = PendingIntent.getActivity(
getContext(), 0, new Intent(getContext(), this.getClass()),
PendingIntent.FLAG_MUTABLE_UNAUDITED);
// Add notifEntry to ANM mAlertEntries map and make it unpinned
mHeadsUpManager.showNotification(notifEntry);
HeadsUpManager.HeadsUpEntry headsUpEntry =
mHeadsUpManager.getHeadsUpEntry(notifEntry.getKey());
headsUpEntry.wasUnpinned = true;
assertFalse(mHeadsUpManager.shouldHeadsUpBecomePinned(notifEntry));
}
@Test
public void testShouldHeadsUpBecomePinned_noFSI_false() {
// Set up NotifEntry with no FSI
NotificationEntry notifEntry = new NotificationEntryBuilder()
.setSbn(createNewNotification(/* id= */ 0))
.build();
assertFalse(mHeadsUpManager.shouldHeadsUpBecomePinned(notifEntry));
}
@Test
public void testShowNotification_autoDismissesWithAccessibilityTimeout() {
doReturn(TEST_A11Y_AUTO_DISMISS_TIME).when(mAccessibilityMgr)