am 2e8295ce: am 3bb98aec: Merge "Fix issue #6730064: When turning off Nakasi, it very often..." into jb-dev

* commit '2e8295ce1861d8284f16e0f0f80475db0ec2983f':
  Fix issue #6730064: When turning off Nakasi, it very often...
diff --git a/services/java/com/android/server/power/PowerManagerService.java b/services/java/com/android/server/power/PowerManagerService.java
index 7ba95c0..edd00e8 100644
--- a/services/java/com/android/server/power/PowerManagerService.java
+++ b/services/java/com/android/server/power/PowerManagerService.java
@@ -1034,7 +1034,7 @@
                 mWakeLockState = mLocks.gatherState();
                 // goes in the middle to reduce flicker
                 if ((wl.flags & PowerManager.ON_AFTER_RELEASE) != 0) {
-                    userActivity(SystemClock.uptimeMillis(), -1, false, OTHER_EVENT, false);
+                    userActivity(SystemClock.uptimeMillis(), -1, false, OTHER_EVENT, false, true);
                 }
                 setPowerState(mWakeLockState | mUserState);
             }
@@ -2463,7 +2463,7 @@
 
     public void userActivityWithForce(long time, boolean noChangeLights, boolean force) {
         mContext.enforceCallingOrSelfPermission(android.Manifest.permission.DEVICE_POWER, null);
-        userActivity(time, -1, noChangeLights, OTHER_EVENT, force);
+        userActivity(time, -1, noChangeLights, OTHER_EVENT, force, false);
     }
 
     public void userActivity(long time, boolean noChangeLights) {
@@ -2476,15 +2476,15 @@
             return;
         }
 
-        userActivity(time, -1, noChangeLights, OTHER_EVENT, false);
+        userActivity(time, -1, noChangeLights, OTHER_EVENT, false, false);
     }
 
     public void userActivity(long time, boolean noChangeLights, int eventType) {
-        userActivity(time, -1, noChangeLights, eventType, false);
+        userActivity(time, -1, noChangeLights, eventType, false, false);
     }
 
     public void userActivity(long time, boolean noChangeLights, int eventType, boolean force) {
-        userActivity(time, -1, noChangeLights, eventType, force);
+        userActivity(time, -1, noChangeLights, eventType, force, false);
     }
 
     /*
@@ -2494,11 +2494,11 @@
     public void clearUserActivityTimeout(long now, long timeout) {
         mContext.enforceCallingOrSelfPermission(android.Manifest.permission.DEVICE_POWER, null);
         Slog.i(TAG, "clearUserActivity for " + timeout + "ms from now");
-        userActivity(now, timeout, false, OTHER_EVENT, false);
+        userActivity(now, timeout, false, OTHER_EVENT, false, false);
     }
 
     private void userActivity(long time, long timeoutOverride, boolean noChangeLights,
-            int eventType, boolean force) {
+            int eventType, boolean force, boolean ignoreIfScreenOff) {
 
         if (((mPokey & POKE_LOCK_IGNORE_TOUCH_EVENTS) != 0) && (eventType == TOUCH_EVENT)) {
             if (false) {
@@ -2522,6 +2522,11 @@
                 Slog.d(TAG, "ignoring user activity while turning off screen");
                 return;
             }
+            // ignore if the caller doesn't want this to allow the screen to turn
+            // on, and the screen is currently off.
+            if (ignoreIfScreenOff && (mPowerState & SCREEN_ON_BIT) == 0) {
+                return;
+            }
             // Disable proximity sensor if if user presses power key while we are in the
             // "waiting for proximity sensor to go negative" state.
             if (mProximitySensorActive && mProximityWakeLockCount == 0) {