diff --git a/services/core/java/com/android/server/am/ActivityStarter.java b/services/core/java/com/android/server/am/ActivityStarter.java index ad57ae2cecb39..dc4d7b1d8a054 100644 --- a/services/core/java/com/android/server/am/ActivityStarter.java +++ b/services/core/java/com/android/server/am/ActivityStarter.java @@ -1396,11 +1396,18 @@ class ActivityStarter { final TaskRecord task = mSupervisor.anyTaskForIdLocked(mOptions.getLaunchTaskId()); intentActivity = task != null ? task.getTopActivity() : null; } else if (putIntoExistingTask) { - // See if there is a task to bring to the front. If this is a SINGLE_INSTANCE - // activity, there can be one and only one instance of it in the history, and it is - // always in its own unique task, so we do a special search. - intentActivity = mLaunchSingleInstance ? mSupervisor.findActivityLocked(mIntent, mStartActivity.info) - : mSupervisor.findTaskLocked(mStartActivity); + if (mLaunchSingleInstance) { + // There can be one and only one instance of single instance activity in the + // history, and it is always in its own unique task, so we do a special search. + intentActivity = mSupervisor.findActivityLocked(mIntent, mStartActivity.info); + } else if ((mLaunchFlags & FLAG_ACTIVITY_LAUNCH_ADJACENT) != 0) { + // For the launch adjacent case we only want to put the activity in an existing + // task if the activity already exists in the history. + intentActivity = mSupervisor.findActivityLocked(mIntent, mStartActivity.info); + } else { + // Otherwise find the best task to put the activity in. + intentActivity = mSupervisor.findTaskLocked(mStartActivity); + } } return intentActivity; }