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

Commit bc9be8e4 authored by Vishnu Nair's avatar Vishnu Nair
Browse files

SurfaceView: Update transform hint only if the view is visible

Transform hint should only be updated when creating the
surface or the view is visible. If the view is not visible, BBQ
will be null. This fixes a NPE in SurfaceView.

Test: go/wm-smoke
Fixes: 193618182
Change-Id: I98a463ae23a93d89ac803e2c2d80ecfd56ca97d2
parent e684a19b
Loading
Loading
Loading
Loading
+9 −3
Original line number Diff line number Diff line
@@ -1081,7 +1081,8 @@ public class SurfaceView extends View implements ViewRootImpl.SurfaceChangedCall
            || 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 @@ public class SurfaceView extends View implements ViewRootImpl.SurfaceChangedCall
            // Therefore, we must explicitly recreate the {@link Surface} in these
            // cases.
            if (mUseBlastAdapter) {
                if (mBlastBufferQueue != null) {
                    mSurface.transferFrom(mBlastBufferQueue.createSurfaceWithHandle());
                }
            } else {
                mSurface.createFrom(mSurfaceControl);
            }
@@ -1237,7 +1240,10 @@ public class SurfaceView extends View implements ViewRootImpl.SurfaceChangedCall
    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);
        }