Revert behavior to perform onResume.

Back out changes from CLs ag/363992 and ag/363859. These introduced
the bugs found in bug 10917435 which is now fixed. Note that backing
out these changes reintroduces bug 10732489.

Change-Id: Ic5105dd4cfc8bf79c6f06188283d1ee3680c370c
diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java
index babe0e6..a14d729 100644
--- a/services/java/com/android/server/am/ActivityManagerService.java
+++ b/services/java/com/android/server/am/ActivityManagerService.java
@@ -235,6 +235,7 @@
     static final boolean DEBUG_USER_LEAVING = localLOGV || false;
     static final boolean DEBUG_VISBILITY = localLOGV || false;
     static final boolean DEBUG_PSS = localLOGV || false;
+    static final boolean DEBUG_LOCKSCREEN = localLOGV || true;
     static final boolean VALIDATE_TOKENS = true;
     static final boolean SHOW_ACTIVITY_START_TIME = true;
 
@@ -829,11 +830,7 @@
     /**
      * State of external call telling us if the lock screen is shown.
      */
-    static final int LOCK_SCREEN_NEVER_SHOWN = 0;
-    static final int LOCK_SCREEN_FIRST_SHOWN = 1;
-    static final int LOCK_SCREEN_HIDDEN = 2;
-    static final int LOCK_SCREEN_SHOWING = 3;
-    int mLockScreenState = LOCK_SCREEN_NEVER_SHOWN;
+    boolean mLockScreenShown = false;
 
     /**
      * Set if we are shutting down the system, similar to sleeping.
@@ -4961,8 +4958,9 @@
         final long token = Binder.clearCallingIdentity();
         try {
             synchronized (this) {
-                if (lockScreenShowing()) {
-                    mLockScreenState = LOCK_SCREEN_HIDDEN;
+                if (DEBUG_LOCKSCREEN) logLockScreen("");
+                if (mLockScreenShown) {
+                    mLockScreenShown = false;
                     comeOutOfSleepIfNeededLocked();
                 }
                 mStackSupervisor.setDismissKeyguard(true);
@@ -8087,22 +8085,15 @@
         Binder.restoreCallingIdentity(origId);
     }
 
-    boolean lockScreenShowing() {
-        switch (mLockScreenState) {
-            case LOCK_SCREEN_NEVER_SHOWN:
-            case LOCK_SCREEN_HIDDEN:
-                return false;
-            case LOCK_SCREEN_FIRST_SHOWN:
-            case LOCK_SCREEN_SHOWING:
-                return true;
-            default:
-                Slog.e(TAG, "lockScreenShowing: illegal state");
-                throw new IllegalStateException("mLockScreenState=" + mLockScreenState);
-        }
+    void logLockScreen(String msg) {
+        if (DEBUG_LOCKSCREEN) Slog.d(TAG, Debug.getCallers(2) + ":" + msg +
+                " mLockScreenShown=" + mLockScreenShown + " mWentToSleep=" +
+                mWentToSleep + " mSleeping=" + mSleeping + " mDismissKeyguardOnNextActivity=" +
+                mStackSupervisor.mDismissKeyguardOnNextActivity);
     }
 
     private void comeOutOfSleepIfNeededLocked() {
-        if (!mWentToSleep && !lockScreenShowing()) {
+        if (!mWentToSleep && !mLockScreenShown) {
             if (mSleeping) {
                 mSleeping = false;
                 mStackSupervisor.comeOutOfSleepIfNeededLocked();
@@ -8138,12 +8129,8 @@
         synchronized(this) {
             long ident = Binder.clearCallingIdentity();
             try {
-                if (shown && mLockScreenState == LOCK_SCREEN_NEVER_SHOWN) {
-                    mStackSupervisor.pauseStacks(false, true);
-                    mLockScreenState = LOCK_SCREEN_FIRST_SHOWN;
-                } else {
-                    mLockScreenState = shown ? LOCK_SCREEN_SHOWING : LOCK_SCREEN_HIDDEN;
-                }
+                if (DEBUG_LOCKSCREEN) logLockScreen(" shown=" + shown);
+                mLockScreenShown = shown;
                 comeOutOfSleepIfNeededLocked();
             } finally {
                 Binder.restoreCallingIdentity(ident);
@@ -10676,9 +10663,9 @@
             }
         }
         if (dumpPackage == null) {
-            if (mSleeping || mWentToSleep || lockScreenShowing()) {
+            if (mSleeping || mWentToSleep || mLockScreenShown) {
                 pw.println("  mSleeping=" + mSleeping + " mWentToSleep=" + mWentToSleep
-                        + " mLockScreenState=" + lockScreenStateToString());
+                        + " mLockScreenShown " + mLockScreenShown);
             }
             if (mShuttingDown) {
                 pw.println("  mShuttingDown=" + mShuttingDown);
@@ -16303,14 +16290,4 @@
         info.applicationInfo = getAppInfoForUser(info.applicationInfo, userId);
         return info;
     }
-
-    private String lockScreenStateToString() {
-        switch (mLockScreenState) {
-            case LOCK_SCREEN_NEVER_SHOWN: return "LOCK_SCREEN_NEVER_SHOWN";
-            case LOCK_SCREEN_FIRST_SHOWN: return "LOCK_SCREEN_FIRST_SHOWN";
-            case LOCK_SCREEN_HIDDEN: return "LOCK_SCREEN_HIDDEN";
-            case LOCK_SCREEN_SHOWING: return "LOCK_SCREEN_SHOWING";
-            default: return "unknown (" + mLockScreenState + ")";
-        }
-    }
 }
diff --git a/services/java/com/android/server/am/ActivityStack.java b/services/java/com/android/server/am/ActivityStack.java
index bd561fd..a88c3cc 100644
--- a/services/java/com/android/server/am/ActivityStack.java
+++ b/services/java/com/android/server/am/ActivityStack.java
@@ -1190,6 +1190,8 @@
     }
 
     final boolean resumeTopActivityLocked(ActivityRecord prev, Bundle options) {
+        if (ActivityManagerService.DEBUG_LOCKSCREEN) mService.logLockScreen("");
+
         // Find the first activity that is not finishing.
         ActivityRecord next = topRunningActivityLocked(null);
 
@@ -1251,10 +1253,9 @@
 
         // If we are sleeping, and there is no resumed activity, and the top
         // activity is paused, well that is the state we want.
-        if (mService.mLockScreenState == ActivityManagerService.LOCK_SCREEN_FIRST_SHOWN ||
-                (mService.isSleepingOrShuttingDown()
+        if (mService.isSleepingOrShuttingDown()
                 && mLastPausedActivity == next
-                && mStackSupervisor.allPausedActivitiesComplete())) {
+                && mStackSupervisor.allPausedActivitiesComplete()) {
             // Make sure we have executed any pending transitions, since there
             // should be nothing left to do at this point.
             mWindowManager.executeAppTransition();
@@ -1326,7 +1327,7 @@
 
         // We need to start pausing the current activity so the top one
         // can be resumed...
-        boolean pausing = mStackSupervisor.pauseStacks(userLeaving, false);
+        boolean pausing = mStackSupervisor.pauseBackStacks(userLeaving);
         if (mResumedActivity != null) {
             pausing = true;
             startPausingLocked(userLeaving, false);
diff --git a/services/java/com/android/server/am/ActivityStackSupervisor.java b/services/java/com/android/server/am/ActivityStackSupervisor.java
index f11dca9..1ee13ec 100644
--- a/services/java/com/android/server/am/ActivityStackSupervisor.java
+++ b/services/java/com/android/server/am/ActivityStackSupervisor.java
@@ -122,7 +122,7 @@
     WindowManagerService mWindowManager;
 
     /** Dismiss the keyguard after the next activity is displayed? */
