Avoid creating new instance on top when started for result in some cases

A new activity instance was created when the task top activity with launch
mode singleTop started itself via startActivityForResult.

Also an activity with launchMode singleInstance was created and added on
top of another activity if it was started via startActivityForResult().

Bug: 122967919
Bug: 122968776
Test: atest IntentTests
Change-Id: I923a0d9aae62dc44c796b7f1c9327dd35dd658bb
This commit is contained in:
Louis Chang
2020-01-07 17:20:37 +08:00
parent b69a2c9cd1
commit 7d6783c37f

View File

@@ -1804,12 +1804,12 @@ class ActivityStarter {
*/
private int deliverToCurrentTopIfNeeded(ActivityStack topStack) {
final ActivityRecord top = topStack.topRunningNonDelayedActivityLocked(mNotTop);
final boolean dontStart = top != null && mStartActivity.resultTo == null
final boolean dontStart = top != null
&& top.mActivityComponent.equals(mStartActivity.mActivityComponent)
&& top.mUserId == mStartActivity.mUserId
&& top.attachedToProcess()
&& ((mLaunchFlags & FLAG_ACTIVITY_SINGLE_TOP) != 0
|| isLaunchModeOneOf(LAUNCH_SINGLE_TOP, LAUNCH_SINGLE_TASK))
|| isLaunchModeOneOf(LAUNCH_SINGLE_TOP, LAUNCH_SINGLE_TASK))
// This allows home activity to automatically launch on secondary display when
// display added, if home was the top activity on default display, instead of
// sending new intent to the home activity on default display.
@@ -2040,8 +2040,6 @@ class ActivityStarter {
&& !isLaunchModeOneOf(LAUNCH_SINGLE_TASK, LAUNCH_SINGLE_INSTANCE)
&& (mLaunchFlags & FLAG_ACTIVITY_NEW_DOCUMENT) != 0;
sendNewTaskResultRequestIfNeeded();
if ((mLaunchFlags & FLAG_ACTIVITY_NEW_DOCUMENT) != 0 && r.resultTo == null) {
mLaunchFlags |= FLAG_ACTIVITY_NEW_TASK;
}
@@ -2223,6 +2221,8 @@ class ActivityStarter {
mLaunchFlags |= FLAG_ACTIVITY_NEW_TASK;
}
}
sendNewTaskResultRequestIfNeeded();
}
private void computeSourceStack() {