Implement stack splitting and task movement.

Split stacks and move tasks between them. Layout the windows
according to the new stack split.

After layout content rectangles are known split the available area
between all stack boxes. Then use those values for future layout.

Provide stack contents to ActivityManager.

Change-Id: I9746e6185445633810d506be514d0b7b540a7f99
diff --git a/services/java/com/android/server/am/ActivityStackSupervisor.java b/services/java/com/android/server/am/ActivityStackSupervisor.java
index d3e5b48..7b8ad43 100644
--- a/services/java/com/android/server/am/ActivityStackSupervisor.java
+++ b/services/java/com/android/server/am/ActivityStackSupervisor.java
@@ -167,7 +167,7 @@
     }
 
     boolean isFrontStack(ActivityStack stack) {
-        return stack == getTopStack();
+        return !(stack.isHomeStack() ^ getTopStack().isHomeStack());
     }
 
     boolean homeIsInFront() {
@@ -299,10 +299,9 @@
     }
 
     boolean allResumedActivitiesComplete() {
-        final boolean homeInBack = !homeIsInFront();
         for (int stackNdx = mStacks.size() - 1; stackNdx >= 0; --stackNdx) {
             final ActivityStack stack = mStacks.get(stackNdx);
-            if (stack.isHomeStack() ^ homeInBack) {
+            if (isFrontStack(stack)) {
                 final ActivityRecord r = stack.mResumedActivity;
                 if (r != null && r.state != ActivityState.RESUMED) {
                     return false;
@@ -1512,7 +1511,7 @@
         }
     }
 
-    private ActivityStack getStack(int stackId) {
+    ActivityStack getStack(int stackId) {
         for (int stackNdx = mStacks.size() - 1; stackNdx >= 0; --stackNdx) {
             final ActivityStack stack = mStacks.get(stackNdx);
             if (stack.getStackId() == stackId) {
@@ -1522,7 +1521,11 @@
         return null;
     }
 
-    int createStack(int relativeStackId, int position, float weight) {
+    ArrayList<ActivityStack> getStacks() {
+        return new ArrayList<ActivityStack>(mStacks);
+    }
+
+    int createStack() {
         synchronized (this) {
             while (true) {
                 if (++mLastStackId <= HOME_STACK_ID) {
@@ -1545,6 +1548,7 @@
             return;
         }
         stack.moveTask(taskId, toTop);
+        stack.resumeTopActivityLocked(null);
     }
 
     ActivityRecord findTaskLocked(Intent intent, ActivityInfo info) {