Merge "Move caption under DecorationContainerSurface" into tm-qpr-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
b4c3a06820
@@ -89,7 +89,8 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer>
|
||||
SurfaceControl mDecorationContainerSurface;
|
||||
SurfaceControl mTaskBackgroundSurface;
|
||||
|
||||
private final CaptionWindowManager mCaptionWindowManager;
|
||||
SurfaceControl mCaptionContainerSurface;
|
||||
private CaptionWindowManager mCaptionWindowManager;
|
||||
private SurfaceControlViewHost mViewHost;
|
||||
|
||||
private final Rect mCaptionInsetsRect = new Rect();
|
||||
@@ -127,11 +128,6 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer>
|
||||
|
||||
mDisplay = mDisplayController.getDisplay(mTaskInfo.displayId);
|
||||
mDecorWindowContext = mContext.createConfigurationContext(mTaskInfo.getConfiguration());
|
||||
|
||||
// Put caption under task surface because ViewRootImpl sets the destination frame of
|
||||
// windowless window layers and BLASTBufferQueue#update() doesn't support offset.
|
||||
mCaptionWindowManager =
|
||||
new CaptionWindowManager(mTaskInfo.getConfiguration(), mTaskSurface);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -213,6 +209,7 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer>
|
||||
startT.setPosition(
|
||||
mDecorationContainerSurface, decorContainerOffsetX, decorContainerOffsetY)
|
||||
.setWindowCrop(mDecorationContainerSurface, outResult.mWidth, outResult.mHeight)
|
||||
// TODO(b/244455401): Change the z-order when it's better organized
|
||||
.setLayer(mDecorationContainerSurface, mTaskInfo.numActivities + 1)
|
||||
.show(mDecorationContainerSurface);
|
||||
|
||||
@@ -234,12 +231,35 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer>
|
||||
startT.setWindowCrop(mTaskBackgroundSurface, taskBounds.width(), taskBounds.height())
|
||||
.setShadowRadius(mTaskBackgroundSurface, shadowRadius)
|
||||
.setColor(mTaskBackgroundSurface, mTmpColor)
|
||||
// TODO(b/244455401): Change the z-order when it's better organized
|
||||
.setLayer(mTaskBackgroundSurface, -1)
|
||||
.show(mTaskBackgroundSurface);
|
||||
|
||||
// CaptionContainerSurface, CaptionWindowManager
|
||||
if (mCaptionContainerSurface == null) {
|
||||
final SurfaceControl.Builder builder = mSurfaceControlBuilderSupplier.get();
|
||||
mCaptionContainerSurface = builder
|
||||
.setName("Caption container of Task=" + mTaskInfo.taskId)
|
||||
.setContainerLayer()
|
||||
.setParent(mDecorationContainerSurface)
|
||||
.build();
|
||||
}
|
||||
|
||||
final int captionHeight = (int) Math.ceil(captionHeightDp * outResult.mDensity);
|
||||
startT.setPosition(
|
||||
mCaptionContainerSurface, -decorContainerOffsetX, -decorContainerOffsetY)
|
||||
.setWindowCrop(mCaptionContainerSurface, taskBounds.width(), captionHeight)
|
||||
.show(mCaptionContainerSurface);
|
||||
|
||||
if (mCaptionWindowManager == null) {
|
||||
// Put caption under a container surface because ViewRootImpl sets the destination frame
|
||||
// of windowless window layers and BLASTBufferQueue#update() doesn't support offset.
|
||||
mCaptionWindowManager = new CaptionWindowManager(
|
||||
mTaskInfo.getConfiguration(), mCaptionContainerSurface);
|
||||
}
|
||||
|
||||
// Caption view
|
||||
mCaptionWindowManager.setConfiguration(taskConfig);
|
||||
final int captionHeight = (int) Math.ceil(captionHeightDp * outResult.mDensity);
|
||||
final WindowManager.LayoutParams lp =
|
||||
new WindowManager.LayoutParams(taskBounds.width(), captionHeight,
|
||||
WindowManager.LayoutParams.TYPE_APPLICATION,
|
||||
@@ -262,7 +282,7 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer>
|
||||
mCaptionInsetsRect.bottom = mCaptionInsetsRect.top + captionHeight;
|
||||
wct.addRectInsetsProvider(mTaskInfo.token, mCaptionInsetsRect, CAPTION_INSETS_TYPES);
|
||||
} else {
|
||||
outResult.mRootView.setVisibility(View.GONE);
|
||||
startT.hide(mCaptionContainerSurface);
|
||||
}
|
||||
|
||||
// Task surface itself
|
||||
@@ -298,6 +318,13 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer>
|
||||
mViewHost = null;
|
||||
}
|
||||
|
||||
mCaptionWindowManager = null;
|
||||
|
||||
if (mCaptionContainerSurface != null) {
|
||||
mCaptionContainerSurface.release();
|
||||
mCaptionContainerSurface = null;
|
||||
}
|
||||
|
||||
if (mDecorationContainerSurface != null) {
|
||||
mDecorationContainerSurface.release();
|
||||
mDecorationContainerSurface = null;
|
||||
|
||||
@@ -123,6 +123,10 @@ public class WindowDecorationTests extends ShellTestCase {
|
||||
final SurfaceControl.Builder taskBackgroundSurfaceBuilder =
|
||||
createMockSurfaceControlBuilder(taskBackgroundSurface);
|
||||
mMockSurfaceControlBuilders.add(taskBackgroundSurfaceBuilder);
|
||||
final SurfaceControl captionContainerSurface = mock(SurfaceControl.class);
|
||||
final SurfaceControl.Builder captionContainerSurfaceBuilder =
|
||||
createMockSurfaceControlBuilder(captionContainerSurface);
|
||||
mMockSurfaceControlBuilders.add(captionContainerSurfaceBuilder);
|
||||
|
||||
final ActivityManager.TaskDescription.Builder taskDescriptionBuilder =
|
||||
new ActivityManager.TaskDescription.Builder()
|
||||
@@ -147,6 +151,7 @@ public class WindowDecorationTests extends ShellTestCase {
|
||||
|
||||
verify(decorContainerSurfaceBuilder, never()).build();
|
||||
verify(taskBackgroundSurfaceBuilder, never()).build();
|
||||
verify(captionContainerSurfaceBuilder, never()).build();
|
||||
verify(mMockSurfaceControlViewHostFactory, never()).create(any(), any(), any());
|
||||
|
||||
verify(mMockSurfaceControlFinishT).hide(taskSurface);
|
||||
@@ -168,6 +173,10 @@ public class WindowDecorationTests extends ShellTestCase {
|
||||
final SurfaceControl.Builder taskBackgroundSurfaceBuilder =
|
||||
createMockSurfaceControlBuilder(taskBackgroundSurface);
|
||||
mMockSurfaceControlBuilders.add(taskBackgroundSurfaceBuilder);
|
||||
final SurfaceControl captionContainerSurface = mock(SurfaceControl.class);
|
||||
final SurfaceControl.Builder captionContainerSurfaceBuilder =
|
||||
createMockSurfaceControlBuilder(captionContainerSurface);
|
||||
mMockSurfaceControlBuilders.add(captionContainerSurfaceBuilder);
|
||||
|
||||
final ActivityManager.TaskDescription.Builder taskDescriptionBuilder =
|
||||
new ActivityManager.TaskDescription.Builder()
|
||||
@@ -205,6 +214,12 @@ public class WindowDecorationTests extends ShellTestCase {
|
||||
verify(mMockSurfaceControlStartT).setLayer(taskBackgroundSurface, -1);
|
||||
verify(mMockSurfaceControlStartT).show(taskBackgroundSurface);
|
||||
|
||||
verify(captionContainerSurfaceBuilder).setParent(decorContainerSurface);
|
||||
verify(captionContainerSurfaceBuilder).setContainerLayer();
|
||||
verify(mMockSurfaceControlStartT).setPosition(captionContainerSurface, 20, 40);
|
||||
verify(mMockSurfaceControlStartT).setWindowCrop(captionContainerSurface, 300, 64);
|
||||
verify(mMockSurfaceControlStartT).show(captionContainerSurface);
|
||||
|
||||
verify(mMockSurfaceControlViewHostFactory).create(any(), eq(defaultDisplay), any());
|
||||
verify(mMockSurfaceControlViewHost)
|
||||
.setView(same(mMockView),
|
||||
@@ -245,6 +260,10 @@ public class WindowDecorationTests extends ShellTestCase {
|
||||
final SurfaceControl.Builder taskBackgroundSurfaceBuilder =
|
||||
createMockSurfaceControlBuilder(taskBackgroundSurface);
|
||||
mMockSurfaceControlBuilders.add(taskBackgroundSurfaceBuilder);
|
||||
final SurfaceControl captionContainerSurface = mock(SurfaceControl.class);
|
||||
final SurfaceControl.Builder captionContainerSurfaceBuilder =
|
||||
createMockSurfaceControlBuilder(captionContainerSurface);
|
||||
mMockSurfaceControlBuilders.add(captionContainerSurfaceBuilder);
|
||||
|
||||
final ActivityManager.TaskDescription.Builder taskDescriptionBuilder =
|
||||
new ActivityManager.TaskDescription.Builder()
|
||||
@@ -270,6 +289,7 @@ public class WindowDecorationTests extends ShellTestCase {
|
||||
verify(mMockSurfaceControlViewHost, never()).release();
|
||||
verify(decorContainerSurface, never()).release();
|
||||
verify(taskBackgroundSurface, never()).release();
|
||||
verify(captionContainerSurface, never()).release();
|
||||
verify(mMockWindowContainerTransaction, never())
|
||||
.removeInsetsProvider(eq(taskInfo.token), any());
|
||||
|
||||
@@ -279,6 +299,7 @@ public class WindowDecorationTests extends ShellTestCase {
|
||||
verify(mMockSurfaceControlViewHost).release();
|
||||
verify(decorContainerSurface).release();
|
||||
verify(taskBackgroundSurface).release();
|
||||
verify(captionContainerSurface).release();
|
||||
verify(mMockWindowContainerTransaction).removeInsetsProvider(eq(taskInfo.token), any());
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user