Fix notifications wrong corners after "clear all"

If "Clear all" is pressed in the notification shelf, some notifications may remain with an incorrect roundness state. The solution is to call onSwipeEnd() for each notification at the end of the animation to allow the notification to correctly manage its state.

Test: atest NotificationStackScrollLayoutControllerTest
Bug: 287740047
Change-Id: Iaa1d831b00738acfdfa2309a48a9f54d554300bc
This commit is contained in:
omarmt
2023-06-23 16:50:43 +00:00
committed by Omar Miatello
parent b6ca21a64d
commit a1e4f626c9
2 changed files with 35 additions and 2 deletions

View File

@@ -424,7 +424,8 @@ public class NotificationStackScrollLayoutController {
}
};
private final NotificationSwipeHelper.NotificationCallback mNotificationCallback =
@VisibleForTesting
final NotificationSwipeHelper.NotificationCallback mNotificationCallback =
new NotificationSwipeHelper.NotificationCallback() {
@Override
@@ -483,10 +484,11 @@ public class NotificationStackScrollLayoutController {
*/
public void handleChildViewDismissed(View view) {
// The View needs to clean up the Swipe states, e.g. roundness.
mView.onSwipeEnd();
if (mView.getClearAllInProgress()) {
return;
}
mView.onSwipeEnd();
if (view instanceof ExpandableNotificationRow) {
ExpandableNotificationRow row = (ExpandableNotificationRow) view;
if (row.isHeadsUp()) {

View File

@@ -87,6 +87,7 @@ import com.android.systemui.statusbar.notification.init.NotificationsController;
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
import com.android.systemui.statusbar.notification.row.NotificationGutsManager;
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController.NotificationPanelEvent;
import com.android.systemui.statusbar.notification.stack.NotificationSwipeHelper.NotificationCallback;
import com.android.systemui.statusbar.notification.stack.ui.viewmodel.NotificationListViewModel;
import com.android.systemui.statusbar.phone.HeadsUpManagerPhone;
import com.android.systemui.statusbar.phone.KeyguardBypassController;
@@ -414,6 +415,36 @@ public class NotificationStackScrollLayoutControllerTest extends SysuiTestCase {
MetricsProto.MetricsEvent.TYPE_ACTION));
}
@Test
public void callSwipeCallbacksDuringClearAll() {
initController(/* viewIsAttached= */ true);
ExpandableNotificationRow row = mock(ExpandableNotificationRow.class);
NotificationCallback notificationCallback = mController.mNotificationCallback;
when(mNotificationStackScrollLayout.getClearAllInProgress()).thenReturn(true);
notificationCallback.onBeginDrag(row);
verify(mNotificationStackScrollLayout).onSwipeBegin(row);
notificationCallback.handleChildViewDismissed(row);
verify(mNotificationStackScrollLayout).onSwipeEnd();
}
@Test
public void callSwipeCallbacksDuringClearNotification() {
initController(/* viewIsAttached= */ true);
ExpandableNotificationRow row = mock(ExpandableNotificationRow.class);
NotificationCallback notificationCallback = mController.mNotificationCallback;
when(mNotificationStackScrollLayout.getClearAllInProgress()).thenReturn(false);
notificationCallback.onBeginDrag(row);
verify(mNotificationStackScrollLayout).onSwipeBegin(row);
notificationCallback.handleChildViewDismissed(row);
verify(mNotificationStackScrollLayout).onSwipeEnd();
}
@Test
public void testOnMenuClickedLogging() {
ExpandableNotificationRow row = mock(ExpandableNotificationRow.class, RETURNS_DEEP_STUBS);