summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Wei Sheng Shih <wilsonshih@google.com> 2024-11-04 01:36:16 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2024-11-04 01:36:16 +0000
commit13c28f4be710ef61abf578a01c5a9794f646e8a6 (patch)
tree145b1ed0381e557b39e74f07d9a211fd49b33014
parent9499239346915d6365f5e73c334e55067e49ea63 (diff)
parenta4c760944bb853e7203f4cc22248d0ec95b6d6a7 (diff)
Merge "Fix test fail after force trigger predictive back transition." into main
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/back/BackAnimationController.java8
-rw-r--r--services/core/java/com/android/server/wm/BackNavigationController.java2
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/BackNavigationControllerTests.java9
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();
}