Moves the task to front if it is different from the top task

The activities of the source task was finishing, so the task was
not moved to front while recycling the task. That also resulted
returning START_DELIVERED_TO_TOP result and aborted the transition.

Bug: 305993229
Test: use media projection on app
Change-Id: I753deaf89acf6d1d32eebac317954e94d74a3f82
This commit is contained in:
Louis Chang 2023-11-27 08:53:57 +00:00
parent 64a6d86287
commit 9ef09c943f

View File

@ -2767,10 +2767,7 @@ class ActivityStarter {
}
}
// If the target task is not in the front, then we need to bring it to the front...
// except... well, with SINGLE_TASK_LAUNCH it's not entirely clear. We'd like to have
// the same behavior as if a new instance was being started, which means not bringing it
// to the front if the caller is not itself in the front.
// If the target task is not in the front, then we need to bring it to the front.
final boolean differentTopTask;
if (mTargetRootTask.getDisplayArea() == mPreferredTaskDisplayArea) {
final Task focusRootTask = mTargetRootTask.mDisplayContent.getFocusedRootTask();
@ -2787,7 +2784,6 @@ class ActivityStarter {
if (differentTopTask && !avoidMoveToFront()) {
mStartActivity.intent.addFlags(Intent.FLAG_ACTIVITY_BROUGHT_TO_FRONT);
if (mSourceRecord == null || inTopNonFinishingTask(mSourceRecord)) {
// We really do want to push this one into the user's face, right now.
if (mLaunchTaskBehind && mSourceRecord != null) {
intentActivity.setTaskToAffiliateWith(mSourceRecord.getTask());
@ -2830,7 +2826,6 @@ class ActivityStarter {
}
mOptions = null;
}
}
if (differentTopTask) {
logPIOnlyCreatorAllowsBAL();
}
@ -2850,20 +2845,6 @@ class ActivityStarter {
mRootWindowContainer.getDefaultTaskDisplayArea(), mTargetRootTask);
}
private boolean inTopNonFinishingTask(ActivityRecord r) {
if (r == null || r.getTask() == null) {
return false;
}
final Task rTask = r.getTask();
final Task parent = rTask.getCreatedByOrganizerTask() != null
? rTask.getCreatedByOrganizerTask() : r.getRootTask();
final ActivityRecord topNonFinishingActivity = parent != null
? parent.getTopNonFinishingActivity() : null;
return topNonFinishingActivity != null && topNonFinishingActivity.getTask() == rTask;
}
private void resumeTargetRootTaskIfNeeded() {
if (mDoResume) {
final ActivityRecord next = mTargetRootTask.topRunningActivity(