Keep screen brightness at 0 while waiting for the UI to be displayed.

Change-Id: I957135c5423db6d83f4f30232481a1b6d77165fa
diff --git a/services/java/com/android/server/PowerManagerService.java b/services/java/com/android/server/PowerManagerService.java
index 78dbbd6..1941c6a 100644
--- a/services/java/com/android/server/PowerManagerService.java
+++ b/services/java/com/android/server/PowerManagerService.java
@@ -1677,6 +1677,18 @@
             e.fillInStackTrace();
             Slog.i(TAG, "Set screen state: " + on, e);
         }
+        if (on) {
+            if ((mPowerState & SCREEN_ON_BIT) == 0 || mSkippedScreenOn) {
+                // If we are turning the screen state on, but the screen
+                // light is currently off, then make sure that we set the
+                // light at this point to 0.  This is the case where we are
+                // turning on the screen and waiting for the UI to be drawn
+                // before showing it to the user.  We want the light off
+                // until it is ready to be shown to the user, not it using
+                // whatever the last value it had.
+                mScreenBrightness.forceValueLocked(Power.BRIGHTNESS_OFF);
+            }
+        }
         int err = Power.setScreenState(on);
         if (err == 0) {
             mLastScreenOnTime = (on ? SystemClock.elapsedRealtime() : 0);
@@ -2029,8 +2041,6 @@
                 RuntimeException e = new RuntimeException("here");
                 e.fillInStackTrace();
                 Slog.i(TAG, "Setting screen brightness: " + brightness, e);
-                mScreenBrightness.setTargetLocked(brightness, steps,
-                        INITIAL_SCREEN_BRIGHTNESS, nominalCurrentValue);
             }
         }
 
@@ -2103,6 +2113,15 @@
                     + " delta=" + delta);
         }
 
+        void forceValueLocked(int value) {
+            targetValue = -1;
+            curValue = value;
+            setLightBrightness(mask, value);
+            if (animating) {
+                finishAnimationLocked(false, value);
+            }
+        }
+
         void setTargetLocked(int target, int stepsToTarget, int initialValue,
                 int nominalCurrentValue) {
             if (!initialized) {