Merge "Improve the power off fade animation." into jb-mr1-dev
This commit is contained in:
@@ -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();
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user