// 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.
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) {
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 {
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();
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];
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;
private boolean tryPrepare() {
if (createSurface()) {
- if (mMode == MODE_BLANK) {
+ if (mMode == MODE_FADE) {
return true;
}
return createEglContext()
return false;
}
- if (mMode == MODE_BLANK) {
+ if (mMode == MODE_FADE) {
return showSurface(1.0f - level);
}
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;
}
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);
Surface.closeTransaction();
}
mSurfaceVisible = true;
+ mSurfaceAlpha = alpha;
}
return true;
}
pw.println(" mDisplayWidth=" + mDisplayWidth);
pw.println(" mDisplayHeight=" + mDisplayHeight);
pw.println(" mSurfaceVisible=" + mSurfaceVisible);
+ pw.println(" mSurfaceAlpha=" + mSurfaceAlpha);
}
}