summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--services/java/com/android/server/power/DisplayPowerState.java12
-rw-r--r--services/java/com/android/server/power/PhotonicModulator.java15
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;