Merge "Reset internal and visual swipe state whenever the shade collapses." into udc-dev

This commit is contained in:
Jeff DeCew
2023-04-22 16:04:53 +00:00
committed by Android (Google) Code Review
3 changed files with 51 additions and 9 deletions

View File

@@ -374,11 +374,10 @@ public class SwipeHelper implements Gefingerpoken {
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
final boolean captured = (mIsSwiping || mLongPressSent || mMenuRowIntercepting);
mIsSwiping = false;
mTouchedView = null;
mLongPressSent = false;
mCallback.onLongPressSent(null);
mMenuRowIntercepting = false;
resetSwipeState();
cancelLongPress();
if (captured) return true;
break;
@@ -491,7 +490,7 @@ public class SwipeHelper implements Gefingerpoken {
}
if (!mCancelled || wasRemoved) {
mCallback.onChildDismissed(animView);
resetSwipeState();
resetSwipeOfView(animView);
}
if (endAction != null) {
endAction.accept(mCancelled);
@@ -546,7 +545,7 @@ public class SwipeHelper implements Gefingerpoken {
if (!cancelled) {
updateSwipeProgressFromOffset(animView, canBeDismissed);
resetSwipeState();
resetSwipeOfView(animView);
}
onChildSnappedBack(animView, targetLeft);
});
@@ -806,9 +805,20 @@ public class SwipeHelper implements Gefingerpoken {
return mIsSwiping ? mTouchedView : null;
}
protected void resetSwipeOfView(View view) {
if (getSwipedView() == view) {
resetSwipeState();
}
}
public void resetSwipeState() {
View swipedView = getSwipedView();
mTouchedView = null;
mIsSwiping = false;
if (swipedView != null) {
snapChildIfNeeded(swipedView, false, 0);
onChildSnappedBack(swipedView, 0);
}
}
private float getTouchSlop(MotionEvent event) {

View File

@@ -4189,10 +4189,7 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable
mCentralSurfaces.resetUserExpandedStates();
clearTemporaryViews();
clearUserLockedViews();
if (mSwipeHelper.isSwiping()) {
mSwipeHelper.resetSwipeState();
updateContinuousShadowDrawing();
}
cancelActiveSwipe();
}
}
@@ -4264,6 +4261,9 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable
if (!mIsExpanded) {
mGroupExpansionManager.collapseGroups();
mExpandHelper.cancelImmediately();
if (!mIsExpansionChanging) {
cancelActiveSwipe();
}
}
updateNotificationAnimationStates();
updateChronometers();
@@ -6113,7 +6113,11 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable
}
}
@ShadeViewRefactor(RefactorComponent.STATE_RESOLVER)
private void cancelActiveSwipe() {
mSwipeHelper.resetSwipeState();
updateContinuousShadowDrawing();
}
void updateContinuousShadowDrawing() {
boolean continuousShadowUpdate = mAnimationRunning
|| mSwipeHelper.isSwiping();

View File

@@ -800,6 +800,34 @@ public class NotificationStackScrollLayoutTest extends SysuiTestCase {
assertEquals(mAmbientState.getScrollY(), 0);
}
@Test
public void onShadeClosesWithAnimationWillResetSwipeState() {
// GIVEN shade is expanded
mStackScroller.setIsExpanded(true);
clearInvocations(mNotificationSwipeHelper);
// WHEN closing the shade with the animations
mStackScroller.onExpansionStarted();
mStackScroller.setIsExpanded(false);
mStackScroller.onExpansionStopped();
// VERIFY swipe is reset
verify(mNotificationSwipeHelper).resetSwipeState();
}
@Test
public void onShadeClosesWithoutAnimationWillResetSwipeState() {
// GIVEN shade is expanded
mStackScroller.setIsExpanded(true);
clearInvocations(mNotificationSwipeHelper);
// WHEN closing the shade without the animation
mStackScroller.setIsExpanded(false);
// VERIFY swipe is reset
verify(mNotificationSwipeHelper).resetSwipeState();
}
@Test
public void testSplitShade_hasTopOverscroll() {
mTestableResources