Merge "SurfaceView: Update transform hint only if the view is visible" into sc-dev am: 861ba140a1

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15302836

Change-Id: I48261545315b21c41a5c6802f7870e3a946d88ef
diff --git a/core/java/android/view/SurfaceView.java b/core/java/android/view/SurfaceView.java
index f04530f..c39426d 100644
--- a/core/java/android/view/SurfaceView.java
+++ b/core/java/android/view/SurfaceView.java
@@ -1081,7 +1081,8 @@
             || mWindowSpaceTop != mLocation[1];
         final boolean layoutSizeChanged = getWidth() != mScreenRect.width()
             || getHeight() != mScreenRect.height();
-        final boolean hintChanged = viewRoot.getSurfaceTransformHint() != mTransformHint;
+        final boolean hintChanged = (viewRoot.getSurfaceTransformHint() != mTransformHint)
+                && mRequestedVisible;
 
         if (creating || formatChanged || sizeChanged || visibleChanged ||
                 (mUseAlpha && alphaChanged) || windowVisibleChanged ||
@@ -1227,7 +1228,9 @@
             // Therefore, we must explicitly recreate the {@link Surface} in these
             // cases.
             if (mUseBlastAdapter) {
-                mSurface.transferFrom(mBlastBufferQueue.createSurfaceWithHandle());
+                if (mBlastBufferQueue != null) {
+                    mSurface.transferFrom(mBlastBufferQueue.createSurfaceWithHandle());
+                }
             } else {
                 mSurface.createFrom(mSurfaceControl);
             }
@@ -1237,7 +1240,10 @@
     private void setBufferSize(Transaction transaction) {
         if (mUseBlastAdapter) {
             mBlastSurfaceControl.setTransformHint(mTransformHint);
-            mBlastBufferQueue.update(mBlastSurfaceControl, mSurfaceWidth, mSurfaceHeight, mFormat);
+            if (mBlastBufferQueue != null) {
+                mBlastBufferQueue.update(mBlastSurfaceControl, mSurfaceWidth, mSurfaceHeight,
+                        mFormat);
+            }
         } else {
             transaction.setBufferSize(mSurfaceControl, mSurfaceWidth, mSurfaceHeight);
         }