summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/wm/AppCompatSizeCompatModePolicy.java6
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java37
2 files changed, 43 insertions, 0 deletions
diff --git a/services/core/java/com/android/server/wm/AppCompatSizeCompatModePolicy.java b/services/core/java/com/android/server/wm/AppCompatSizeCompatModePolicy.java
index 2cfa242bc5fe..b03aa5263927 100644
--- a/services/core/java/com/android/server/wm/AppCompatSizeCompatModePolicy.java
+++ b/services/core/java/com/android/server/wm/AppCompatSizeCompatModePolicy.java
@@ -23,6 +23,7 @@ import static android.content.pm.ActivityInfo.SIZE_CHANGES_UNSUPPORTED_METADATA;
import static android.content.pm.ActivityInfo.SIZE_CHANGES_UNSUPPORTED_OVERRIDE;
import static android.content.res.Configuration.ORIENTATION_UNDEFINED;
+import static com.android.window.flags.Flags.enableSizeCompatModeImprovementsForConnectedDisplays;
import static com.android.server.wm.AppCompatUtils.isInDesktopMode;
import android.annotation.NonNull;
@@ -357,6 +358,11 @@ class AppCompatSizeCompatModePolicy {
// relatively fixed.
overrideConfig.colorMode = fullConfig.colorMode;
overrideConfig.densityDpi = fullConfig.densityDpi;
+ if (enableSizeCompatModeImprovementsForConnectedDisplays()) {
+ overrideConfig.touchscreen = fullConfig.touchscreen;
+ overrideConfig.navigation = fullConfig.navigation;
+ overrideConfig.fontScale = fullConfig.fontScale;
+ }
// The smallest screen width is the short side of screen bounds. Because the bounds
// and density won't be changed, smallestScreenWidthDp is also fixed.
overrideConfig.smallestScreenWidthDp = fullConfig.smallestScreenWidthDp;
diff --git a/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java b/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java
index 4e09d6afe74b..33a48aadbd70 100644
--- a/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java
@@ -67,6 +67,7 @@ import static com.android.server.wm.AppCompatConfiguration.LETTERBOX_POSITION_MU
import static com.android.server.wm.AppCompatUtils.computeAspectRatio;
import static com.android.server.wm.DisplayContent.IME_TARGET_LAYERING;
import static com.android.server.wm.WindowContainer.POSITION_TOP;
+import static com.android.window.flags.Flags.FLAG_ENABLE_SIZE_COMPAT_MODE_IMPROVEMENTS_FOR_CONNECTED_DISPLAYS;
import static com.google.common.truth.Truth.assertThat;
@@ -109,6 +110,7 @@ import android.provider.DeviceConfig;
import android.provider.DeviceConfig.Properties;
import android.view.DisplayCutout;
import android.view.DisplayInfo;
+import android.view.InputDevice;
import android.view.InsetsFrameProvider;
import android.view.InsetsSource;
import android.view.InsetsState;
@@ -561,6 +563,41 @@ public class SizeCompatTests extends WindowTestsBase {
assertDownScaled();
}
+ @EnableFlags(FLAG_ENABLE_SIZE_COMPAT_MODE_IMPROVEMENTS_FOR_CONNECTED_DISPLAYS)
+ @Test
+ public void testFixedMiscConfigurationWhenMovingToDisplay() {
+ setUpDisplaySizeWithApp(1000, 2500);
+
+ final DisplayContent newDisplay =
+ new TestDisplayContent.Builder(mAtm, 1000, 2000).build();
+ final InputDevice device = new InputDevice.Builder()
+ .setAssociatedDisplayId(newDisplay.mDisplayId)
+ .setSources(InputDevice.SOURCE_TOUCHSCREEN | InputDevice.SOURCE_TRACKBALL
+ | InputDevice.KEYBOARD_TYPE_ALPHABETIC)
+ .build();
+ final InputDevice[] devices = {device};
+ doReturn(true).when(newDisplay.mWmService.mInputManager)
+ .canDispatchToDisplay(device.getId(), newDisplay.mDisplayId);
+ doReturn(devices).when(newDisplay.mWmService.mInputManager).getInputDevices();
+ mTask.mWmService.mIsTouchDevice = true;
+ mTask.mWmService.displayReady();
+
+ prepareUnresizable(mActivity, 1.5f /* maxAspect */, SCREEN_ORIENTATION_UNSPECIFIED);
+
+ final Configuration originalConfiguration = mActivity.getConfiguration();
+ final int originalTouchscreen = originalConfiguration.touchscreen;
+ final int originalNavigation = originalConfiguration.navigation;
+ final int originalKeyboard = originalConfiguration.keyboard;
+
+ // Move the non-resizable activity to the new display.
+ mTask.reparent(newDisplay.getDefaultTaskDisplayArea(), true /* onTop */);
+
+ final Configuration newConfiguration = mActivity.getConfiguration();
+ assertEquals(originalTouchscreen, newConfiguration.touchscreen);
+ assertEquals(originalNavigation, newConfiguration.navigation);
+ assertEquals(originalKeyboard, newConfiguration.keyboard);
+ }
+
@Test
public void testFixedScreenBoundsWhenDisplaySizeChanged() {
setUpDisplaySizeWithApp(1000, 2500);