diff options
| author | 2012-10-04 18:38:09 -0700 | |
|---|---|---|
| committer | 2012-10-04 18:39:24 -0700 | |
| commit | a52772ff26e41dbb242a78a1f30619e23fb13dd7 (patch) | |
| tree | 6ed541e86122b14a4c8ac5a53af8882cb732b037 | |
| parent | 543083593430208af87e51b94cdbbb51cbe2d7b5 (diff) | |
Support animating just the backlight when turning off.
Bug: 7224614
Change-Id: Ic9fa7a9e458c89d347b03bce6829f952bdf3b6a5
| -rw-r--r-- | services/java/com/android/server/power/DisplayPowerController.java | 12 | ||||
| -rw-r--r-- | services/java/com/android/server/power/DisplayPowerState.java | 22 |
2 files changed, 26 insertions, 8 deletions
diff --git a/services/java/com/android/server/power/DisplayPowerController.java b/services/java/com/android/server/power/DisplayPowerController.java index d0e758fe3929..b9f9df7b9b8e 100644 --- a/services/java/com/android/server/power/DisplayPowerController.java +++ b/services/java/com/android/server/power/DisplayPowerController.java @@ -197,6 +197,12 @@ final class DisplayPowerController { // May be 0 if no warm-up is required. private int mLightSensorWarmUpTimeConfig; + // True if we should animate the backlight when turning the screen on or off, which + // tends to be efficient for LCD displays but not for OLED displays. + // False if we should play the electron beam animation instead, which is better for + // OLED displays. + private boolean mElectronBeamAnimatesBacklightConfig; + // The pending power request. // Initially null until the first call to requestPowerState. // Guarded by mLock. @@ -362,6 +368,9 @@ final class DisplayPowerController { com.android.internal.R.integer.config_lightSensorWarmupTime); } + mElectronBeamAnimatesBacklightConfig = resources.getBoolean( + com.android.internal.R.bool.config_animateScreenLights); + if (!DEBUG_PRETEND_PROXIMITY_SENSOR_ABSENT) { mProximitySensor = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY); if (mProximitySensor != null) { @@ -481,7 +490,8 @@ final class DisplayPowerController { private void initialize() { final Executor executor = AsyncTask.THREAD_POOL_EXECUTOR; Display display = mDisplayManager.getDisplay(Display.DEFAULT_DISPLAY); - mPowerState = new DisplayPowerState(new ElectronBeam(display), + mPowerState = new DisplayPowerState( + mElectronBeamAnimatesBacklightConfig ? null : new ElectronBeam(display), new PhotonicModulator(executor, mLights.getLight(LightsService.LIGHT_ID_BACKLIGHT), mSuspendBlocker)); diff --git a/services/java/com/android/server/power/DisplayPowerState.java b/services/java/com/android/server/power/DisplayPowerState.java index 1bd781144189..dba45b39dbb1 100644 --- a/services/java/com/android/server/power/DisplayPowerState.java +++ b/services/java/com/android/server/power/DisplayPowerState.java @@ -50,7 +50,7 @@ final class DisplayPowerState { private static final int DIRTY_BRIGHTNESS = 1 << 2; private final Choreographer mChoreographer; - private final ElectronBeam mElectronBeam; + private final ElectronBeam mElectronBeam; // may be null if only animating backlights private final PhotonicModulator mScreenBrightnessModulator; private int mDirty; @@ -134,16 +134,22 @@ final class DisplayPowerState { * @return True if the electron beam was prepared. */ public boolean prepareElectronBeam(boolean warmUp) { - boolean success = mElectronBeam.prepare(warmUp); - invalidate(DIRTY_ELECTRON_BEAM); - return success; + if (mElectronBeam != null) { + boolean success = mElectronBeam.prepare(warmUp); + invalidate(DIRTY_ELECTRON_BEAM); + return success; + } else { + return true; + } } /** * Dismisses the electron beam surface. */ public void dismissElectronBeam() { - mElectronBeam.dismiss(); + if (mElectronBeam != null) { + mElectronBeam.dismiss(); + } } /** @@ -224,7 +230,9 @@ final class DisplayPowerState { pw.println(" mScreenBrightness=" + mScreenBrightness); pw.println(" mElectronBeamLevel=" + mElectronBeamLevel); - mElectronBeam.dump(pw); + if (mElectronBeam != null) { + mElectronBeam.dump(pw); + } } private void invalidate(int dirty) { @@ -243,7 +251,7 @@ final class DisplayPowerState { PowerManagerService.nativeSetScreenState(false); } - if ((mDirty & DIRTY_ELECTRON_BEAM) != 0) { + if ((mDirty & DIRTY_ELECTRON_BEAM) != 0 && mElectronBeam != null) { mElectronBeam.draw(mElectronBeamLevel); } |