summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Shan Huang <shanh@google.com> 2024-03-26 16:51:49 -0700
committer Shan Huang <shanh@google.com> 2024-03-28 11:38:49 -0700
commit8ebf322ea73e9c59aaf705d62874b5ed11704b40 (patch)
treea3919321662f41b8353bba409ea38809db82c2d8
parent0f6a4de28937bcbeefc545c3f1cb59c20def75d9 (diff)
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
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/back/BackAnimationController.java12
-rw-r--r--libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/back/BackAnimationControllerTest.java17
2 files changed, 25 insertions, 4 deletions
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<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;
}
@@ -729,7 +733,7 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont
if (touchTracker.getTriggerBack()) {
dispatchOrAnimateOnBackInvoked(callback, touchTracker);
} else {
- dispatchOnBackCancelled(callback);
+ tryDispatchOnBackCancelled(callback);
}
}
finishBackNavigation(touchTracker.getTriggerBack());
@@ -808,7 +812,7 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont
if (mCurrentTracker.getTriggerBack()) {
dispatchOrAnimateOnBackInvoked(mActiveCallback, mCurrentTracker);
} else {
- dispatchOnBackCancelled(mActiveCallback);
+ tryDispatchOnBackCancelled(mActiveCallback);
}
}
@@ -846,7 +850,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");
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
@@ -527,6 +527,23 @@ public class BackAnimationControllerTest extends ShellTestCase {
}
@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,
mAnimationBackground);