Separate stacks into Home and others.
Change-Id: I9434ee6cd9e8a8baf24d4e4ee5a15e99cf11f227
diff --git a/services/java/com/android/server/wm/DisplayContent.java b/services/java/com/android/server/wm/DisplayContent.java
index bcefc41..61aa0de 100644
--- a/services/java/com/android/server/wm/DisplayContent.java
+++ b/services/java/com/android/server/wm/DisplayContent.java
@@ -20,6 +20,8 @@
import android.view.Display;
import android.view.DisplayInfo;
+import static com.android.server.am.ActivityStackSupervisor.HOME_STACK_ID;
+
import java.io.PrintWriter;
import java.util.ArrayList;
@@ -193,6 +195,15 @@
return false;
}
+ void removeStackBox(StackBox box) {
+ final TaskStack stack = box.mStack;
+ if (stack != null && stack.mStackId == HOME_STACK_ID) {
+ // Never delete the home stack, even if it is empty.
+ return;
+ }
+ mStackBoxes.remove(box);
+ }
+
/**
* Reorder a StackBox within mStackBox. The StackBox to reorder is the one containing the
* specified TaskStack.
diff --git a/services/java/com/android/server/wm/StackBox.java b/services/java/com/android/server/wm/StackBox.java
index 4bdb406..31d1d52 100644
--- a/services/java/com/android/server/wm/StackBox.java
+++ b/services/java/com/android/server/wm/StackBox.java
@@ -18,6 +18,8 @@
import android.graphics.Rect;
+import static com.android.server.am.ActivityStackSupervisor.HOME_STACK_ID;
+
import java.io.PrintWriter;
import java.util.ArrayList;
@@ -200,6 +202,10 @@
/** Remove this box and propagate its sibling's content up to their parent.
* @return The first stackId of the resulting StackBox. */
int removeStack() {
+ if (mParent == null) {
+ mDisplayContent.removeStackBox(this);
+ return HOME_STACK_ID;
+ }
if (mParent.mFirst == this) {
mParent.absorb(mParent.mSecond);
} else {
@@ -219,8 +225,8 @@
pw.print(prefix); pw.print("mFirst="); pw.println(mFirst);
pw.print(prefix); pw.print("mSecond="); pw.println(mSecond);
pw.print(prefix); pw.print("mBounds="); pw.print(mBounds.toShortString());
- pw.print("mVertical="); pw.print(mVertical);
- pw.print("layoutNeeded="); pw.println(layoutNeeded);
+ pw.print(" mVertical="); pw.print(mVertical);
+ pw.print(" layoutNeeded="); pw.println(layoutNeeded);
if (mStack != null) {
pw.print(prefix); pw.print("mStack="); pw.println(mStack);
mStack.dump(prefix + " ", pw);
diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java
index 12dd56e..d3382cc 100644
--- a/services/java/com/android/server/wm/WindowManagerService.java
+++ b/services/java/com/android/server/wm/WindowManagerService.java
@@ -16,29 +16,9 @@
package com.android.server.wm;
-import static android.view.WindowManager.LayoutParams.FIRST_APPLICATION_WINDOW;
-import static android.view.WindowManager.LayoutParams.FIRST_SUB_WINDOW;
-import static android.view.WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM;
-import static android.view.WindowManager.LayoutParams.FLAG_COMPATIBLE_WINDOW;
-import static android.view.WindowManager.LayoutParams.FLAG_DIM_BEHIND;
-import static android.view.WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON;
-import static android.view.WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
-import static android.view.WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER;
-import static android.view.WindowManager.LayoutParams.LAST_APPLICATION_WINDOW;
-import static android.view.WindowManager.LayoutParams.LAST_SUB_WINDOW;
-import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION;
-import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_STARTING;
-import static android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION;
-import static android.view.WindowManager.LayoutParams.TYPE_BOOT_PROGRESS;
-import static android.view.WindowManager.LayoutParams.TYPE_DREAM;
-import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD;
-import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD_DIALOG;
-import static android.view.WindowManager.LayoutParams.TYPE_KEYGUARD;
-import static android.view.WindowManager.LayoutParams.TYPE_RECENTS_OVERLAY;
-import static android.view.WindowManager.LayoutParams.TYPE_SYSTEM_DIALOG;
-import static android.view.WindowManager.LayoutParams.TYPE_SYSTEM_ERROR;
-import static android.view.WindowManager.LayoutParams.TYPE_UNIVERSE_BACKGROUND;
-import static android.view.WindowManager.LayoutParams.TYPE_WALLPAPER;
+import static android.view.WindowManager.LayoutParams.*;
+
+import static com.android.server.am.ActivityStackSupervisor.HOME_STACK_ID;
import static android.view.WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER;
@@ -4698,7 +4678,7 @@
mStackIdToStack.delete(stackId);
return stack.remove();
}
- return -1;
+ return HOME_STACK_ID;
}
public void moveTaskToStack(int taskId, int stackId, boolean toTop) {
@@ -7689,8 +7669,8 @@
i -= lastBelow;
if (i != numRemoved) {
- Slog.w(TAG, "Rebuild removed " + numRemoved
- + " windows but added " + i);
+ Slog.w(TAG, "Rebuild removed " + numRemoved + " windows but added " + i,
+ new RuntimeException("here").fillInStackTrace());
for (i=0; i<numRemoved; i++) {
WindowState ws = mRebuildTmp[i];
if (ws.mRebuilding) {