am 797e688b: Continue trying to make the turn off quickly after call feature work.

Merge commit '797e688b3bebbf1f50a8ad08528740b064f79153' into gingerbread

* commit '797e688b3bebbf1f50a8ad08528740b064f79153':
  Continue trying to make the turn off quickly after call feature work.
diff --git a/services/java/com/android/server/PowerManagerService.java b/services/java/com/android/server/PowerManagerService.java
index 4ee89cc..16f3f10 100644
--- a/services/java/com/android/server/PowerManagerService.java
+++ b/services/java/com/android/server/PowerManagerService.java
@@ -1043,11 +1043,10 @@
     // If they gave a timeoutOverride it is the number of seconds
     // to screen-off.  Figure out where in the countdown cycle we
     // should jump to.
-    private void setTimeoutLocked(long now, long timeoutOverride, int nextState) {
+    private void setTimeoutLocked(long now, final long originalTimeoutOverride, int nextState) {
+        long timeoutOverride = originalTimeoutOverride;
         if (mBootCompleted) {
             synchronized (mLocks) {
-                mHandler.removeCallbacks(mTimeoutTask);
-                mTimeoutTask.nextState = nextState;
                 long when = 0;
                 if (timeoutOverride <= 0) {
                     switch (nextState)
@@ -1098,6 +1097,12 @@
                             + " timeoutOverride=" + timeoutOverride
                             + " nextState=" + nextState + " when=" + when);
                 }
+
+                mHandler.removeCallbacks(mTimeoutTask);
+                mTimeoutTask.nextState = nextState;
+                mTimeoutTask.remainingTimeoutOverride = timeoutOverride > 0
+                        ? (originalTimeoutOverride - timeoutOverride)
+                        : -1;
                 mHandler.postAtTime(mTimeoutTask, when);
                 mNextTimeout = when; // for debugging
             }
@@ -1113,6 +1118,7 @@
     private class TimeoutTask implements Runnable
     {
         int nextState; // access should be synchronized on mLocks
+        long remainingTimeoutOverride;
         public void run()
         {
             synchronized (mLocks) {
@@ -1133,11 +1139,11 @@
                 {
                     case SCREEN_BRIGHT:
                         if (mDimDelay >= 0) {
-                            setTimeoutLocked(now, SCREEN_DIM);
+                            setTimeoutLocked(now, remainingTimeoutOverride, SCREEN_DIM);
                             break;
                         }
                     case SCREEN_DIM:
-                        setTimeoutLocked(now, SCREEN_OFF);
+                        setTimeoutLocked(now, remainingTimeoutOverride, SCREEN_OFF);
                         break;
                 }
             }
@@ -2076,6 +2082,7 @@
                         + " mUserState=0x" + Integer.toHexString(mUserState)
                         + " mWakeLockState=0x" + Integer.toHexString(mWakeLockState)
                         + " mProximitySensorActive=" + mProximitySensorActive
+                        + " timeoutOverride=" + timeoutOverride
                         + " force=" + force);
             }
             // ignore user activity if we are in the process of turning off the screen