From 02e6e7e33afb846db0624d5399dd5f856a7c27e4 Mon Sep 17 00:00:00 2001 From: Caitlin Shkuratov Date: Fri, 28 Feb 2025 18:23:14 +0000 Subject: [SB][Notif] Make sure re-tapping notif chip hides HUN immediately. I originally implemented this behavior in ag/31139202 and it seemed like it worked because the minimum timeout for the HUN was 1 second. But later in ag/31744914 we updated the minimum timeout for chip HUNs to be 3 seconds, which means re-tapping the chip no longer worked if you did it within the first 3 seconds. This CL ensures we remove the HUN immediately if the user re-tapped the chip since it's a clear user action. Fixes: 399882113 Bug: 364653005 Flag: com.android.systemui.status_bar_notification_chips Test: Tap chip then immediately re-tap chip -> verify HUN immediately disappears (see video in bug) Test: atest HeadsUpCoordinatorTest Change-Id: I62e71c425df8d05cf2771ea2731d9ad1661d69f9 --- .../collection/coordinator/HeadsUpCoordinatorTest.kt | 7 ++++--- .../notification/collection/coordinator/HeadsUpCoordinator.kt | 9 +++++++-- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/coordinator/HeadsUpCoordinatorTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/coordinator/HeadsUpCoordinatorTest.kt index 609885d0214b..30983550f0f9 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/coordinator/HeadsUpCoordinatorTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/notification/collection/coordinator/HeadsUpCoordinatorTest.kt @@ -549,7 +549,7 @@ class HeadsUpCoordinatorTest : SysuiTestCase() { @Test @EnableFlags(StatusBarNotifChips.FLAG_NAME) - fun onPromotedNotificationChipTapped_chipTappedTwice_hunHiddenOnSecondTap() = + fun onPromotedNotificationChipTapped_chipTappedTwice_hunHiddenOnSecondTapImmediately() = testScope.runTest { whenever(notifCollection.getEntry(entry.key)).thenReturn(entry) @@ -570,8 +570,9 @@ class HeadsUpCoordinatorTest : SysuiTestCase() { executor.runAllReady() beforeFinalizeFilterListener.onBeforeFinalizeFilter(listOf(entry)) - // THEN HUN is hidden - verify(headsUpManager).removeNotification(eq(entry.key), eq(false), any()) + // THEN HUN is hidden and it's hidden immediately + verify(headsUpManager) + .removeNotification(eq(entry.key), /* releaseImmediately= */ eq(true), any()) } @Test diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/HeadsUpCoordinator.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/HeadsUpCoordinator.kt index f6e66237d438..fdb8cd871dd9 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/HeadsUpCoordinator.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/collection/coordinator/HeadsUpCoordinator.kt @@ -27,10 +27,10 @@ import com.android.systemui.statusbar.chips.notification.domain.interactor.Statu import com.android.systemui.statusbar.chips.notification.shared.StatusBarNotifChips import com.android.systemui.statusbar.notification.NotifPipelineFlags import com.android.systemui.statusbar.notification.collection.GroupEntry -import com.android.systemui.statusbar.notification.collection.PipelineEntry import com.android.systemui.statusbar.notification.collection.NotifCollection import com.android.systemui.statusbar.notification.collection.NotifPipeline import com.android.systemui.statusbar.notification.collection.NotificationEntry +import com.android.systemui.statusbar.notification.collection.PipelineEntry import com.android.systemui.statusbar.notification.collection.coordinator.dagger.CoordinatorScope import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifComparator import com.android.systemui.statusbar.notification.collection.listbuilder.pluggable.NotifPromoter @@ -459,7 +459,12 @@ constructor( } else { if (posted.isHeadsUpEntry) { // We don't want this to be interrupting anymore, let's remove it - hunMutator.removeNotification(posted.key, false /*removeImmediately*/) + // If the notification is pinned by the user, the only way a user can un-pin + // it is by tapping the status bar notification chip. Since that's a clear + // user action, we should remove the HUN immediately instead of waiting for + // any sort of minimum timeout. + val shouldRemoveImmediately = posted.isPinnedByUser + hunMutator.removeNotification(posted.key, shouldRemoveImmediately) } else { // Don't let the bind finish cancelHeadsUpBind(posted.entry) -- cgit v1.2.3-59-g8ed1b