Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b4c3a068 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Move caption under DecorationContainerSurface" into tm-qpr-dev

parents 463df2a2 9678d36d
Loading
Loading
Loading
Loading
+35 −8
Original line number Diff line number Diff line
@@ -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;
+21 −0
Original line number Diff line number Diff line
@@ -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());
    }