summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jeff Brown <jeffbrown@google.com> 2012-10-04 18:38:09 -0700
committer Jeff Brown <jeffbrown@google.com> 2012-10-04 18:39:24 -0700
commita52772ff26e41dbb242a78a1f30619e23fb13dd7 (patch)
tree6ed541e86122b14a4c8ac5a53af8882cb732b037
parent543083593430208af87e51b94cdbbb51cbe2d7b5 (diff)
Support animating just the backlight when turning off.
Bug: 7224614 Change-Id: Ic9fa7a9e458c89d347b03bce6829f952bdf3b6a5
-rw-r--r--services/java/com/android/server/power/DisplayPowerController.java12
-rw-r--r--services/java/com/android/server/power/DisplayPowerState.java22
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);
}