Log stack issues and start resize effort.

- Modify Am.java to accept 'stack resize' command.

- Add logging for assigning home stack to non-home task to track down
bug. And maybe fix bug.

- Add template parameter to ArrayList.

Change-Id: Ia73182afc20e9e4430ddadebae034cecb3798eec
diff --git a/services/java/com/android/server/am/ActivityStackSupervisor.java b/services/java/com/android/server/am/ActivityStackSupervisor.java
index f7f0812..b284cfa 100644
--- a/services/java/com/android/server/am/ActivityStackSupervisor.java
+++ b/services/java/com/android/server/am/ActivityStackSupervisor.java
@@ -305,6 +305,7 @@
             final int nextStackId = mWindowManager.removeStack(stackId);
             // TODO: Perhaps we need to let the ActivityManager determine the next focus...
             if (mFocusedStack.mStackId == stackId) {
+                // If this is the last app stack, set mFocusedStack to null.
                 mFocusedStack = nextStackId == HOME_STACK_ID ? null : getStack(nextStackId);
             }
         }
@@ -455,19 +456,16 @@
     }
 
     ActivityRecord topRunningActivityLocked() {
-        ActivityRecord r = null;
-        if (mFocusedStack != null) {
-            r = mFocusedStack.topRunningActivityLocked(null);
-            if (r != null) {
-                return r;
-            }
+        final ActivityStack focusedStack = getFocusedStack();
+        ActivityRecord r = focusedStack.topRunningActivityLocked(null);
+        if (r != null) {
+            return r;
         }
+
         for (int stackNdx = mStacks.size() - 1; stackNdx >= 0; --stackNdx) {
             final ActivityStack stack = mStacks.get(stackNdx);
-            if (stack.mCurrentUser != mCurrentUser) {
-                continue;
-            }
-            if (stack != mFocusedStack && isFrontStack(stack)) {
+            if (stack.mCurrentUser == mCurrentUser && stack != focusedStack &&
+                    isFrontStack(stack)) {
                 r = stack.topRunningActivityLocked(null);
                 if (r != null) {
                     return r;
@@ -1162,7 +1160,7 @@
     }
 
     ActivityStack getCorrectStack(ActivityRecord r) {
-        if (!r.isHomeActivity) {
+        if (!r.isHomeActivity || (r.task != null && !r.task.isHomeTask())) {
             int stackNdx;
             for (stackNdx = mStacks.size() - 1; stackNdx > 0; --stackNdx) {
                 if (mStacks.get(stackNdx).mCurrentUser == mCurrentUser) {
@@ -1184,7 +1182,7 @@
         if (r == null) {
             return;
         }
-        if (r.isHomeActivity) {
+        if (r.isHomeActivity || (r.task != null && r.task.isHomeTask())) {
             if (mStackState != STACK_STATE_HOME_IN_FRONT) {
                 mStackState = STACK_STATE_HOME_TO_FRONT;
             }
@@ -1598,10 +1596,9 @@
             // This not being started from an existing activity, and not part
             // of a new task...  just put it in the top task, though these days
             // this case should never happen.
-            ActivityStack lastStack = getLastStack();
-            targetStack = lastStack != null ? lastStack : mHomeStack;
+            targetStack = getCorrectStack(r);
             moveHomeStack(targetStack.isHomeStack());
-            ActivityRecord prev = lastStack == null ? null : targetStack.topActivity();
+            ActivityRecord prev = targetStack.topActivity();
             r.setTask(prev != null ? prev.task
                     : targetStack.createTaskRecord(getNextTaskId(), r.info, intent, true),
                     null, true);