Only adjust the task position when there is no move-to-top request.

Adjust the check order when adjusting the focus.
If there is no move-to-top request, only adjust the task position,
otherwise it may send top position change to unrelated activities.

Bug: 154685134
Test: atest ActivityLifecycleTopResumedStateTests
Test: atest ActivityRecordTests
Change-Id: I0827641b8f24e8f42e6b8e8703648dc540c902ef
This commit is contained in:
wilsonshih
2020-04-24 11:41:29 +08:00
parent 6dd1627a27
commit a31e01fc25

View File

@@ -2688,16 +2688,7 @@ class Task extends WindowContainer<WindowContainer> {
return null;
}
final String myReason = reason + " adjustFocusToNextFocusableStack";
final ActivityRecord top = focusableTask.topRunningActivity();
final ActivityStack rootTask = (ActivityStack) focusableTask.getRootTask();
if (focusableTask.isActivityTypeHome() && (top == null || !top.mVisibleRequested)) {
// If we will be focusing on the home stack next and its current top activity isn't
// visible, then use the move the home stack task to top to make the activity visible.
focusableTask.getDisplayArea().moveHomeActivityToTop(myReason);
return rootTask;
}
if (!moveParentsToTop) {
// Only move the next stack to top in its task container.
WindowContainer parent = focusableTask.getParent();
@@ -2705,6 +2696,15 @@ class Task extends WindowContainer<WindowContainer> {
return rootTask;
}
final String myReason = reason + " adjustFocusToNextFocusableStack";
final ActivityRecord top = focusableTask.topRunningActivity();
if (focusableTask.isActivityTypeHome() && (top == null || !top.mVisibleRequested)) {
// If we will be focusing on the home stack next and its current top activity isn't
// visible, then use the move the home stack task to top to make the activity visible.
focusableTask.getDisplayArea().moveHomeActivityToTop(myReason);
return rootTask;
}
// Move the entire hierarchy to top with updating global top resumed activity
// and focused application if needed.
focusableTask.moveToFront(myReason);