From 1274c7a3dc5f207b52431880e9563dcc621799fc Mon Sep 17 00:00:00 2001 From: Tony Date: Fri, 29 Mar 2019 14:51:28 -0500 Subject: [PATCH] Use motion event time instead of system time when detecting motion pause Bug: 129337684 Change-Id: Ie6e54658bf86094fbd9b6a8098e5ff147aafbfa7 --- .../touchcontrollers/FlingAndHoldTouchController.java | 7 ++++--- .../com/android/quickstep/AssistantTouchConsumer.java | 2 +- .../android/quickstep/OtherActivityInputConsumer.java | 3 ++- .../android/quickstep/util/MotionPauseDetector.java | 4 +--- src/com/android/launcher3/touch/SwipeDetector.java | 10 +++++++--- 5 files changed, 15 insertions(+), 11 deletions(-) diff --git a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/FlingAndHoldTouchController.java b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/FlingAndHoldTouchController.java index 0757e85093..6dd5e21a85 100644 --- a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/FlingAndHoldTouchController.java +++ b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/touchcontrollers/FlingAndHoldTouchController.java @@ -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 diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/AssistantTouchConsumer.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/AssistantTouchConsumer.java index c00b4dc70b..e8dc0c93c1 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/AssistantTouchConsumer.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/AssistantTouchConsumer.java @@ -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); diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/OtherActivityInputConsumer.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/OtherActivityInputConsumer.java index c8dcf80683..a2df699244 100644 --- a/quickstep/recents_ui_overrides/src/com/android/quickstep/OtherActivityInputConsumer.java +++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/OtherActivityInputConsumer.java @@ -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; diff --git a/quickstep/src/com/android/quickstep/util/MotionPauseDetector.java b/quickstep/src/com/android/quickstep/util/MotionPauseDetector.java index 96620bd954..ae5f3908be 100644 --- a/quickstep/src/com/android/quickstep/util/MotionPauseDetector.java +++ b/quickstep/src/com/android/quickstep/util/MotionPauseDetector.java @@ -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; diff --git a/src/com/android/launcher3/touch/SwipeDetector.java b/src/com/android/launcher3/touch/SwipeDetector.java index e558fc7c75..d758a293d8 100644 --- a/src/com/android/launcher3/touch/SwipeDetector.java +++ b/src/com/android/launcher3/touch/SwipeDetector.java @@ -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; }