Make `canEnterDesktopMode` static.
Bug: 335401172
Test: atest WmTests:DesktopModeLaunchParamsModifierTests
Change-Id: If3c85510f0d92310b8a38821287c65213667e514
diff --git a/services/core/java/com/android/server/wm/DesktopModeLaunchParamsModifier.java b/services/core/java/com/android/server/wm/DesktopModeLaunchParamsModifier.java
index f04b4af..8069a93 100644
--- a/services/core/java/com/android/server/wm/DesktopModeLaunchParamsModifier.java
+++ b/services/core/java/com/android/server/wm/DesktopModeLaunchParamsModifier.java
@@ -48,8 +48,15 @@
/**
* 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;
@@ -178,24 +185,24 @@
* 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));
}
-
}
diff --git a/services/tests/wmtests/src/com/android/server/wm/DesktopModeLaunchParamsModifierTests.java b/services/tests/wmtests/src/com/android/server/wm/DesktopModeLaunchParamsModifierTests.java
index 353ba01..89ae802 100644
--- a/services/tests/wmtests/src/com/android/server/wm/DesktopModeLaunchParamsModifierTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/DesktopModeLaunchParamsModifierTests.java
@@ -22,6 +22,7 @@
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;
@@ -29,18 +30,21 @@
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;
@@ -48,6 +52,7 @@
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
+import org.mockito.Mockito;
/**
* Tests for desktop mode task bounds.
@@ -71,8 +76,6 @@
@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();
@@ -82,20 +85,26 @@
@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());
}
@@ -103,12 +112,16 @@
@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());
@@ -117,6 +130,8 @@
@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());
@@ -125,6 +140,8 @@
@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());
@@ -133,6 +150,8 @@
@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());
@@ -141,6 +160,8 @@
@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);
@@ -150,6 +171,8 @@
@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;
@@ -165,6 +188,8 @@
@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);
@@ -176,6 +201,24 @@
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;