diff options
| author | 2015-12-16 13:46:38 -0800 | |
|---|---|---|
| committer | 2015-12-17 09:56:45 -0800 | |
| commit | 3d0267143f88cf6ec554b709d78805a9e46d06db (patch) | |
| tree | d44c8f31a61e09e6a36f840c4b422e3bb3fa347c | |
| parent | 92e432c30e2304272c2f5b1b33366f32c3d763cf (diff) | |
Only add noDisplay activities to freeform source tasks.
We started adding noDisplay activities to source tasks to make the
resolver activity show up within the same task bounds as what caused it
to appear. However, in other cases it might cause to add a noDisplay
activity to a task in which we don't expect anything to appear, e.g.
home task when launching from home.
Bug: 26128908
Bug: 26023670
Change-Id: I2f64e82b3c3754cdbcb4cac3f907674344e67e04
3 files changed, 31 insertions, 18 deletions
diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java index 571bc6efeac5..4ed2fd7449b1 100644 --- a/core/java/android/app/Activity.java +++ b/core/java/android/app/Activity.java @@ -5300,8 +5300,7 @@ public class Activity extends ContextThemeWrapper */ public boolean isTaskRoot() { try { - return ActivityManagerNative.getDefault() - .getTaskForActivity(mToken, true) >= 0; + return ActivityManagerNative.getDefault().getTaskForActivity(mToken, true) >= 0; } catch (RemoteException e) { return false; } diff --git a/services/core/java/com/android/server/am/ActivityRecord.java b/services/core/java/com/android/server/am/ActivityRecord.java index d215fc60ea5b..3da0f8d9c778 100755 --- a/services/core/java/com/android/server/am/ActivityRecord.java +++ b/services/core/java/com/android/server/am/ActivityRecord.java @@ -16,22 +16,21 @@ package com.android.server.am; -import static com.android.server.am.ActivityManagerDebugConfig.*; +import static android.app.ActivityManager.StackId.FREEFORM_WORKSPACE_STACK_ID; +import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_CONFIGURATION; +import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_SAVED_STATE; +import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_SWITCH; +import static com.android.server.am.ActivityManagerDebugConfig.DEBUG_THUMBNAILS; +import static com.android.server.am.ActivityManagerDebugConfig.POSTFIX_STATES; +import static com.android.server.am.ActivityManagerDebugConfig.POSTFIX_SWITCH; +import static com.android.server.am.ActivityManagerDebugConfig.POSTFIX_THUMBNAILS; +import static com.android.server.am.ActivityManagerDebugConfig.TAG_AM; +import static com.android.server.am.ActivityManagerDebugConfig.TAG_WITH_CLASS_NAME; import static com.android.server.am.TaskRecord.INVALID_TASK_ID; import android.app.ActivityManager.TaskDescription; -import android.app.PendingIntent; -import android.os.PersistableBundle; -import android.os.Trace; - -import com.android.internal.app.ResolverActivity; -import com.android.internal.content.ReferrerIntent; -import com.android.internal.util.XmlUtils; -import com.android.server.AttributeCache; -import com.android.server.am.ActivityStack.ActivityState; -import com.android.server.am.ActivityStackSupervisor.ActivityContainer; - import android.app.ActivityOptions; +import android.app.PendingIntent; import android.app.ResultInfo; import android.content.ComponentName; import android.content.Intent; @@ -45,9 +44,11 @@ import android.os.Build; import android.os.Bundle; import android.os.IBinder; import android.os.Message; +import android.os.PersistableBundle; import android.os.Process; import android.os.RemoteException; import android.os.SystemClock; +import android.os.Trace; import android.os.UserHandle; import android.util.EventLog; import android.util.Log; @@ -57,9 +58,12 @@ import android.view.AppTransitionAnimationSpec; import android.view.IApplicationToken; import android.view.WindowManager; -import org.xmlpull.v1.XmlPullParser; -import org.xmlpull.v1.XmlPullParserException; -import org.xmlpull.v1.XmlSerializer; +import com.android.internal.app.ResolverActivity; +import com.android.internal.content.ReferrerIntent; +import com.android.internal.util.XmlUtils; +import com.android.server.AttributeCache; +import com.android.server.am.ActivityStack.ActivityState; +import com.android.server.am.ActivityStackSupervisor.ActivityContainer; import java.io.File; import java.io.IOException; @@ -69,6 +73,10 @@ import java.util.ArrayList; import java.util.HashSet; import java.util.Objects; +import org.xmlpull.v1.XmlPullParser; +import org.xmlpull.v1.XmlPullParserException; +import org.xmlpull.v1.XmlSerializer; + /** * An entry in the history stack, representing an activity. */ @@ -398,6 +406,11 @@ final class ActivityRecord { } } + boolean isFreeform() { + return task != null && task.stack != null + && task.stack.mStackId == FREEFORM_WORKSPACE_STACK_ID; + } + static class Token extends IApplicationToken.Stub { private final WeakReference<ActivityRecord> weakActivity; private final ActivityManagerService mService; diff --git a/services/core/java/com/android/server/am/ActivityStackSupervisor.java b/services/core/java/com/android/server/am/ActivityStackSupervisor.java index 80d531e71f3e..6845bf025189 100644 --- a/services/core/java/com/android/server/am/ActivityStackSupervisor.java +++ b/services/core/java/com/android/server/am/ActivityStackSupervisor.java @@ -2260,7 +2260,8 @@ public final class ActivityStackSupervisor implements DisplayListener { // Also put noDisplay activities in the source task. These by itself can // be placed in any task/stack, however it could launch other activities // like ResolverActivity, and we want those to stay in the original task. - if (r.isResolverActivity() || r.noDisplay) { + if ((r.isResolverActivity() || r.noDisplay) && sourceRecord != null + && sourceRecord.isFreeform()) { addingToTask = true; } } |