diff options
3 files changed, 51 insertions, 9 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/SwipeHelper.java b/packages/SystemUI/src/com/android/systemui/SwipeHelper.java index 2503520ba1d9..aa94ad98f3e6 100644 --- a/packages/SystemUI/src/com/android/systemui/SwipeHelper.java +++ b/packages/SystemUI/src/com/android/systemui/SwipeHelper.java @@ -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) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java index 555d5027c7b6..75efc88ed4df 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java @@ -4184,10 +4184,7 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable mCentralSurfaces.resetUserExpandedStates(); clearTemporaryViews(); clearUserLockedViews(); - if (mSwipeHelper.isSwiping()) { - mSwipeHelper.resetSwipeState(); - updateContinuousShadowDrawing(); - } + cancelActiveSwipe(); } } @@ -4259,6 +4256,9 @@ public class NotificationStackScrollLayout extends ViewGroup implements Dumpable if (!mIsExpanded) { mGroupExpansionManager.collapseGroups(); mExpandHelper.cancelImmediately(); + if (!mIsExpansionChanging) { + cancelActiveSwipe(); + } } updateNotificationAnimationStates(); updateChronometers(); @@ -6114,7 +6114,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(); diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java index 7153e59fff37..f77160601f4d 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayoutTest.java @@ -801,6 +801,34 @@ public class NotificationStackScrollLayoutTest extends SysuiTestCase { } @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 .addOverride(R.bool.config_use_split_notification_shade, /* value= */ true); |