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

Commit e7c26119 authored by Youngjun Kwak's avatar Youngjun Kwak Committed by Android (Google) Code Review
Browse files

Merge "Fix NotificationPanel animation jank." into rvc-qpr-dev

parents 9b830da4 efc2cf9c
Loading
Loading
Loading
Loading
+4 −5
Original line number Diff line number Diff line
@@ -298,10 +298,10 @@ public class NotificationPanelViewController extends OverlayPanelViewController
        // The glass pane is used to view touch events before passed to the notification list.
        // This allows us to initialize gesture listeners and detect when to close the notifications
        glassPane.setOnTouchListener((v, event) -> {
            if (event.getActionMasked() == MotionEvent.ACTION_UP) {
            if (isClosingAction(event)) {
                mNotificationListAtEndAtTimeOfTouch = false;
            }
            if (event.getActionMasked() == MotionEvent.ACTION_DOWN) {
            if (isOpeningAction(event)) {
                mFirstTouchDownOnGlassPane = event.getRawX();
                mNotificationListAtEndAtTimeOfTouch = mNotificationListAtEnd;
                // Reset the tracker when there is a touch down on the glass pane.
@@ -354,8 +354,7 @@ public class NotificationPanelViewController extends OverlayPanelViewController
            if (rect != null) {
                clippedHeight = rect.bottom;
            }
            if (!handled && event.getActionMasked() == MotionEvent.ACTION_UP
                    && mIsSwipingVerticallyToClose) {
            if (!handled && isClosingAction(event) && mIsSwipingVerticallyToClose) {
                if (getSettleClosePercentage() < getPercentageFromEndingEdge() && isTracking) {
                    animatePanel(DEFAULT_FLING_VELOCITY, false);
                } else if (clippedHeight != getLayout().getHeight() && isTracking) {
@@ -368,7 +367,7 @@ public class NotificationPanelViewController extends OverlayPanelViewController
            // Updating the mNotificationListAtEndAtTimeOfTouch state has to be done after
            // the event has been passed to the closeGestureDetector above, such that the
            // closeGestureDetector sees the up event before the state has changed.
            if (event.getActionMasked() == MotionEvent.ACTION_UP) {
            if (isClosingAction(event)) {
                mNotificationListAtEndAtTimeOfTouch = false;
            }
            return handled || isTracking;
+33 −2
Original line number Diff line number Diff line
@@ -191,6 +191,38 @@ public abstract class OverlayPanelViewController extends OverlayViewController {
        }
    }

    /** Checks if a {@link MotionEvent} is an action to open the panel.
     * @param e {@link MotionEvent} to check.
     * @return true only if opening action.
     */
    protected boolean isOpeningAction(MotionEvent e) {
        if (mAnimateDirection == POSITIVE_DIRECTION) {
            return e.getActionMasked() == MotionEvent.ACTION_DOWN;
        }

        if (mAnimateDirection == NEGATIVE_DIRECTION) {
            return e.getActionMasked() == MotionEvent.ACTION_UP;
        }

        return false;
    }

    /** Checks if a {@link MotionEvent} is an action to close the panel.
     * @param e {@link MotionEvent} to check.
     * @return true only if closing action.
     */
    protected boolean isClosingAction(MotionEvent e) {
        if (mAnimateDirection == POSITIVE_DIRECTION) {
            return e.getActionMasked() == MotionEvent.ACTION_UP;
        }

        if (mAnimateDirection == NEGATIVE_DIRECTION) {
            return e.getActionMasked() == MotionEvent.ACTION_DOWN;
        }

        return false;
    }

    /* ***************************************************************************************** *
     * Panel Animation
     * ***************************************************************************************** */
@@ -243,8 +275,7 @@ public abstract class OverlayPanelViewController extends OverlayViewController {
     * Depending on certain conditions, determines whether to fully expand or collapse the panel.
     */
    protected void maybeCompleteAnimation(MotionEvent event) {
        if (event.getActionMasked() == MotionEvent.ACTION_UP
                && isPanelVisible()) {
        if (isClosingAction(event) && isPanelVisible()) {
            if (mSettleClosePercentage < mPercentageFromEndingEdge) {
                animatePanel(DEFAULT_FLING_VELOCITY, false);
            } else {