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

Commit 1274c7a3 authored by Tony's avatar Tony
Browse files

Use motion event time instead of system time when detecting motion pause

Bug: 129337684
Change-Id: Ie6e54658bf86094fbd9b6a8098e5ff147aafbfa7
parent 1ac6c84b
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ import android.animation.Animator;
import android.animation.AnimatorListenerAdapter;
import android.animation.AnimatorSet;
import android.view.HapticFeedbackConstants;
import android.view.MotionEvent;

import com.android.launcher3.Launcher;
import com.android.launcher3.LauncherState;
@@ -96,9 +97,9 @@ public class FlingAndHoldTouchController extends PortraitStatesTouchController {
    }

    @Override
    public boolean onDrag(float displacement) {
        mMotionPauseDetector.addPosition(displacement, 0);
        return super.onDrag(displacement);
    public boolean onDrag(float displacement, MotionEvent event) {
        mMotionPauseDetector.addPosition(displacement, 0, event.getEventTime());
        return super.onDrag(displacement, event);
    }

    @Override
+1 −1
Original line number Diff line number Diff line
@@ -170,7 +170,7 @@ public class AssistantTouchConsumer implements InputConsumer {
                    // Movement
                    mDistance = (float) Math.hypot(mLastPos.x - mStartDragPos.x,
                            mLastPos.y - mStartDragPos.y);
                    mMotionPauseDetector.addPosition(mDistance, 0);
                    mMotionPauseDetector.addPosition(mDistance, 0, ev.getEventTime());
                    if (mDistance >= 0) {
                        final long diff = SystemClock.uptimeMillis() - mDragTime;
                        mTimeFraction = Math.min(diff * 1f / mTimeThreshold, 1);
+2 −1
Original line number Diff line number Diff line
@@ -251,7 +251,8 @@ public class OtherActivityInputConsumer extends ContextWrapper implements InputC
                        float orthogonalDisplacement = !isLandscape
                                ? ev.getX() - mDownPos.x
                                : ev.getY() - mDownPos.y;
                        mMotionPauseDetector.addPosition(displacement, orthogonalDisplacement);
                        mMotionPauseDetector.addPosition(displacement, orthogonalDisplacement,
                                ev.getEventTime());
                    }
                }
                break;
+1 −3
Original line number Diff line number Diff line
@@ -17,7 +17,6 @@ package com.android.quickstep.util;

import android.content.Context;
import android.content.res.Resources;
import android.os.SystemClock;
import android.view.MotionEvent;

import com.android.launcher3.Alarm;
@@ -80,7 +79,7 @@ public class MotionPauseDetector {
     *
     * TODO: Use historical positions as well, e.g. {@link MotionEvent#getHistoricalY(int, int)}.
     */
    public void addPosition(float position, float orthogonalPosition) {
    public void addPosition(float position, float orthogonalPosition, long time) {
        if (mFirstPosition == null) {
            mFirstPosition = position;
        }
@@ -88,7 +87,6 @@ public class MotionPauseDetector {
            mFirstOrthogonalPosition = orthogonalPosition;
        }
        mForcePauseTimeout.setAlarm(FORCE_PAUSE_TIMEOUT);
        long time = SystemClock.uptimeMillis();
        if (mPreviousTime != null && mPreviousPosition != null) {
            long changeInTime = Math.max(1, time - mPreviousTime);
            float changeInPosition = position - mPreviousPosition;
+7 −3
Original line number Diff line number Diff line
@@ -219,6 +219,10 @@ public class SwipeDetector {

        boolean onDrag(float displacement);

        default boolean onDrag(float displacement, MotionEvent event) {
            return onDrag(displacement);
        }

        void onDragEnd(float velocity, boolean fling);
    }

@@ -307,7 +311,7 @@ public class SwipeDetector {
                    setState(ScrollState.DRAGGING);
                }
                if (mState == ScrollState.DRAGGING) {
                    reportDragging();
                    reportDragging(ev);
                }
                mLastPos.set(ev.getX(pointerIndex), ev.getY(pointerIndex));
                break;
@@ -359,14 +363,14 @@ public class SwipeDetector {
        return mDir.isPositive(mSubtractDisplacement);
    }

    private boolean reportDragging() {
    private boolean reportDragging(MotionEvent event) {
        if (mDisplacement != mLastDisplacement) {
            if (DBG) {
                Log.d(TAG, String.format("onDrag disp=%.1f", mDisplacement));
            }

            mLastDisplacement = mDisplacement;
            return mListener.onDrag(mDisplacement - mSubtractDisplacement);
            return mListener.onDrag(mDisplacement - mSubtractDisplacement, event);
        }
        return true;
    }