Loading libs/WindowManager/Shell/src/com/android/wm/shell/back/BackAnimationController.java +8 −4 Original line number Diff line number Diff line Loading @@ -686,7 +686,11 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont } } private void dispatchOnBackCancelled(IOnBackInvokedCallback callback) { private void tryDispatchOnBackCancelled(IOnBackInvokedCallback callback) { if (!mOnBackStartDispatched) { Log.e(TAG, "Skipping dispatching onBackCancelled. Start was never dispatched."); return; } if (callback == null) { return; } Loading Loading @@ -745,7 +749,7 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont if (touchTracker.getTriggerBack()) { dispatchOrAnimateOnBackInvoked(callback, touchTracker); } else { dispatchOnBackCancelled(callback); tryDispatchOnBackCancelled(callback); } } finishBackNavigation(touchTracker.getTriggerBack()); Loading Loading @@ -824,7 +828,7 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont if (mCurrentTracker.getTriggerBack()) { dispatchOrAnimateOnBackInvoked(mActiveCallback, mCurrentTracker); } else { dispatchOnBackCancelled(mActiveCallback); tryDispatchOnBackCancelled(mActiveCallback); } } Loading Loading @@ -876,7 +880,7 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont if (mCurrentTracker.isInInitialState()) { if (mBackGestureStarted) { mBackGestureStarted = false; dispatchOnBackCancelled(mActiveCallback); tryDispatchOnBackCancelled(mActiveCallback); finishBackNavigation(false); ProtoLog.d(WM_SHELL_BACK_PREVIEW, "resetTouchTracker -> reset an unfinished gesture"); Loading libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/back/BackAnimationControllerTest.java +17 −0 Original line number Diff line number Diff line Loading @@ -556,6 +556,23 @@ public class BackAnimationControllerTest extends ShellTestCase { verify(mAnimatorCallback, never()).onBackInvoked(); } @Test public void skipsCancelWithoutStart() throws RemoteException { final int type = BackNavigationInfo.TYPE_CALLBACK; final ResultListener result = new ResultListener(); createNavigationInfo(new BackNavigationInfo.Builder() .setType(type) .setOnBackInvokedCallback(mAppCallback) .setOnBackNavigationDone(new RemoteCallback(result))); doMotionEvent(MotionEvent.ACTION_CANCEL, 0); mShellExecutor.flushAll(); verify(mAppCallback, never()).onBackStarted(any()); verify(mAppCallback, never()).onBackProgressed(any()); verify(mAppCallback, never()).onBackInvoked(); verify(mAppCallback, never()).onBackCancelled(); } @Test public void testBackToActivity() throws RemoteException { final CrossActivityBackAnimation animation = new CrossActivityBackAnimation( Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/back/BackAnimationController.java +8 −4 Original line number Diff line number Diff line Loading @@ -686,7 +686,11 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont } } private void dispatchOnBackCancelled(IOnBackInvokedCallback callback) { private void tryDispatchOnBackCancelled(IOnBackInvokedCallback callback) { if (!mOnBackStartDispatched) { Log.e(TAG, "Skipping dispatching onBackCancelled. Start was never dispatched."); return; } if (callback == null) { return; } Loading Loading @@ -745,7 +749,7 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont if (touchTracker.getTriggerBack()) { dispatchOrAnimateOnBackInvoked(callback, touchTracker); } else { dispatchOnBackCancelled(callback); tryDispatchOnBackCancelled(callback); } } finishBackNavigation(touchTracker.getTriggerBack()); Loading Loading @@ -824,7 +828,7 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont if (mCurrentTracker.getTriggerBack()) { dispatchOrAnimateOnBackInvoked(mActiveCallback, mCurrentTracker); } else { dispatchOnBackCancelled(mActiveCallback); tryDispatchOnBackCancelled(mActiveCallback); } } Loading Loading @@ -876,7 +880,7 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont if (mCurrentTracker.isInInitialState()) { if (mBackGestureStarted) { mBackGestureStarted = false; dispatchOnBackCancelled(mActiveCallback); tryDispatchOnBackCancelled(mActiveCallback); finishBackNavigation(false); ProtoLog.d(WM_SHELL_BACK_PREVIEW, "resetTouchTracker -> reset an unfinished gesture"); Loading
libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/back/BackAnimationControllerTest.java +17 −0 Original line number Diff line number Diff line Loading @@ -556,6 +556,23 @@ public class BackAnimationControllerTest extends ShellTestCase { verify(mAnimatorCallback, never()).onBackInvoked(); } @Test public void skipsCancelWithoutStart() throws RemoteException { final int type = BackNavigationInfo.TYPE_CALLBACK; final ResultListener result = new ResultListener(); createNavigationInfo(new BackNavigationInfo.Builder() .setType(type) .setOnBackInvokedCallback(mAppCallback) .setOnBackNavigationDone(new RemoteCallback(result))); doMotionEvent(MotionEvent.ACTION_CANCEL, 0); mShellExecutor.flushAll(); verify(mAppCallback, never()).onBackStarted(any()); verify(mAppCallback, never()).onBackProgressed(any()); verify(mAppCallback, never()).onBackInvoked(); verify(mAppCallback, never()).onBackCancelled(); } @Test public void testBackToActivity() throws RemoteException { final CrossActivityBackAnimation animation = new CrossActivityBackAnimation( Loading