Merge "Avoid adjusting top focused root task while clear task"

This commit is contained in:
Louis Chang
2020-08-12 00:50:32 +00:00
committed by Android (Google) Code Review
3 changed files with 18 additions and 7 deletions

View File

@@ -2549,7 +2549,9 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
final Task stack = getRootTask();
final boolean mayAdjustTop = (isState(RESUMED) || stack.mResumedActivity == null)
&& stack.isFocusedStackOnDisplay();
&& stack.isFocusedStackOnDisplay()
// Do not adjust focus task because the task will be reused to launch new activity.
&& !task.isClearingToReuseTask();
final boolean shouldAdjustGlobalFocus = mayAdjustTop
// It must be checked before {@link #makeFinishingLocked} is called, because a stack
// is not visible if it only contains finishing activities.

View File

@@ -2023,8 +2023,6 @@ class ActivityStarter {
// of history or if it is finished immediately), thus disassociating the task. Also note
// that mReuseTask is reset as a result of {@link Task#performClearTaskLocked}
// launching another activity.
// TODO(b/36119896): We shouldn't trigger activity launches in this path since we are
// already launching one.
targetTask.performClearTaskLocked();
targetTask.setIntent(mStartActivity);
mAddingToTask = true;

View File

@@ -1836,14 +1836,25 @@ class Task extends WindowContainer<WindowContainer> {
*/
void performClearTaskLocked() {
mReuseTask = true;
performClearTask("clear-task-all");
mReuseTask = false;
mStackSupervisor.beginDeferResume();
try {
performClearTask("clear-task-all");
} finally {
mStackSupervisor.endDeferResume();
mReuseTask = false;
}
}
ActivityRecord performClearTaskForReuseLocked(ActivityRecord newR, int launchFlags) {
mReuseTask = true;
final ActivityRecord result = performClearTaskLocked(newR, launchFlags);
mReuseTask = false;
mStackSupervisor.beginDeferResume();
final ActivityRecord result;
try {
result = performClearTaskLocked(newR, launchFlags);
} finally {
mStackSupervisor.endDeferResume();
mReuseTask = false;
}
return result;
}