Remove meaningless ActivityStarter#mReuseTask

It was also assigned when reusing a cleared task. But the latest
only assign it from mInTask, which has lost it original purpose.

Add a explicit mIsTaskCleared for notifyActivityRestartAttempt.
The condition 'clearedTask' is removed because it was almost always
not satisfied.

Bug: 163976519
Test: WindowManagerServiceTests
Change-Id: I6e3cd10463cacc4aa7fb84a1f631c0179ea4e013
This commit is contained in:
Riddle Hsu
2022-04-01 18:53:29 +08:00
parent 194d7396e2
commit d4e60a1b36

View File

@@ -195,7 +195,6 @@ class ActivityStarter {
private TaskFragment mInTaskFragment;
@VisibleForTesting
boolean mAddingToTask;
private Task mReuseTask;
private ActivityInfo mNewTaskInfo;
private Intent mNewTaskIntent;
@@ -204,6 +203,7 @@ class ActivityStarter {
// The task that the last activity was started into. We currently reset the actual start
// activity's task and as a result may not have a reference to the task in all cases
private Task mTargetTask;
private boolean mIsTaskCleared;
private boolean mMovedToFront;
private boolean mNoAnimation;
private boolean mAvoidMoveToFront;
@@ -597,7 +597,6 @@ class ActivityStarter {
mInTask = starter.mInTask;
mInTaskFragment = starter.mInTaskFragment;
mAddingToTask = starter.mAddingToTask;
mReuseTask = starter.mReuseTask;
mNewTaskInfo = starter.mNewTaskInfo;
mNewTaskIntent = starter.mNewTaskIntent;
@@ -605,6 +604,7 @@ class ActivityStarter {
mTargetTask = starter.mTargetTask;
mTargetRootTask = starter.mTargetRootTask;
mIsTaskCleared = starter.mIsTaskCleared;
mMovedToFront = starter.mMovedToFront;
mNoAnimation = starter.mNoAnimation;
mAvoidMoveToFront = starter.mAvoidMoveToFront;
@@ -1568,10 +1568,7 @@ class ActivityStarter {
return;
}
final int clearTaskFlags = FLAG_ACTIVITY_NEW_TASK | FLAG_ACTIVITY_CLEAR_TASK;
boolean clearedTask = (mLaunchFlags & clearTaskFlags) == clearTaskFlags
&& mReuseTask != null;
if (result == START_TASK_TO_FRONT || result == START_DELIVERED_TO_TOP || clearedTask) {
if (result == START_TASK_TO_FRONT || result == START_DELIVERED_TO_TOP) {
// The activity was already running so it wasn't started, but either brought to the
// front or the new intent was delivered to it since it was already in front. Notify
// anyone interested in this piece of information.
@@ -1581,7 +1578,7 @@ class ActivityStarter {
final ActivityRecord top = targetTask.getTopNonFinishingActivity();
final boolean visible = top != null && top.isVisible();
mService.getTaskChangeNotificationController().notifyActivityRestartAttempt(
targetTask.getTaskInfo(), homeTaskVisible, clearedTask, visible);
targetTask.getTaskInfo(), homeTaskVisible, mIsTaskCleared, visible);
}
if (ActivityManager.isStartResultSuccessful(result)) {
@@ -1927,6 +1924,7 @@ class ActivityStarter {
return START_SUCCESS;
}
/** Returns the leaf task where the target activity may be placed. */
private Task computeTargetTask() {
if (mStartActivity.resultTo == null && mInTask == null && !mAddingToTask
&& (mLaunchFlags & FLAG_ACTIVITY_NEW_TASK) != 0) {
@@ -1937,11 +1935,9 @@ class ActivityStarter {
} else if (mInTask != null) {
// The task is specified from AppTaskImpl, so it may not be attached yet.
if (!mInTask.isAttached()) {
// Clear reuse task so it can find a proper parent to add the task.
if (mReuseTask == mInTask) {
mReuseTask = null;
}
return getOrCreateRootTask(mStartActivity, mLaunchFlags, mInTask, mOptions);
// Attach the task to display area. Ignore the returned root task (though usually
// they are the same) because "target task" should be leaf task.
getOrCreateRootTask(mStartActivity, mLaunchFlags, mInTask, mOptions);
}
return mInTask;
} else {
@@ -2233,13 +2229,12 @@ class ActivityStarter {
// activity. Well that should not be too hard...
// Note: we must persist the {@link Task} first as intentActivity could be
// removed from calling performClearTaskLocked (For example, if it is being brought out
// 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. Keep the task-overlay activity because the targetTask
// will be reused to launch new activity.
// of history or if it is finished immediately), thus disassociating the task. Keep the
// task-overlay activity because the targetTask will be reused to launch new activity.
targetTask.performClearTaskForReuse(true /* excludingTaskOverlay*/);
targetTask.setIntent(mStartActivity);
mAddingToTask = true;
mIsTaskCleared = true;
} else if ((mLaunchFlags & FLAG_ACTIVITY_CLEAR_TOP) != 0
|| isDocumentLaunchesIntoExisting(mLaunchFlags)
|| isLaunchModeOneOf(LAUNCH_SINGLE_INSTANCE, LAUNCH_SINGLE_TASK,
@@ -2352,7 +2347,6 @@ class ActivityStarter {
mInTask = null;
mInTaskFragment = null;
mAddingToTask = false;
mReuseTask = null;
mNewTaskInfo = null;
mNewTaskIntent = null;
@@ -2360,6 +2354,7 @@ class ActivityStarter {
mTargetRootTask = null;
mTargetTask = null;
mIsTaskCleared = false;
mMovedToFront = false;
mNoAnimation = false;
mAvoidMoveToFront = false;
@@ -2577,8 +2572,6 @@ class ActivityStarter {
} else {
mAddingToTask = true;
}
mReuseTask = mInTask;
} else {
mInTask = null;
// Launch ResolverActivity in the source task, so that it stays in the task bounds
@@ -2851,7 +2844,7 @@ class ActivityStarter {
mNewTaskIntent != null ? mNewTaskIntent : mIntent, mVoiceSession,
mVoiceInteractor, toTop, mStartActivity, mSourceRecord, mOptions);
task.mTransitionController.collectExistenceChange(task);
addOrReparentStartingActivity(task, "setTaskFromReuseOrCreateNewTask - mReuseTask");
addOrReparentStartingActivity(task, "setTaskFromReuseOrCreateNewTask");
ProtoLog.v(WM_DEBUG_TASKS, "Starting new activity %s in new task %s",
mStartActivity, mStartActivity.getTask());
@@ -2961,11 +2954,6 @@ class ActivityStarter {
private Task getOrCreateRootTask(ActivityRecord r, int launchFlags, Task task,
ActivityOptions aOptions) {
// We are reusing a task, keep the root task!
if (mReuseTask != null) {
return mReuseTask.getRootTask();
}
final boolean onTop =
(aOptions == null || !aOptions.getAvoidMoveToFront()) && !mLaunchTaskBehind;
final Task sourceTask = mSourceRecord != null ? mSourceRecord.getTask() : null;