summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/back/TouchTracker.java25
-rw-r--r--libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/back/TouchTrackerTest.kt16
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)