summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jorge Gil <jorgegil@google.com> 2023-04-06 22:55:10 +0000
committer Jorge Gil <jorgegil@google.com> 2023-04-12 23:07:13 +0000
commit5d0a007f855e747d04296f2ecf2ef6daf45ae9ca (patch)
treeff2862edcabc19e6595f2a4f3d44820d35d2de7f
parent5cb5953aadf56b1c305b212437d6977b6ff1991d (diff)
Remove the task background surface
The decoration container surface was used to capture input events outside the task bounds, which required the task surface to be larger than the actual task size and thus a different background surface was needed to draw the backrground color on just the task size. Since outsets are no longer needed per Ib9764cf17f23ef9b5688ead7ae93dabbc1155049, the task surface size now matches the real task size and the background color can be drawn on that same surface, making the background surface obsolete. Bug: 270202228 Test: atest WindowDecorationTests Test: open freeform window, verify background is visible Change-Id: I063cda38ba1aebd1473d1b9522f4a54e2a5c095c
-rw-r--r--libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/WindowDecoration.java52
-rw-r--r--libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/WindowDecorationTests.java31
2 files changed, 17 insertions, 66 deletions
diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/WindowDecoration.java b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/WindowDecoration.java
index 19a31822aabb..8b35694ff8fd 100644
--- a/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/WindowDecoration.java
+++ b/libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/WindowDecoration.java
@@ -91,7 +91,6 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer>
Display mDisplay;
Context mDecorWindowContext;
SurfaceControl mDecorationContainerSurface;
- SurfaceControl mTaskBackgroundSurface;
SurfaceControl mCaptionContainerSurface;
private WindowlessWindowManager mCaptionWindowManager;
@@ -202,6 +201,11 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer>
.inflate(params.mLayoutResId, null);
}
+ final Resources resources = mDecorWindowContext.getResources();
+ final Rect taskBounds = taskConfig.windowConfiguration.getBounds();
+ outResult.mWidth = taskBounds.width();
+ outResult.mHeight = taskBounds.height();
+
// DecorationContainerSurface
if (mDecorationContainerSurface == null) {
final SurfaceControl.Builder builder = mSurfaceControlBuilderSupplier.get();
@@ -216,38 +220,9 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer>
TaskConstants.TASK_CHILD_LAYER_WINDOW_DECORATIONS);
}
- final Rect taskBounds = taskConfig.windowConfiguration.getBounds();
- final Resources resources = mDecorWindowContext.getResources();
- outResult.mWidth = taskBounds.width();
- outResult.mHeight = taskBounds.height();
startT.setWindowCrop(mDecorationContainerSurface, outResult.mWidth, outResult.mHeight)
.show(mDecorationContainerSurface);
- // TODO(b/270202228): This surface can be removed. Instead, use
- // |mDecorationContainerSurface| to set the background now that it no longer has outsets
- // and its crop is set to the task bounds.
- // TaskBackgroundSurface
- if (mTaskBackgroundSurface == null) {
- final SurfaceControl.Builder builder = mSurfaceControlBuilderSupplier.get();
- mTaskBackgroundSurface = builder
- .setName("Background of Task=" + mTaskInfo.taskId)
- .setEffectLayer()
- .setParent(mTaskSurface)
- .build();
-
- startT.setLayer(mTaskBackgroundSurface, TaskConstants.TASK_CHILD_LAYER_TASK_BACKGROUND);
- }
-
- float shadowRadius = loadDimension(resources, params.mShadowRadiusId);
- int backgroundColorInt = mTaskInfo.taskDescription.getBackgroundColor();
- mTmpColor[0] = (float) Color.red(backgroundColorInt) / 255.f;
- mTmpColor[1] = (float) Color.green(backgroundColorInt) / 255.f;
- mTmpColor[2] = (float) Color.blue(backgroundColorInt) / 255.f;
- startT.setWindowCrop(mTaskBackgroundSurface, taskBounds.width(), taskBounds.height())
- .setShadowRadius(mTaskBackgroundSurface, shadowRadius)
- .setColor(mTaskBackgroundSurface, mTmpColor)
- .show(mTaskBackgroundSurface);
-
// CaptionContainerSurface, CaptionWindowManager
if (mCaptionContainerSurface == null) {
final SurfaceControl.Builder builder = mSurfaceControlBuilderSupplier.get();
@@ -260,7 +235,6 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer>
final int captionHeight = loadDimensionPixelSize(resources, params.mCaptionHeightId);
final int captionWidth = taskBounds.width();
-
startT.setWindowCrop(mCaptionContainerSurface, captionWidth, captionHeight)
.show(mCaptionContainerSurface);
@@ -301,8 +275,16 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer>
}
// Task surface itself
+ float shadowRadius = loadDimension(resources, params.mShadowRadiusId);
+ int backgroundColorInt = mTaskInfo.taskDescription.getBackgroundColor();
+ mTmpColor[0] = (float) Color.red(backgroundColorInt) / 255.f;
+ mTmpColor[1] = (float) Color.green(backgroundColorInt) / 255.f;
+ mTmpColor[2] = (float) Color.blue(backgroundColorInt) / 255.f;
Point taskPosition = mTaskInfo.positionInParent;
- startT.show(mTaskSurface);
+ startT.setWindowCrop(mTaskSurface, outResult.mWidth, outResult.mHeight)
+ .setShadowRadius(mTaskSurface, shadowRadius)
+ .setColor(mTaskSurface, mTmpColor)
+ .show(mTaskSurface);
finishT.setPosition(mTaskSurface, taskPosition.x, taskPosition.y)
.setWindowCrop(mTaskSurface, outResult.mWidth, outResult.mHeight);
}
@@ -344,12 +326,6 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer>
released = true;
}
- if (mTaskBackgroundSurface != null) {
- t.remove(mTaskBackgroundSurface);
- mTaskBackgroundSurface = null;
- released = true;
- }
-
if (released) {
t.apply();
}
diff --git a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/WindowDecorationTests.java b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/WindowDecorationTests.java
index 38a519af934b..c1e53a90b7e0 100644
--- a/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/WindowDecorationTests.java
+++ b/libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/WindowDecorationTests.java
@@ -50,7 +50,6 @@ import android.view.ViewRootImpl;
import android.view.WindowInsets;
import android.view.WindowManager.LayoutParams;
import android.window.SurfaceSyncGroup;
-import android.window.TaskConstants;
import android.window.WindowContainerTransaction;
import androidx.test.filters.SmallTest;
@@ -190,10 +189,6 @@ public class WindowDecorationTests extends ShellTestCase {
final SurfaceControl.Builder decorContainerSurfaceBuilder =
createMockSurfaceControlBuilder(decorContainerSurface);
mMockSurfaceControlBuilders.add(decorContainerSurfaceBuilder);
- final SurfaceControl taskBackgroundSurface = mock(SurfaceControl.class);
- final SurfaceControl.Builder taskBackgroundSurfaceBuilder =
- createMockSurfaceControlBuilder(taskBackgroundSurface);
- mMockSurfaceControlBuilders.add(taskBackgroundSurfaceBuilder);
final SurfaceControl captionContainerSurface = mock(SurfaceControl.class);
final SurfaceControl.Builder captionContainerSurfaceBuilder =
createMockSurfaceControlBuilder(captionContainerSurface);
@@ -222,16 +217,6 @@ public class WindowDecorationTests extends ShellTestCase {
verify(mMockSurfaceControlStartT).setTrustedOverlay(decorContainerSurface, true);
verify(mMockSurfaceControlStartT).setWindowCrop(decorContainerSurface, 300, 100);
- verify(taskBackgroundSurfaceBuilder).setParent(taskSurface);
- verify(taskBackgroundSurfaceBuilder).setEffectLayer();
- verify(mMockSurfaceControlStartT).setWindowCrop(taskBackgroundSurface, 300, 100);
- verify(mMockSurfaceControlStartT)
- .setColor(taskBackgroundSurface, new float[] {1.f, 1.f, 0.f});
- verify(mMockSurfaceControlStartT).setShadowRadius(taskBackgroundSurface, 10);
- verify(mMockSurfaceControlStartT).setLayer(taskBackgroundSurface,
- TaskConstants.TASK_CHILD_LAYER_TASK_BACKGROUND);
- verify(mMockSurfaceControlStartT).show(taskBackgroundSurface);
-
verify(captionContainerSurfaceBuilder).setParent(decorContainerSurface);
verify(captionContainerSurfaceBuilder).setContainerLayer();
verify(mMockSurfaceControlStartT).setWindowCrop(captionContainerSurface, 300, 64);
@@ -260,6 +245,9 @@ public class WindowDecorationTests extends ShellTestCase {
.setWindowCrop(taskSurface, 300, 100);
verify(mMockSurfaceControlStartT)
.show(taskSurface);
+ verify(mMockSurfaceControlStartT)
+ .setColor(taskSurface, new float[] {1.f, 1.f, 0.f});
+ verify(mMockSurfaceControlStartT).setShadowRadius(taskSurface, 10);
assertEquals(300, mRelayoutResult.mWidth);
assertEquals(100, mRelayoutResult.mHeight);
@@ -275,10 +263,6 @@ public class WindowDecorationTests extends ShellTestCase {
final SurfaceControl.Builder decorContainerSurfaceBuilder =
createMockSurfaceControlBuilder(decorContainerSurface);
mMockSurfaceControlBuilders.add(decorContainerSurfaceBuilder);
- final SurfaceControl taskBackgroundSurface = mock(SurfaceControl.class);
- final SurfaceControl.Builder taskBackgroundSurfaceBuilder =
- createMockSurfaceControlBuilder(taskBackgroundSurface);
- mMockSurfaceControlBuilders.add(taskBackgroundSurfaceBuilder);
final SurfaceControl captionContainerSurface = mock(SurfaceControl.class);
final SurfaceControl.Builder captionContainerSurfaceBuilder =
createMockSurfaceControlBuilder(captionContainerSurface);
@@ -318,7 +302,6 @@ public class WindowDecorationTests extends ShellTestCase {
releaseOrder.verify(mMockSurfaceControlViewHost).release();
releaseOrder.verify(t).remove(captionContainerSurface);
releaseOrder.verify(t).remove(decorContainerSurface);
- releaseOrder.verify(t).remove(taskBackgroundSurface);
releaseOrder.verify(t).apply();
verify(mMockWindowContainerTransaction)
.removeInsetsSource(eq(taskInfo.token), any(), anyInt(), anyInt());
@@ -379,10 +362,6 @@ public class WindowDecorationTests extends ShellTestCase {
final SurfaceControl.Builder decorContainerSurfaceBuilder =
createMockSurfaceControlBuilder(decorContainerSurface);
mMockSurfaceControlBuilders.add(decorContainerSurfaceBuilder);
- final SurfaceControl taskBackgroundSurface = mock(SurfaceControl.class);
- final SurfaceControl.Builder taskBackgroundSurfaceBuilder =
- createMockSurfaceControlBuilder(taskBackgroundSurface);
- mMockSurfaceControlBuilders.add(taskBackgroundSurfaceBuilder);
final SurfaceControl captionContainerSurface = mock(SurfaceControl.class);
final SurfaceControl.Builder captionContainerSurfaceBuilder =
createMockSurfaceControlBuilder(captionContainerSurface);
@@ -451,10 +430,6 @@ public class WindowDecorationTests extends ShellTestCase {
final SurfaceControl.Builder decorContainerSurfaceBuilder =
createMockSurfaceControlBuilder(decorContainerSurface);
mMockSurfaceControlBuilders.add(decorContainerSurfaceBuilder);
- final SurfaceControl taskBackgroundSurface = mock(SurfaceControl.class);
- final SurfaceControl.Builder taskBackgroundSurfaceBuilder =
- createMockSurfaceControlBuilder(taskBackgroundSurface);
- mMockSurfaceControlBuilders.add(taskBackgroundSurfaceBuilder);
final SurfaceControl captionContainerSurface = mock(SurfaceControl.class);
final SurfaceControl.Builder captionContainerSurfaceBuilder =
createMockSurfaceControlBuilder(captionContainerSurface);