Revert "Use movement on the trackpad instead of on screen for trackpad gestures used for gesture nav"
This reverts commit aef9d75f7868c512d11760e7f3bec4819424722a.
Reason for revert: The movement on the screen is proportional to the movement on the trackpad for gestures since finger ballistics only applies to cursor movement
Change-Id: Idd7f948545c35988183cfac0b74c730cf699d5f9
diff --git a/quickstep/src/com/android/quickstep/inputconsumers/MotionEventsHandler.java b/quickstep/src/com/android/quickstep/inputconsumers/MotionEventsHandler.java
deleted file mode 100644
index 54edde6..0000000
--- a/quickstep/src/com/android/quickstep/inputconsumers/MotionEventsHandler.java
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Copyright (C) 2022 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.quickstep.inputconsumers;
-
-import static android.view.MotionEvent.AXIS_GESTURE_X_OFFSET;
-import static android.view.MotionEvent.AXIS_GESTURE_Y_OFFSET;
-import static android.view.MotionEvent.INVALID_POINTER_ID;
-
-import static com.android.launcher3.Utilities.getTrackpadMotionEventScale;
-import static com.android.launcher3.Utilities.isTrackpadMotionEvent;
-
-import android.content.Context;
-import android.graphics.PointF;
-import android.view.MotionEvent;
-
-import com.android.quickstep.util.NavBarPosition;
-
-/**
- * A motion event handler that can tracks the states of a gesture, whether it's from on-screen
- * touch or trackpad gesture.
- */
-public class MotionEventsHandler {
-
- private final PointF mDownPos = new PointF();
- private final PointF mLastPos = new PointF();
- private final int mScale;
-
- private int mActivePointerId = INVALID_POINTER_ID;
-
- private float mCurrentTrackpadOffsetX = 0;
- private float mCurrentTrackpadOffsetY = 0;
-
- public MotionEventsHandler(Context context) {
- mScale = getTrackpadMotionEventScale(context);
- }
-
- public int getActivePointerId() {
- return mActivePointerId;
- }
-
- public void onActionDown(MotionEvent ev) {
- mActivePointerId = ev.getPointerId(0);
- if (isTrackpadMotionEvent(ev)) {
- mCurrentTrackpadOffsetX = 0;
- mCurrentTrackpadOffsetY = 0;
- } else {
- mDownPos.set(ev.getX(), ev.getY());
- mLastPos.set(mDownPos);
- }
- }
-
- public void onActionMove(MotionEvent ev) {
- int pointerIndex = ev.findPointerIndex(mActivePointerId);
- if (isTrackpadMotionEvent(ev)) {
- mCurrentTrackpadOffsetX += ev.getAxisValue(AXIS_GESTURE_X_OFFSET, pointerIndex)
- * mScale;
- mCurrentTrackpadOffsetY += ev.getAxisValue(AXIS_GESTURE_Y_OFFSET, pointerIndex)
- * mScale;
- } else {
- mLastPos.set(ev.getX(pointerIndex), ev.getY(pointerIndex));
- }
- }
-
- public void onActionPointerUp(MotionEvent ev) {
- int ptrIdx = ev.getActionIndex();
- int ptrId = ev.getPointerId(ptrIdx);
- if (ptrId == mActivePointerId && !isTrackpadMotionEvent(ev)) {
- final int newPointerIdx = ptrIdx == 0 ? 1 : 0;
- mDownPos.set(
- ev.getX(newPointerIdx) - (mLastPos.x - mDownPos.x),
- ev.getY(newPointerIdx) - (mLastPos.y - mDownPos.y));
- mLastPos.set(ev.getX(newPointerIdx), ev.getY(newPointerIdx));
- mActivePointerId = ev.getPointerId(newPointerIdx);
- }
- }
-
- public float getDisplacement(MotionEvent ev, NavBarPosition mNavBarPosition) {
- if (mNavBarPosition.isRightEdge()) {
- if (isTrackpadMotionEvent(ev)) {
- return mCurrentTrackpadOffsetX;
- }
- return ev.getX() - mDownPos.x;
- } else if (mNavBarPosition.isLeftEdge()) {
- if (isTrackpadMotionEvent(ev)) {
- return -mCurrentTrackpadOffsetX;
- }
- return mDownPos.x - ev.getX();
- } else {
- if (isTrackpadMotionEvent(ev)) {
- return mCurrentTrackpadOffsetY;
- }
- return ev.getY() - mDownPos.y;
- }
- }
-
- public float getDisplacementX(MotionEvent ev) {
- return isTrackpadMotionEvent(ev) ? mCurrentTrackpadOffsetX : mLastPos.x - mDownPos.x;
- }
-
- public float getDisplacementY(MotionEvent ev) {
- return isTrackpadMotionEvent(ev) ? mCurrentTrackpadOffsetY : mLastPos.y - mDownPos.y;
- }
-}
diff --git a/quickstep/src/com/android/quickstep/inputconsumers/OtherActivityInputConsumer.java b/quickstep/src/com/android/quickstep/inputconsumers/OtherActivityInputConsumer.java
index cd0d463..601533d 100644
--- a/quickstep/src/com/android/quickstep/inputconsumers/OtherActivityInputConsumer.java
+++ b/quickstep/src/com/android/quickstep/inputconsumers/OtherActivityInputConsumer.java
@@ -26,8 +26,6 @@
import static com.android.launcher3.PagedView.ACTION_MOVE_ALLOW_EASY_FLING;
import static com.android.launcher3.PagedView.DEBUG_FAILED_QUICKSWITCH;
import static com.android.launcher3.Utilities.EDGE_NAV_BAR;
-import static com.android.launcher3.Utilities.getXVelocity;
-import static com.android.launcher3.Utilities.getYVelocity;
import static com.android.launcher3.Utilities.squaredHypot;
import static com.android.launcher3.util.Executors.MAIN_EXECUTOR;
import static com.android.launcher3.util.TraceHelper.FLAG_CHECK_FOR_RACE_CONDITIONS;
@@ -112,8 +110,9 @@
private final FinishImmediatelyHandler mCleanupHandler = new FinishImmediatelyHandler();
private final boolean mIsDeferredDownTarget;
-
- private final MotionEventsHandler mMotionEventsHandler;
+ private final PointF mDownPos = new PointF();
+ private final PointF mLastPos = new PointF();
+ private int mActivePointerId = INVALID_POINTER_ID;
// Distance after which we start dragging the window.
private final float mTouchSlop;
@@ -154,7 +153,6 @@
mVelocityTracker = VelocityTracker.obtain();
mInputMonitorCompat = inputMonitorCompat;
mInputEventReceiver = inputEventReceiver;
- mMotionEventsHandler = new MotionEventsHandler(base);
boolean continuingPreviousGesture = mTaskAnimationManager.isRecentsAnimationRunning();
mIsDeferredDownTarget = !continuingPreviousGesture && isDeferredDownTarget;
@@ -224,7 +222,9 @@
Object traceToken = TraceHelper.INSTANCE.beginSection(DOWN_EVT,
FLAG_CHECK_FOR_RACE_CONDITIONS);
- mMotionEventsHandler.onActionDown(ev);
+ mActivePointerId = ev.getPointerId(0);
+ mDownPos.set(ev.getX(), ev.getY());
+ mLastPos.set(mDownPos);
// Start the window animation on down to give more time for launcher to draw if the
// user didn't start the gesture over the back button
@@ -247,20 +247,27 @@
break;
}
case ACTION_POINTER_UP: {
- mMotionEventsHandler.onActionPointerUp(ev);
+ int ptrIdx = ev.getActionIndex();
+ int ptrId = ev.getPointerId(ptrIdx);
+ if (ptrId == mActivePointerId) {
+ final int newPointerIdx = ptrIdx == 0 ? 1 : 0;
+ mDownPos.set(
+ ev.getX(newPointerIdx) - (mLastPos.x - mDownPos.x),
+ ev.getY(newPointerIdx) - (mLastPos.y - mDownPos.y));
+ mLastPos.set(ev.getX(newPointerIdx), ev.getY(newPointerIdx));
+ mActivePointerId = ev.getPointerId(newPointerIdx);
+ }
break;
}
case ACTION_MOVE: {
- int pointerIndex = ev.findPointerIndex(mMotionEventsHandler.getActivePointerId());
+ int pointerIndex = ev.findPointerIndex(mActivePointerId);
if (pointerIndex == INVALID_POINTER_ID) {
break;
}
-
- mMotionEventsHandler.onActionMove(ev);
- final float displacement = mMotionEventsHandler.getDisplacement(ev,
- mNavBarPosition);
- final float displacementX = mMotionEventsHandler.getDisplacementX(ev);
- final float displacementY= mMotionEventsHandler.getDisplacementY(ev);
+ mLastPos.set(ev.getX(pointerIndex), ev.getY(pointerIndex));
+ float displacement = getDisplacement(ev);
+ float displacementX = mLastPos.x - mDownPos.x;
+ float displacementY = mLastPos.y - mDownPos.y;
if (!mPassedWindowMoveSlop) {
if (!mIsDeferredDownTarget) {
@@ -342,8 +349,8 @@
case ACTION_CANCEL:
case ACTION_UP: {
if (DEBUG_FAILED_QUICKSWITCH && !mPassedWindowMoveSlop) {
- final float displacementX = mMotionEventsHandler.getDisplacementX(ev);
- final float displacementY = mMotionEventsHandler.getDisplacementY(ev);
+ float displacementX = mLastPos.x - mDownPos.x;
+ float displacementY = mLastPos.y - mDownPos.y;
Log.d("Quickswitch", "mPassedWindowMoveSlop=false"
+ " disp=" + squaredHypot(displacementX, displacementY)
+ " slop=" + mSquaredTouchSlop);
@@ -400,19 +407,16 @@
mInteractionHandler.onGestureCancelled();
} else {
mVelocityTracker.computeCurrentVelocity(PX_PER_MS);
- int activePointerId = mMotionEventsHandler.getActivePointerId();
- float velocityXPxPerMs = getXVelocity(mVelocityTracker, ev, activePointerId);
- float velocityYPxPerMs = getYVelocity(mVelocityTracker, ev, activePointerId);
+ float velocityXPxPerMs = mVelocityTracker.getXVelocity(mActivePointerId);
+ float velocityYPxPerMs = mVelocityTracker.getYVelocity(mActivePointerId);
float velocityPxPerMs = mNavBarPosition.isRightEdge()
? velocityXPxPerMs
: mNavBarPosition.isLeftEdge()
? -velocityXPxPerMs
: velocityYPxPerMs;
- mInteractionHandler.updateDisplacement(
- mMotionEventsHandler.getDisplacement(ev, mNavBarPosition)
- - mStartDisplacement);
- mInteractionHandler.onGestureEnded(
- velocityPxPerMs, new PointF(velocityXPxPerMs, velocityYPxPerMs));
+ mInteractionHandler.updateDisplacement(getDisplacement(ev) - mStartDisplacement);
+ mInteractionHandler.onGestureEnded(velocityPxPerMs,
+ new PointF(velocityXPxPerMs, velocityYPxPerMs));
}
} else {
// Since we start touch tracking on DOWN, we may reach this state without actually
@@ -475,6 +479,16 @@
}
}
+ private float getDisplacement(MotionEvent ev) {
+ if (mNavBarPosition.isRightEdge()) {
+ return ev.getX() - mDownPos.x;
+ } else if (mNavBarPosition.isLeftEdge()) {
+ return mDownPos.x - ev.getX();
+ } else {
+ return ev.getY() - mDownPos.y;
+ }
+ }
+
@Override
public boolean allowInterceptByParent() {
return !mPassedPilferInputSlop;
diff --git a/src/com/android/launcher3/Utilities.java b/src/com/android/launcher3/Utilities.java
index b66ed81..1354d21 100644
--- a/src/com/android/launcher3/Utilities.java
+++ b/src/com/android/launcher3/Utilities.java
@@ -62,7 +62,6 @@
import android.util.Log;
import android.util.TypedValue;
import android.view.MotionEvent;
-import android.view.VelocityTracker;
import android.view.View;
import android.view.ViewConfiguration;
import android.view.animation.Interpolator;
@@ -156,8 +155,6 @@
public static boolean IS_RUNNING_IN_TEST_HARNESS =
ActivityManager.isRunningInTestHarness();
- private static final int TRACKPAD_GESTURE_SCALE = 60;
-
public static void enableRunningInTestHarnessForTests() {
IS_RUNNING_IN_TEST_HARNESS = true;
}
@@ -716,38 +713,6 @@
&& (event.getSource() & SOURCE_TOUCHSCREEN) != SOURCE_TOUCHSCREEN;
}
- public static int getTrackpadMotionEventScale(Context context) {
- return ViewConfiguration.get(context).getScaledTouchSlop() * TRACKPAD_GESTURE_SCALE;
- }
-
- public static float getXVelocity(VelocityTracker velocityTracker, MotionEvent event,
- int pointerId) {
- // Will be enabled after ag/20353570 is submitted
-// if (isTrackpadMotionEvent(event)) {
-// return velocityTracker.getAxisVelocity(AXIS_GESTURE_X_OFFSET, pointerId);
-// } else {
- return velocityTracker.getXVelocity(pointerId);
-// }
- }
-
- public static float getXVelocity(VelocityTracker velocityTracker, MotionEvent event) {
- return getXVelocity(velocityTracker, event, -1 /* ACTIVE_POINTER_ID */);
- }
-
- public static float getYVelocity(VelocityTracker velocityTracker, MotionEvent event,
- int pointerId) {
- // Will be enabled after ag/20353570 is submitted
-// if (isTrackpadMotionEvent(event)) {
-// return velocityTracker.getAxisVelocity(AXIS_GESTURE_Y_OFFSET, pointerId);
-// } else {
- return velocityTracker.getYVelocity(pointerId);
-// }
- }
-
- public static float getYVelocity(VelocityTracker velocityTracker, MotionEvent event) {
- return getYVelocity(velocityTracker, event, -1 /* ACTIVE_POINTER_ID */);
- }
-
/** Logs the Scale and Translate properties of a matrix. Ignores skew and perspective. */
public static void logMatrix(String label, Matrix matrix) {
float[] matrixValues = new float[9];