Merge "Update xdpi/ydio according to config_maxUIWidth" into tm-dev am: c5a4e1ab7c
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/17376723 Change-Id: I7a08200988083f700f1843a85c2dd679d50cac77 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -227,6 +227,8 @@ final class LogicalDisplay {
|
||||
info.largestNominalAppHeight = mOverrideDisplayInfo.largestNominalAppHeight;
|
||||
info.logicalWidth = mOverrideDisplayInfo.logicalWidth;
|
||||
info.logicalHeight = mOverrideDisplayInfo.logicalHeight;
|
||||
info.physicalXDpi = mOverrideDisplayInfo.physicalXDpi;
|
||||
info.physicalYDpi = mOverrideDisplayInfo.physicalYDpi;
|
||||
info.rotation = mOverrideDisplayInfo.rotation;
|
||||
info.displayCutout = mOverrideDisplayInfo.displayCutout;
|
||||
info.logicalDensityDpi = mOverrideDisplayInfo.logicalDensityDpi;
|
||||
|
||||
@@ -355,6 +355,8 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
|
||||
int mInitialDisplayWidth = 0;
|
||||
int mInitialDisplayHeight = 0;
|
||||
int mInitialDisplayDensity = 0;
|
||||
float mInitialPhysicalXDpi = 0.0f;
|
||||
float mInitialPhysicalYDpi = 0.0f;
|
||||
|
||||
DisplayCutout mInitialDisplayCutout;
|
||||
private final RotationCache<DisplayCutout, WmDisplayCutout> mDisplayCutoutCache
|
||||
@@ -394,6 +396,12 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
|
||||
int mBaseDisplayDensity = 0;
|
||||
boolean mIsDensityForced = false;
|
||||
|
||||
/**
|
||||
* Overridden display physical dpi.
|
||||
*/
|
||||
float mBaseDisplayPhysicalXDpi = 0.0f;
|
||||
float mBaseDisplayPhysicalYDpi = 0.0f;
|
||||
|
||||
/**
|
||||
* Whether to disable display scaling. This can be set via shell command "adb shell wm scaling".
|
||||
* @see WindowManagerService#setForcedDisplayScalingMode(int, int)
|
||||
@@ -427,7 +435,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
|
||||
|
||||
/**
|
||||
* Compat metrics computed based on {@link #mDisplayMetrics}.
|
||||
* @see #updateDisplayAndOrientation(int)
|
||||
* @see #updateDisplayAndOrientation(int, Configuration)
|
||||
*/
|
||||
private final DisplayMetrics mCompatDisplayMetrics = new DisplayMetrics();
|
||||
|
||||
@@ -2035,6 +2043,8 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
|
||||
mDisplayInfo.logicalWidth = dw;
|
||||
mDisplayInfo.logicalHeight = dh;
|
||||
mDisplayInfo.logicalDensityDpi = mBaseDisplayDensity;
|
||||
mDisplayInfo.physicalXDpi = mBaseDisplayPhysicalXDpi;
|
||||
mDisplayInfo.physicalYDpi = mBaseDisplayPhysicalYDpi;
|
||||
mDisplayInfo.appWidth = appWidth;
|
||||
mDisplayInfo.appHeight = appHeight;
|
||||
if (isDefaultDisplay) {
|
||||
@@ -2697,10 +2707,13 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
|
||||
}
|
||||
|
||||
updateBaseDisplayMetrics(mDisplayInfo.logicalWidth, mDisplayInfo.logicalHeight,
|
||||
mDisplayInfo.logicalDensityDpi);
|
||||
mDisplayInfo.logicalDensityDpi, mDisplayInfo.physicalXDpi,
|
||||
mDisplayInfo.physicalYDpi);
|
||||
mInitialDisplayWidth = mDisplayInfo.logicalWidth;
|
||||
mInitialDisplayHeight = mDisplayInfo.logicalHeight;
|
||||
mInitialDisplayDensity = mDisplayInfo.logicalDensityDpi;
|
||||
mInitialPhysicalXDpi = mDisplayInfo.physicalXDpi;
|
||||
mInitialPhysicalYDpi = mDisplayInfo.physicalYDpi;
|
||||
mInitialDisplayCutout = mDisplayInfo.displayCutout;
|
||||
mInitialRoundedCorners = mDisplayInfo.roundedCorners;
|
||||
mCurrentPrivacyIndicatorBounds = new PrivacyIndicatorBounds(new Rect[4],
|
||||
@@ -2719,6 +2732,8 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
|
||||
final int newWidth = rotated ? mDisplayInfo.logicalHeight : mDisplayInfo.logicalWidth;
|
||||
final int newHeight = rotated ? mDisplayInfo.logicalWidth : mDisplayInfo.logicalHeight;
|
||||
final int newDensity = mDisplayInfo.logicalDensityDpi;
|
||||
final float newXDpi = mDisplayInfo.physicalXDpi;
|
||||
final float newYDpi = mDisplayInfo.physicalYDpi;
|
||||
final DisplayCutout newCutout = mIgnoreDisplayCutout
|
||||
? DisplayCutout.NO_CUTOUT : mDisplayInfo.displayCutout;
|
||||
final String newUniqueId = mDisplayInfo.uniqueId;
|
||||
@@ -2726,7 +2741,9 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
|
||||
|
||||
final boolean displayMetricsChanged = mInitialDisplayWidth != newWidth
|
||||
|| mInitialDisplayHeight != newHeight
|
||||
|| mInitialDisplayDensity != mDisplayInfo.logicalDensityDpi
|
||||
|| mInitialDisplayDensity != newDensity
|
||||
|| mInitialPhysicalXDpi != newXDpi
|
||||
|| mInitialPhysicalYDpi != newYDpi
|
||||
|| !Objects.equals(mInitialDisplayCutout, newCutout)
|
||||
|| !Objects.equals(mInitialRoundedCorners, newRoundedCorners);
|
||||
final boolean physicalDisplayChanged = !newUniqueId.equals(mCurrentUniqueDisplayId);
|
||||
@@ -2743,7 +2760,9 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
|
||||
// If there is an override set for base values - use it, otherwise use new values.
|
||||
updateBaseDisplayMetrics(mIsSizeForced ? mBaseDisplayWidth : newWidth,
|
||||
mIsSizeForced ? mBaseDisplayHeight : newHeight,
|
||||
mIsDensityForced ? mBaseDisplayDensity : newDensity);
|
||||
mIsDensityForced ? mBaseDisplayDensity : newDensity,
|
||||
mIsSizeForced ? mBaseDisplayPhysicalXDpi : newXDpi,
|
||||
mIsSizeForced ? mBaseDisplayPhysicalYDpi : newYDpi);
|
||||
|
||||
configureDisplayPolicy();
|
||||
|
||||
@@ -2758,6 +2777,8 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
|
||||
mInitialDisplayWidth = newWidth;
|
||||
mInitialDisplayHeight = newHeight;
|
||||
mInitialDisplayDensity = newDensity;
|
||||
mInitialPhysicalXDpi = newXDpi;
|
||||
mInitialPhysicalYDpi = newYDpi;
|
||||
mInitialDisplayCutout = newCutout;
|
||||
mInitialRoundedCorners = newRoundedCorners;
|
||||
mCurrentUniqueDisplayId = newUniqueId;
|
||||
@@ -2774,19 +2795,25 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
|
||||
mMaxUiWidth = width;
|
||||
|
||||
// Update existing metrics.
|
||||
updateBaseDisplayMetrics(mBaseDisplayWidth, mBaseDisplayHeight, mBaseDisplayDensity);
|
||||
updateBaseDisplayMetrics(mBaseDisplayWidth, mBaseDisplayHeight, mBaseDisplayDensity,
|
||||
mBaseDisplayPhysicalXDpi, mBaseDisplayPhysicalYDpi);
|
||||
}
|
||||
|
||||
/** Update base (override) display metrics. */
|
||||
void updateBaseDisplayMetrics(int baseWidth, int baseHeight, int baseDensity) {
|
||||
void updateBaseDisplayMetrics(int baseWidth, int baseHeight, int baseDensity, float baseXDpi,
|
||||
float baseYDpi) {
|
||||
mBaseDisplayWidth = baseWidth;
|
||||
mBaseDisplayHeight = baseHeight;
|
||||
mBaseDisplayDensity = baseDensity;
|
||||
mBaseDisplayPhysicalXDpi = baseXDpi;
|
||||
mBaseDisplayPhysicalYDpi = baseYDpi;
|
||||
|
||||
if (mMaxUiWidth > 0 && mBaseDisplayWidth > mMaxUiWidth) {
|
||||
final float ratio = mMaxUiWidth / (float) mBaseDisplayWidth;
|
||||
mBaseDisplayHeight = (int) (mBaseDisplayHeight * ratio);
|
||||
mBaseDisplayWidth = mMaxUiWidth;
|
||||
mBaseDisplayPhysicalXDpi = mBaseDisplayPhysicalXDpi * ratio;
|
||||
mBaseDisplayPhysicalYDpi = mBaseDisplayPhysicalYDpi * ratio;
|
||||
if (!mIsDensityForced) {
|
||||
// Update the density proportionally so the size of the UI elements won't change
|
||||
// from the user's perspective.
|
||||
@@ -2860,7 +2887,8 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
|
||||
}
|
||||
|
||||
Slog.i(TAG_WM, "Using new display size: " + width + "x" + height);
|
||||
updateBaseDisplayMetrics(width, height, mBaseDisplayDensity);
|
||||
updateBaseDisplayMetrics(width, height, mBaseDisplayDensity, mBaseDisplayPhysicalXDpi,
|
||||
mBaseDisplayPhysicalYDpi);
|
||||
reconfigureDisplayLocked();
|
||||
|
||||
if (!mIsSizeForced) {
|
||||
|
||||
@@ -277,7 +277,8 @@ class DisplayWindowSettings {
|
||||
final int height = hasSizeOverride ? settings.mForcedHeight : dc.mInitialDisplayHeight;
|
||||
final int density = hasDensityOverride ? settings.mForcedDensity
|
||||
: dc.mInitialDisplayDensity;
|
||||
dc.updateBaseDisplayMetrics(width, height, density);
|
||||
dc.updateBaseDisplayMetrics(width, height, density, dc.mBaseDisplayPhysicalXDpi,
|
||||
dc.mBaseDisplayPhysicalYDpi);
|
||||
|
||||
final int forcedScalingMode = settings.mForcedScalingMode != null
|
||||
? settings.mForcedScalingMode : FORCE_SCALING_MODE_AUTO;
|
||||
|
||||
@@ -5691,7 +5691,9 @@ public class WindowManagerService extends IWindowManager.Stub
|
||||
|| displayContent.mBaseDisplayHeight != height) {
|
||||
ProtoLog.i(WM_ERROR, "FORCED DISPLAY SIZE: %dx%d", width, height);
|
||||
displayContent.updateBaseDisplayMetrics(width, height,
|
||||
displayContent.mBaseDisplayDensity);
|
||||
displayContent.mBaseDisplayDensity,
|
||||
displayContent.mBaseDisplayPhysicalXDpi,
|
||||
displayContent.mBaseDisplayPhysicalYDpi);
|
||||
changed = true;
|
||||
}
|
||||
} catch (NumberFormatException ex) {
|
||||
|
||||
@@ -682,31 +682,43 @@ public class DisplayContentTests extends WindowTestsBase {
|
||||
final int baseWidth = 1440;
|
||||
final int baseHeight = 2560;
|
||||
final int baseDensity = 300;
|
||||
final float baseXDpi = 60;
|
||||
final float baseYDpi = 60;
|
||||
|
||||
displayContent.updateBaseDisplayMetrics(baseWidth, baseHeight, baseDensity);
|
||||
displayContent.updateBaseDisplayMetrics(baseWidth, baseHeight, baseDensity, baseYDpi,
|
||||
baseYDpi);
|
||||
|
||||
final int maxWidth = 300;
|
||||
final int resultingHeight = (maxWidth * baseHeight) / baseWidth;
|
||||
final int resultingDensity = (baseDensity * maxWidth) / baseWidth;
|
||||
final float ratioChange = maxWidth / (float) baseWidth;
|
||||
final int resultingHeight = (int) (baseHeight * ratioChange);
|
||||
final int resultingDensity = (int) (baseDensity * ratioChange);
|
||||
final float resultingXDpi = baseXDpi * ratioChange;
|
||||
final float resultingYDpi = baseYDpi * ratioChange;
|
||||
|
||||
displayContent.setMaxUiWidth(maxWidth);
|
||||
verifySizes(displayContent, maxWidth, resultingHeight, resultingDensity);
|
||||
verifySizes(displayContent, maxWidth, resultingHeight, resultingDensity, resultingXDpi,
|
||||
resultingYDpi);
|
||||
|
||||
// Assert setting values again does not change;
|
||||
displayContent.updateBaseDisplayMetrics(baseWidth, baseHeight, baseDensity);
|
||||
verifySizes(displayContent, maxWidth, resultingHeight, resultingDensity);
|
||||
displayContent.updateBaseDisplayMetrics(baseWidth, baseHeight, baseDensity, baseXDpi,
|
||||
baseYDpi);
|
||||
verifySizes(displayContent, maxWidth, resultingHeight, resultingDensity, resultingXDpi,
|
||||
resultingYDpi);
|
||||
|
||||
final int smallerWidth = 200;
|
||||
final int smallerHeight = 400;
|
||||
final int smallerDensity = 100;
|
||||
|
||||
// Specify smaller dimension, verify that it is honored
|
||||
displayContent.updateBaseDisplayMetrics(smallerWidth, smallerHeight, smallerDensity);
|
||||
verifySizes(displayContent, smallerWidth, smallerHeight, smallerDensity);
|
||||
displayContent.updateBaseDisplayMetrics(smallerWidth, smallerHeight, smallerDensity,
|
||||
baseXDpi, baseYDpi);
|
||||
verifySizes(displayContent, smallerWidth, smallerHeight, smallerDensity, baseXDpi,
|
||||
baseYDpi);
|
||||
|
||||
// Verify that setting the max width to a greater value than the base width has no effect
|
||||
displayContent.setMaxUiWidth(maxWidth);
|
||||
verifySizes(displayContent, smallerWidth, smallerHeight, smallerDensity);
|
||||
verifySizes(displayContent, smallerWidth, smallerHeight, smallerDensity, baseXDpi,
|
||||
baseYDpi);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -716,11 +728,14 @@ public class DisplayContentTests extends WindowTestsBase {
|
||||
final int baseWidth = 1280;
|
||||
final int baseHeight = 720;
|
||||
final int baseDensity = 320;
|
||||
final float baseXDpi = 60;
|
||||
final float baseYDpi = 60;
|
||||
|
||||
displayContent.mInitialDisplayWidth = baseWidth;
|
||||
displayContent.mInitialDisplayHeight = baseHeight;
|
||||
displayContent.mInitialDisplayDensity = baseDensity;
|
||||
displayContent.updateBaseDisplayMetrics(baseWidth, baseHeight, baseDensity);
|
||||
displayContent.updateBaseDisplayMetrics(baseWidth, baseHeight, baseDensity, baseXDpi,
|
||||
baseYDpi);
|
||||
|
||||
final int forcedWidth = 1920;
|
||||
final int forcedHeight = 1080;
|
||||
@@ -741,11 +756,14 @@ public class DisplayContentTests extends WindowTestsBase {
|
||||
final int baseWidth = 1280;
|
||||
final int baseHeight = 720;
|
||||
final int baseDensity = 320;
|
||||
final float baseXDpi = 60;
|
||||
final float baseYDpi = 60;
|
||||
|
||||
displayContent.mInitialDisplayWidth = baseWidth;
|
||||
displayContent.mInitialDisplayHeight = baseHeight;
|
||||
displayContent.mInitialDisplayDensity = baseDensity;
|
||||
displayContent.updateBaseDisplayMetrics(baseWidth, baseHeight, baseDensity);
|
||||
displayContent.updateBaseDisplayMetrics(baseWidth, baseHeight, baseDensity, baseXDpi,
|
||||
baseYDpi);
|
||||
|
||||
displayContent.setMaxUiWidth(baseWidth);
|
||||
|
||||
@@ -767,11 +785,14 @@ public class DisplayContentTests extends WindowTestsBase {
|
||||
final int baseWidth = 1280;
|
||||
final int baseHeight = 720;
|
||||
final int baseDensity = 320;
|
||||
final float baseXDpi = 60;
|
||||
final float baseYDpi = 60;
|
||||
|
||||
displayContent.mInitialDisplayWidth = baseWidth;
|
||||
displayContent.mInitialDisplayHeight = baseHeight;
|
||||
displayContent.mInitialDisplayDensity = baseDensity;
|
||||
displayContent.updateBaseDisplayMetrics(baseWidth, baseHeight, baseDensity);
|
||||
displayContent.updateBaseDisplayMetrics(baseWidth, baseHeight, baseDensity, baseXDpi,
|
||||
baseYDpi);
|
||||
|
||||
final int forcedDensity = 600;
|
||||
|
||||
@@ -2513,6 +2534,16 @@ public class DisplayContentTests extends WindowTestsBase {
|
||||
assertEquals(expectedBaseDensity, displayContent.mBaseDisplayDensity);
|
||||
}
|
||||
|
||||
private static void verifySizes(DisplayContent displayContent, int expectedBaseWidth,
|
||||
int expectedBaseHeight, int expectedBaseDensity, float expectedBaseXDpi,
|
||||
float expectedBaseYDpi) {
|
||||
assertEquals(expectedBaseWidth, displayContent.mBaseDisplayWidth);
|
||||
assertEquals(expectedBaseHeight, displayContent.mBaseDisplayHeight);
|
||||
assertEquals(expectedBaseDensity, displayContent.mBaseDisplayDensity);
|
||||
assertEquals(expectedBaseXDpi, displayContent.mBaseDisplayPhysicalXDpi, 1.0f /* delta */);
|
||||
assertEquals(expectedBaseYDpi, displayContent.mBaseDisplayPhysicalYDpi, 1.0f /* delta */);
|
||||
}
|
||||
|
||||
private void updateFocusedWindow() {
|
||||
mWm.updateFocusedWindowLocked(UPDATE_FOCUS_NORMAL, false /* updateInputWindows */);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user