summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeff Brown <jeffbrown@google.com>2012-10-08 16:21:01 -0700
committerJeff Brown <jeffbrown@google.com>2012-10-08 16:21:01 -0700
commit252c206984299d7ce91c27536cafe1bb2fb9628d (patch)
treeb3dc55b5d4a5b184101d815664285ceeb61dc9c7
parent8215ddb4f5fd6d7b6444baa2416190799e3aa09e (diff)
downloadframeworks_base-252c206984299d7ce91c27536cafe1bb2fb9628d.zip
frameworks_base-252c206984299d7ce91c27536cafe1bb2fb9628d.tar.gz
frameworks_base-252c206984299d7ce91c27536cafe1bb2fb9628d.tar.bz2
Improve the power off fade animation.
Fixes an issue where the dim surface alpha was not actually being animated like it was supposed to. Bug: 7224614 Change-Id: Iffd54367ca97ae7fd4b9603807f4e036750442b2
-rw-r--r--services/java/com/android/server/power/DisplayPowerController.java18
-rw-r--r--services/java/com/android/server/power/ElectronBeam.java25
2 files changed, 28 insertions, 15 deletions
diff --git a/services/java/com/android/server/power/DisplayPowerController.java b/services/java/com/android/server/power/DisplayPowerController.java
index 25d2944..82c3617 100644
--- a/services/java/com/android/server/power/DisplayPowerController.java
+++ b/services/java/com/android/server/power/DisplayPowerController.java
@@ -206,11 +206,9 @@ 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;
+ // True if we should fade the screen while turning it off, false if we should play
+ // a stylish electron beam animation instead.
+ private boolean mElectronBeamFadesConfig;
// The pending power request.
// Initially null until the first call to requestPowerState.
@@ -396,7 +394,7 @@ final class DisplayPowerController {
mScreenBrightnessRangeMinimum = clampAbsoluteBrightness(screenBrightnessMinimum);
mScreenBrightnessRangeMaximum = PowerManager.BRIGHTNESS_ON;
- mElectronBeamAnimatesBacklightConfig = resources.getBoolean(
+ mElectronBeamFadesConfig = resources.getBoolean(
com.android.internal.R.bool.config_animateScreenLights);
if (!DEBUG_PRETEND_PROXIMITY_SENSOR_ABSENT) {
@@ -682,8 +680,8 @@ final class DisplayPowerController {
if (mPowerState.getElectronBeamLevel() == 1.0f) {
mPowerState.dismissElectronBeam();
} else if (mPowerState.prepareElectronBeam(
- mElectronBeamAnimatesBacklightConfig ?
- ElectronBeam.MODE_BLANK :
+ mElectronBeamFadesConfig ?
+ ElectronBeam.MODE_FADE :
ElectronBeam.MODE_WARM_UP)) {
mElectronBeamOnAnimator.start();
} else {
@@ -704,8 +702,8 @@ final class DisplayPowerController {
if (mPowerState.getElectronBeamLevel() == 0.0f) {
setScreenOn(false);
} else if (mPowerState.prepareElectronBeam(
- mElectronBeamAnimatesBacklightConfig ?
- ElectronBeam.MODE_BLANK :
+ mElectronBeamFadesConfig ?
+ ElectronBeam.MODE_FADE :
ElectronBeam.MODE_COOL_DOWN)
&& mPowerState.isScreenOn()) {
mElectronBeamOffAnimator.start();
diff --git a/services/java/com/android/server/power/ElectronBeam.java b/services/java/com/android/server/power/ElectronBeam.java
index 8c242f7..6a567ba 100644
--- a/services/java/com/android/server/power/ElectronBeam.java
+++ b/services/java/com/android/server/power/ElectronBeam.java
@@ -80,6 +80,7 @@ final class ElectronBeam {
private EGLContext mEglContext;
private EGLSurface mEglSurface;
private boolean mSurfaceVisible;
+ private float mSurfaceAlpha;
// Texture names. We only use one texture, which contains the screenshot.
private final int[] mTexNames = new int[1];
@@ -90,9 +91,20 @@ final class ElectronBeam {
private final FloatBuffer mVertexBuffer = createNativeFloatBuffer(8);
private final FloatBuffer mTexCoordBuffer = createNativeFloatBuffer(8);
+ /**
+ * Animates an electron beam warming up.
+ */
public static final int MODE_WARM_UP = 0;
+
+ /**
+ * Animates an electron beam shutting off.
+ */
public static final int MODE_COOL_DOWN = 1;
- public static final int MODE_BLANK = 2;
+
+ /**
+ * Animates a simple dim layer to fade the contents of the screen in or out progressively.
+ */
+ public static final int MODE_FADE = 2;
public ElectronBeam(Display display) {
mDisplay = display;
@@ -138,7 +150,7 @@ final class ElectronBeam {
private boolean tryPrepare() {
if (createSurface()) {
- if (mMode == MODE_BLANK) {
+ if (mMode == MODE_FADE) {
return true;
}
return createEglContext()
@@ -182,7 +194,7 @@ final class ElectronBeam {
return false;
}
- if (mMode == MODE_BLANK) {
+ if (mMode == MODE_FADE) {
return showSurface(1.0f - level);
}
@@ -504,7 +516,7 @@ final class ElectronBeam {
if (mSurface == null) {
try {
int flags;
- if (mMode == MODE_BLANK) {
+ if (mMode == MODE_FADE) {
flags = Surface.FX_SURFACE_DIM | Surface.HIDDEN;
} else {
flags = Surface.OPAQUE | Surface.HIDDEN;
@@ -579,11 +591,12 @@ final class ElectronBeam {
}
mSurface = null;
mSurfaceVisible = false;
+ mSurfaceAlpha = 0f;
}
}
private boolean showSurface(float alpha) {
- if (!mSurfaceVisible) {
+ if (!mSurfaceVisible || mSurfaceAlpha != alpha) {
Surface.openTransaction();
try {
mSurface.setLayer(ELECTRON_BEAM_LAYER);
@@ -593,6 +606,7 @@ final class ElectronBeam {
Surface.closeTransaction();
}
mSurfaceVisible = true;
+ mSurfaceAlpha = alpha;
}
return true;
}
@@ -683,5 +697,6 @@ final class ElectronBeam {
pw.println(" mDisplayWidth=" + mDisplayWidth);
pw.println(" mDisplayHeight=" + mDisplayHeight);
pw.println(" mSurfaceVisible=" + mSurfaceVisible);
+ pw.println(" mSurfaceAlpha=" + mSurfaceAlpha);
}
}