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

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

Merge "Add flag-disabled test to PresentationControllerTests" into main

parents 546205cd 79db0766
Loading
Loading
Loading
Loading
+49 −22
Original line number Original line Diff line number Diff line
@@ -31,7 +31,7 @@ import static org.mockito.ArgumentMatchers.eq;
import android.annotation.NonNull;
import android.annotation.NonNull;
import android.graphics.Rect;
import android.graphics.Rect;
import android.os.UserHandle;
import android.os.UserHandle;
import android.os.UserManager;
import android.platform.test.annotations.DisableFlags;
import android.platform.test.annotations.EnableFlags;
import android.platform.test.annotations.EnableFlags;
import android.platform.test.annotations.Presubmit;
import android.platform.test.annotations.Presubmit;
import android.view.DisplayInfo;
import android.view.DisplayInfo;
@@ -68,32 +68,14 @@ public class PresentationControllerTests extends WindowTestsBase {
    @EnableFlags(FLAG_ENABLE_PRESENTATION_FOR_CONNECTED_DISPLAYS)
    @EnableFlags(FLAG_ENABLE_PRESENTATION_FOR_CONNECTED_DISPLAYS)
    @Test
    @Test
    public void testPresentationShowAndHide() {
    public void testPresentationShowAndHide() {
        final DisplayInfo displayInfo = new DisplayInfo();
        final DisplayContent dc = createPresentationDisplay();
        displayInfo.copyFrom(mDisplayInfo);
        displayInfo.flags = FLAG_PRESENTATION;
        final DisplayContent dc = createNewDisplay(displayInfo);
        final int displayId = dc.getDisplayId();
        doReturn(dc).when(mWm.mRoot).getDisplayContentOrCreate(displayId);
        final ActivityRecord activity = createActivityRecord(createTask(dc));
        final ActivityRecord activity = createActivityRecord(createTask(dc));
        assertTrue(activity.isVisible());
        assertTrue(activity.isVisible());
        doReturn(true).when(() -> UserManager.isVisibleBackgroundUsersEnabled());
        final int uid = 100000; // uid for non-system user
        final Session session = createTestSession(mAtm, 1234 /* pid */, uid);
        final int userId = UserHandle.getUserId(uid);
        doReturn(false).when(mWm.mUmInternal).isUserVisible(eq(userId), eq(displayId));
        final WindowManager.LayoutParams params = new WindowManager.LayoutParams(
                WindowManager.LayoutParams.TYPE_PRESENTATION);
        final IWindow clientWindow = new TestIWindow();


        // Show a Presentation window, which requests the activity to be stopped.
        // Add a presentation window, which requests the activity to stop.
        final int result = mWm.addWindow(session, clientWindow, params, View.VISIBLE, displayId,
        final WindowState window = addPresentationWindow(100000, dc.mDisplayId);
                userId, WindowInsets.Type.defaultVisible(), null, new InsetsState(),
                new InsetsSourceControl.Array(), new Rect(), new float[1]);
        assertTrue(result >= WindowManagerGlobal.ADD_OKAY);
        assertFalse(activity.isVisibleRequested());
        assertFalse(activity.isVisibleRequested());
        assertTrue(activity.isVisible());
        assertTrue(activity.isVisible());
        final WindowState window = mWm.windowForClientLocked(session, clientWindow, false);
        window.mHasSurface = true;
        final Transition addTransition = window.mTransitionController.getCollectingTransition();
        final Transition addTransition = window.mTransitionController.getCollectingTransition();
        assertEquals(TRANSIT_OPEN, addTransition.mType);
        assertEquals(TRANSIT_OPEN, addTransition.mType);
        assertTrue(addTransition.isInTransition(window));
        assertTrue(addTransition.isInTransition(window));
@@ -117,6 +99,51 @@ public class PresentationControllerTests extends WindowTestsBase {
        assertTrue(activity.isVisible());
        assertTrue(activity.isVisible());
    }
    }


    @DisableFlags(FLAG_ENABLE_PRESENTATION_FOR_CONNECTED_DISPLAYS)
    @Test
    public void testPresentationShowAndHide_flagDisabled() {
        final DisplayContent dc = createPresentationDisplay();
        final ActivityRecord activity = createActivityRecord(createTask(dc));
        assertTrue(activity.isVisible());

        final WindowState window = addPresentationWindow(100000, dc.mDisplayId);
        assertFalse(window.mTransitionController.isCollecting());
        assertTrue(activity.isVisibleRequested());
        assertTrue(activity.isVisible());

        window.removeIfPossible();
        assertFalse(window.mTransitionController.isCollecting());
        assertTrue(activity.isVisibleRequested());
        assertTrue(activity.isVisible());
        assertFalse(window.isAttached());
    }

    private WindowState addPresentationWindow(int uid, int displayId) {
        final Session session = createTestSession(mAtm, 1234 /* pid */, uid);
        final int userId = UserHandle.getUserId(uid);
        doReturn(true).when(mWm.mUmInternal).isUserVisible(eq(userId), eq(displayId));
        final WindowManager.LayoutParams params = new WindowManager.LayoutParams(
                WindowManager.LayoutParams.TYPE_PRESENTATION);
        final IWindow clientWindow = new TestIWindow();
        final int res = mWm.addWindow(session, clientWindow, params, View.VISIBLE, displayId,
                userId, WindowInsets.Type.defaultVisible(), null, new InsetsState(),
                new InsetsSourceControl.Array(), new Rect(), new float[1]);
        assertTrue(res >= WindowManagerGlobal.ADD_OKAY);
        final WindowState window = mWm.windowForClientLocked(session, clientWindow, false);
        window.mHasSurface = true;
        return window;
    }

    private DisplayContent createPresentationDisplay() {
        final DisplayInfo displayInfo = new DisplayInfo();
        displayInfo.copyFrom(mDisplayInfo);
        displayInfo.flags = FLAG_PRESENTATION;
        final DisplayContent dc = createNewDisplay(displayInfo);
        final int displayId = dc.getDisplayId();
        doReturn(dc).when(mWm.mRoot).getDisplayContentOrCreate(displayId);
        return dc;
    }

    private void completeTransition(@NonNull Transition transition, boolean abortSync) {
    private void completeTransition(@NonNull Transition transition, boolean abortSync) {
        final ActionChain chain = ActionChain.testFinish(transition);
        final ActionChain chain = ActionChain.testFinish(transition);
        if (abortSync) {
        if (abortSync) {