Merge "Avoid duplicate calls to the FalsingManager upon Notification dismissals" into tm-qpr-dev

This commit is contained in:
András Kurucz
2023-02-24 09:43:38 +00:00
committed by Android (Google) Code Review
2 changed files with 147 additions and 6 deletions

View File

@@ -251,13 +251,13 @@ class NotificationSwipeHelper extends SwipeHelper implements NotificationSwipeAc
|| (isFastNonDismissGesture && isAbleToShowMenu);
int menuSnapTarget = menuRow.getMenuSnapTarget();
boolean isNonFalseMenuRevealingGesture =
!isFalseGesture() && isMenuRevealingGestureAwayFromMenu;
isMenuRevealingGestureAwayFromMenu && !isFalseGesture();
if ((isNonDismissGestureTowardsMenu || isNonFalseMenuRevealingGesture)
&& menuSnapTarget != 0) {
// Menu has not been snapped to previously and this is menu revealing gesture
snapOpen(animView, menuSnapTarget, velocity);
menuRow.onSnapOpen();
} else if (isDismissGesture(ev) && !gestureTowardsMenu) {
} else if (isDismissGesture && !gestureTowardsMenu) {
dismiss(animView, velocity);
menuRow.onDismiss();
} else {

View File

@@ -20,6 +20,7 @@ import static junit.framework.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.ArgumentMatchers.anyFloat;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doReturn;
@@ -227,14 +228,154 @@ public class NotificationSwipeHelperTest extends SysuiTestCase {
}
@Test
public void testHandleUpEvent_menuRow() {
when(mSwipeHelper.getCurrentMenuRow()).thenReturn(mMenuRow);
doNothing().when(mSwipeHelper).handleMenuRowSwipe(mEvent, mView, 0, mMenuRow);
public void testHandleUpEvent_menuRowWithoutMenu_dismiss() {
doNothing().when(mSwipeHelper).dismiss(any(), anyFloat());
doReturn(true).when(mSwipeHelper).isDismissGesture(any());
doReturn(true).when(mSwipeHelper).swipedFarEnough();
when(mMenuRow.shouldShowMenu()).thenReturn(true);
mSwipeHelper.setCurrentMenuRow(mMenuRow);
assertTrue("Menu row exists",
mSwipeHelper.handleUpEvent(mEvent, mView, 0, 0));
verify(mMenuRow, times(1)).onTouchEnd();
verify(mSwipeHelper, times(1)).handleMenuRowSwipe(mEvent, mView, 0, mMenuRow);
verify(mSwipeHelper, times(1)).isDismissGesture(mEvent);
verify(mSwipeHelper, times(1)).dismiss(mView, 0);
verify(mSwipeHelper, never()).isFalseGesture();
}
@Test
public void testHandleUpEvent_menuRowWithoutMenu_snapback() {
doNothing().when(mSwipeHelper).snapChild(any(), anyInt(), anyFloat());
doReturn(false).when(mSwipeHelper).isDismissGesture(any());
doReturn(true).when(mSwipeHelper).swipedFarEnough();
when(mMenuRow.shouldShowMenu()).thenReturn(true);
mSwipeHelper.setCurrentMenuRow(mMenuRow);
assertTrue("Menu row exists",
mSwipeHelper.handleUpEvent(mEvent, mView, 0, 0));
verify(mMenuRow, times(1)).onTouchEnd();
verify(mSwipeHelper, times(1)).isDismissGesture(mEvent);
verify(mSwipeHelper, times(1)).snapClosed(mView, 0);
verify(mMenuRow, times(1)).onSnapClosed();
verify(mSwipeHelper, never()).isFalseGesture();
}
@Test
public void testHandleUpEvent_menuRowWithOpenMenu_dismissed() {
doNothing().when(mSwipeHelper).dismiss(any(), anyFloat());
doReturn(true).when(mSwipeHelper).isDismissGesture(any());
doReturn(true).when(mSwipeHelper).swipedFarEnough();
when(mMenuRow.shouldShowMenu()).thenReturn(true);
when(mMenuRow.isSnappedAndOnSameSide()).thenReturn(true);
mSwipeHelper.setCurrentMenuRow(mMenuRow);
assertTrue("Menu row exists",
mSwipeHelper.handleUpEvent(mEvent, mView, 0, 0));
verify(mMenuRow, times(1)).onTouchEnd();
verify(mSwipeHelper, times(1)).isDismissGesture(mEvent);
verify(mSwipeHelper, times(1)).dismiss(mView, 0);
verify(mSwipeHelper, never()).isFalseGesture();
}
@Test
public void testHandleUpEvent_menuRowWithOpenMenu_snapback() {
doNothing().when(mSwipeHelper).snapChild(any(), anyInt(), anyFloat());
doReturn(false).when(mSwipeHelper).isDismissGesture(any());
doReturn(true).when(mSwipeHelper).swipedFarEnough();
when(mMenuRow.shouldShowMenu()).thenReturn(true);
when(mMenuRow.isSnappedAndOnSameSide()).thenReturn(true);
mSwipeHelper.setCurrentMenuRow(mMenuRow);
assertTrue("Menu row exists",
mSwipeHelper.handleUpEvent(mEvent, mView, 0, 0));
verify(mMenuRow, times(1)).onTouchEnd();
verify(mSwipeHelper, times(1)).isDismissGesture(mEvent);
verify(mSwipeHelper, times(1)).snapClosed(mView, 0);
verify(mMenuRow, times(1)).onSnapClosed();
verify(mSwipeHelper, never()).isFalseGesture();
}
@Test
public void testHandleUpEvent_menuRowWithClosedMenu_dismissed() {
doNothing().when(mSwipeHelper).dismiss(any(), anyFloat());
doReturn(true).when(mSwipeHelper).isDismissGesture(any());
doReturn(true).when(mSwipeHelper).swipedFarEnough();
when(mMenuRow.shouldShowMenu()).thenReturn(true);
when(mMenuRow.isSnappedAndOnSameSide()).thenReturn(false);
mSwipeHelper.setCurrentMenuRow(mMenuRow);
assertTrue("Menu row exists",
mSwipeHelper.handleUpEvent(mEvent, mView, 0, 0));
verify(mMenuRow, times(1)).onTouchEnd();
verify(mSwipeHelper, times(1)).isDismissGesture(mEvent);
verify(mSwipeHelper, times(1)).dismiss(mView, 0);
verify(mSwipeHelper, never()).isFalseGesture();
}
@Test
public void testHandleUpEvent_menuRowWithClosedMenu_snapback() {
doNothing().when(mSwipeHelper).snapChild(any(), anyInt(), anyFloat());
doReturn(false).when(mSwipeHelper).isDismissGesture(any());
doReturn(true).when(mSwipeHelper).swipedFarEnough();
when(mMenuRow.shouldShowMenu()).thenReturn(true);
when(mMenuRow.isSnappedAndOnSameSide()).thenReturn(false);
mSwipeHelper.setCurrentMenuRow(mMenuRow);
assertTrue("Menu row exists",
mSwipeHelper.handleUpEvent(mEvent, mView, 0, 0));
verify(mMenuRow, times(1)).onTouchEnd();
verify(mSwipeHelper, times(1)).isDismissGesture(mEvent);
verify(mSwipeHelper, times(1)).snapClosed(mView, 0);
verify(mMenuRow, times(1)).onSnapClosed();
verify(mSwipeHelper, never()).isFalseGesture();
}
@Test
public void testIsDismissGesture() {
doReturn(false).when(mSwipeHelper).isFalseGesture();
doReturn(true).when(mSwipeHelper).swipedFarEnough();
doReturn(true).when(mSwipeHelper).swipedFastEnough();
when(mCallback.canChildBeDismissedInDirection(any(), anyBoolean())).thenReturn(true);
when(mEvent.getActionMasked()).thenReturn(MotionEvent.ACTION_UP);
assertTrue("Should be a dismiss gesture", mSwipeHelper.isDismissGesture(mEvent));
verify(mSwipeHelper, times(1)).isFalseGesture();
}
@Test
public void testIsDismissGesture_falseGesture() {
doReturn(true).when(mSwipeHelper).isFalseGesture();
doReturn(true).when(mSwipeHelper).swipedFarEnough();
doReturn(true).when(mSwipeHelper).swipedFastEnough();
when(mCallback.canChildBeDismissedInDirection(any(), anyBoolean())).thenReturn(true);
when(mEvent.getActionMasked()).thenReturn(MotionEvent.ACTION_UP);
assertFalse("False gesture should stop dismissal", mSwipeHelper.isDismissGesture(mEvent));
verify(mSwipeHelper, times(1)).isFalseGesture();
}
@Test
public void testIsDismissGesture_farEnough() {
doReturn(false).when(mSwipeHelper).isFalseGesture();
doReturn(true).when(mSwipeHelper).swipedFarEnough();
doReturn(false).when(mSwipeHelper).swipedFastEnough();
when(mCallback.canChildBeDismissedInDirection(any(), anyBoolean())).thenReturn(true);
when(mEvent.getActionMasked()).thenReturn(MotionEvent.ACTION_UP);
assertTrue("Should be a dismissal", mSwipeHelper.isDismissGesture(mEvent));
verify(mSwipeHelper, times(1)).isFalseGesture();
}
@Test
public void testIsDismissGesture_notFarOrFastEnough() {
doReturn(false).when(mSwipeHelper).isFalseGesture();
doReturn(false).when(mSwipeHelper).swipedFarEnough();
doReturn(false).when(mSwipeHelper).swipedFastEnough();
when(mCallback.canChildBeDismissedInDirection(any(), anyBoolean())).thenReturn(true);
when(mEvent.getActionMasked()).thenReturn(MotionEvent.ACTION_UP);
assertFalse("Should not be a dismissal", mSwipeHelper.isDismissGesture(mEvent));
verify(mSwipeHelper, times(1)).isFalseGesture();
}
@Test