From 952c926acb5f24b9e2854a75668c329680200b35 Mon Sep 17 00:00:00 2001 From: Kriti Dang Date: Wed, 20 Jul 2022 17:03:04 +0200 Subject: [PATCH] Clearing the DPI information, when forced Size is cleared Bug: When forced size is cleared, but not DPI, it can result in wrong DPI information. Bug: 238951067 Test: adb shell dumpsys display (shows correct dpi values) Change-Id: Ie8b0b2009ba141072a91262cacf7293d786238b1 --- .../com/android/server/wm/DisplayContent.java | 17 ++++++++++++++--- .../android/server/wm/WindowManagerService.java | 4 +++- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index 409e0ed3ab610..e57a8722ab59b 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -269,6 +269,8 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp /** For {@link #setForcedScalingMode} to apply flag {@link Display#FLAG_SCALING_DISABLED}. */ static final int FORCE_SCALING_MODE_DISABLED = 1; + static final float INVALID_DPI = 0.0f; + @IntDef(prefix = { "FORCE_SCALING_MODE_" }, value = { FORCE_SCALING_MODE_AUTO, FORCE_SCALING_MODE_DISABLED @@ -2935,7 +2937,15 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp /** If the given width and height equal to initial size, the setting will be cleared. */ void setForcedSize(int width, int height) { - // Can't force size higher than the maximal allowed + setForcedSize(width, height, INVALID_DPI, INVALID_DPI); + } + + /** + * If the given width and height equal to initial size, the setting will be cleared. + * If xPpi or yDpi is equal to {@link #INVALID_DPI}, the values are ignored. + */ + void setForcedSize(int width, int height, float xDPI, float yDPI) { + // Can't force size higher than the maximal allowed if (mMaxUiWidth > 0 && width > mMaxUiWidth) { final float ratio = mMaxUiWidth / (float) width; height = (int) (height * ratio); @@ -2954,8 +2964,9 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp } Slog.i(TAG_WM, "Using new display size: " + width + "x" + height); - updateBaseDisplayMetrics(width, height, mBaseDisplayDensity, mBaseDisplayPhysicalXDpi, - mBaseDisplayPhysicalYDpi); + updateBaseDisplayMetrics(width, height, mBaseDisplayDensity, + xDPI != INVALID_DPI ? xDPI : mBaseDisplayPhysicalXDpi, + yDPI != INVALID_DPI ? yDPI : mBaseDisplayPhysicalYDpi); reconfigureDisplayLocked(); if (!mIsSizeForced) { diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 00e8d8bdaaec7..179358eb8d4a3 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -5780,7 +5780,9 @@ public class WindowManagerService extends IWindowManager.Stub final DisplayContent displayContent = mRoot.getDisplayContent(displayId); if (displayContent != null) { displayContent.setForcedSize(displayContent.mInitialDisplayWidth, - displayContent.mInitialDisplayHeight); + displayContent.mInitialDisplayHeight, + displayContent.mInitialPhysicalXDpi, + displayContent.mInitialPhysicalXDpi); } } } finally {