diff options
| -rw-r--r-- | libs/WindowManager/Shell/src/com/android/wm/shell/back/TouchTracker.java | 25 | ||||
| -rw-r--r-- | libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/back/TouchTrackerTest.kt | 16 |
2 files changed, 21 insertions, 20 deletions
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/back/TouchTracker.java b/libs/WindowManager/Shell/src/com/android/wm/shell/back/TouchTracker.java index 8a59a9f62425..19eb928d4e30 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/back/TouchTracker.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/back/TouchTracker.java @@ -51,7 +51,6 @@ class TouchTracker { private float mLatestVelocityY; private float mStartThresholdX; private int mSwipeEdge; - private boolean mCancelled; private TouchTrackerState mState = TouchTrackerState.INITIAL; void update(float touchX, float touchY, float velocityX, float velocityY) { @@ -59,9 +58,8 @@ class TouchTracker { * If back was previously cancelled but the user has started swiping in the forward * direction again, restart back. */ - if (mCancelled && ((touchX > mLatestTouchX && mSwipeEdge == BackEvent.EDGE_LEFT) - || touchX < mLatestTouchX && mSwipeEdge == BackEvent.EDGE_RIGHT)) { - mCancelled = false; + if ((touchX < mStartThresholdX && mSwipeEdge == BackEvent.EDGE_LEFT) + || (touchX > mStartThresholdX && mSwipeEdge == BackEvent.EDGE_RIGHT)) { mStartThresholdX = touchX; } mLatestTouchX = touchX; @@ -72,7 +70,7 @@ class TouchTracker { void setTriggerBack(boolean triggerBack) { if (mTriggerBack != triggerBack && !triggerBack) { - mCancelled = true; + mStartThresholdX = mLatestTouchX; } mTriggerBack = triggerBack; } @@ -100,6 +98,8 @@ class TouchTracker { void setGestureStartLocation(float touchX, float touchY, int swipeEdge) { mInitTouchX = touchX; mInitTouchY = touchY; + mLatestTouchX = touchX; + mLatestTouchY = touchY; mSwipeEdge = swipeEdge; mStartThresholdX = mInitTouchX; } @@ -108,7 +108,6 @@ class TouchTracker { mInitTouchX = 0; mInitTouchY = 0; mStartThresholdX = 0; - mCancelled = false; mTriggerBack = false; mState = TouchTrackerState.INITIAL; mSwipeEdge = BackEvent.EDGE_LEFT; @@ -126,11 +125,7 @@ class TouchTracker { } BackMotionEvent createProgressEvent() { - float progress = 0; - // Progress is always 0 when back is cancelled and not restarted. - if (!mCancelled) { - progress = getProgress(mLatestTouchX); - } + float progress = getProgress(mLatestTouchX); return createProgressEvent(progress); } @@ -148,7 +143,13 @@ class TouchTracker { // The starting threshold is initially the first touch location, and updated to // the location everytime back is restarted after being cancelled. float startX = mTriggerBack ? mInitTouchX : mStartThresholdX; - float deltaX = Math.abs(startX - touchX); + float distance; + if (mSwipeEdge == BackEvent.EDGE_LEFT) { + distance = touchX - startX; + } else { + distance = startX - touchX; + } + float deltaX = Math.max(0f, distance); float linearDistance = mLinearDistance; float maxDistance = getMaxDistance(); maxDistance = maxDistance == 0 ? 1 : maxDistance; diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/back/TouchTrackerTest.kt b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/back/TouchTrackerTest.kt index 9088e8997e79..bf07dccd0658 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/back/TouchTrackerTest.kt +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/back/TouchTrackerTest.kt @@ -71,13 +71,13 @@ class TouchTrackerTest { linearTracker.update(touchX, 0f, velocityX, velocityY) linearTracker.assertProgress(0f) - // Restart + // Restarted, but pre-commit + val restartX = touchX touchX += 10f linearTracker.update(touchX, 0f, velocityX, velocityY) - linearTracker.assertProgress(0f) + linearTracker.assertProgress((touchX - restartX) / MAX_DISTANCE) - // Restarted, but pre-commit - val restartX = touchX + // continue restart within pre-commit touchX += 10f linearTracker.update(touchX, 0f, velocityX, velocityY) linearTracker.assertProgress((touchX - restartX) / MAX_DISTANCE) @@ -119,13 +119,13 @@ class TouchTrackerTest { linearTracker.update(touchX, 0f, velocityX, velocityY) linearTracker.assertProgress(0f) - // Restart + // Restarted, but pre-commit + val restartX = touchX touchX -= 10f linearTracker.update(touchX, 0f, velocityX, velocityY) - linearTracker.assertProgress(0f) + linearTracker.assertProgress((restartX - touchX) / target) - // Restarted, but pre-commit - val restartX = touchX + // continue restart within pre-commit touchX -= 10f linearTracker.update(touchX, 0f, velocityX, velocityY) linearTracker.assertProgress((restartX - touchX) / target) |