Loading services/tests/wmtests/src/com/android/server/wm/PresentationControllerTests.java +49 −22 Original line number Original line Diff line number Diff line Loading @@ -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; Loading Loading @@ -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)); Loading @@ -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) { Loading Loading
services/tests/wmtests/src/com/android/server/wm/PresentationControllerTests.java +49 −22 Original line number Original line Diff line number Diff line Loading @@ -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; Loading Loading @@ -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)); Loading @@ -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) { Loading