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

Commit 55060186 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Fix some issues that make caption insets remain" into tm-qpr-dev am: e2823f9a

parents 8a7fbb9e e2823f9a
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -733,7 +733,7 @@ public class InsetsController implements WindowInsetsController, InsetsAnimation
        }
        for (@InternalInsetsType int type = 0; type < InsetsState.SIZE; type++) {
            // 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);
            if (source == null) continue;
            if (newState.peekSource(type) == null) {
+9 −1
Original line number Diff line number Diff line
@@ -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<WindowContainerTransaction> mWindowContainerTransactionSupplier;
    final SurfaceControlViewHostFactory mSurfaceControlViewHostFactory;
    private final DisplayController.OnDisplaysChangedListener mOnDisplaysChangedListener =
            new DisplayController.OnDisplaysChangedListener() {
@@ -102,7 +103,8 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer>
            RunningTaskInfo taskInfo,
            SurfaceControl taskSurface) {
        this(context, displayController, taskOrganizer, taskInfo, taskSurface,
                SurfaceControl.Builder::new, new SurfaceControlViewHostFactory() {});
                SurfaceControl.Builder::new, WindowContainerTransaction::new,
                new SurfaceControlViewHostFactory() {});
    }

    WindowDecoration(
@@ -112,6 +114,7 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer>
            RunningTaskInfo taskInfo,
            SurfaceControl taskSurface,
            Supplier<SurfaceControl.Builder> surfaceControlBuilderSupplier,
            Supplier<WindowContainerTransaction> windowContainerTransactionSupplier,
            SurfaceControlViewHostFactory surfaceControlViewHostFactory) {
        mContext = context;
        mDisplayController = displayController;
@@ -119,6 +122,7 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer>
        mTaskInfo = taskInfo;
        mTaskSurface = taskSurface;
        mSurfaceControlBuilderSupplier = surfaceControlBuilderSupplier;
        mWindowContainerTransactionSupplier = windowContainerTransactionSupplier;
        mSurfaceControlViewHostFactory = surfaceControlViewHostFactory;

        mDisplay = mDisplayController.getDisplay(mTaskInfo.displayId);
@@ -301,6 +305,10 @@ public abstract class WindowDecoration<T extends View & TaskFocusStateConsumer>
            mTaskBackgroundSurface.release();
            mTaskBackgroundSurface = null;
        }

        final WindowContainerTransaction wct = mWindowContainerTransactionSupplier.get();
        wct.removeInsetsProvider(mTaskInfo.token, CAPTION_INSETS_TYPES);
        mTaskOrganizer.applyTransaction(wct);
    }

    @Override
+55 −2
Original line number Diff line number Diff line
@@ -232,6 +232,57 @@ public class WindowDecorationTests extends ShellTestCase {
        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
    public void testNotCrashWhenDisplayAppearsAfterTask() {
        doReturn(mock(Display.class)).when(mMockDisplayController)
@@ -282,7 +333,7 @@ public class WindowDecorationTests extends ShellTestCase {
            ActivityManager.RunningTaskInfo taskInfo, SurfaceControl testSurface) {
        return new TestWindowDecoration(mContext, mMockDisplayController, mMockShellTaskOrganizer,
                taskInfo, testSurface, new MockSurfaceControlBuilderSupplier(),
                mMockSurfaceControlViewHostFactory);
                () -> mMockWindowContainerTransaction, mMockSurfaceControlViewHostFactory);
    }

    private class MockSurfaceControlBuilderSupplier implements Supplier<SurfaceControl.Builder> {
@@ -313,9 +364,11 @@ public class WindowDecorationTests extends ShellTestCase {
                ShellTaskOrganizer taskOrganizer, ActivityManager.RunningTaskInfo taskInfo,
                SurfaceControl taskSurface,
                Supplier<SurfaceControl.Builder> surfaceControlBuilderSupplier,
                Supplier<WindowContainerTransaction> windowContainerTransactionSupplier,
                SurfaceControlViewHostFactory surfaceControlViewHostFactory) {
            super(context, displayController, taskOrganizer, taskInfo, taskSurface,
                    surfaceControlBuilderSupplier, surfaceControlViewHostFactory);
                    surfaceControlBuilderSupplier, windowContainerTransactionSupplier,
                    surfaceControlViewHostFactory);
        }

        @Override
+7 −0
Original line number Diff line number Diff line
@@ -3393,6 +3393,13 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer<
            pw.println(prefix + "mLastOrientationSource=" + mLastOrientationSource);
            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() {