diff options
| author | Chavi Weingarten <chaviw@google.com> | 2021-01-25 17:14:50 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2021-01-25 17:14:50 +0000 |
| commit | d27752a9e6e4f175b68aed7b3c76e540b955fdd0 (patch) | |
| tree | 64e545815c96416e8f8a94738e5e7615370a7683 /core/java/android/view | |
| parent | 0ba71bf30e08f29d6ed4f929638de8fa05dd99ad (diff) | |
| parent | 987eb1ca65a78066e6228667854d10ab8aaeb32e (diff) | |
Merge "Ensure opacity is update on the VRI SC when format changes"
Diffstat (limited to 'core/java/android/view')
| -rw-r--r-- | core/java/android/view/ViewRootImpl.java | 38 |
1 files changed, 33 insertions, 5 deletions
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index 96d7304d6968..844fc267c3cb 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -666,6 +666,8 @@ public final class ViewRootImpl implements ViewParent, private ScrollCaptureConnection mScrollCaptureConnection; + private boolean mIsSurfaceOpaque; + private final BackgroundBlurDrawable.Aggregator mBlurRegionAggregator = new BackgroundBlurDrawable.Aggregator(this); @@ -2716,6 +2718,14 @@ public final class ViewRootImpl implements ViewParent, mViewFrameInfo.flags |= FrameInfo.FLAG_WINDOW_LAYOUT_CHANGED; } relayoutResult = relayoutWindow(params, viewVisibility, insetsPending); + final boolean freeformResizing = (relayoutResult + & WindowManagerGlobal.RELAYOUT_RES_DRAG_RESIZING_FREEFORM) != 0; + final boolean dockedResizing = (relayoutResult + & WindowManagerGlobal.RELAYOUT_RES_DRAG_RESIZING_DOCKED) != 0; + final boolean dragResizing = freeformResizing || dockedResizing; + if (mSurfaceControl.isValid()) { + updateOpacity(params, dragResizing); + } if (DEBUG_LAYOUT) Log.v(mTag, "relayout: frame=" + frame.toShortString() + " surface=" + mSurface); @@ -2840,11 +2850,6 @@ public final class ViewRootImpl implements ViewParent, notifySurfaceReplaced(); } - final boolean freeformResizing = (relayoutResult - & WindowManagerGlobal.RELAYOUT_RES_DRAG_RESIZING_FREEFORM) != 0; - final boolean dockedResizing = (relayoutResult - & WindowManagerGlobal.RELAYOUT_RES_DRAG_RESIZING_DOCKED) != 0; - final boolean dragResizing = freeformResizing || dockedResizing; if (mDragResizing != dragResizing) { if (dragResizing) { mResizeMode = freeformResizing @@ -7640,6 +7645,29 @@ public final class ViewRootImpl implements ViewParent, return relayoutResult; } + private void updateOpacity(@Nullable WindowManager.LayoutParams params, boolean dragResizing) { + boolean opaque = false; + if (params != null && !PixelFormat.formatHasAlpha(params.format) + // Don't make surface with surfaceInsets opaque as they display a + // translucent shadow. + && params.surfaceInsets.left == 0 + && params.surfaceInsets.top == 0 + && params.surfaceInsets.right == 0 + && params.surfaceInsets.bottom == 0 + // Don't make surface opaque when resizing to reduce the amount of + // artifacts shown in areas the app isn't drawing content to. + && !dragResizing) { + opaque = true; + } + + if (mIsSurfaceOpaque == opaque) { + return; + } + + mTransaction.setOpaque(mSurfaceControl, opaque).apply(); + mIsSurfaceOpaque = opaque; + } + private void setFrame(Rect frame) { mWinFrame.set(frame); mInsetsController.onFrameChanged(frame); |
