summaryrefslogtreecommitdiff
path: root/core/java/android
diff options
context:
space:
mode:
authorRobert Carr <racarr@google.com>2019-08-27 13:39:58 -0700
committerRobert Carr <racarr@google.com>2019-08-27 13:39:58 -0700
commit3e722b146bb1a1f6718676aa9eca6cfba2573918 (patch)
tree8c95932a3afd9bd09fe54685cbd72006c4e2ba22 /core/java/android
parentaaf6ce298da522f032b44ff3c963cfbfcc217cfb (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.java15
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);