Loading libs/WindowManager/Shell/src/com/android/wm/shell/back/BackAnimationController.java +14 −1 Original line number Diff line number Diff line Loading @@ -97,6 +97,8 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont /** Tracks if an uninterruptible transition is in progress */ private boolean mTransitionInProgress = false; /** Tracks if we should start the back gesture on the next motion move event */ private boolean mShouldStartOnNextMoveEvent = false; /** @see #setTriggerBack(boolean) */ private boolean mTriggerBack; Loading Loading @@ -298,12 +300,17 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont if (mTransitionInProgress) { return; } if (keyAction == MotionEvent.ACTION_MOVE) { if (keyAction == MotionEvent.ACTION_DOWN) { if (!mBackGestureStarted) { mShouldStartOnNextMoveEvent = true; } } else if (keyAction == MotionEvent.ACTION_MOVE) { if (!mBackGestureStarted && mShouldStartOnNextMoveEvent) { // Let the animation initialized here to make sure the onPointerDownOutsideFocus // could be happened when ACTION_DOWN, it may change the current focus that we // would access it when startBackNavigation. onGestureStarted(touchX, touchY); mShouldStartOnNextMoveEvent = false; } onMove(touchX, touchY, swipeEdge); } else if (keyAction == MotionEvent.ACTION_UP || keyAction == MotionEvent.ACTION_CANCEL) { Loading Loading @@ -437,6 +444,11 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont private void onGestureFinished(boolean fromTouch) { ProtoLog.d(WM_SHELL_BACK_PREVIEW, "onGestureFinished() mTriggerBack == %s", mTriggerBack); if (!mBackGestureStarted) { finishAnimation(); return; } if (fromTouch) { // Let touch reset the flag otherwise it will start a new back navigation and refresh // the info when received a new move event. Loading Loading @@ -552,6 +564,7 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont boolean triggerBack = mTriggerBack; mBackNavigationInfo = null; mTriggerBack = false; mShouldStartOnNextMoveEvent = false; if (backNavigationInfo == null) { return; } Loading libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/back/BackAnimationControllerTest.java +6 −1 Original line number Diff line number Diff line Loading @@ -284,9 +284,14 @@ public class BackAnimationControllerTest extends ShellTestCase { // the previous transition is finished. doMotionEvent(MotionEvent.ACTION_DOWN, 0); verifyNoMoreInteractions(mIOnBackInvokedCallback); mController.onBackToLauncherAnimationFinished(); // Verify that more events from a rejected swipe cannot start animation. doMotionEvent(MotionEvent.ACTION_MOVE, 100); doMotionEvent(MotionEvent.ACTION_UP, 0); verifyNoMoreInteractions(mIOnBackInvokedCallback); // Verify that we start accepting gestures again once transition finishes. mController.onBackToLauncherAnimationFinished(); doMotionEvent(MotionEvent.ACTION_DOWN, 0); doMotionEvent(MotionEvent.ACTION_MOVE, 100); verify(mIOnBackInvokedCallback).onBackStarted(); Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/back/BackAnimationController.java +14 −1 Original line number Diff line number Diff line Loading @@ -97,6 +97,8 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont /** Tracks if an uninterruptible transition is in progress */ private boolean mTransitionInProgress = false; /** Tracks if we should start the back gesture on the next motion move event */ private boolean mShouldStartOnNextMoveEvent = false; /** @see #setTriggerBack(boolean) */ private boolean mTriggerBack; Loading Loading @@ -298,12 +300,17 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont if (mTransitionInProgress) { return; } if (keyAction == MotionEvent.ACTION_MOVE) { if (keyAction == MotionEvent.ACTION_DOWN) { if (!mBackGestureStarted) { mShouldStartOnNextMoveEvent = true; } } else if (keyAction == MotionEvent.ACTION_MOVE) { if (!mBackGestureStarted && mShouldStartOnNextMoveEvent) { // Let the animation initialized here to make sure the onPointerDownOutsideFocus // could be happened when ACTION_DOWN, it may change the current focus that we // would access it when startBackNavigation. onGestureStarted(touchX, touchY); mShouldStartOnNextMoveEvent = false; } onMove(touchX, touchY, swipeEdge); } else if (keyAction == MotionEvent.ACTION_UP || keyAction == MotionEvent.ACTION_CANCEL) { Loading Loading @@ -437,6 +444,11 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont private void onGestureFinished(boolean fromTouch) { ProtoLog.d(WM_SHELL_BACK_PREVIEW, "onGestureFinished() mTriggerBack == %s", mTriggerBack); if (!mBackGestureStarted) { finishAnimation(); return; } if (fromTouch) { // Let touch reset the flag otherwise it will start a new back navigation and refresh // the info when received a new move event. Loading Loading @@ -552,6 +564,7 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont boolean triggerBack = mTriggerBack; mBackNavigationInfo = null; mTriggerBack = false; mShouldStartOnNextMoveEvent = false; if (backNavigationInfo == null) { return; } Loading
libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/back/BackAnimationControllerTest.java +6 −1 Original line number Diff line number Diff line Loading @@ -284,9 +284,14 @@ public class BackAnimationControllerTest extends ShellTestCase { // the previous transition is finished. doMotionEvent(MotionEvent.ACTION_DOWN, 0); verifyNoMoreInteractions(mIOnBackInvokedCallback); mController.onBackToLauncherAnimationFinished(); // Verify that more events from a rejected swipe cannot start animation. doMotionEvent(MotionEvent.ACTION_MOVE, 100); doMotionEvent(MotionEvent.ACTION_UP, 0); verifyNoMoreInteractions(mIOnBackInvokedCallback); // Verify that we start accepting gestures again once transition finishes. mController.onBackToLauncherAnimationFinished(); doMotionEvent(MotionEvent.ACTION_DOWN, 0); doMotionEvent(MotionEvent.ACTION_MOVE, 100); verify(mIOnBackInvokedCallback).onBackStarted(); Loading