diff options
-rw-r--r-- | services/java/com/android/server/power/DisplayPowerState.java | 12 | ||||
-rw-r--r-- | services/java/com/android/server/power/PhotonicModulator.java | 15 |
2 files changed, 20 insertions, 7 deletions
diff --git a/services/java/com/android/server/power/DisplayPowerState.java b/services/java/com/android/server/power/DisplayPowerState.java index 3524a08..1bd7811 100644 --- a/services/java/com/android/server/power/DisplayPowerState.java +++ b/services/java/com/android/server/power/DisplayPowerState.java @@ -239,6 +239,7 @@ final class DisplayPowerState { private void apply() { if (mDirty != 0) { if ((mDirty & DIRTY_SCREEN_ON) != 0 && !mScreenOn) { + mScreenBrightnessModulator.setBrightness(0, true /*sync*/); PowerManagerService.nativeSetScreenState(false); } @@ -246,15 +247,16 @@ final class DisplayPowerState { mElectronBeam.draw(mElectronBeamLevel); } - if ((mDirty & (DIRTY_BRIGHTNESS | DIRTY_SCREEN_ON | DIRTY_ELECTRON_BEAM)) != 0) { - mScreenBrightnessModulator.setBrightness(mScreenOn ? - (int)(mScreenBrightness * mElectronBeamLevel) : 0); - } - if ((mDirty & DIRTY_SCREEN_ON) != 0 && mScreenOn) { PowerManagerService.nativeSetScreenState(true); } + if ((mDirty & (DIRTY_BRIGHTNESS | DIRTY_SCREEN_ON | DIRTY_ELECTRON_BEAM)) != 0 + && mScreenOn) { + mScreenBrightnessModulator.setBrightness( + (int)(mScreenBrightness * mElectronBeamLevel), false /*sync*/); + } + mDirty = 0; if (mCleanListener != null) { diff --git a/services/java/com/android/server/power/PhotonicModulator.java b/services/java/com/android/server/power/PhotonicModulator.java index f7c9c7d..c9b5d90 100644 --- a/services/java/com/android/server/power/PhotonicModulator.java +++ b/services/java/com/android/server/power/PhotonicModulator.java @@ -49,11 +49,12 @@ final class PhotonicModulator { } /** - * Asynchronously sets the backlight brightness. + * Sets the backlight brightness, synchronously or asynchronously. * * @param lightValue The new light value, from 0 to 255. + * @param sync If true, waits for the brightness change to complete before returning. */ - public void setBrightness(int lightValue) { + public void setBrightness(int lightValue, boolean sync) { synchronized (mLock) { if (lightValue != mPendingLightValue) { mPendingLightValue = lightValue; @@ -63,6 +64,15 @@ final class PhotonicModulator { mExecutor.execute(mTask); } } + if (sync) { + while (mPendingChange) { + try { + mLock.wait(); + } catch (InterruptedException ex) { + // ignore it + } + } + } } } @@ -76,6 +86,7 @@ final class PhotonicModulator { if (newLightValue == mActualLightValue) { mSuspendBlocker.release(); mPendingChange = false; + mLock.notifyAll(); return; } mActualLightValue = newLightValue; |