Loading libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/WindowDecoration.java +17 −5 Original line number Diff line number Diff line Loading @@ -66,6 +66,7 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer> final DisplayController mDisplayController; final ShellTaskOrganizer mTaskOrganizer; final Supplier<SurfaceControl.Builder> mSurfaceControlBuilderSupplier; final Supplier<SurfaceControl.Transaction> mSurfaceControlTransactionSupplier; final Supplier<WindowContainerTransaction> mWindowContainerTransactionSupplier; final SurfaceControlViewHostFactory mSurfaceControlViewHostFactory; private final DisplayController.OnDisplaysChangedListener mOnDisplaysChangedListener = Loading Loading @@ -104,8 +105,8 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer> RunningTaskInfo taskInfo, SurfaceControl taskSurface) { this(context, displayController, taskOrganizer, taskInfo, taskSurface, SurfaceControl.Builder::new, WindowContainerTransaction::new, new SurfaceControlViewHostFactory() {}); SurfaceControl.Builder::new, SurfaceControl.Transaction::new, WindowContainerTransaction::new, new SurfaceControlViewHostFactory() {}); } WindowDecoration( Loading @@ -115,6 +116,7 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer> RunningTaskInfo taskInfo, SurfaceControl taskSurface, Supplier<SurfaceControl.Builder> surfaceControlBuilderSupplier, Supplier<SurfaceControl.Transaction> surfaceControlTransactionSupplier, Supplier<WindowContainerTransaction> windowContainerTransactionSupplier, SurfaceControlViewHostFactory surfaceControlViewHostFactory) { mContext = context; Loading @@ -123,6 +125,7 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer> mTaskInfo = taskInfo; mTaskSurface = taskSurface; mSurfaceControlBuilderSupplier = surfaceControlBuilderSupplier; mSurfaceControlTransactionSupplier = surfaceControlTransactionSupplier; mWindowContainerTransactionSupplier = windowContainerTransactionSupplier; mSurfaceControlViewHostFactory = surfaceControlViewHostFactory; Loading Loading @@ -320,19 +323,28 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer> mCaptionWindowManager = null; final SurfaceControl.Transaction t = mSurfaceControlTransactionSupplier.get(); boolean released = false; if (mCaptionContainerSurface != null) { mCaptionContainerSurface.release(); t.remove(mCaptionContainerSurface); mCaptionContainerSurface = null; released = true; } if (mDecorationContainerSurface != null) { mDecorationContainerSurface.release(); t.remove(mDecorationContainerSurface); mDecorationContainerSurface = null; released = true; } if (mTaskBackgroundSurface != null) { mTaskBackgroundSurface.release(); t.remove(mTaskBackgroundSurface); mTaskBackgroundSurface = null; released = true; } if (released) { t.apply(); } final WindowContainerTransaction wct = mWindowContainerTransactionSupplier.get(); Loading libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/WindowDecorationTests.java +34 −17 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ import static org.mockito.Mockito.any; import static org.mockito.Mockito.argThat; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.eq; import static org.mockito.Mockito.inOrder; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.same; Loading Loading @@ -59,6 +60,7 @@ import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.mockito.InOrder; import org.mockito.Mock; import java.util.ArrayList; Loading Loading @@ -96,6 +98,8 @@ public class WindowDecorationTests extends ShellTestCase { @Mock private WindowContainerTransaction mMockWindowContainerTransaction; private final List<SurfaceControl.Transaction> mMockSurfaceControlTransactions = new ArrayList<>(); private final List<SurfaceControl.Builder> mMockSurfaceControlBuilders = new ArrayList<>(); private SurfaceControl.Transaction mMockSurfaceControlStartT; private SurfaceControl.Transaction mMockSurfaceControlFinishT; Loading Loading @@ -265,6 +269,9 @@ public class WindowDecorationTests extends ShellTestCase { createMockSurfaceControlBuilder(captionContainerSurface); mMockSurfaceControlBuilders.add(captionContainerSurfaceBuilder); final SurfaceControl.Transaction t = mock(SurfaceControl.Transaction.class); mMockSurfaceControlTransactions.add(t); final ActivityManager.TaskDescription.Builder taskDescriptionBuilder = new ActivityManager.TaskDescription.Builder() .setBackgroundColor(Color.YELLOW); Loading @@ -287,19 +294,19 @@ public class WindowDecorationTests extends ShellTestCase { windowDecor.relayout(taskInfo); verify(mMockSurfaceControlViewHost, never()).release(); verify(decorContainerSurface, never()).release(); verify(taskBackgroundSurface, never()).release(); verify(captionContainerSurface, never()).release(); verify(t, never()).apply(); verify(mMockWindowContainerTransaction, never()) .removeInsetsProvider(eq(taskInfo.token), any()); taskInfo.isVisible = false; windowDecor.relayout(taskInfo); verify(mMockSurfaceControlViewHost).release(); verify(decorContainerSurface).release(); verify(taskBackgroundSurface).release(); verify(captionContainerSurface).release(); final InOrder releaseOrder = inOrder(t, mMockSurfaceControlViewHost); 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).removeInsetsProvider(eq(taskInfo.token), any()); } Loading Loading @@ -351,21 +358,30 @@ public class WindowDecorationTests extends ShellTestCase { private TestWindowDecoration createWindowDecoration( ActivityManager.RunningTaskInfo taskInfo, SurfaceControl testSurface) { return new TestWindowDecoration(mContext, mMockDisplayController, mMockShellTaskOrganizer, taskInfo, testSurface, new MockSurfaceControlBuilderSupplier(), taskInfo, testSurface, new MockObjectSupplier<>(mMockSurfaceControlBuilders, () -> createMockSurfaceControlBuilder(mock(SurfaceControl.class))), new MockObjectSupplier<>(mMockSurfaceControlTransactions, () -> mock(SurfaceControl.Transaction.class)), () -> mMockWindowContainerTransaction, mMockSurfaceControlViewHostFactory); } private class MockSurfaceControlBuilderSupplier implements Supplier<SurfaceControl.Builder> { private class MockObjectSupplier<T> implements Supplier<T> { private final List<T> mObjects; private final Supplier<T> mDefaultSupplier; private int mNumOfCalls = 0; private MockObjectSupplier(List<T> objects, Supplier<T> defaultSupplier) { mObjects = objects; mDefaultSupplier = defaultSupplier; } @Override public SurfaceControl.Builder get() { final SurfaceControl.Builder builder = mNumOfCalls < mMockSurfaceControlBuilders.size() ? mMockSurfaceControlBuilders.get(mNumOfCalls) : createMockSurfaceControlBuilder(mock(SurfaceControl.class)); public T get() { final T mock = mNumOfCalls < mObjects.size() ? mObjects.get(mNumOfCalls) : mDefaultSupplier.get(); ++mNumOfCalls; return builder; return mock; } } Loading @@ -383,11 +399,12 @@ public class WindowDecorationTests extends ShellTestCase { ShellTaskOrganizer taskOrganizer, ActivityManager.RunningTaskInfo taskInfo, SurfaceControl taskSurface, Supplier<SurfaceControl.Builder> surfaceControlBuilderSupplier, Supplier<SurfaceControl.Transaction> surfaceControlTransactionSupplier, Supplier<WindowContainerTransaction> windowContainerTransactionSupplier, SurfaceControlViewHostFactory surfaceControlViewHostFactory) { super(context, displayController, taskOrganizer, taskInfo, taskSurface, surfaceControlBuilderSupplier, windowContainerTransactionSupplier, surfaceControlViewHostFactory); surfaceControlBuilderSupplier, surfaceControlTransactionSupplier, windowContainerTransactionSupplier, surfaceControlViewHostFactory); } @Override Loading Loading
libs/WindowManager/Shell/src/com/android/wm/shell/windowdecor/WindowDecoration.java +17 −5 Original line number Diff line number Diff line Loading @@ -66,6 +66,7 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer> final DisplayController mDisplayController; final ShellTaskOrganizer mTaskOrganizer; final Supplier<SurfaceControl.Builder> mSurfaceControlBuilderSupplier; final Supplier<SurfaceControl.Transaction> mSurfaceControlTransactionSupplier; final Supplier<WindowContainerTransaction> mWindowContainerTransactionSupplier; final SurfaceControlViewHostFactory mSurfaceControlViewHostFactory; private final DisplayController.OnDisplaysChangedListener mOnDisplaysChangedListener = Loading Loading @@ -104,8 +105,8 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer> RunningTaskInfo taskInfo, SurfaceControl taskSurface) { this(context, displayController, taskOrganizer, taskInfo, taskSurface, SurfaceControl.Builder::new, WindowContainerTransaction::new, new SurfaceControlViewHostFactory() {}); SurfaceControl.Builder::new, SurfaceControl.Transaction::new, WindowContainerTransaction::new, new SurfaceControlViewHostFactory() {}); } WindowDecoration( Loading @@ -115,6 +116,7 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer> RunningTaskInfo taskInfo, SurfaceControl taskSurface, Supplier<SurfaceControl.Builder> surfaceControlBuilderSupplier, Supplier<SurfaceControl.Transaction> surfaceControlTransactionSupplier, Supplier<WindowContainerTransaction> windowContainerTransactionSupplier, SurfaceControlViewHostFactory surfaceControlViewHostFactory) { mContext = context; Loading @@ -123,6 +125,7 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer> mTaskInfo = taskInfo; mTaskSurface = taskSurface; mSurfaceControlBuilderSupplier = surfaceControlBuilderSupplier; mSurfaceControlTransactionSupplier = surfaceControlTransactionSupplier; mWindowContainerTransactionSupplier = windowContainerTransactionSupplier; mSurfaceControlViewHostFactory = surfaceControlViewHostFactory; Loading Loading @@ -320,19 +323,28 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer> mCaptionWindowManager = null; final SurfaceControl.Transaction t = mSurfaceControlTransactionSupplier.get(); boolean released = false; if (mCaptionContainerSurface != null) { mCaptionContainerSurface.release(); t.remove(mCaptionContainerSurface); mCaptionContainerSurface = null; released = true; } if (mDecorationContainerSurface != null) { mDecorationContainerSurface.release(); t.remove(mDecorationContainerSurface); mDecorationContainerSurface = null; released = true; } if (mTaskBackgroundSurface != null) { mTaskBackgroundSurface.release(); t.remove(mTaskBackgroundSurface); mTaskBackgroundSurface = null; released = true; } if (released) { t.apply(); } final WindowContainerTransaction wct = mWindowContainerTransactionSupplier.get(); Loading
libs/WindowManager/Shell/tests/unittest/src/com/android/wm/shell/windowdecor/WindowDecorationTests.java +34 −17 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ import static org.mockito.Mockito.any; import static org.mockito.Mockito.argThat; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.eq; import static org.mockito.Mockito.inOrder; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.same; Loading Loading @@ -59,6 +60,7 @@ import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.ArgumentCaptor; import org.mockito.InOrder; import org.mockito.Mock; import java.util.ArrayList; Loading Loading @@ -96,6 +98,8 @@ public class WindowDecorationTests extends ShellTestCase { @Mock private WindowContainerTransaction mMockWindowContainerTransaction; private final List<SurfaceControl.Transaction> mMockSurfaceControlTransactions = new ArrayList<>(); private final List<SurfaceControl.Builder> mMockSurfaceControlBuilders = new ArrayList<>(); private SurfaceControl.Transaction mMockSurfaceControlStartT; private SurfaceControl.Transaction mMockSurfaceControlFinishT; Loading Loading @@ -265,6 +269,9 @@ public class WindowDecorationTests extends ShellTestCase { createMockSurfaceControlBuilder(captionContainerSurface); mMockSurfaceControlBuilders.add(captionContainerSurfaceBuilder); final SurfaceControl.Transaction t = mock(SurfaceControl.Transaction.class); mMockSurfaceControlTransactions.add(t); final ActivityManager.TaskDescription.Builder taskDescriptionBuilder = new ActivityManager.TaskDescription.Builder() .setBackgroundColor(Color.YELLOW); Loading @@ -287,19 +294,19 @@ public class WindowDecorationTests extends ShellTestCase { windowDecor.relayout(taskInfo); verify(mMockSurfaceControlViewHost, never()).release(); verify(decorContainerSurface, never()).release(); verify(taskBackgroundSurface, never()).release(); verify(captionContainerSurface, never()).release(); verify(t, never()).apply(); verify(mMockWindowContainerTransaction, never()) .removeInsetsProvider(eq(taskInfo.token), any()); taskInfo.isVisible = false; windowDecor.relayout(taskInfo); verify(mMockSurfaceControlViewHost).release(); verify(decorContainerSurface).release(); verify(taskBackgroundSurface).release(); verify(captionContainerSurface).release(); final InOrder releaseOrder = inOrder(t, mMockSurfaceControlViewHost); 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).removeInsetsProvider(eq(taskInfo.token), any()); } Loading Loading @@ -351,21 +358,30 @@ public class WindowDecorationTests extends ShellTestCase { private TestWindowDecoration createWindowDecoration( ActivityManager.RunningTaskInfo taskInfo, SurfaceControl testSurface) { return new TestWindowDecoration(mContext, mMockDisplayController, mMockShellTaskOrganizer, taskInfo, testSurface, new MockSurfaceControlBuilderSupplier(), taskInfo, testSurface, new MockObjectSupplier<>(mMockSurfaceControlBuilders, () -> createMockSurfaceControlBuilder(mock(SurfaceControl.class))), new MockObjectSupplier<>(mMockSurfaceControlTransactions, () -> mock(SurfaceControl.Transaction.class)), () -> mMockWindowContainerTransaction, mMockSurfaceControlViewHostFactory); } private class MockSurfaceControlBuilderSupplier implements Supplier<SurfaceControl.Builder> { private class MockObjectSupplier<T> implements Supplier<T> { private final List<T> mObjects; private final Supplier<T> mDefaultSupplier; private int mNumOfCalls = 0; private MockObjectSupplier(List<T> objects, Supplier<T> defaultSupplier) { mObjects = objects; mDefaultSupplier = defaultSupplier; } @Override public SurfaceControl.Builder get() { final SurfaceControl.Builder builder = mNumOfCalls < mMockSurfaceControlBuilders.size() ? mMockSurfaceControlBuilders.get(mNumOfCalls) : createMockSurfaceControlBuilder(mock(SurfaceControl.class)); public T get() { final T mock = mNumOfCalls < mObjects.size() ? mObjects.get(mNumOfCalls) : mDefaultSupplier.get(); ++mNumOfCalls; return builder; return mock; } } Loading @@ -383,11 +399,12 @@ public class WindowDecorationTests extends ShellTestCase { ShellTaskOrganizer taskOrganizer, ActivityManager.RunningTaskInfo taskInfo, SurfaceControl taskSurface, Supplier<SurfaceControl.Builder> surfaceControlBuilderSupplier, Supplier<SurfaceControl.Transaction> surfaceControlTransactionSupplier, Supplier<WindowContainerTransaction> windowContainerTransactionSupplier, SurfaceControlViewHostFactory surfaceControlViewHostFactory) { super(context, displayController, taskOrganizer, taskInfo, taskSurface, surfaceControlBuilderSupplier, windowContainerTransactionSupplier, surfaceControlViewHostFactory); surfaceControlBuilderSupplier, surfaceControlTransactionSupplier, windowContainerTransactionSupplier, surfaceControlViewHostFactory); } @Override Loading