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
diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java
index f549af8..ebd0130 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 @@
 
         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 ac7b9b1..f7b2fe5 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 @@
                 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);