diff options
| author | Robert Carr <racarr@google.com> | 2019-08-27 13:39:58 -0700 |
|---|---|---|
| committer | Robert Carr <racarr@google.com> | 2019-08-27 13:39:58 -0700 |
| commit | 3e722b146bb1a1f6718676aa9eca6cfba2573918 (patch) | |
| tree | 8c95932a3afd9bd09fe54685cbd72006c4e2ba22 /core/java/android | |
| parent | aaf6ce298da522f032b44ff3c963cfbfcc217cfb (diff) | |
WindowlessViewRoot: Add transparency and SurfaceInset support
Bug: 138676533
Test: Builds
Change-Id: I6398fc0ff654886973e6dbe2035d2cd69a56111b
Diffstat (limited to 'core/java/android')
| -rw-r--r-- | core/java/android/view/WindowlessWindowManager.java | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/core/java/android/view/WindowlessWindowManager.java b/core/java/android/view/WindowlessWindowManager.java index 584436542875..59e7bd236907 100644 --- a/core/java/android/view/WindowlessWindowManager.java +++ b/core/java/android/view/WindowlessWindowManager.java @@ -17,6 +17,7 @@ package android.view; import android.content.res.Configuration; +import android.graphics.PixelFormat; import android.graphics.Rect; import android.os.IBinder; import android.os.RemoteException; @@ -93,6 +94,14 @@ class WindowlessWindowManager implements IWindowSession { @Override public void remove(android.view.IWindow window) {} + private boolean isOpaque(WindowManager.LayoutParams attrs) { + if (attrs.surfaceInsets.left != 0 || attrs.surfaceInsets.top != 0 || + attrs.surfaceInsets.right != 0 || attrs.surfaceInsets.bottom != 0) { + return false; + } + return !PixelFormat.formatHasAlpha(attrs.format); + } + @Override public int relayout(IWindow window, int seq, WindowManager.LayoutParams attrs, int requestedWidth, int requestedHeight, int viewFlags, int flags, long frameNumber, @@ -109,7 +118,11 @@ class WindowlessWindowManager implements IWindowSession { "Invalid window token (never added or removed already)"); } SurfaceControl.Transaction t = new SurfaceControl.Transaction(); - t.show(sc).setBufferSize(sc, requestedWidth, requestedHeight).apply(); + t.show(sc).setBufferSize(sc, + requestedWidth + attrs.surfaceInsets.left + attrs.surfaceInsets.right, + requestedHeight + attrs.surfaceInsets.top + attrs.surfaceInsets.bottom) + .setOpaque(sc, isOpaque(attrs)) + .apply(); outSurfaceControl.copyFrom(sc); outFrame.set(0, 0, requestedWidth, requestedHeight); |
