Fix launching logic.

Fixes bug 8643197.

Change-Id: Ie09a767082dc492b449111da91bc0e77b43fa2f6
diff --git a/services/java/com/android/server/am/ActivityStackSupervisor.java b/services/java/com/android/server/am/ActivityStackSupervisor.java
index 7a6687e..b5e952e 100644
--- a/services/java/com/android/server/am/ActivityStackSupervisor.java
+++ b/services/java/com/android/server/am/ActivityStackSupervisor.java
@@ -185,6 +185,17 @@
         }
     }
 
+    boolean resumeHomeActivity(ActivityRecord prev) {
+        moveHomeStack(true);
+        if (prev != null) {
+            prev.mLaunchHomeTaskNext = false;
+        }
+        if (mHomeStack.topRunningActivityLocked(null) != null) {
+            return mHomeStack.resumeTopActivityLocked(prev);
+        }
+        return mService.startHomeActivityLocked(mCurrentUser);
+    }
+
     final void setLaunchHomeTaskNextFlag(ActivityRecord sourceRecord, ActivityRecord r,
             ActivityStack stack) {
         if (stack == mHomeStack) {
@@ -337,24 +348,13 @@
     boolean allPausedActivitiesComplete() {
         for (int stackNdx = mStacks.size() - 1; stackNdx >= 0; --stackNdx) {
             final ActivityStack stack = mStacks.get(stackNdx);
-            if (isFrontStack(stack)) {
-                final ActivityRecord r = stack.mLastPausedActivity;
-                if (r != null && r.state != ActivityState.PAUSED
-                        && r.state != ActivityState.STOPPED
-                        && r.state != ActivityState.STOPPING) {
-                    return false;
-                }
+            final ActivityRecord r = stack.mPausingActivity;
+            if (r != null && r.state != ActivityState.PAUSED
+                    && r.state != ActivityState.STOPPED
+                    && r.state != ActivityState.STOPPING) {
+                return false;
             }
         }
-        // TODO: Not sure if this should check if all Resumed are complete too.
-        switch (mStackState) {
-            case STACK_STATE_HOME_TO_BACK:
-                mStackState = STACK_STATE_HOME_IN_BACK;
-                break;
-            case STACK_STATE_HOME_TO_FRONT:
-                mStackState = STACK_STATE_HOME_IN_FRONT;
-                break;
-        }
         return true;
     }