diff options
Diffstat (limited to 'core/java/android/view/ViewRootImpl.java')
| -rw-r--r-- | core/java/android/view/ViewRootImpl.java | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java index c37120220f1a..810919710550 100644 --- a/core/java/android/view/ViewRootImpl.java +++ b/core/java/android/view/ViewRootImpl.java @@ -491,6 +491,9 @@ public final class ViewRootImpl implements ViewParent, protected final ViewFrameInfo mViewFrameInfo = new ViewFrameInfo(); private final InputEventAssigner mInputEventAssigner = new InputEventAssigner(); + // Whether to draw this surface as DISPLAY_DECORATION. + boolean mDisplayDecorationCached = false; + /** * Update the Choreographer's FrameInfo object with the timing information for the current * ViewRootImpl instance. Erase the data in the current ViewFrameInfo to prepare for the next @@ -2842,6 +2845,9 @@ public final class ViewRootImpl implements ViewParent, if (mSurfaceControl.isValid()) { updateOpacity(mWindowAttributes, dragResizing, surfaceControlChanged /*forceUpdate */); + if (surfaceControlChanged) { + updateDisplayDecoration(); + } } if (DEBUG_LAYOUT) Log.v(mTag, "relayout: frame=" + frame.toShortString() @@ -10399,6 +10405,23 @@ public final class ViewRootImpl implements ViewParent, } /** + * @hide + */ + public void setDisplayDecoration(boolean displayDecoration) { + if (displayDecoration == mDisplayDecorationCached) return; + + mDisplayDecorationCached = displayDecoration; + + if (mSurfaceControl.isValid()) { + updateDisplayDecoration(); + } + } + + private void updateDisplayDecoration() { + mTransaction.setDisplayDecoration(mSurfaceControl, mDisplayDecorationCached).apply(); + } + + /** * Sends a list of blur regions to SurfaceFlinger, tagged with a frame. * * @param regionCopy List of regions |
