diff options
author | 2025-02-17 21:11:34 +0900 | |
---|---|---|
committer | 2025-02-19 13:53:36 -0800 | |
commit | 79db0766bcca019d61053fea9d74c1973ff0232f (patch) | |
tree | 3579b726172671e1c56e8393795023dccafa55fa /services | |
parent | e93897907ca2e9a6fb50258052c1069a19c8253b (diff) |
Add flag-disabled test to PresentationControllerTests
Currently the differnces between flag on and off are:
- Apps behind a presentation stop.
- Shell transitions run.
Flag: com.android.window.flags.enable_presentation_for_connected_displays
Bug: 390482872
Test: WmTests:PresentationControllerTests
Change-Id: I436e116c25ec7b86dd065c9f2bcbebd14e122de6
Diffstat (limited to 'services')
-rw-r--r-- | services/tests/wmtests/src/com/android/server/wm/PresentationControllerTests.java | 71 |
1 files changed, 49 insertions, 22 deletions
diff --git a/services/tests/wmtests/src/com/android/server/wm/PresentationControllerTests.java b/services/tests/wmtests/src/com/android/server/wm/PresentationControllerTests.java index 7c8a8835c3b8..2d4101e40615 100644 --- a/services/tests/wmtests/src/com/android/server/wm/PresentationControllerTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/PresentationControllerTests.java @@ -31,7 +31,7 @@ import static org.mockito.ArgumentMatchers.eq; import android.annotation.NonNull; import android.graphics.Rect; 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.Presubmit; import android.view.DisplayInfo; @@ -68,32 +68,14 @@ public class PresentationControllerTests extends WindowTestsBase { @EnableFlags(FLAG_ENABLE_PRESENTATION_FOR_CONNECTED_DISPLAYS) @Test public void testPresentationShowAndHide() { - 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); + final DisplayContent dc = createPresentationDisplay(); final ActivityRecord activity = createActivityRecord(createTask(dc)); 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. - final int result = mWm.addWindow(session, clientWindow, params, View.VISIBLE, displayId, - userId, WindowInsets.Type.defaultVisible(), null, new InsetsState(), - new InsetsSourceControl.Array(), new Rect(), new float[1]); - assertTrue(result >= WindowManagerGlobal.ADD_OKAY); + // Add a presentation window, which requests the activity to stop. + final WindowState window = addPresentationWindow(100000, dc.mDisplayId); assertFalse(activity.isVisibleRequested()); assertTrue(activity.isVisible()); - final WindowState window = mWm.windowForClientLocked(session, clientWindow, false); - window.mHasSurface = true; final Transition addTransition = window.mTransitionController.getCollectingTransition(); assertEquals(TRANSIT_OPEN, addTransition.mType); assertTrue(addTransition.isInTransition(window)); @@ -117,6 +99,51 @@ public class PresentationControllerTests extends WindowTestsBase { 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) { final ActionChain chain = ActionChain.testFinish(transition); if (abortSync) { |