Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2aac1a0f authored by Jeff Brown's avatar Jeff Brown Committed by Android (Google) Code Review
Browse files

Merge "Improve the power off fade animation." into jb-mr1-dev

parents e70bf654 252c2069
Loading
Loading
Loading
Loading
+8 −10
Original line number Diff line number Diff line
@@ -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();
+20 −5
Original line number Diff line number Diff line
@@ -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);
    }
}