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

Commit 5866a0c6 authored by John Reck's avatar John Reck
Browse files

Revert SurfaceView back to Q's version

Revert API behavior changes to SurfaceView, snapping
back to Q's version.

Bug: 133378280
Test: none
Change-Id: I3a47f9bfdfab2d16707f952a9af672551736e681
parent 9fa30bf6
Loading
Loading
Loading
Loading
+0 −42
Original line number Diff line number Diff line
@@ -27,7 +27,6 @@ import android.content.res.Configuration;
import android.graphics.BlendMode;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.HardwareRenderer;
import android.graphics.Paint;
import android.graphics.PixelFormat;
import android.graphics.PorterDuff;
@@ -202,29 +201,6 @@ public class SurfaceView extends View implements ViewRootImpl.WindowStoppedCallb

    private SurfaceControl.Transaction mRtTransaction = new SurfaceControl.Transaction();

    /**
     * A callback which reflects an alpha value of this view onto the underlying surfaces.
     *
     * <p class="note"><strong>Note:</strong> This doesn't have to be defined as a member variable,
     * but can be defined as an inline lambda when calling ViewRootImpl#registerRtFrameCallback().
     * However when we do so, the callback is triggered only for a few times and stops working for
     * some reason. It's suspected that there is a problem around garbage collection, and until
     * the cause is fixed, we will keep this callback in a member variable.</p>
    */
    private HardwareRenderer.FrameDrawingCallback mSetSurfaceAlphaCallback = frame -> {
        final ViewRootImpl viewRoot = getViewRootImpl();
        if (viewRoot == null || viewRoot.mSurface == null || !viewRoot.mSurface.isValid()) {
            // In this case, the alpha value is reflected on the screen in #updateSurface() later.
            return;
        }

        final SurfaceControl.Transaction t = new SurfaceControl.Transaction();
        t.setAlpha(mSurfaceControl, getAlpha());
        t.deferTransactionUntilSurface(mSurfaceControl, viewRoot.mSurface, frame);
        t.setEarlyWakeup();
        t.apply();
    };

    public SurfaceView(Context context) {
        this(context, null);
    }
@@ -312,17 +288,6 @@ public class SurfaceView extends View implements ViewRootImpl.WindowStoppedCallb
        updateSurface();
    }

    @Override
    public void setAlpha(float alpha) {
        super.setAlpha(alpha);
        final ViewRootImpl viewRoot = getViewRootImpl();
        if (viewRoot == null) {
            return;
        }
        viewRoot.registerRtFrameCallback(mSetSurfaceAlphaCallback);
        invalidate();
    }

    private void performDrawFinished() {
        if (mPendingReportDraws > 0) {
            mDrawFinished = true;
@@ -682,13 +647,6 @@ public class SurfaceView extends View implements ViewRootImpl.WindowStoppedCallb
                        }
                        updateBackgroundVisibilityInTransaction(viewRoot.getSurfaceControl());

                        // Alpha value change is handled in setAlpha() directly using a local
                        // transaction. However it can happen that setAlpha() is called while
                        // local transactions cannot be applied, so the value is stored in a View
                        // but not yet reflected on the Surface.
                        mSurfaceControl.setAlpha(getAlpha());
                        mBackgroundControl.setAlpha(getAlpha());

                        // While creating the surface, we will set it's initial
                        // geometry. Outside of that though, we should generally
                        // leave it to the RenderThread.