From 7d6783c37f00dd9dd99bd003a29b77b38df33858 Mon Sep 17 00:00:00 2001 From: Louis Chang Date: Tue, 7 Jan 2020 17:20:37 +0800 Subject: [PATCH] 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 --- .../core/java/com/android/server/wm/ActivityStarter.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/services/core/java/com/android/server/wm/ActivityStarter.java b/services/core/java/com/android/server/wm/ActivityStarter.java index 6587226b14d7a..40aecf5446946 100644 --- a/services/core/java/com/android/server/wm/ActivityStarter.java +++ b/services/core/java/com/android/server/wm/ActivityStarter.java @@ -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() {