Merge "Revert SurfaceView back to Q's version" into qt-r1-dev am: 2f8cae24b9
am: 2562753783

Change-Id: I3c95c3c080b76b9f9f33ddb9e27d84a167cdfcb6
diff --git a/core/java/android/view/SurfaceView.java b/core/java/android/view/SurfaceView.java
index 4891b43c..17e83ca 100644
--- a/core/java/android/view/SurfaceView.java
+++ b/core/java/android/view/SurfaceView.java
@@ -27,7 +27,6 @@
 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;
@@ -203,29 +202,6 @@
 
     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);
     }
@@ -324,17 +300,6 @@
         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;
@@ -709,13 +674,6 @@
                         }
                         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.