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

Commit 84895a41 authored by Pierre Barbier de Reuille's avatar Pierre Barbier de Reuille
Browse files

Notify when a display with decorations is removed.

We need to call notifyDisplayRemoveSystemDecorations before
`onDisplayRemoved`.

Fix: 405207598
Flag: com.android.server.display.feature.flags.enable_display_content_mode_management
Test: atest DisplayContentTest
Change-Id: I654bb4428a39fa359c9c1000635dc1c80fb4fdc6
parent 4b974c3d
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -3403,6 +3403,10 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
    void removeImmediately() {
        mDeferredRemoval = false;
        try {
            if (DesktopExperienceFlags.ENABLE_DISPLAY_CONTENT_MODE_MANAGEMENT.isTrue()
                    && mWmService.mDisplayWindowSettings.shouldShowSystemDecorsLocked(this)) {
                mDisplayPolicy.notifyDisplayRemoveSystemDecorations();
            }
            mUnknownAppVisibilityController.clear();
            mTransitionController.unregisterLegacyListener(mFixedRotationTransitionListener);
            mDeviceStateController.unregisterDeviceStateCallback(mDeviceStateConsumer);
+36 −0
Original line number Diff line number Diff line
@@ -2983,6 +2983,42 @@ public class DisplayContentTests extends WindowTestsBase {
        assertTrue(dc.mWmService.mDisplayWindowSettings.shouldShowSystemDecorsLocked(dc));
    }

    @EnableFlags(FLAG_ENABLE_DISPLAY_CONTENT_MODE_MANAGEMENT)
    @Test
    public void testRemove_displayWithSystemDecorations_emitRemoveSystemDecorations() {
        final DisplayInfo displayInfo = new DisplayInfo(mDisplayInfo);
        displayInfo.displayId = DEFAULT_DISPLAY + 1;
        displayInfo.flags = (FLAG_ALLOWS_CONTENT_MODE_SWITCH | FLAG_TRUSTED);
        final DisplayContent dc = createNewDisplay(displayInfo);
        spyOn(dc.mDisplay);
        doReturn(true).when(dc.mDisplay).canHostTasks();
        dc.onDisplayInfoChangeApplied();
        final DisplayPolicy displayPolicy = dc.getDisplayPolicy();
        spyOn(displayPolicy);

        dc.remove();

        verify(displayPolicy).notifyDisplayRemoveSystemDecorations();
    }

    @EnableFlags(FLAG_ENABLE_DISPLAY_CONTENT_MODE_MANAGEMENT)
    @Test
    public void testRemove_displayWithoutSystemDecorations_dontEmitRemoveSystemDecorations() {
        final DisplayInfo displayInfo = new DisplayInfo(mDisplayInfo);
        displayInfo.displayId = DEFAULT_DISPLAY + 1;
        displayInfo.flags = (FLAG_ALLOWS_CONTENT_MODE_SWITCH | FLAG_TRUSTED);
        final DisplayContent dc = createNewDisplay(displayInfo);
        spyOn(dc.mDisplay);
        doReturn(false).when(dc.mDisplay).canHostTasks();
        dc.onDisplayInfoChangeApplied();
        final DisplayPolicy displayPolicy = dc.getDisplayPolicy();
        spyOn(displayPolicy);

        dc.remove();

        verify(displayPolicy, never()).notifyDisplayRemoveSystemDecorations();
    }

    @EnableFlags(FLAG_ENABLE_PERSISTING_DISPLAY_SIZE_FOR_CONNECTED_DISPLAYS)
    @Test
    public void testForcedDensityRatioSetForExternalDisplays_persistDensityScaleFlagEnabled() {