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

Commit b7240136 authored by Jorim Jaggi's avatar Jorim Jaggi
Browse files

Improve fling logic for opening the notification shade

Bug: 15858126
Change-Id: I800b00f80b315218358ea9acbd3614e6d5c87c45
parent 3857ac4b
Loading
Loading
Loading
Loading
+19 −16
Original line number Diff line number Diff line
@@ -195,7 +195,12 @@ public abstract class PanelView extends FrameLayout {

            case MotionEvent.ACTION_MOVE:
                float h = y - mInitialTouchY;
                if (Math.abs(h) > mTouchSlop && Math.abs(h) > Math.abs(x - mInitialTouchX)) {

                // If the panel was collapsed when touching, we only need to check for the
                // y-component of the gesture, as we have no conflicting horizontal gesture.
                if (Math.abs(h) > mTouchSlop
                        && (Math.abs(h) > Math.abs(x - mInitialTouchX)
                                || mInitialOffsetOnTouch == 0f)) {
                    mTouchSlopExceeded = true;
                    if (waitForTouchSlop && !mTracking) {
                        mInitialOffsetOnTouch = mExpandedHeight;
@@ -229,8 +234,15 @@ public abstract class PanelView extends FrameLayout {
                trackMovement(event);
                if ((mTracking && mTouchSlopExceeded)
                        || event.getActionMasked() == MotionEvent.ACTION_CANCEL) {
                    float vel = getCurrentVelocity();
                    boolean expand = flingExpands(vel);
                    float vel = 0f;
                    float vectorVel = 0f;
                    if (mVelocityTracker != null) {
                        mVelocityTracker.computeCurrentVelocity(1000);
                        vel = mVelocityTracker.getYVelocity();
                        vectorVel = (float) Math.hypot(
                                mVelocityTracker.getXVelocity(), mVelocityTracker.getYVelocity());
                    }
                    boolean expand = flingExpands(vel, vectorVel);
                    onTrackingStopped(expand);
                    fling(vel, expand);
                } else {
@@ -259,16 +271,6 @@ public abstract class PanelView extends FrameLayout {
        onExpandingStarted();
    }

    private float getCurrentVelocity() {

        // the velocitytracker might be null if we got a bad input stream
        if (mVelocityTracker == null) {
            return 0;
        }
        mVelocityTracker.computeCurrentVelocity(1000);
        return mVelocityTracker.getYVelocity();
    }

    @Override
    public boolean onInterceptTouchEvent(MotionEvent event) {
        if (mInstantExpanding) {
@@ -368,11 +370,12 @@ public abstract class PanelView extends FrameLayout {
    }

    /**
     * @param vel the current velocity of the motion
     * @param vel the current vertical velocity of the motion
     * @param vectorVel the length of the vectorial velocity
     * @return whether a fling should expands the panel; contracts otherwise
     */
    private boolean flingExpands(float vel) {
        if (Math.abs(vel) < mFlingAnimationUtils.getMinVelocityPxPerSecond()) {
    private boolean flingExpands(float vel, float vectorVel) {
        if (Math.abs(vectorVel) < mFlingAnimationUtils.getMinVelocityPxPerSecond()) {
            return getExpandedFraction() > 0.5f;
        } else {
            return vel > 0;