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 mDecorationContainerSurface;
|
||||||
SurfaceControl mTaskBackgroundSurface;
|
SurfaceControl mTaskBackgroundSurface;
|
||||||
|
|
||||||
private final CaptionWindowManager mCaptionWindowManager;
|
SurfaceControl mCaptionContainerSurface;
|
||||||
|
private CaptionWindowManager mCaptionWindowManager;
|
||||||
private SurfaceControlViewHost mViewHost;
|
private SurfaceControlViewHost mViewHost;
|
||||||
|
|
||||||
private final Rect mCaptionInsetsRect = new Rect();
|
private final Rect mCaptionInsetsRect = new Rect();
|
||||||
@@ -127,11 +128,6 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer>
|
|||||||
|
|
||||||
mDisplay = mDisplayController.getDisplay(mTaskInfo.displayId);
|
mDisplay = mDisplayController.getDisplay(mTaskInfo.displayId);
|
||||||
mDecorWindowContext = mContext.createConfigurationContext(mTaskInfo.getConfiguration());
|
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(
|
startT.setPosition(
|
||||||
mDecorationContainerSurface, decorContainerOffsetX, decorContainerOffsetY)
|
mDecorationContainerSurface, decorContainerOffsetX, decorContainerOffsetY)
|
||||||
.setWindowCrop(mDecorationContainerSurface, outResult.mWidth, outResult.mHeight)
|
.setWindowCrop(mDecorationContainerSurface, outResult.mWidth, outResult.mHeight)
|
||||||
|
// TODO(b/244455401): Change the z-order when it's better organized
|
||||||
.setLayer(mDecorationContainerSurface, mTaskInfo.numActivities + 1)
|
.setLayer(mDecorationContainerSurface, mTaskInfo.numActivities + 1)
|
||||||
.show(mDecorationContainerSurface);
|
.show(mDecorationContainerSurface);
|
||||||
|
|
||||||
@@ -234,12 +231,35 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer>
|
|||||||
startT.setWindowCrop(mTaskBackgroundSurface, taskBounds.width(), taskBounds.height())
|
startT.setWindowCrop(mTaskBackgroundSurface, taskBounds.width(), taskBounds.height())
|
||||||
.setShadowRadius(mTaskBackgroundSurface, shadowRadius)
|
.setShadowRadius(mTaskBackgroundSurface, shadowRadius)
|
||||||
.setColor(mTaskBackgroundSurface, mTmpColor)
|
.setColor(mTaskBackgroundSurface, mTmpColor)
|
||||||
|
// TODO(b/244455401): Change the z-order when it's better organized
|
||||||
.setLayer(mTaskBackgroundSurface, -1)
|
.setLayer(mTaskBackgroundSurface, -1)
|
||||||
.show(mTaskBackgroundSurface);
|
.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
|
// Caption view
|
||||||
mCaptionWindowManager.setConfiguration(taskConfig);
|
mCaptionWindowManager.setConfiguration(taskConfig);
|
||||||
final int captionHeight = (int) Math.ceil(captionHeightDp * outResult.mDensity);
|
|
||||||
final WindowManager.LayoutParams lp =
|
final WindowManager.LayoutParams lp =
|
||||||
new WindowManager.LayoutParams(taskBounds.width(), captionHeight,
|
new WindowManager.LayoutParams(taskBounds.width(), captionHeight,
|
||||||
WindowManager.LayoutParams.TYPE_APPLICATION,
|
WindowManager.LayoutParams.TYPE_APPLICATION,
|
||||||
@@ -262,7 +282,7 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer>
|
|||||||
mCaptionInsetsRect.bottom = mCaptionInsetsRect.top + captionHeight;
|
mCaptionInsetsRect.bottom = mCaptionInsetsRect.top + captionHeight;
|
||||||
wct.addRectInsetsProvider(mTaskInfo.token, mCaptionInsetsRect, CAPTION_INSETS_TYPES);
|
wct.addRectInsetsProvider(mTaskInfo.token, mCaptionInsetsRect, CAPTION_INSETS_TYPES);
|
||||||
} else {
|
} else {
|
||||||
outResult.mRootView.setVisibility(View.GONE);
|
startT.hide(mCaptionContainerSurface);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Task surface itself
|
// Task surface itself
|
||||||
@@ -298,6 +318,13 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer>
|
|||||||
mViewHost = null;
|
mViewHost = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mCaptionWindowManager = null;
|
||||||
|
|
||||||
|
if (mCaptionContainerSurface != null) {
|
||||||
|
mCaptionContainerSurface.release();
|
||||||
|
mCaptionContainerSurface = null;
|
||||||
|
}
|
||||||
|
|
||||||
if (mDecorationContainerSurface != null) {
|
if (mDecorationContainerSurface != null) {
|
||||||
mDecorationContainerSurface.release();
|
mDecorationContainerSurface.release();
|
||||||
mDecorationContainerSurface = null;
|
mDecorationContainerSurface = null;
|
||||||
|
|||||||
@@ -123,6 +123,10 @@ public class WindowDecorationTests extends ShellTestCase {
|
|||||||
final SurfaceControl.Builder taskBackgroundSurfaceBuilder =
|
final SurfaceControl.Builder taskBackgroundSurfaceBuilder =
|
||||||
createMockSurfaceControlBuilder(taskBackgroundSurface);
|
createMockSurfaceControlBuilder(taskBackgroundSurface);
|
||||||
mMockSurfaceControlBuilders.add(taskBackgroundSurfaceBuilder);
|
mMockSurfaceControlBuilders.add(taskBackgroundSurfaceBuilder);
|
||||||
|
final SurfaceControl captionContainerSurface = mock(SurfaceControl.class);
|
||||||
|
final SurfaceControl.Builder captionContainerSurfaceBuilder =
|
||||||
|
createMockSurfaceControlBuilder(captionContainerSurface);
|
||||||
|
mMockSurfaceControlBuilders.add(captionContainerSurfaceBuilder);
|
||||||
|
|
||||||
final ActivityManager.TaskDescription.Builder taskDescriptionBuilder =
|
final ActivityManager.TaskDescription.Builder taskDescriptionBuilder =
|
||||||
new ActivityManager.TaskDescription.Builder()
|
new ActivityManager.TaskDescription.Builder()
|
||||||
@@ -147,6 +151,7 @@ public class WindowDecorationTests extends ShellTestCase {
|
|||||||
|
|
||||||
verify(decorContainerSurfaceBuilder, never()).build();
|
verify(decorContainerSurfaceBuilder, never()).build();
|
||||||
verify(taskBackgroundSurfaceBuilder, never()).build();
|
verify(taskBackgroundSurfaceBuilder, never()).build();
|
||||||
|
verify(captionContainerSurfaceBuilder, never()).build();
|
||||||
verify(mMockSurfaceControlViewHostFactory, never()).create(any(), any(), any());
|
verify(mMockSurfaceControlViewHostFactory, never()).create(any(), any(), any());
|
||||||
|
|
||||||
verify(mMockSurfaceControlFinishT).hide(taskSurface);
|
verify(mMockSurfaceControlFinishT).hide(taskSurface);
|
||||||
@@ -168,6 +173,10 @@ public class WindowDecorationTests extends ShellTestCase {
|
|||||||
final SurfaceControl.Builder taskBackgroundSurfaceBuilder =
|
final SurfaceControl.Builder taskBackgroundSurfaceBuilder =
|
||||||
createMockSurfaceControlBuilder(taskBackgroundSurface);
|
createMockSurfaceControlBuilder(taskBackgroundSurface);
|
||||||
mMockSurfaceControlBuilders.add(taskBackgroundSurfaceBuilder);
|
mMockSurfaceControlBuilders.add(taskBackgroundSurfaceBuilder);
|
||||||
|
final SurfaceControl captionContainerSurface = mock(SurfaceControl.class);
|
||||||
|
final SurfaceControl.Builder captionContainerSurfaceBuilder =
|
||||||
|
createMockSurfaceControlBuilder(captionContainerSurface);
|
||||||
|
mMockSurfaceControlBuilders.add(captionContainerSurfaceBuilder);
|
||||||
|
|
||||||
final ActivityManager.TaskDescription.Builder taskDescriptionBuilder =
|
final ActivityManager.TaskDescription.Builder taskDescriptionBuilder =
|
||||||
new ActivityManager.TaskDescription.Builder()
|
new ActivityManager.TaskDescription.Builder()
|
||||||
@@ -205,6 +214,12 @@ public class WindowDecorationTests extends ShellTestCase {
|
|||||||
verify(mMockSurfaceControlStartT).setLayer(taskBackgroundSurface, -1);
|
verify(mMockSurfaceControlStartT).setLayer(taskBackgroundSurface, -1);
|
||||||
verify(mMockSurfaceControlStartT).show(taskBackgroundSurface);
|
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(mMockSurfaceControlViewHostFactory).create(any(), eq(defaultDisplay), any());
|
||||||
verify(mMockSurfaceControlViewHost)
|
verify(mMockSurfaceControlViewHost)
|
||||||
.setView(same(mMockView),
|
.setView(same(mMockView),
|
||||||
@@ -245,6 +260,10 @@ public class WindowDecorationTests extends ShellTestCase {
|
|||||||
final SurfaceControl.Builder taskBackgroundSurfaceBuilder =
|
final SurfaceControl.Builder taskBackgroundSurfaceBuilder =
|
||||||
createMockSurfaceControlBuilder(taskBackgroundSurface);
|
createMockSurfaceControlBuilder(taskBackgroundSurface);
|
||||||
mMockSurfaceControlBuilders.add(taskBackgroundSurfaceBuilder);
|
mMockSurfaceControlBuilders.add(taskBackgroundSurfaceBuilder);
|
||||||
|
final SurfaceControl captionContainerSurface = mock(SurfaceControl.class);
|
||||||
|
final SurfaceControl.Builder captionContainerSurfaceBuilder =
|
||||||
|
createMockSurfaceControlBuilder(captionContainerSurface);
|
||||||
|
mMockSurfaceControlBuilders.add(captionContainerSurfaceBuilder);
|
||||||
|
|
||||||
final ActivityManager.TaskDescription.Builder taskDescriptionBuilder =
|
final ActivityManager.TaskDescription.Builder taskDescriptionBuilder =
|
||||||
new ActivityManager.TaskDescription.Builder()
|
new ActivityManager.TaskDescription.Builder()
|
||||||
@@ -270,6 +289,7 @@ public class WindowDecorationTests extends ShellTestCase {
|
|||||||
verify(mMockSurfaceControlViewHost, never()).release();
|
verify(mMockSurfaceControlViewHost, never()).release();
|
||||||
verify(decorContainerSurface, never()).release();
|
verify(decorContainerSurface, never()).release();
|
||||||
verify(taskBackgroundSurface, never()).release();
|
verify(taskBackgroundSurface, never()).release();
|
||||||
|
verify(captionContainerSurface, never()).release();
|
||||||
verify(mMockWindowContainerTransaction, never())
|
verify(mMockWindowContainerTransaction, never())
|
||||||
.removeInsetsProvider(eq(taskInfo.token), any());
|
.removeInsetsProvider(eq(taskInfo.token), any());
|
||||||
|
|
||||||
@@ -279,6 +299,7 @@ public class WindowDecorationTests extends ShellTestCase {
|
|||||||
verify(mMockSurfaceControlViewHost).release();
|
verify(mMockSurfaceControlViewHost).release();
|
||||||
verify(decorContainerSurface).release();
|
verify(decorContainerSurface).release();
|
||||||
verify(taskBackgroundSurface).release();
|
verify(taskBackgroundSurface).release();
|
||||||
|
verify(captionContainerSurface).release();
|
||||||
verify(mMockWindowContainerTransaction).removeInsetsProvider(eq(taskInfo.token), any());
|
verify(mMockWindowContainerTransaction).removeInsetsProvider(eq(taskInfo.token), any());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user