-    private boolean mDismissKeyguardOnNextActivity = false;
+    boolean mDismissKeyguardOnNextActivity = false;
 
     /** Identifier counter for all ActivityStacks */
     private int mLastStackId = HOME_STACK_ID;
@@ -232,6 +232,7 @@
     }
 
     void dismissKeyguard() {
+        if (ActivityManagerService.DEBUG_LOCKSCREEN) mService.logLockScreen("");
         if (mDismissKeyguardOnNextActivity) {
             mDismissKeyguardOnNextActivity = false;
             mWindowManager.dismissKeyguard();
@@ -310,6 +311,7 @@
     }
 
     void setDismissKeyguard(boolean dismiss) {
+        if (ActivityManagerService.DEBUG_LOCKSCREEN) mService.logLockScreen(" dismiss=" + dismiss);
         mDismissKeyguardOnNextActivity = dismiss;
     }
 
@@ -468,15 +470,14 @@
     /**
      * Pause all activities in either all of the stacks or just the back stacks.
      * @param userLeaving Passed to pauseActivity() to indicate whether to call onUserLeaving().
-     * @param allStacks Whether to pause all the stacks (true), or just the back stacks (false).
      * @return true if any activity was paused as a result of this call.
      */
-    boolean pauseStacks(boolean userLeaving, boolean allStacks) {
+    boolean pauseBackStacks(boolean userLeaving) {
         boolean someActivityPaused = false;
         for (int stackNdx = mStacks.size() - 1; stackNdx >= 0; --stackNdx) {
             final ActivityStack stack = mStacks.get(stackNdx);
-            if ((allStacks || !isFrontStack(stack)) && stack.mResumedActivity != null) {
-                if (DEBUG_STATES) Slog.d(TAG, "pauseStacks: stack=" + stack +
+            if (!isFrontStack(stack) && stack.mResumedActivity != null) {
+                if (DEBUG_STATES) Slog.d(TAG, "pauseBackStacks: stack=" + stack +
                         " mResumedActivity=" + stack.mResumedActivity);
                 stack.startPausingLocked(userLeaving, false);
                 someActivityPaused = true;
@@ -2157,6 +2158,9 @@
         for (int stackNdx = mStacks.size() - 1; stackNdx >= 0; --stackNdx) {
             final ActivityStack stack = mStacks.get(stackNdx);
             stack.awakeFromSleepingLocked();
+            if (isFrontStack(stack)) {
+                resumeTopActivitiesLocked();
+            }
         }
         mGoingToSleepActivities.clear();
     }