Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c75fa523 authored by Shan Huang's avatar Shan Huang Committed by Android (Google) Code Review
Browse files

Merge "Don't dispatch onBackCancelled if start is not dispatched." into main

parents 4add2548 8ebf322e
Loading
Loading
Loading
Loading
+8 −4
Original line number Diff line number Diff line
@@ -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;
        }
@@ -745,7 +749,7 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont
            if (touchTracker.getTriggerBack()) {
                dispatchOrAnimateOnBackInvoked(callback, touchTracker);
            } else {
                dispatchOnBackCancelled(callback);
                tryDispatchOnBackCancelled(callback);
            }
        }
        finishBackNavigation(touchTracker.getTriggerBack());
@@ -824,7 +828,7 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont
        if (mCurrentTracker.getTriggerBack()) {
            dispatchOrAnimateOnBackInvoked(mActiveCallback, mCurrentTracker);
        } else {
            dispatchOnBackCancelled(mActiveCallback);
            tryDispatchOnBackCancelled(mActiveCallback);
        }
    }

@@ -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");
+17 −0
Original line number Diff line number Diff line
@@ -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(