Loading services/core/java/com/android/server/wm/DesktopModeLaunchParamsModifier.java +11 −0 Original line number Diff line number Diff line Loading @@ -110,6 +110,17 @@ class DesktopModeLaunchParamsModifier implements LaunchParamsModifier { if (ENABLE_FREEFORM_DISPLAY_LAUNCH_PARAMS.isTrue() && task == null && (isRequestingFreeformWindowMode(null, options, currentParams) || inDesktopMode)) { if (DesktopExperienceFlags.HANDLE_INCOMPATIBLE_TASKS_IN_DESKTOP_LAUNCH_PARAMS.isTrue() && activity != null) { if (mDesktopModeCompatPolicy.isTopActivityExemptFromDesktopWindowing( activity.mActivityComponent, activity.isNoDisplay(), !activity.occludesParent(), /* numActivities */ 1, activity.mUserId, activity.info)) { appendLog("activity exempt from desktop, launching in fullscreen"); outParams.mWindowingMode = WINDOWING_MODE_FULLSCREEN; return RESULT_DONE; } } if (options != null) { final int windowingMode = options.getLaunchWindowingMode(); if (windowingMode == WINDOWING_MODE_FREEFORM) { Loading services/tests/wmtests/src/com/android/server/wm/DesktopModeLaunchParamsModifierTests.java +90 −0 Original line number Diff line number Diff line Loading @@ -196,6 +196,28 @@ public class DesktopModeLaunchParamsModifierTests extends new CalculateRequestBuilder().setTask(task).setOptions(options).calculate()); } @Test @EnableFlags({Flags.FLAG_HANDLE_INCOMPATIBLE_TASKS_IN_DESKTOP_LAUNCH_PARAMS, Flags.FLAG_ENABLE_FREEFORM_DISPLAY_LAUNCH_PARAMS}) public void testHomeActivitiesForcedToFullscreenWithoutTask() { setupDesktopModeLaunchParamsModifier(); final DisplayContent display = createDisplayContent(ORIENTATION_LANDSCAPE, LANDSCAPE_DISPLAY_BOUNDS, WINDOWING_MODE_FREEFORM); final ActivityOptions options = ActivityOptions.makeBasic(); options.setLaunchWindowingMode(WINDOWING_MODE_FREEFORM); options.setLaunchDisplayId(display.mDisplayId); final Task task = new TaskBuilder(mSupervisor).build(); final ActivityRecord activity = createActivity(display, SCREEN_ORIENTATION_PORTRAIT, task, /* ignoreOrientationRequest */ true, /* isResizeable */ false, HOME_ACTIVITIES); assertEquals(RESULT_DONE, new CalculateRequestBuilder().setTask(null).setOptions(options) .setActivity(activity).calculate()); assertEquals(WINDOWING_MODE_FULLSCREEN, mResult.mWindowingMode); } @Test @EnableFlags(Flags.FLAG_HANDLE_INCOMPATIBLE_TASKS_IN_DESKTOP_LAUNCH_PARAMS) public void testHomeActivitiesForcedToFullscreen() { Loading @@ -213,6 +235,30 @@ public class DesktopModeLaunchParamsModifierTests extends assertEquals(WINDOWING_MODE_FULLSCREEN, mResult.mWindowingMode); } @Test @EnableFlags({Flags.FLAG_HANDLE_INCOMPATIBLE_TASKS_IN_DESKTOP_LAUNCH_PARAMS, Flags.FLAG_ENABLE_FREEFORM_DISPLAY_LAUNCH_PARAMS}) public void testSystemUIActivitiesForcedToFullscreenWithoutTask() { setupDesktopModeLaunchParamsModifier(); final DisplayContent display = createDisplayContent(ORIENTATION_LANDSCAPE, LANDSCAPE_DISPLAY_BOUNDS, WINDOWING_MODE_FREEFORM); final ActivityOptions options = ActivityOptions.makeBasic(); options.setLaunchWindowingMode(WINDOWING_MODE_FREEFORM); options.setLaunchDisplayId(display.mDisplayId); final Task task = new TaskBuilder(mSupervisor).build(); final ComponentName sysUiComponent = new ComponentName( mContext.getResources().getString(R.string.config_systemUi), ""); final ActivityRecord activity = createActivity(display, SCREEN_ORIENTATION_PORTRAIT, task, /* ignoreOrientationRequest */ true, /* isResizeable */ false, sysUiComponent); assertEquals(RESULT_DONE, new CalculateRequestBuilder().setTask(null) .setOptions(options).setActivity(activity).calculate()); assertEquals(WINDOWING_MODE_FULLSCREEN, mResult.mWindowingMode); } @Test @EnableFlags(Flags.FLAG_HANDLE_INCOMPATIBLE_TASKS_IN_DESKTOP_LAUNCH_PARAMS) public void testSystemUIActivitiesForcedToFullscreen() { Loading @@ -232,6 +278,28 @@ public class DesktopModeLaunchParamsModifierTests extends assertEquals(WINDOWING_MODE_FULLSCREEN, mResult.mWindowingMode); } @Test @EnableFlags({Flags.FLAG_HANDLE_INCOMPATIBLE_TASKS_IN_DESKTOP_LAUNCH_PARAMS, Flags.FLAG_ENABLE_FREEFORM_DISPLAY_LAUNCH_PARAMS}) public void testTransparentActivitiesWithPlatformSignatureForcedToFullscreenWithoutTask() { setupDesktopModeLaunchParamsModifier(); final DisplayContent display = createDisplayContent(ORIENTATION_LANDSCAPE, LANDSCAPE_DISPLAY_BOUNDS, WINDOWING_MODE_FREEFORM); final ActivityOptions options = ActivityOptions.makeBasic(); options.setLaunchWindowingMode(WINDOWING_MODE_FREEFORM); options.setLaunchDisplayId(display.mDisplayId); mActivity.setOccludesParent(false); mActivity.info.applicationInfo = new ApplicationInfo(); mActivity.info.applicationInfo.privateFlags = ApplicationInfo.PRIVATE_FLAG_SIGNED_WITH_PLATFORM_KEY; assertEquals(RESULT_DONE, new CalculateRequestBuilder().setTask(null).setOptions(options) .calculate()); assertEquals(WINDOWING_MODE_FULLSCREEN, mResult.mWindowingMode); } @Test @EnableFlags(Flags.FLAG_HANDLE_INCOMPATIBLE_TASKS_IN_DESKTOP_LAUNCH_PARAMS) public void testTransparentActivitiesWithPlatformSignatureForcedToFullscreen() { Loading @@ -249,6 +317,28 @@ public class DesktopModeLaunchParamsModifierTests extends assertEquals(WINDOWING_MODE_FULLSCREEN, mResult.mWindowingMode); } @Test @EnableFlags({Flags.FLAG_HANDLE_INCOMPATIBLE_TASKS_IN_DESKTOP_LAUNCH_PARAMS, Flags.FLAG_ENABLE_FREEFORM_DISPLAY_LAUNCH_PARAMS}) public void testTransparentActivitiesWithPermissionForcedToFullscreenWithoutTask() throws PackageManager.NameNotFoundException { setupDesktopModeLaunchParamsModifier(); final DisplayContent display = createDisplayContent(ORIENTATION_LANDSCAPE, LANDSCAPE_DISPLAY_BOUNDS, WINDOWING_MODE_FREEFORM); final ActivityOptions options = ActivityOptions.makeBasic(); options.setLaunchWindowingMode(WINDOWING_MODE_FREEFORM); options.setLaunchDisplayId(display.mDisplayId); mActivity.setOccludesParent(false); allowOverlayPermissionForAllUsers( new String[]{android.Manifest.permission.SYSTEM_ALERT_WINDOW}); assertEquals(RESULT_DONE, new CalculateRequestBuilder().setTask(null).setOptions(options) .calculate()); assertEquals(WINDOWING_MODE_FULLSCREEN, mResult.mWindowingMode); } @Test @EnableFlags(Flags.FLAG_HANDLE_INCOMPATIBLE_TASKS_IN_DESKTOP_LAUNCH_PARAMS) public void testTransparentActivitiesWithPermissionForcedToFullscreen() Loading Loading
services/core/java/com/android/server/wm/DesktopModeLaunchParamsModifier.java +11 −0 Original line number Diff line number Diff line Loading @@ -110,6 +110,17 @@ class DesktopModeLaunchParamsModifier implements LaunchParamsModifier { if (ENABLE_FREEFORM_DISPLAY_LAUNCH_PARAMS.isTrue() && task == null && (isRequestingFreeformWindowMode(null, options, currentParams) || inDesktopMode)) { if (DesktopExperienceFlags.HANDLE_INCOMPATIBLE_TASKS_IN_DESKTOP_LAUNCH_PARAMS.isTrue() && activity != null) { if (mDesktopModeCompatPolicy.isTopActivityExemptFromDesktopWindowing( activity.mActivityComponent, activity.isNoDisplay(), !activity.occludesParent(), /* numActivities */ 1, activity.mUserId, activity.info)) { appendLog("activity exempt from desktop, launching in fullscreen"); outParams.mWindowingMode = WINDOWING_MODE_FULLSCREEN; return RESULT_DONE; } } if (options != null) { final int windowingMode = options.getLaunchWindowingMode(); if (windowingMode == WINDOWING_MODE_FREEFORM) { Loading
services/tests/wmtests/src/com/android/server/wm/DesktopModeLaunchParamsModifierTests.java +90 −0 Original line number Diff line number Diff line Loading @@ -196,6 +196,28 @@ public class DesktopModeLaunchParamsModifierTests extends new CalculateRequestBuilder().setTask(task).setOptions(options).calculate()); } @Test @EnableFlags({Flags.FLAG_HANDLE_INCOMPATIBLE_TASKS_IN_DESKTOP_LAUNCH_PARAMS, Flags.FLAG_ENABLE_FREEFORM_DISPLAY_LAUNCH_PARAMS}) public void testHomeActivitiesForcedToFullscreenWithoutTask() { setupDesktopModeLaunchParamsModifier(); final DisplayContent display = createDisplayContent(ORIENTATION_LANDSCAPE, LANDSCAPE_DISPLAY_BOUNDS, WINDOWING_MODE_FREEFORM); final ActivityOptions options = ActivityOptions.makeBasic(); options.setLaunchWindowingMode(WINDOWING_MODE_FREEFORM); options.setLaunchDisplayId(display.mDisplayId); final Task task = new TaskBuilder(mSupervisor).build(); final ActivityRecord activity = createActivity(display, SCREEN_ORIENTATION_PORTRAIT, task, /* ignoreOrientationRequest */ true, /* isResizeable */ false, HOME_ACTIVITIES); assertEquals(RESULT_DONE, new CalculateRequestBuilder().setTask(null).setOptions(options) .setActivity(activity).calculate()); assertEquals(WINDOWING_MODE_FULLSCREEN, mResult.mWindowingMode); } @Test @EnableFlags(Flags.FLAG_HANDLE_INCOMPATIBLE_TASKS_IN_DESKTOP_LAUNCH_PARAMS) public void testHomeActivitiesForcedToFullscreen() { Loading @@ -213,6 +235,30 @@ public class DesktopModeLaunchParamsModifierTests extends assertEquals(WINDOWING_MODE_FULLSCREEN, mResult.mWindowingMode); } @Test @EnableFlags({Flags.FLAG_HANDLE_INCOMPATIBLE_TASKS_IN_DESKTOP_LAUNCH_PARAMS, Flags.FLAG_ENABLE_FREEFORM_DISPLAY_LAUNCH_PARAMS}) public void testSystemUIActivitiesForcedToFullscreenWithoutTask() { setupDesktopModeLaunchParamsModifier(); final DisplayContent display = createDisplayContent(ORIENTATION_LANDSCAPE, LANDSCAPE_DISPLAY_BOUNDS, WINDOWING_MODE_FREEFORM); final ActivityOptions options = ActivityOptions.makeBasic(); options.setLaunchWindowingMode(WINDOWING_MODE_FREEFORM); options.setLaunchDisplayId(display.mDisplayId); final Task task = new TaskBuilder(mSupervisor).build(); final ComponentName sysUiComponent = new ComponentName( mContext.getResources().getString(R.string.config_systemUi), ""); final ActivityRecord activity = createActivity(display, SCREEN_ORIENTATION_PORTRAIT, task, /* ignoreOrientationRequest */ true, /* isResizeable */ false, sysUiComponent); assertEquals(RESULT_DONE, new CalculateRequestBuilder().setTask(null) .setOptions(options).setActivity(activity).calculate()); assertEquals(WINDOWING_MODE_FULLSCREEN, mResult.mWindowingMode); } @Test @EnableFlags(Flags.FLAG_HANDLE_INCOMPATIBLE_TASKS_IN_DESKTOP_LAUNCH_PARAMS) public void testSystemUIActivitiesForcedToFullscreen() { Loading @@ -232,6 +278,28 @@ public class DesktopModeLaunchParamsModifierTests extends assertEquals(WINDOWING_MODE_FULLSCREEN, mResult.mWindowingMode); } @Test @EnableFlags({Flags.FLAG_HANDLE_INCOMPATIBLE_TASKS_IN_DESKTOP_LAUNCH_PARAMS, Flags.FLAG_ENABLE_FREEFORM_DISPLAY_LAUNCH_PARAMS}) public void testTransparentActivitiesWithPlatformSignatureForcedToFullscreenWithoutTask() { setupDesktopModeLaunchParamsModifier(); final DisplayContent display = createDisplayContent(ORIENTATION_LANDSCAPE, LANDSCAPE_DISPLAY_BOUNDS, WINDOWING_MODE_FREEFORM); final ActivityOptions options = ActivityOptions.makeBasic(); options.setLaunchWindowingMode(WINDOWING_MODE_FREEFORM); options.setLaunchDisplayId(display.mDisplayId); mActivity.setOccludesParent(false); mActivity.info.applicationInfo = new ApplicationInfo(); mActivity.info.applicationInfo.privateFlags = ApplicationInfo.PRIVATE_FLAG_SIGNED_WITH_PLATFORM_KEY; assertEquals(RESULT_DONE, new CalculateRequestBuilder().setTask(null).setOptions(options) .calculate()); assertEquals(WINDOWING_MODE_FULLSCREEN, mResult.mWindowingMode); } @Test @EnableFlags(Flags.FLAG_HANDLE_INCOMPATIBLE_TASKS_IN_DESKTOP_LAUNCH_PARAMS) public void testTransparentActivitiesWithPlatformSignatureForcedToFullscreen() { Loading @@ -249,6 +317,28 @@ public class DesktopModeLaunchParamsModifierTests extends assertEquals(WINDOWING_MODE_FULLSCREEN, mResult.mWindowingMode); } @Test @EnableFlags({Flags.FLAG_HANDLE_INCOMPATIBLE_TASKS_IN_DESKTOP_LAUNCH_PARAMS, Flags.FLAG_ENABLE_FREEFORM_DISPLAY_LAUNCH_PARAMS}) public void testTransparentActivitiesWithPermissionForcedToFullscreenWithoutTask() throws PackageManager.NameNotFoundException { setupDesktopModeLaunchParamsModifier(); final DisplayContent display = createDisplayContent(ORIENTATION_LANDSCAPE, LANDSCAPE_DISPLAY_BOUNDS, WINDOWING_MODE_FREEFORM); final ActivityOptions options = ActivityOptions.makeBasic(); options.setLaunchWindowingMode(WINDOWING_MODE_FREEFORM); options.setLaunchDisplayId(display.mDisplayId); mActivity.setOccludesParent(false); allowOverlayPermissionForAllUsers( new String[]{android.Manifest.permission.SYSTEM_ALERT_WINDOW}); assertEquals(RESULT_DONE, new CalculateRequestBuilder().setTask(null).setOptions(options) .calculate()); assertEquals(WINDOWING_MODE_FULLSCREEN, mResult.mWindowingMode); } @Test @EnableFlags(Flags.FLAG_HANDLE_INCOMPATIBLE_TASKS_IN_DESKTOP_LAUNCH_PARAMS) public void testTransparentActivitiesWithPermissionForcedToFullscreen() Loading