Loading services/tests/wmtests/src/com/android/server/wm/AppCompatActivityRobot.java +4 −0 Original line number Diff line number Diff line Loading @@ -230,6 +230,10 @@ class AppCompatActivityRobot { mDisplayContent.setIgnoreOrientationRequest(enabled); } void setTopOrganizedTaskAsTopTask() { doReturn(mTaskStack.top()).when(mActivityStack.top()).getOrganizedTask(); } void setTopTaskInMultiWindowMode(boolean inMultiWindowMode) { doReturn(inMultiWindowMode).when(mTaskStack.top()).inMultiWindowMode(); } Loading services/tests/wmtests/src/com/android/server/wm/AppCompatUtilsTest.java +98 −0 Original line number Diff line number Diff line Loading @@ -16,10 +16,14 @@ package com.android.server.wm; import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_FREEFORM_PORTRAIT_DEVICE_IN_LANDSCAPE; import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn; import static org.mockito.Mockito.when; import android.app.CameraCompatTaskInfo.FreeformCameraCompatMode; import android.app.TaskInfo; import android.platform.test.annotations.Presubmit; import androidx.annotation.NonNull; Loading Loading @@ -114,6 +118,72 @@ public class AppCompatUtilsTest extends WindowTestsBase { }); } @Test public void testTopActivityEligibleForUserAspectRatioButton_eligible() { runTestScenario((robot) -> { robot.applyOnActivity((a) -> { a.createActivityWithComponentInNewTask(); a.setIgnoreOrientationRequest(true); }); robot.conf().enableUserAppAspectRatioSettings(true); robot.checkTaskInfoEligibleForUserAspectRatioButton(true); }); } @Test public void testTopActivityEligibleForUserAspectRatioButton_disabled_notEligible() { runTestScenario((robot) -> { robot.applyOnActivity((a) -> { a.createActivityWithComponentInNewTask(); a.setIgnoreOrientationRequest(true); }); robot.conf().enableUserAppAspectRatioSettings(false); robot.checkTaskInfoEligibleForUserAspectRatioButton(false); }); } @Test public void testTopActivityEligibleForUserAspectRatioButton_inSizeCompatMode_notEligible() { runTestScenario((robot) -> { robot.applyOnActivity((a) -> { a.createActivityWithComponentInNewTask(); a.setIgnoreOrientationRequest(true); a.setTopOrganizedTaskAsTopTask(); a.setTopActivityInSizeCompatMode(true); a.setTopActivityVisible(true); }); robot.conf().enableUserAppAspectRatioSettings(true); robot.checkTaskInfoEligibleForUserAspectRatioButton(false); }); } @Test public void testTopActivityEligibleForUserAspectRatioButton_transparentTop_notEligible() { runTestScenario((robot) -> { robot.transparentActivity((ta) -> { ta.launchTransparentActivityInTask(); ta.activity().setIgnoreOrientationRequest(true); }); robot.conf().enableUserAppAspectRatioSettings(true); robot.checkTaskInfoEligibleForUserAspectRatioButton(false); }); } @Test public void getTaskInfoPropagatesCameraCompatMode() { runTestScenario((robot) -> { robot.applyOnActivity(AppCompatActivityRobot::createActivityWithComponentInNewTask); robot.setFreeformCameraCompatMode(CAMERA_COMPAT_FREEFORM_PORTRAIT_DEVICE_IN_LANDSCAPE); robot.checkTaskInfoFreeformCameraCompatMode( CAMERA_COMPAT_FREEFORM_PORTRAIT_DEVICE_IN_LANDSCAPE); }); } /** * Runs a test scenario providing a Robot. */ Loading @@ -125,11 +195,14 @@ public class AppCompatUtilsTest extends WindowTestsBase { private static class AppCompatUtilsRobotTest extends AppCompatRobotBase { private final WindowState mWindowState; @NonNull private final AppCompatTransparentActivityRobot mTransparentActivityRobot; AppCompatUtilsRobotTest(@NonNull WindowManagerService wm, @NonNull ActivityTaskManagerService atm, @NonNull ActivityTaskSupervisor supervisor) { super(wm, atm, supervisor); mTransparentActivityRobot = new AppCompatTransparentActivityRobot(activity()); mWindowState = Mockito.mock(WindowState.class); } Loading @@ -139,6 +212,12 @@ public class AppCompatUtilsTest extends WindowTestsBase { spyOn(activity.mAppCompatController.getAppCompatAspectRatioPolicy()); } void transparentActivity(@NonNull Consumer<AppCompatTransparentActivityRobot> consumer) { // We always create at least an opaque activity in a Task. activity().createNewTaskWithBaseActivity(); consumer.accept(mTransparentActivityRobot); } void setIsLetterboxedForFixedOrientationAndAspectRatio( boolean forFixedOrientationAndAspectRatio) { when(activity().top().mAppCompatController.getAppCompatAspectRatioPolicy() Loading @@ -155,11 +234,30 @@ public class AppCompatUtilsTest extends WindowTestsBase { when(mWindowState.isLetterboxedForDisplayCutout()).thenReturn(displayCutout); } void setFreeformCameraCompatMode(@FreeformCameraCompatMode int mode) { activity().top().mAppCompatController.getAppCompatCameraOverrides() .setFreeformCameraCompatMode(mode); } void checkTopActivityLetterboxReason(@NonNull String expected) { Assert.assertEquals(expected, AppCompatUtils.getLetterboxReasonString(activity().top(), mWindowState)); } @NonNull TaskInfo getTopTaskInfo() { return activity().top().getTask().getTaskInfo(); } void checkTaskInfoEligibleForUserAspectRatioButton(boolean eligible) { Assert.assertEquals(eligible, getTopTaskInfo().appCompatTaskInfo .eligibleForUserAspectRatioButton()); } void checkTaskInfoFreeformCameraCompatMode(@FreeformCameraCompatMode int mode) { Assert.assertEquals(mode, getTopTaskInfo().appCompatTaskInfo .cameraCompatTaskInfo.freeformCameraCompatMode); } } } services/tests/wmtests/src/com/android/server/wm/TaskTests.java +0 −56 Original line number Diff line number Diff line Loading @@ -18,7 +18,6 @@ package com.android.server.wm; import static android.app.ActivityTaskManager.INVALID_TASK_ID; import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_FREEFORM_PORTRAIT_DEVICE_IN_LANDSCAPE; import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME; import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD; import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM; Loading Loading @@ -704,50 +703,6 @@ public class TaskTests extends WindowTestsBase { assertEquals(freeformBounds, task.getBounds()); } @Test public void testTopActivityEligibleForUserAspectRatioButton() { DisplayContent display = mAtm.mRootWindowContainer.getDefaultDisplay(); final Task rootTask = new TaskBuilder(mSupervisor).setCreateActivity(true) .setWindowingMode(WINDOWING_MODE_FULLSCREEN).setDisplay(display).build(); final Task task = rootTask.getBottomMostTask(); final ActivityRecord root = task.getTopNonFinishingActivity(); spyOn(mWm.mAppCompatConfiguration); spyOn(root); spyOn(root.mAppCompatController.getAppCompatAspectRatioOverrides()); doReturn(true).when(root).fillsParent(); doReturn(true).when( root.mAppCompatController.getAppCompatAspectRatioOverrides()) .shouldEnableUserAspectRatioSettings(); doReturn(false).when(root).inSizeCompatMode(); doReturn(task).when(root).getOrganizedTask(); // The button should be eligible to be displayed assertTrue(task.getTaskInfo() .appCompatTaskInfo.eligibleForUserAspectRatioButton()); // When shouldApplyUserMinAspectRatioOverride is disable the button is not enabled doReturn(false).when( root.mAppCompatController.getAppCompatAspectRatioOverrides()) .shouldEnableUserAspectRatioSettings(); assertFalse(task.getTaskInfo() .appCompatTaskInfo.eligibleForUserAspectRatioButton()); doReturn(true).when(root.mAppCompatController .getAppCompatAspectRatioOverrides()).shouldEnableUserAspectRatioSettings(); // When in size compat mode the button is not enabled doReturn(true).when(root).inSizeCompatMode(); assertFalse(task.getTaskInfo() .appCompatTaskInfo.eligibleForUserAspectRatioButton()); doReturn(false).when(root).inSizeCompatMode(); // When the top activity is transparent, the button is not enabled doReturn(false).when(root).fillsParent(); assertFalse(task.getTaskInfo() .appCompatTaskInfo.eligibleForUserAspectRatioButton()); doReturn(true).when(root).fillsParent(); } @Test public void testIsTopActivityTranslucent() { DisplayContent display = mAtm.mRootWindowContainer.getDefaultDisplay(); Loading Loading @@ -2111,17 +2066,6 @@ public class TaskTests extends WindowTestsBase { assertNotEquals(activityDifferentPackage, task.getBottomMostActivityInSamePackage()); } @Test public void getTaskInfoPropagatesCameraCompatMode() { final Task task = new TaskBuilder(mSupervisor).setCreateActivity(true).build(); final ActivityRecord activity = task.getTopMostActivity(); activity.mAppCompatController.getAppCompatCameraOverrides().setFreeformCameraCompatMode( CAMERA_COMPAT_FREEFORM_PORTRAIT_DEVICE_IN_LANDSCAPE); assertEquals(CAMERA_COMPAT_FREEFORM_PORTRAIT_DEVICE_IN_LANDSCAPE, task.getTaskInfo().appCompatTaskInfo.cameraCompatTaskInfo.freeformCameraCompatMode); } @Test public void testUpdateTaskDescriptionOnReparent() { final Task rootTask1 = createTask(mDisplayContent); Loading Loading
services/tests/wmtests/src/com/android/server/wm/AppCompatActivityRobot.java +4 −0 Original line number Diff line number Diff line Loading @@ -230,6 +230,10 @@ class AppCompatActivityRobot { mDisplayContent.setIgnoreOrientationRequest(enabled); } void setTopOrganizedTaskAsTopTask() { doReturn(mTaskStack.top()).when(mActivityStack.top()).getOrganizedTask(); } void setTopTaskInMultiWindowMode(boolean inMultiWindowMode) { doReturn(inMultiWindowMode).when(mTaskStack.top()).inMultiWindowMode(); } Loading
services/tests/wmtests/src/com/android/server/wm/AppCompatUtilsTest.java +98 −0 Original line number Diff line number Diff line Loading @@ -16,10 +16,14 @@ package com.android.server.wm; import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_FREEFORM_PORTRAIT_DEVICE_IN_LANDSCAPE; import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn; import static org.mockito.Mockito.when; import android.app.CameraCompatTaskInfo.FreeformCameraCompatMode; import android.app.TaskInfo; import android.platform.test.annotations.Presubmit; import androidx.annotation.NonNull; Loading Loading @@ -114,6 +118,72 @@ public class AppCompatUtilsTest extends WindowTestsBase { }); } @Test public void testTopActivityEligibleForUserAspectRatioButton_eligible() { runTestScenario((robot) -> { robot.applyOnActivity((a) -> { a.createActivityWithComponentInNewTask(); a.setIgnoreOrientationRequest(true); }); robot.conf().enableUserAppAspectRatioSettings(true); robot.checkTaskInfoEligibleForUserAspectRatioButton(true); }); } @Test public void testTopActivityEligibleForUserAspectRatioButton_disabled_notEligible() { runTestScenario((robot) -> { robot.applyOnActivity((a) -> { a.createActivityWithComponentInNewTask(); a.setIgnoreOrientationRequest(true); }); robot.conf().enableUserAppAspectRatioSettings(false); robot.checkTaskInfoEligibleForUserAspectRatioButton(false); }); } @Test public void testTopActivityEligibleForUserAspectRatioButton_inSizeCompatMode_notEligible() { runTestScenario((robot) -> { robot.applyOnActivity((a) -> { a.createActivityWithComponentInNewTask(); a.setIgnoreOrientationRequest(true); a.setTopOrganizedTaskAsTopTask(); a.setTopActivityInSizeCompatMode(true); a.setTopActivityVisible(true); }); robot.conf().enableUserAppAspectRatioSettings(true); robot.checkTaskInfoEligibleForUserAspectRatioButton(false); }); } @Test public void testTopActivityEligibleForUserAspectRatioButton_transparentTop_notEligible() { runTestScenario((robot) -> { robot.transparentActivity((ta) -> { ta.launchTransparentActivityInTask(); ta.activity().setIgnoreOrientationRequest(true); }); robot.conf().enableUserAppAspectRatioSettings(true); robot.checkTaskInfoEligibleForUserAspectRatioButton(false); }); } @Test public void getTaskInfoPropagatesCameraCompatMode() { runTestScenario((robot) -> { robot.applyOnActivity(AppCompatActivityRobot::createActivityWithComponentInNewTask); robot.setFreeformCameraCompatMode(CAMERA_COMPAT_FREEFORM_PORTRAIT_DEVICE_IN_LANDSCAPE); robot.checkTaskInfoFreeformCameraCompatMode( CAMERA_COMPAT_FREEFORM_PORTRAIT_DEVICE_IN_LANDSCAPE); }); } /** * Runs a test scenario providing a Robot. */ Loading @@ -125,11 +195,14 @@ public class AppCompatUtilsTest extends WindowTestsBase { private static class AppCompatUtilsRobotTest extends AppCompatRobotBase { private final WindowState mWindowState; @NonNull private final AppCompatTransparentActivityRobot mTransparentActivityRobot; AppCompatUtilsRobotTest(@NonNull WindowManagerService wm, @NonNull ActivityTaskManagerService atm, @NonNull ActivityTaskSupervisor supervisor) { super(wm, atm, supervisor); mTransparentActivityRobot = new AppCompatTransparentActivityRobot(activity()); mWindowState = Mockito.mock(WindowState.class); } Loading @@ -139,6 +212,12 @@ public class AppCompatUtilsTest extends WindowTestsBase { spyOn(activity.mAppCompatController.getAppCompatAspectRatioPolicy()); } void transparentActivity(@NonNull Consumer<AppCompatTransparentActivityRobot> consumer) { // We always create at least an opaque activity in a Task. activity().createNewTaskWithBaseActivity(); consumer.accept(mTransparentActivityRobot); } void setIsLetterboxedForFixedOrientationAndAspectRatio( boolean forFixedOrientationAndAspectRatio) { when(activity().top().mAppCompatController.getAppCompatAspectRatioPolicy() Loading @@ -155,11 +234,30 @@ public class AppCompatUtilsTest extends WindowTestsBase { when(mWindowState.isLetterboxedForDisplayCutout()).thenReturn(displayCutout); } void setFreeformCameraCompatMode(@FreeformCameraCompatMode int mode) { activity().top().mAppCompatController.getAppCompatCameraOverrides() .setFreeformCameraCompatMode(mode); } void checkTopActivityLetterboxReason(@NonNull String expected) { Assert.assertEquals(expected, AppCompatUtils.getLetterboxReasonString(activity().top(), mWindowState)); } @NonNull TaskInfo getTopTaskInfo() { return activity().top().getTask().getTaskInfo(); } void checkTaskInfoEligibleForUserAspectRatioButton(boolean eligible) { Assert.assertEquals(eligible, getTopTaskInfo().appCompatTaskInfo .eligibleForUserAspectRatioButton()); } void checkTaskInfoFreeformCameraCompatMode(@FreeformCameraCompatMode int mode) { Assert.assertEquals(mode, getTopTaskInfo().appCompatTaskInfo .cameraCompatTaskInfo.freeformCameraCompatMode); } } }
services/tests/wmtests/src/com/android/server/wm/TaskTests.java +0 −56 Original line number Diff line number Diff line Loading @@ -18,7 +18,6 @@ package com.android.server.wm; import static android.app.ActivityTaskManager.INVALID_TASK_ID; import static android.app.CameraCompatTaskInfo.CAMERA_COMPAT_FREEFORM_PORTRAIT_DEVICE_IN_LANDSCAPE; import static android.app.WindowConfiguration.ACTIVITY_TYPE_HOME; import static android.app.WindowConfiguration.ACTIVITY_TYPE_STANDARD; import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM; Loading Loading @@ -704,50 +703,6 @@ public class TaskTests extends WindowTestsBase { assertEquals(freeformBounds, task.getBounds()); } @Test public void testTopActivityEligibleForUserAspectRatioButton() { DisplayContent display = mAtm.mRootWindowContainer.getDefaultDisplay(); final Task rootTask = new TaskBuilder(mSupervisor).setCreateActivity(true) .setWindowingMode(WINDOWING_MODE_FULLSCREEN).setDisplay(display).build(); final Task task = rootTask.getBottomMostTask(); final ActivityRecord root = task.getTopNonFinishingActivity(); spyOn(mWm.mAppCompatConfiguration); spyOn(root); spyOn(root.mAppCompatController.getAppCompatAspectRatioOverrides()); doReturn(true).when(root).fillsParent(); doReturn(true).when( root.mAppCompatController.getAppCompatAspectRatioOverrides()) .shouldEnableUserAspectRatioSettings(); doReturn(false).when(root).inSizeCompatMode(); doReturn(task).when(root).getOrganizedTask(); // The button should be eligible to be displayed assertTrue(task.getTaskInfo() .appCompatTaskInfo.eligibleForUserAspectRatioButton()); // When shouldApplyUserMinAspectRatioOverride is disable the button is not enabled doReturn(false).when( root.mAppCompatController.getAppCompatAspectRatioOverrides()) .shouldEnableUserAspectRatioSettings(); assertFalse(task.getTaskInfo() .appCompatTaskInfo.eligibleForUserAspectRatioButton()); doReturn(true).when(root.mAppCompatController .getAppCompatAspectRatioOverrides()).shouldEnableUserAspectRatioSettings(); // When in size compat mode the button is not enabled doReturn(true).when(root).inSizeCompatMode(); assertFalse(task.getTaskInfo() .appCompatTaskInfo.eligibleForUserAspectRatioButton()); doReturn(false).when(root).inSizeCompatMode(); // When the top activity is transparent, the button is not enabled doReturn(false).when(root).fillsParent(); assertFalse(task.getTaskInfo() .appCompatTaskInfo.eligibleForUserAspectRatioButton()); doReturn(true).when(root).fillsParent(); } @Test public void testIsTopActivityTranslucent() { DisplayContent display = mAtm.mRootWindowContainer.getDefaultDisplay(); Loading Loading @@ -2111,17 +2066,6 @@ public class TaskTests extends WindowTestsBase { assertNotEquals(activityDifferentPackage, task.getBottomMostActivityInSamePackage()); } @Test public void getTaskInfoPropagatesCameraCompatMode() { final Task task = new TaskBuilder(mSupervisor).setCreateActivity(true).build(); final ActivityRecord activity = task.getTopMostActivity(); activity.mAppCompatController.getAppCompatCameraOverrides().setFreeformCameraCompatMode( CAMERA_COMPAT_FREEFORM_PORTRAIT_DEVICE_IN_LANDSCAPE); assertEquals(CAMERA_COMPAT_FREEFORM_PORTRAIT_DEVICE_IN_LANDSCAPE, task.getTaskInfo().appCompatTaskInfo.cameraCompatTaskInfo.freeformCameraCompatMode); } @Test public void testUpdateTaskDescriptionOnReparent() { final Task rootTask1 = createTask(mDisplayContent); Loading