Loading libs/WindowManager/Shell/src/com/android/wm/shell/back/BackAnimationController.java +9 −44 Original line number Diff line number Diff line Loading @@ -874,10 +874,6 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont // start post animation dispatchOnBackInvoked(mActiveCallback); } else { if (migrateBackToTransition && mBackTransitionHandler.mPrepareOpenTransition != null) { mBackTransitionHandler.createClosePrepareTransition(); } tryDispatchOnBackCancelled(mActiveCallback); } } Loading Loading @@ -1163,8 +1159,8 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont IBinder mClosePrepareTransition; TransitionInfo mOpenTransitionInfo; void onAnimationFinished() { if (!mCloseTransitionRequested && mClosePrepareTransition == null) { applyFinishOpenTransition(); if (!mCloseTransitionRequested && mPrepareOpenTransition != null) { createClosePrepareTransition(); } if (mOnAnimationFinishCallback != null) { mOnAnimationFinishCallback.run(); Loading Loading @@ -1234,7 +1230,7 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont applyAndFinish(st, ft, finishCallback); return true; } else if (mClosePrepareTransition == null && isPrepareTransition) { // Gesture animation was cancelled before prepare transition ready, create the // Gesture animation was cancelled before prepare transition ready, create // the close prepare transition createClosePrepareTransition(); } Loading @@ -1247,6 +1243,10 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont } void createClosePrepareTransition() { if (mClosePrepareTransition != null) { Log.e(TAG, "Re-create close prepare transition"); return; } final WindowContainerTransaction wct = new WindowContainerTransaction(); wct.restoreBackNavi(); mClosePrepareTransition = mTransitions.startTransition( Loading Loading @@ -1384,10 +1384,10 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont } if (info.getType() == TRANSIT_CLOSE_PREPARE_BACK_NAVIGATION && !mCloseTransitionRequested && info.getChanges().isEmpty() && mApps != null) { // Wait for post animation finish && !mCloseTransitionRequested && info.getChanges().isEmpty() && mApps == null) { finishCallback.onTransitionFinished(null); t.apply(); applyFinishOpenTransition(); return; } if (isNotGestureBackTransition(info) || shouldCancelAnimation(info) Loading Loading @@ -1598,41 +1598,6 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont } return null; } class QueuedTransition { final TransitionInfo mInfo; final SurfaceControl.Transaction mSt; final SurfaceControl.Transaction mFt; final Transitions.TransitionFinishCallback mFinishCallback; QueuedTransition(@NonNull TransitionInfo info, @NonNull SurfaceControl.Transaction st, @NonNull SurfaceControl.Transaction ft, @NonNull Transitions.TransitionFinishCallback finishCallback) { mInfo = info; mSt = st; mFt = ft; mFinishCallback = finishCallback; } void consume() { // not animating, consume transition directly if (mApps == null || mApps.length == 0) { applyAndFinish(mSt, mFt, mFinishCallback); return; } // we are animating if (handlePrepareTransition(mInfo, mSt, mFt, mFinishCallback)) { // handle merge transition if any if (mCloseTransitionRequested) { mOnAnimationFinishCallback = () -> { applyFinishOpenTransition(); mCloseTransitionRequested = false; }; } } handleCloseTransition(mInfo, mSt, mFt, mFinishCallback); } } } private static boolean isNotGestureBackTransition(@NonNull TransitionInfo info) { Loading libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/back/BackAnimationControllerTest.java +2 −1 Original line number Diff line number Diff line Loading @@ -692,6 +692,8 @@ public class BackAnimationControllerTest extends ShellTestCase { mBackTransitionHandler.startAnimation(mockBinder, tInfo, st, ft, callback); verify(mBackTransitionHandler).handlePrepareTransition( eq(tInfo), eq(st), eq(ft), eq(callback)); mBackTransitionHandler.onAnimationFinished(); final TransitionInfo.Change openToClose = createAppChange(openTaskId, TRANSIT_CLOSE, FLAG_BACK_GESTURE_ANIMATED); tInfo2 = createTransitionInfo(TRANSIT_CLOSE_PREPARE_BACK_NAVIGATION, openToClose); Loading @@ -700,7 +702,6 @@ public class BackAnimationControllerTest extends ShellTestCase { mBackTransitionHandler.mergeAnimation(mBackTransitionHandler.mClosePrepareTransition, tInfo2, st, mock(IBinder.class), mergeCallback); assertTrue("Change should be consumed", tInfo2.getChanges().isEmpty()); mBackTransitionHandler.onAnimationFinished(); verify(callback).onTransitionFinished(any()); } Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/back/BackAnimationController.java +9 −44 Original line number Diff line number Diff line Loading @@ -874,10 +874,6 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont // start post animation dispatchOnBackInvoked(mActiveCallback); } else { if (migrateBackToTransition && mBackTransitionHandler.mPrepareOpenTransition != null) { mBackTransitionHandler.createClosePrepareTransition(); } tryDispatchOnBackCancelled(mActiveCallback); } } Loading Loading @@ -1163,8 +1159,8 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont IBinder mClosePrepareTransition; TransitionInfo mOpenTransitionInfo; void onAnimationFinished() { if (!mCloseTransitionRequested && mClosePrepareTransition == null) { applyFinishOpenTransition(); if (!mCloseTransitionRequested && mPrepareOpenTransition != null) { createClosePrepareTransition(); } if (mOnAnimationFinishCallback != null) { mOnAnimationFinishCallback.run(); Loading Loading @@ -1234,7 +1230,7 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont applyAndFinish(st, ft, finishCallback); return true; } else if (mClosePrepareTransition == null && isPrepareTransition) { // Gesture animation was cancelled before prepare transition ready, create the // Gesture animation was cancelled before prepare transition ready, create // the close prepare transition createClosePrepareTransition(); } Loading @@ -1247,6 +1243,10 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont } void createClosePrepareTransition() { if (mClosePrepareTransition != null) { Log.e(TAG, "Re-create close prepare transition"); return; } final WindowContainerTransaction wct = new WindowContainerTransaction(); wct.restoreBackNavi(); mClosePrepareTransition = mTransitions.startTransition( Loading Loading @@ -1384,10 +1384,10 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont } if (info.getType() == TRANSIT_CLOSE_PREPARE_BACK_NAVIGATION && !mCloseTransitionRequested && info.getChanges().isEmpty() && mApps != null) { // Wait for post animation finish && !mCloseTransitionRequested && info.getChanges().isEmpty() && mApps == null) { finishCallback.onTransitionFinished(null); t.apply(); applyFinishOpenTransition(); return; } if (isNotGestureBackTransition(info) || shouldCancelAnimation(info) Loading Loading @@ -1598,41 +1598,6 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont } return null; } class QueuedTransition { final TransitionInfo mInfo; final SurfaceControl.Transaction mSt; final SurfaceControl.Transaction mFt; final Transitions.TransitionFinishCallback mFinishCallback; QueuedTransition(@NonNull TransitionInfo info, @NonNull SurfaceControl.Transaction st, @NonNull SurfaceControl.Transaction ft, @NonNull Transitions.TransitionFinishCallback finishCallback) { mInfo = info; mSt = st; mFt = ft; mFinishCallback = finishCallback; } void consume() { // not animating, consume transition directly if (mApps == null || mApps.length == 0) { applyAndFinish(mSt, mFt, mFinishCallback); return; } // we are animating if (handlePrepareTransition(mInfo, mSt, mFt, mFinishCallback)) { // handle merge transition if any if (mCloseTransitionRequested) { mOnAnimationFinishCallback = () -> { applyFinishOpenTransition(); mCloseTransitionRequested = false; }; } } handleCloseTransition(mInfo, mSt, mFt, mFinishCallback); } } } private static boolean isNotGestureBackTransition(@NonNull TransitionInfo info) { Loading
libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/back/BackAnimationControllerTest.java +2 −1 Original line number Diff line number Diff line Loading @@ -692,6 +692,8 @@ public class BackAnimationControllerTest extends ShellTestCase { mBackTransitionHandler.startAnimation(mockBinder, tInfo, st, ft, callback); verify(mBackTransitionHandler).handlePrepareTransition( eq(tInfo), eq(st), eq(ft), eq(callback)); mBackTransitionHandler.onAnimationFinished(); final TransitionInfo.Change openToClose = createAppChange(openTaskId, TRANSIT_CLOSE, FLAG_BACK_GESTURE_ANIMATED); tInfo2 = createTransitionInfo(TRANSIT_CLOSE_PREPARE_BACK_NAVIGATION, openToClose); Loading @@ -700,7 +702,6 @@ public class BackAnimationControllerTest extends ShellTestCase { mBackTransitionHandler.mergeAnimation(mBackTransitionHandler.mClosePrepareTransition, tInfo2, st, mock(IBinder.class), mergeCallback); assertTrue("Change should be consumed", tInfo2.getChanges().isEmpty()); mBackTransitionHandler.onAnimationFinished(); verify(callback).onTransitionFinished(any()); } Loading