From 8ebf322ea73e9c59aaf705d62874b5ed11704b40 Mon Sep 17 00:00:00 2001 From: Shan Huang Date: Tue, 26 Mar 2024 16:51:49 -0700 Subject: Don't dispatch onBackCancelled if start is not dispatched. Bug: 329491664 Fixes: 329491664 Test: long press on the edge of all-apps (built from SysUI-Studio). Make sure there's no crashes. Test: atest BackAnimationControllerTest Change-Id: I0d28373b3341e6637dfaf0adaf7b3ddf0196f69b --- .../android/wm/shell/back/BackAnimationController.java | 12 ++++++++---- .../wm/shell/back/BackAnimationControllerTest.java | 17 +++++++++++++++++ 2 files changed, 25 insertions(+), 4 deletions(-) (limited to 'libs') diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/back/BackAnimationController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/back/BackAnimationController.java index 9bd8531d33dc..78129c281fce 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/back/BackAnimationController.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/back/BackAnimationController.java @@ -670,7 +670,11 @@ public class BackAnimationController implements RemoteCallable reset an unfinished gesture"); diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/back/BackAnimationControllerTest.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/back/BackAnimationControllerTest.java index 9ded6ea1d187..0d3f00d37801 100644 --- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/back/BackAnimationControllerTest.java +++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/back/BackAnimationControllerTest.java @@ -526,6 +526,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(mContext, -- cgit v1.2.3-59-g8ed1b