Merge "Avoid adjusting top focused root task while clear task" into rvc-qpr-dev

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

View File

@@ -2543,7 +2543,9 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
final ActivityStack 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

@@ -2009,8 +2009,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

@@ -1528,14 +1528,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;
}