summaryrefslogtreecommitdiff
path: root/core/java/android/view
diff options
context:
space:
mode:
authorChavi Weingarten <chaviw@google.com>2021-01-25 17:14:50 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2021-01-25 17:14:50 +0000
commitd27752a9e6e4f175b68aed7b3c76e540b955fdd0 (patch)
tree64e545815c96416e8f8a94738e5e7615370a7683 /core/java/android/view
parent0ba71bf30e08f29d6ed4f929638de8fa05dd99ad (diff)
parent987eb1ca65a78066e6228667854d10ab8aaeb32e (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.java38
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);