[RESTRICT AUTOMERGE]Animate back gesture with focusd window activity

Correct the animation target, top most activity can be finishing so
shouldn't be choose as animation target.

Bug: 245467978
Test: Start two activities in a task.
      Finish top activity, before the exit animation done, drive another
      back gesture.
      Verify the target should not point to the top activity.

Change-Id: I4d9d61bd566cafbeef90916cdf40a6fc9c8e13d7
This commit is contained in:
wilsonshih
2022-09-08 11:01:57 +08:00
parent dd2f290170
commit 4a1722411f

View File

@@ -310,7 +310,7 @@ class BackNavigationController {
mBackNaviAnimationController = new BackNaviAnimationController( mBackNaviAnimationController = new BackNaviAnimationController(
backAnimationAdaptor.getRunner(), this, backAnimationAdaptor.getRunner(), this,
currentActivity.getDisplayId()); currentActivity.getDisplayId());
prepareBackToHomeTransition(currentTask, prevTask); prepareBackToHomeTransition(currentActivity, prevTask);
infoBuilder.setPrepareAnimation(true); infoBuilder.setPrepareAnimation(true);
} }
} else { } else {
@@ -489,8 +489,8 @@ class BackNavigationController {
mWindowManagerService = wm; mWindowManagerService = wm;
} }
private void prepareBackToHomeTransition(Task currentTask, Task homeTask) { private void prepareBackToHomeTransition(ActivityRecord currentActivity, Task homeTask) {
final DisplayContent dc = currentTask.getDisplayContent(); final DisplayContent dc = currentActivity.getDisplayContent();
final ActivityRecord homeActivity = homeTask.getTopNonFinishingActivity(); final ActivityRecord homeActivity = homeTask.getTopNonFinishingActivity();
if (!homeActivity.mVisibleRequested) { if (!homeActivity.mVisibleRequested) {
homeActivity.setVisibility(true); homeActivity.setVisibility(true);
@@ -499,7 +499,7 @@ class BackNavigationController {
dc.ensureActivitiesVisible( dc.ensureActivitiesVisible(
null /* starting */, 0 /* configChanges */, null /* starting */, 0 /* configChanges */,
false /* preserveWindows */, true); false /* preserveWindows */, true);
mBackNaviAnimationController.initialize(homeActivity, currentTask.getTopMostActivity()); mBackNaviAnimationController.initialize(homeActivity, currentActivity);
} }
void finishAnimation() { void finishAnimation() {