Loading services/core/java/com/android/server/wm/DesktopModeLaunchParamsModifier.java +12 −5 Original line number Diff line number Diff line Loading @@ -45,11 +45,18 @@ public class DesktopModeLaunchParamsModifier implements LaunchParamsModifier { SystemProperties .getInt("persist.wm.debug.desktop_mode_initial_bounds_scale", 75) / 100f; /** * Flag to indicate whether to restrict desktop mode to supported devices. */ @VisibleForTesting static final String ENFORCE_DEVICE_RESTRICTIONS_KEY = "persist.wm.debug.desktop_mode_enforce_device_restrictions"; /** * Flag to indicate whether to restrict desktop mode to supported devices. */ private static final boolean ENFORCE_DEVICE_RESTRICTIONS = SystemProperties.getBoolean( "persist.wm.debug.desktop_mode_enforce_device_restrictions", true); ENFORCE_DEVICE_RESTRICTIONS_KEY, true); private StringBuilder mLogBuilder; Loading Loading @@ -178,24 +185,24 @@ public class DesktopModeLaunchParamsModifier implements LaunchParamsModifier { * Return {@code true} if desktop mode should be restricted to supported devices. */ @VisibleForTesting public boolean enforceDeviceRestrictions() { static boolean enforceDeviceRestrictions() { return ENFORCE_DEVICE_RESTRICTIONS; } /** * Return {@code true} if the current device supports desktop mode. */ // TODO(b/337819319): use a companion object instead. @VisibleForTesting public boolean isDesktopModeSupported(@NonNull Context context) { static boolean isDesktopModeSupported(@NonNull Context context) { return context.getResources().getBoolean(R.bool.config_isDesktopModeSupported); } /** * Return {@code true} if desktop mode can be entered on the current device. */ boolean canEnterDesktopMode(@NonNull Context context) { static boolean canEnterDesktopMode(@NonNull Context context) { return isDesktopModeEnabled() && (!enforceDeviceRestrictions() || isDesktopModeSupported(context)); } } services/tests/wmtests/src/com/android/server/wm/DesktopModeLaunchParamsModifierTests.java +49 −6 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import static android.app.WindowConfiguration.ACTIVITY_TYPE_UNDEFINED; import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM; import static com.android.server.wm.DesktopModeLaunchParamsModifier.DESKTOP_MODE_INITIAL_BOUNDS_SCALE; import static com.android.server.wm.DesktopModeLaunchParamsModifier.ENFORCE_DEVICE_RESTRICTIONS_KEY; import static com.android.server.wm.LaunchParamsController.LaunchParamsModifier.PHASE_BOUNDS; import static com.android.server.wm.LaunchParamsController.LaunchParamsModifier.PHASE_DISPLAY; import static com.android.server.wm.LaunchParamsController.LaunchParamsModifier.RESULT_CONTINUE; Loading @@ -29,18 +30,21 @@ import static com.android.server.wm.LaunchParamsController.LaunchParamsModifier. import static com.android.server.wm.LaunchParamsController.LaunchParamsModifier.RESULT_SKIP; import static org.junit.Assert.assertEquals; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; import android.content.res.Resources; import android.graphics.Rect; import android.os.SystemProperties; import android.platform.test.annotations.DisableFlags; import android.platform.test.annotations.EnableFlags; import android.platform.test.annotations.Presubmit; import androidx.test.filters.SmallTest; import com.android.internal.R; import com.android.server.wm.LaunchParamsController.LaunchParamsModifier.Result; import com.android.window.flags.Flags; Loading @@ -48,6 +52,7 @@ import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.Mockito; /** * Tests for desktop mode task bounds. Loading @@ -71,8 +76,6 @@ public class DesktopModeLaunchParamsModifierTests extends WindowTestsBase { @Before public void setUp() throws Exception { mActivity = new ActivityBuilder(mAtm).build(); mTarget = spy(new DesktopModeLaunchParamsModifier(mContext)); doReturn(true).when(mTarget).isDesktopModeSupported(any()); mCurrent = new LaunchParamsController.LaunchParams(); mCurrent.reset(); mResult = new LaunchParamsController.LaunchParams(); Loading @@ -82,20 +85,26 @@ public class DesktopModeLaunchParamsModifierTests extends WindowTestsBase { @Test @DisableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE) public void testReturnsContinueIfDesktopWindowingIsDisabled() { setupDesktopModeLaunchParamsModifier(); assertEquals(RESULT_CONTINUE, new CalculateRequestBuilder().setTask(null).calculate()); } @Test @EnableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE) public void testReturnsContinueIfDesktopWindowingIsEnabledOnUnsupportedDevice() { doReturn(false).when(mTarget).isDesktopModeSupported(any()); setupDesktopModeLaunchParamsModifier(/*isDesktopModeSupported=*/ false, /*enforceDeviceRestrictions=*/ true); assertEquals(RESULT_CONTINUE, new CalculateRequestBuilder().setTask(null).calculate()); } @Test @EnableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE) public void testReturnsDoneIfDesktopWindowingIsEnabledAndUnsupportedDeviceOverridden() { doReturn(false).when(mTarget).enforceDeviceRestrictions(); setupDesktopModeLaunchParamsModifier(/*isDesktopModeSupported=*/ true, /*enforceDeviceRestrictions=*/ false); final Task task = new TaskBuilder(mSupervisor).build(); assertEquals(RESULT_DONE, new CalculateRequestBuilder().setTask(task).calculate()); } Loading @@ -103,12 +112,16 @@ public class DesktopModeLaunchParamsModifierTests extends WindowTestsBase { @Test @EnableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE) public void testReturnsSkipIfTaskIsNull() { setupDesktopModeLaunchParamsModifier(); assertEquals(RESULT_SKIP, new CalculateRequestBuilder().setTask(null).calculate()); } @Test @EnableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE) public void testReturnsSkipIfNotBoundsPhase() { setupDesktopModeLaunchParamsModifier(); final Task task = new TaskBuilder(mSupervisor).build(); assertEquals(RESULT_SKIP, new CalculateRequestBuilder().setTask(task).setPhase( PHASE_DISPLAY).calculate()); Loading @@ -117,6 +130,8 @@ public class DesktopModeLaunchParamsModifierTests extends WindowTestsBase { @Test @EnableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE) public void testReturnsSkipIfTaskNotUsingActivityTypeStandardOrUndefined() { setupDesktopModeLaunchParamsModifier(); final Task task = new TaskBuilder(mSupervisor).setActivityType( ACTIVITY_TYPE_ASSISTANT).build(); assertEquals(RESULT_SKIP, new CalculateRequestBuilder().setTask(task).calculate()); Loading @@ -125,6 +140,8 @@ public class DesktopModeLaunchParamsModifierTests extends WindowTestsBase { @Test @EnableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE) public void testReturnsDoneIfTaskUsingActivityTypeStandard() { setupDesktopModeLaunchParamsModifier(); final Task task = new TaskBuilder(mSupervisor).setActivityType( ACTIVITY_TYPE_STANDARD).build(); assertEquals(RESULT_DONE, new CalculateRequestBuilder().setTask(task).calculate()); Loading @@ -133,6 +150,8 @@ public class DesktopModeLaunchParamsModifierTests extends WindowTestsBase { @Test @EnableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE) public void testReturnsDoneIfTaskUsingActivityTypeUndefined() { setupDesktopModeLaunchParamsModifier(); final Task task = new TaskBuilder(mSupervisor).setActivityType( ACTIVITY_TYPE_UNDEFINED).build(); assertEquals(RESULT_DONE, new CalculateRequestBuilder().setTask(task).calculate()); Loading @@ -141,6 +160,8 @@ public class DesktopModeLaunchParamsModifierTests extends WindowTestsBase { @Test @EnableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE) public void testReturnsSkipIfCurrentParamsHasBounds() { setupDesktopModeLaunchParamsModifier(); final Task task = new TaskBuilder(mSupervisor).setActivityType( ACTIVITY_TYPE_STANDARD).build(); mCurrent.mBounds.set(/* left */ 0, /* top */ 0, /* right */ 100, /* bottom */ 100); Loading @@ -150,6 +171,8 @@ public class DesktopModeLaunchParamsModifierTests extends WindowTestsBase { @Test @EnableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE) public void testUsesDefaultBounds() { setupDesktopModeLaunchParamsModifier(); final Task task = new TaskBuilder(mSupervisor).setActivityType( ACTIVITY_TYPE_STANDARD).build(); final int displayHeight = 1600; Loading @@ -165,6 +188,8 @@ public class DesktopModeLaunchParamsModifierTests extends WindowTestsBase { @Test @EnableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE) public void testUsesDisplayAreaAndWindowingModeFromSource() { setupDesktopModeLaunchParamsModifier(); final Task task = new TaskBuilder(mSupervisor).setActivityType( ACTIVITY_TYPE_STANDARD).build(); TaskDisplayArea mockTaskDisplayArea = mock(TaskDisplayArea.class); Loading @@ -176,6 +201,24 @@ public class DesktopModeLaunchParamsModifierTests extends WindowTestsBase { assertEquals(WINDOWING_MODE_FREEFORM, mResult.mWindowingMode); } private void setupDesktopModeLaunchParamsModifier() { setupDesktopModeLaunchParamsModifier(/*isDesktopModeSupported=*/ true, /*enforceDeviceRestrictions=*/ true); } private void setupDesktopModeLaunchParamsModifier(boolean isDesktopModeSupported, boolean enforceDeviceRestrictions) { Resources mockResources = Mockito.mock(Resources.class); when(mockResources.getBoolean(eq(R.bool.config_isDesktopModeSupported))) .thenReturn(isDesktopModeSupported); doReturn(mockResources).when(mContext).getResources(); SystemProperties.set(ENFORCE_DEVICE_RESTRICTIONS_KEY, String.valueOf(enforceDeviceRestrictions)); mTarget = new DesktopModeLaunchParamsModifier(mContext); } private class CalculateRequestBuilder { private Task mTask; private int mPhase = PHASE_BOUNDS; Loading Loading
services/core/java/com/android/server/wm/DesktopModeLaunchParamsModifier.java +12 −5 Original line number Diff line number Diff line Loading @@ -45,11 +45,18 @@ public class DesktopModeLaunchParamsModifier implements LaunchParamsModifier { SystemProperties .getInt("persist.wm.debug.desktop_mode_initial_bounds_scale", 75) / 100f; /** * Flag to indicate whether to restrict desktop mode to supported devices. */ @VisibleForTesting static final String ENFORCE_DEVICE_RESTRICTIONS_KEY = "persist.wm.debug.desktop_mode_enforce_device_restrictions"; /** * Flag to indicate whether to restrict desktop mode to supported devices. */ private static final boolean ENFORCE_DEVICE_RESTRICTIONS = SystemProperties.getBoolean( "persist.wm.debug.desktop_mode_enforce_device_restrictions", true); ENFORCE_DEVICE_RESTRICTIONS_KEY, true); private StringBuilder mLogBuilder; Loading Loading @@ -178,24 +185,24 @@ public class DesktopModeLaunchParamsModifier implements LaunchParamsModifier { * Return {@code true} if desktop mode should be restricted to supported devices. */ @VisibleForTesting public boolean enforceDeviceRestrictions() { static boolean enforceDeviceRestrictions() { return ENFORCE_DEVICE_RESTRICTIONS; } /** * Return {@code true} if the current device supports desktop mode. */ // TODO(b/337819319): use a companion object instead. @VisibleForTesting public boolean isDesktopModeSupported(@NonNull Context context) { static boolean isDesktopModeSupported(@NonNull Context context) { return context.getResources().getBoolean(R.bool.config_isDesktopModeSupported); } /** * Return {@code true} if desktop mode can be entered on the current device. */ boolean canEnterDesktopMode(@NonNull Context context) { static boolean canEnterDesktopMode(@NonNull Context context) { return isDesktopModeEnabled() && (!enforceDeviceRestrictions() || isDesktopModeSupported(context)); } }
services/tests/wmtests/src/com/android/server/wm/DesktopModeLaunchParamsModifierTests.java +49 −6 Original line number Diff line number Diff line Loading @@ -22,6 +22,7 @@ import static android.app.WindowConfiguration.ACTIVITY_TYPE_UNDEFINED; import static android.app.WindowConfiguration.WINDOWING_MODE_FREEFORM; import static com.android.server.wm.DesktopModeLaunchParamsModifier.DESKTOP_MODE_INITIAL_BOUNDS_SCALE; import static com.android.server.wm.DesktopModeLaunchParamsModifier.ENFORCE_DEVICE_RESTRICTIONS_KEY; import static com.android.server.wm.LaunchParamsController.LaunchParamsModifier.PHASE_BOUNDS; import static com.android.server.wm.LaunchParamsController.LaunchParamsModifier.PHASE_DISPLAY; import static com.android.server.wm.LaunchParamsController.LaunchParamsModifier.RESULT_CONTINUE; Loading @@ -29,18 +30,21 @@ import static com.android.server.wm.LaunchParamsController.LaunchParamsModifier. import static com.android.server.wm.LaunchParamsController.LaunchParamsModifier.RESULT_SKIP; import static org.junit.Assert.assertEquals; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; import android.content.res.Resources; import android.graphics.Rect; import android.os.SystemProperties; import android.platform.test.annotations.DisableFlags; import android.platform.test.annotations.EnableFlags; import android.platform.test.annotations.Presubmit; import androidx.test.filters.SmallTest; import com.android.internal.R; import com.android.server.wm.LaunchParamsController.LaunchParamsModifier.Result; import com.android.window.flags.Flags; Loading @@ -48,6 +52,7 @@ import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.Mockito; /** * Tests for desktop mode task bounds. Loading @@ -71,8 +76,6 @@ public class DesktopModeLaunchParamsModifierTests extends WindowTestsBase { @Before public void setUp() throws Exception { mActivity = new ActivityBuilder(mAtm).build(); mTarget = spy(new DesktopModeLaunchParamsModifier(mContext)); doReturn(true).when(mTarget).isDesktopModeSupported(any()); mCurrent = new LaunchParamsController.LaunchParams(); mCurrent.reset(); mResult = new LaunchParamsController.LaunchParams(); Loading @@ -82,20 +85,26 @@ public class DesktopModeLaunchParamsModifierTests extends WindowTestsBase { @Test @DisableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE) public void testReturnsContinueIfDesktopWindowingIsDisabled() { setupDesktopModeLaunchParamsModifier(); assertEquals(RESULT_CONTINUE, new CalculateRequestBuilder().setTask(null).calculate()); } @Test @EnableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE) public void testReturnsContinueIfDesktopWindowingIsEnabledOnUnsupportedDevice() { doReturn(false).when(mTarget).isDesktopModeSupported(any()); setupDesktopModeLaunchParamsModifier(/*isDesktopModeSupported=*/ false, /*enforceDeviceRestrictions=*/ true); assertEquals(RESULT_CONTINUE, new CalculateRequestBuilder().setTask(null).calculate()); } @Test @EnableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE) public void testReturnsDoneIfDesktopWindowingIsEnabledAndUnsupportedDeviceOverridden() { doReturn(false).when(mTarget).enforceDeviceRestrictions(); setupDesktopModeLaunchParamsModifier(/*isDesktopModeSupported=*/ true, /*enforceDeviceRestrictions=*/ false); final Task task = new TaskBuilder(mSupervisor).build(); assertEquals(RESULT_DONE, new CalculateRequestBuilder().setTask(task).calculate()); } Loading @@ -103,12 +112,16 @@ public class DesktopModeLaunchParamsModifierTests extends WindowTestsBase { @Test @EnableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE) public void testReturnsSkipIfTaskIsNull() { setupDesktopModeLaunchParamsModifier(); assertEquals(RESULT_SKIP, new CalculateRequestBuilder().setTask(null).calculate()); } @Test @EnableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE) public void testReturnsSkipIfNotBoundsPhase() { setupDesktopModeLaunchParamsModifier(); final Task task = new TaskBuilder(mSupervisor).build(); assertEquals(RESULT_SKIP, new CalculateRequestBuilder().setTask(task).setPhase( PHASE_DISPLAY).calculate()); Loading @@ -117,6 +130,8 @@ public class DesktopModeLaunchParamsModifierTests extends WindowTestsBase { @Test @EnableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE) public void testReturnsSkipIfTaskNotUsingActivityTypeStandardOrUndefined() { setupDesktopModeLaunchParamsModifier(); final Task task = new TaskBuilder(mSupervisor).setActivityType( ACTIVITY_TYPE_ASSISTANT).build(); assertEquals(RESULT_SKIP, new CalculateRequestBuilder().setTask(task).calculate()); Loading @@ -125,6 +140,8 @@ public class DesktopModeLaunchParamsModifierTests extends WindowTestsBase { @Test @EnableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE) public void testReturnsDoneIfTaskUsingActivityTypeStandard() { setupDesktopModeLaunchParamsModifier(); final Task task = new TaskBuilder(mSupervisor).setActivityType( ACTIVITY_TYPE_STANDARD).build(); assertEquals(RESULT_DONE, new CalculateRequestBuilder().setTask(task).calculate()); Loading @@ -133,6 +150,8 @@ public class DesktopModeLaunchParamsModifierTests extends WindowTestsBase { @Test @EnableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE) public void testReturnsDoneIfTaskUsingActivityTypeUndefined() { setupDesktopModeLaunchParamsModifier(); final Task task = new TaskBuilder(mSupervisor).setActivityType( ACTIVITY_TYPE_UNDEFINED).build(); assertEquals(RESULT_DONE, new CalculateRequestBuilder().setTask(task).calculate()); Loading @@ -141,6 +160,8 @@ public class DesktopModeLaunchParamsModifierTests extends WindowTestsBase { @Test @EnableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE) public void testReturnsSkipIfCurrentParamsHasBounds() { setupDesktopModeLaunchParamsModifier(); final Task task = new TaskBuilder(mSupervisor).setActivityType( ACTIVITY_TYPE_STANDARD).build(); mCurrent.mBounds.set(/* left */ 0, /* top */ 0, /* right */ 100, /* bottom */ 100); Loading @@ -150,6 +171,8 @@ public class DesktopModeLaunchParamsModifierTests extends WindowTestsBase { @Test @EnableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE) public void testUsesDefaultBounds() { setupDesktopModeLaunchParamsModifier(); final Task task = new TaskBuilder(mSupervisor).setActivityType( ACTIVITY_TYPE_STANDARD).build(); final int displayHeight = 1600; Loading @@ -165,6 +188,8 @@ public class DesktopModeLaunchParamsModifierTests extends WindowTestsBase { @Test @EnableFlags(Flags.FLAG_ENABLE_DESKTOP_WINDOWING_MODE) public void testUsesDisplayAreaAndWindowingModeFromSource() { setupDesktopModeLaunchParamsModifier(); final Task task = new TaskBuilder(mSupervisor).setActivityType( ACTIVITY_TYPE_STANDARD).build(); TaskDisplayArea mockTaskDisplayArea = mock(TaskDisplayArea.class); Loading @@ -176,6 +201,24 @@ public class DesktopModeLaunchParamsModifierTests extends WindowTestsBase { assertEquals(WINDOWING_MODE_FREEFORM, mResult.mWindowingMode); } private void setupDesktopModeLaunchParamsModifier() { setupDesktopModeLaunchParamsModifier(/*isDesktopModeSupported=*/ true, /*enforceDeviceRestrictions=*/ true); } private void setupDesktopModeLaunchParamsModifier(boolean isDesktopModeSupported, boolean enforceDeviceRestrictions) { Resources mockResources = Mockito.mock(Resources.class); when(mockResources.getBoolean(eq(R.bool.config_isDesktopModeSupported))) .thenReturn(isDesktopModeSupported); doReturn(mockResources).when(mContext).getResources(); SystemProperties.set(ENFORCE_DEVICE_RESTRICTIONS_KEY, String.valueOf(enforceDeviceRestrictions)); mTarget = new DesktopModeLaunchParamsModifier(mContext); } private class CalculateRequestBuilder { private Task mTask; private int mPhase = PHASE_BOUNDS; Loading