Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6edae6d2 authored by Jeff DeCew's avatar Jeff DeCew
Browse files

Reset internal and visual swipe state whenever the shade collapses.

Fixes: 259529672
Test: atest NotificationStackScrollLayoutTest
Change-Id: I3b6834df931790767b59c8d93083c912b3d7c370
parent b5c0e284
Loading
Loading
Loading
Loading
+14 −4
Original line number Diff line number Diff line
@@ -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) {
+9 −5
Original line number Diff line number Diff line
@@ -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();
+28 −0
Original line number Diff line number Diff line
@@ -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