summaryrefslogtreecommitdiff
path: root/services
diff options
context:
space:
mode:
author Kazuki Takise <takise@google.com> 2025-02-17 21:11:34 +0900
committer Kazuki Takise <takise@google.com> 2025-02-19 13:53:36 -0800
commit79db0766bcca019d61053fea9d74c1973ff0232f (patch)
tree3579b726172671e1c56e8393795023dccafa55fa /services
parente93897907ca2e9a6fb50258052c1069a19c8253b (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.java71
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) {