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

Commit 84134476 authored by Lingyu Feng's avatar Lingyu Feng Committed by Android (Google) Code Review
Browse files

Merge "Prevent home activity being launched on a removed display" into main

parents f067faec 13ec5618
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -6453,6 +6453,12 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
     * @see #mRemoved
     */
    boolean isRemoved() {
        // After DisplayManager removes the LogicalDisplay object but before WindowManager begins
        // removing the corresponding DisplayContent, we should check Display.isValid(), which
        // returns false in this specific scenario.
        if (mDisplayId != DEFAULT_DISPLAY && !mDisplay.isValid()) {
            return true;
        }
        return mRemoved;
    }

+10 −0
Original line number Diff line number Diff line
@@ -3171,6 +3171,16 @@ public class DisplayContentTests extends WindowTestsBase {
        assertFalse(mDisplayContent.isTaskMoveAllowedOnDisplay());
    }

    @Test
    public void testIsRemoved_nonDefaultDisplay_isNotValid() {
        final DisplayInfo displayInfo = new DisplayInfo(mDisplayInfo);
        displayInfo.displayId = DEFAULT_DISPLAY + 1;
        final DisplayContent dc = createNewDisplay(displayInfo);
        spyOn(dc.mDisplay);
        doReturn(false).when(dc.mDisplay).isValid();
        assertTrue(dc.isRemoved());
    }

    private void removeRootTaskTests(@NonNull Runnable runnable) {
        final TaskDisplayArea taskDisplayArea = mRootWindowContainer.getDefaultTaskDisplayArea();
        final Task rootTask1 = taskDisplayArea.createRootTask(WINDOWING_MODE_FULLSCREEN,
+8 −0
Original line number Diff line number Diff line
@@ -106,6 +106,7 @@ class TestDisplayContent extends DisplayContent {
        @NonNull
        private DeviceStateController mDeviceStateController = mock(DeviceStateController.class);
        private boolean mCanHostTasks = true;
        private boolean mIsValid = true;

        Builder(ActivityTaskManagerService service, int width, int height) {
            mService = service;
@@ -165,6 +166,10 @@ class TestDisplayContent extends DisplayContent {
            mCanHostTasks = canHostTasks;
            return this;
        }
        Builder setIsValid(boolean isValid) {
            mIsValid = isValid;
            return this;
        }
        Builder setCutout(int left, int top, int right, int bottom) {
            final int cutoutFillerSize = 80;
            Rect boundLeft = left != 0 ? new Rect(0, 0, left, cutoutFillerSize) : null;
@@ -224,6 +229,9 @@ class TestDisplayContent extends DisplayContent {
            if (mCanHostTasks) {
                doReturn(true).when(display).canHostTasks();
            }
            if (mIsValid) {
                doReturn(true).when(display).isValid();
            }
            final TestDisplayContent newDisplay = createInternal(display);
            // disable the normal system decorations
            final DisplayPolicy displayPolicy = newDisplay.getDisplayPolicy();