Merge "Fix some issues that make caption insets remain" into tm-qpr-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
e2823f9a50
@@ -733,7 +733,7 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation
|
|||||||
}
|
}
|
||||||
for (@InternalInsetsType int type = 0; type < InsetsState.SIZE; type++) {
|
for (@InternalInsetsType int type = 0; type < InsetsState.SIZE; type++) {
|
||||||
// Only update the server side insets here.
|
// Only update the server side insets here.
|
||||||
if (type == ITYPE_CAPTION_BAR) continue;
|
if (!CAPTION_ON_SHELL && type == ITYPE_CAPTION_BAR) continue;
|
||||||
InsetsSource source = mState.peekSource(type);
|
InsetsSource source = mState.peekSource(type);
|
||||||
if (source == null) continue;
|
if (source == null) continue;
|
||||||
if (newState.peekSource(type) == null) {
|
if (newState.peekSource(type) == null) {
|
||||||
|
|||||||
@@ -66,6 +66,7 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer>
|
|||||||
final DisplayController mDisplayController;
|
final DisplayController mDisplayController;
|
||||||
final ShellTaskOrganizer mTaskOrganizer;
|
final ShellTaskOrganizer mTaskOrganizer;
|
||||||
final Supplier<SurfaceControl.Builder> mSurfaceControlBuilderSupplier;
|
final Supplier<SurfaceControl.Builder> mSurfaceControlBuilderSupplier;
|
||||||
|
final Supplier<WindowContainerTransaction> mWindowContainerTransactionSupplier;
|
||||||
final SurfaceControlViewHostFactory mSurfaceControlViewHostFactory;
|
final SurfaceControlViewHostFactory mSurfaceControlViewHostFactory;
|
||||||
private final DisplayController.OnDisplaysChangedListener mOnDisplaysChangedListener =
|
private final DisplayController.OnDisplaysChangedListener mOnDisplaysChangedListener =
|
||||||
new DisplayController.OnDisplaysChangedListener() {
|
new DisplayController.OnDisplaysChangedListener() {
|
||||||
@@ -102,7 +103,8 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer>
|
|||||||
RunningTaskInfo taskInfo,
|
RunningTaskInfo taskInfo,
|
||||||
SurfaceControl taskSurface) {
|
SurfaceControl taskSurface) {
|
||||||
this(context, displayController, taskOrganizer, taskInfo, taskSurface,
|
this(context, displayController, taskOrganizer, taskInfo, taskSurface,
|
||||||
SurfaceControl.Builder::new, new SurfaceControlViewHostFactory() {});
|
SurfaceControl.Builder::new, WindowContainerTransaction::new,
|
||||||
|
new SurfaceControlViewHostFactory() {});
|
||||||
}
|
}
|
||||||
|
|
||||||
WindowDecoration(
|
WindowDecoration(
|
||||||
@@ -112,6 +114,7 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer>
|
|||||||
RunningTaskInfo taskInfo,
|
RunningTaskInfo taskInfo,
|
||||||
SurfaceControl taskSurface,
|
SurfaceControl taskSurface,
|
||||||
Supplier<SurfaceControl.Builder> surfaceControlBuilderSupplier,
|
Supplier<SurfaceControl.Builder> surfaceControlBuilderSupplier,
|
||||||
|
Supplier<WindowContainerTransaction> windowContainerTransactionSupplier,
|
||||||
SurfaceControlViewHostFactory surfaceControlViewHostFactory) {
|
SurfaceControlViewHostFactory surfaceControlViewHostFactory) {
|
||||||
mContext = context;
|
mContext = context;
|
||||||
mDisplayController = displayController;
|
mDisplayController = displayController;
|
||||||
@@ -119,6 +122,7 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer>
|
|||||||
mTaskInfo = taskInfo;
|
mTaskInfo = taskInfo;
|
||||||
mTaskSurface = taskSurface;
|
mTaskSurface = taskSurface;
|
||||||
mSurfaceControlBuilderSupplier = surfaceControlBuilderSupplier;
|
mSurfaceControlBuilderSupplier = surfaceControlBuilderSupplier;
|
||||||
|
mWindowContainerTransactionSupplier = windowContainerTransactionSupplier;
|
||||||
mSurfaceControlViewHostFactory = surfaceControlViewHostFactory;
|
mSurfaceControlViewHostFactory = surfaceControlViewHostFactory;
|
||||||
|
|
||||||
mDisplay = mDisplayController.getDisplay(mTaskInfo.displayId);
|
mDisplay = mDisplayController.getDisplay(mTaskInfo.displayId);
|
||||||
@@ -301,6 +305,10 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer>
|
|||||||
mTaskBackgroundSurface.release();
|
mTaskBackgroundSurface.release();
|
||||||
mTaskBackgroundSurface = null;
|
mTaskBackgroundSurface = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
final WindowContainerTransaction wct = mWindowContainerTransactionSupplier.get();
|
||||||
|
wct.removeInsetsProvider(mTaskInfo.token, CAPTION_INSETS_TYPES);
|
||||||
|
mTaskOrganizer.applyTransaction(wct);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -232,6 +232,57 @@ public class WindowDecorationTests extends ShellTestCase {
|
|||||||
assertEquals(2, mRelayoutResult.mDensity, 0.f);
|
assertEquals(2, mRelayoutResult.mDensity, 0.f);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testLayoutResultCalculation_visibleFocusedTaskToInvisible() {
|
||||||
|
final Display defaultDisplay = mock(Display.class);
|
||||||
|
doReturn(defaultDisplay).when(mMockDisplayController)
|
||||||
|
.getDisplay(Display.DEFAULT_DISPLAY);
|
||||||
|
|
||||||
|
final SurfaceControl decorContainerSurface = mock(SurfaceControl.class);
|
||||||
|
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 ActivityManager.TaskDescription.Builder taskDescriptionBuilder =
|
||||||
|
new ActivityManager.TaskDescription.Builder()
|
||||||
|
.setBackgroundColor(Color.YELLOW);
|
||||||
|
final ActivityManager.RunningTaskInfo taskInfo = new TestRunningTaskInfoBuilder()
|
||||||
|
.setDisplayId(Display.DEFAULT_DISPLAY)
|
||||||
|
.setTaskDescriptionBuilder(taskDescriptionBuilder)
|
||||||
|
.setBounds(TASK_BOUNDS)
|
||||||
|
.setPositionInParent(TASK_POSITION_IN_PARENT.x, TASK_POSITION_IN_PARENT.y)
|
||||||
|
.setVisible(true)
|
||||||
|
.build();
|
||||||
|
taskInfo.isFocused = true;
|
||||||
|
// Density is 2. Outsets are (20, 40, 60, 80) px. Shadow radius is 10px. Caption height is
|
||||||
|
// 64px.
|
||||||
|
taskInfo.configuration.densityDpi = DisplayMetrics.DENSITY_DEFAULT * 2;
|
||||||
|
mOutsetsDp.set(10, 20, 30, 40);
|
||||||
|
|
||||||
|
final SurfaceControl taskSurface = mock(SurfaceControl.class);
|
||||||
|
final TestWindowDecoration windowDecor = createWindowDecoration(taskInfo, taskSurface);
|
||||||
|
|
||||||
|
windowDecor.relayout(taskInfo);
|
||||||
|
|
||||||
|
verify(mMockSurfaceControlViewHost, never()).release();
|
||||||
|
verify(decorContainerSurface, never()).release();
|
||||||
|
verify(taskBackgroundSurface, never()).release();
|
||||||
|
verify(mMockWindowContainerTransaction, never())
|
||||||
|
.removeInsetsProvider(eq(taskInfo.token), any());
|
||||||
|
|
||||||
|
taskInfo.isVisible = false;
|
||||||
|
windowDecor.relayout(taskInfo);
|
||||||
|
|
||||||
|
verify(mMockSurfaceControlViewHost).release();
|
||||||
|
verify(decorContainerSurface).release();
|
||||||
|
verify(taskBackgroundSurface).release();
|
||||||
|
verify(mMockWindowContainerTransaction).removeInsetsProvider(eq(taskInfo.token), any());
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testNotCrashWhenDisplayAppearsAfterTask() {
|
public void testNotCrashWhenDisplayAppearsAfterTask() {
|
||||||
doReturn(mock(Display.class)).when(mMockDisplayController)
|
doReturn(mock(Display.class)).when(mMockDisplayController)
|
||||||
@@ -282,7 +333,7 @@ public class WindowDecorationTests extends ShellTestCase {
|
|||||||
ActivityManager.RunningTaskInfo taskInfo, SurfaceControl testSurface) {
|
ActivityManager.RunningTaskInfo taskInfo, SurfaceControl testSurface) {
|
||||||
return new TestWindowDecoration(mContext, mMockDisplayController, mMockShellTaskOrganizer,
|
return new TestWindowDecoration(mContext, mMockDisplayController, mMockShellTaskOrganizer,
|
||||||
taskInfo, testSurface, new MockSurfaceControlBuilderSupplier(),
|
taskInfo, testSurface, new MockSurfaceControlBuilderSupplier(),
|
||||||
mMockSurfaceControlViewHostFactory);
|
() -> mMockWindowContainerTransaction, mMockSurfaceControlViewHostFactory);
|
||||||
}
|
}
|
||||||
|
|
||||||
private class MockSurfaceControlBuilderSupplier implements Supplier<SurfaceControl.Builder> {
|
private class MockSurfaceControlBuilderSupplier implements Supplier<SurfaceControl.Builder> {
|
||||||
@@ -313,9 +364,11 @@ public class WindowDecorationTests extends ShellTestCase {
|
|||||||
ShellTaskOrganizer taskOrganizer, ActivityManager.RunningTaskInfo taskInfo,
|
ShellTaskOrganizer taskOrganizer, ActivityManager.RunningTaskInfo taskInfo,
|
||||||
SurfaceControl taskSurface,
|
SurfaceControl taskSurface,
|
||||||
Supplier<SurfaceControl.Builder> surfaceControlBuilderSupplier,
|
Supplier<SurfaceControl.Builder> surfaceControlBuilderSupplier,
|
||||||
|
Supplier<WindowContainerTransaction> windowContainerTransactionSupplier,
|
||||||
SurfaceControlViewHostFactory surfaceControlViewHostFactory) {
|
SurfaceControlViewHostFactory surfaceControlViewHostFactory) {
|
||||||
super(context, displayController, taskOrganizer, taskInfo, taskSurface,
|
super(context, displayController, taskOrganizer, taskInfo, taskSurface,
|
||||||
surfaceControlBuilderSupplier, surfaceControlViewHostFactory);
|
surfaceControlBuilderSupplier, windowContainerTransactionSupplier,
|
||||||
|
surfaceControlViewHostFactory);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -3393,6 +3393,13 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer<
|
|||||||
pw.println(prefix + "mLastOrientationSource=" + mLastOrientationSource);
|
pw.println(prefix + "mLastOrientationSource=" + mLastOrientationSource);
|
||||||
pw.println(prefix + "deepestLastOrientationSource=" + getLastOrientationSource());
|
pw.println(prefix + "deepestLastOrientationSource=" + getLastOrientationSource());
|
||||||
}
|
}
|
||||||
|
if (mLocalInsetsSourceProviders != null && mLocalInsetsSourceProviders.size() != 0) {
|
||||||
|
pw.println(prefix + mLocalInsetsSourceProviders.size() + " LocalInsetsSourceProviders");
|
||||||
|
final String childPrefix = prefix + " ";
|
||||||
|
for (int i = 0; i < mLocalInsetsSourceProviders.size(); ++i) {
|
||||||
|
mLocalInsetsSourceProviders.valueAt(i).dump(pw, childPrefix);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
final void updateSurfacePositionNonOrganized() {
|
final void updateSurfacePositionNonOrganized() {
|
||||||
|
|||||||
Reference in New Issue
Block a user