Support nav fade anim for the case of swiping left/right to a new task

The ReorderMode of the swiping left/right to a new task is
REORDER_MOVE_TO_ORIGINAL_POSITION which is the same as the case swiping
up and then down to back to the original task.

Add a new flag to distinguish between these two cases.

Bug: 187783109
Test: atest RecentsAnimationControllerTests

Change-Id: I0bd1005b23041459286fcd7f6488b09b43ef3867
This commit is contained in:
shawnlin
2021-05-10 11:54:04 +08:00
parent 532dd4e6f7
commit 8c7cb1e446
2 changed files with 32 additions and 2 deletions

View File

@@ -151,6 +151,8 @@ public class RecentsAnimationController implements DeathRecipient {
// Whether to take a screenshot when handling a deferred cancel
private boolean mCancelDeferredWithScreenshot;
@VisibleForTesting
boolean mIsAddingTaskToTargets;
@VisibleForTesting
boolean mShouldAttachNavBarToAppDuringTransition;
private boolean mNavigationBarAttachedToApp;
@@ -375,7 +377,8 @@ public class RecentsAnimationController implements DeathRecipient {
final long token = Binder.clearCallingIdentity();
try {
synchronized (mService.getWindowManagerLock()) {
restoreNavigationBarFromApp(moveHomeToTop);
restoreNavigationBarFromApp(
moveHomeToTop || mIsAddingTaskToTargets /* animate */);
mService.mWindowPlacerLocked.requestTraversal();
}
} finally {
@@ -684,6 +687,7 @@ public class RecentsAnimationController implements DeathRecipient {
void addTaskToTargets(Task task, OnAnimationFinishedCallback finishedCallback) {
if (mRunner != null) {
mIsAddingTaskToTargets = task != null;
// No need to send task appeared when the task target already exists, or when the
// task is being managed as a multi-window mode outside of recents (e.g. bubbles).
if (isAnimatingTask(task) || skipAnimation(task)) {
@@ -900,7 +904,8 @@ public class RecentsAnimationController implements DeathRecipient {
removeWallpaperAnimation(wallpaperAdapter);
}
restoreNavigationBarFromApp(reorderMode == REORDER_MOVE_TO_TOP);
restoreNavigationBarFromApp(
reorderMode == REORDER_MOVE_TO_TOP || mIsAddingTaskToTargets /* animate */);
// Clear any pending failsafe runnables
mService.mH.removeCallbacks(mFailsafeRunnable);

View File

@@ -552,6 +552,31 @@ public class RecentsAnimationControllerTest extends WindowTestsBase {
verify(transaction).reparent(navToken.getSurfaceControl(), parent.getSurfaceControl());
}
@Test
public void testAddTaskToTargets_expectAnimation() {
setupForShouldAttachNavBarDuringTransition();
final ActivityRecord activity = createActivityRecord(mDefaultDisplay);
final ActivityRecord homeActivity = createHomeActivity();
initializeRecentsAnimationController(mController, homeActivity);
final WindowToken navToken = mDefaultDisplay.getDisplayPolicy().getNavigationBar().mToken;
final SurfaceControl.Transaction transaction = navToken.getPendingTransaction();
verify(mController.mStatusBar).setNavigationBarLumaSamplingEnabled(
eq(mDefaultDisplay.mDisplayId), eq(false));
verify(transaction).reparent(navToken.getSurfaceControl(), activity.getSurfaceControl());
verify(transaction).setLayer(navToken.getSurfaceControl(), Integer.MAX_VALUE);
final WindowContainer parent = navToken.getParent();
mController.addTaskToTargets(createTask(mDefaultDisplay), (type, anim) -> {});
mController.cleanupAnimation(REORDER_MOVE_TO_ORIGINAL_POSITION);
verify(mController).restoreNavigationBarFromApp(eq(true));
verify(mController.mStatusBar).setNavigationBarLumaSamplingEnabled(
eq(mDefaultDisplay.mDisplayId), eq(true));
verify(transaction).setLayer(navToken.getSurfaceControl(), 0);
}
@Test
public void testNotAttachNavigationBar_controlledByFadeRotationAnimation() {
setupForShouldAttachNavBarDuringTransition();