From a8be5e50c6dc316ffba5746f5d9b35ac01ee21aa Mon Sep 17 00:00:00 2001 From: Chong Zhang Date: Mon, 5 Oct 2015 17:06:28 -0700 Subject: [PATCH] Do not bring home stack to front when removing non-focused stack Also, launch task in freeform stack if it's resizeable. bug: 24671570 Change-Id: Icc4f342b954e5f80dde3609fb65412686f4f0f95 --- .../java/com/android/server/am/ActivityStack.java | 3 ++- .../android/server/am/ActivityStackSupervisor.java | 12 ++++++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java index f549af8c0c533..ebd0130288de9 100644 --- a/services/core/java/com/android/server/am/ActivityStack.java +++ b/services/core/java/com/android/server/am/ActivityStack.java @@ -4545,7 +4545,8 @@ final class ActivityStack { if (mTaskHistory.isEmpty()) { if (DEBUG_STACK) Slog.i(TAG_STACK, "removeTask: removing stack=" + this); - if (isOnHomeDisplay()) { + // We only need to adjust focused stack if this stack is in focus. + if (isOnHomeDisplay() && mStackSupervisor.isFrontStack(this)) { String myReason = reason + " leftTaskHistoryEmpty"; if (mFullscreen || !adjustFocusToNextVisibleStackLocked(null, myReason)) { mStackSupervisor.moveHomeStackToFront(myReason); diff --git a/services/core/java/com/android/server/am/ActivityStackSupervisor.java b/services/core/java/com/android/server/am/ActivityStackSupervisor.java index ac7b9b1400c2b..f7b2fe565197f 100644 --- a/services/core/java/com/android/server/am/ActivityStackSupervisor.java +++ b/services/core/java/com/android/server/am/ActivityStackSupervisor.java @@ -1799,10 +1799,14 @@ public final class ActivityStackSupervisor implements DisplayListener { return container.mStack; } - // The fullscreen stack is the only stack that can contain any task regardless of if - // the task is resizeable or not. So, we let the task go in the fullscreen task if it - // is the focus stack. - if (mFocusedStack.mStackId == FULLSCREEN_WORKSPACE_STACK_ID + // The fullscreen stack can contain any task regardless of if the task is resizeable + // or not. So, we let the task go in the fullscreen task if it is the focus stack. + // If the freeform stack has focus, and the activity to be launched is resizeable, + // we can also put it in the focused stack. + final boolean canUseFocusedStack = + mFocusedStack.mStackId == FULLSCREEN_WORKSPACE_STACK_ID + || mFocusedStack.mStackId == FREEFORM_WORKSPACE_STACK_ID && r.info.resizeable; + if (canUseFocusedStack && (!newTask || mFocusedStack.mActivityContainer.isEligibleForNewTasks())) { if (DEBUG_FOCUS || DEBUG_STACK) Slog.d(TAG_FOCUS, "computeStackFocus: Have a focused stack=" + mFocusedStack);