diff options
| author | 2024-11-04 01:36:16 +0000 | |
|---|---|---|
| committer | 2024-11-04 01:36:16 +0000 | |
| commit | 13c28f4be710ef61abf578a01c5a9794f646e8a6 (patch) | |
| tree | 145b1ed0381e557b39e74f07d9a211fd49b33014 | |
| parent | 9499239346915d6365f5e73c334e55067e49ea63 (diff) | |
| parent | a4c760944bb853e7203f4cc22248d0ec95b6d6a7 (diff) | |
Merge "Fix test fail after force trigger predictive back transition." into main
3 files changed, 18 insertions, 1 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 f296c710f9a0..b9a305062b46 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 @@ -29,6 +29,7 @@ import static android.window.TransitionInfo.FLAG_SHOW_WALLPAPER; import static com.android.internal.jank.InteractionJankMonitor.CUJ_PREDICTIVE_BACK_HOME; import static com.android.window.flags.Flags.migratePredictiveBackTransition; import static com.android.window.flags.Flags.predictiveBackSystemAnims; +import static com.android.window.flags.Flags.unifyBackNavigationTransition; import static com.android.wm.shell.protolog.ShellProtoLogGroup.WM_SHELL_BACK_PREVIEW; import static com.android.wm.shell.shared.ShellSharedConstants.KEY_EXTRA_SHELL_BACK_ANIMATION; @@ -1279,6 +1280,13 @@ public class BackAnimationController implements RemoteCallable<BackAnimationCont if (transition == mClosePrepareTransition && aborted) { mClosePrepareTransition = null; applyFinishOpenTransition(); + } else if (!aborted && unifyBackNavigationTransition()) { + // Since the closing target participates in the predictive back transition, the + // merged transition must be applied with the first transition to ensure a seamless + // animation. + if (mFinishOpenTransaction != null && finishTransaction != null) { + mFinishOpenTransaction.merge(finishTransaction); + } } } diff --git a/services/core/java/com/android/server/wm/BackNavigationController.java b/services/core/java/com/android/server/wm/BackNavigationController.java index 2fe023e55d31..de6a2cf64a61 100644 --- a/services/core/java/com/android/server/wm/BackNavigationController.java +++ b/services/core/java/com/android/server/wm/BackNavigationController.java @@ -1851,7 +1851,7 @@ class BackNavigationController { tc.requestStartTransition(prepareOpen, null /*startTask */, null /* remoteTransition */, null /* displayChange */); - prepareOpen.setReady(makeVisibles.get(0), true); + prepareOpen.setReady(mCloseTarget, true); return prepareOpen; } else if (mSnapshot == null) { return setLaunchBehind(visibleOpenActivities); diff --git a/services/tests/wmtests/src/com/android/server/wm/BackNavigationControllerTests.java b/services/tests/wmtests/src/com/android/server/wm/BackNavigationControllerTests.java index 20dcdde63cc4..93b23190a23c 100644 --- a/services/tests/wmtests/src/com/android/server/wm/BackNavigationControllerTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/BackNavigationControllerTests.java @@ -24,6 +24,7 @@ import static android.view.WindowManager.LayoutParams.FIRST_APPLICATION_WINDOW; import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION; import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY; import static android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION; +import static android.view.WindowManager.TRANSIT_PREPARE_BACK_NAVIGATION; import static android.window.BackNavigationInfo.typeToString; import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn; @@ -103,6 +104,13 @@ public class BackNavigationControllerTests extends WindowTestsBase { @Before public void setUp() throws Exception { + final TransitionController transitionController = mAtm.getTransitionController(); + final Transition fakeTransition = new Transition(TRANSIT_PREPARE_BACK_NAVIGATION, + 0 /* flag */, transitionController, transitionController.mSyncEngine); + spyOn(transitionController); + doReturn(fakeTransition).when(transitionController) + .createTransition(anyInt(), anyInt()); + final BackNavigationController original = new BackNavigationController(); original.setWindowManager(mWm); mBackNavigationController = Mockito.spy(original); @@ -111,6 +119,7 @@ public class BackNavigationControllerTests extends WindowTestsBase { LocalServices.addService(WindowManagerInternal.class, mWindowManagerInternal); mBackAnimationAdapter = mock(BackAnimationAdapter.class); doReturn(true).when(mBackAnimationAdapter).isAnimatable(anyInt()); + Mockito.doNothing().when(mBackNavigationController).startAnimation(); mNavigationMonitor = mock(BackNavigationController.NavigationMonitor.class); mRootHomeTask = initHomeActivity(); } |