Apply proper displayCutout rotation in density 480 dpi and 270 degrees rotation.
In case device has 480 dpi and rotating the degrees then shortSizeDp value is less than 480 because of diaplay cutout. So ScreenLayoutSize will not be properly set and there is difference in between expectedScreenLayout and actualScreenLayout. In order to fix this issue, displayCutout should also be rotated while in calculating reduceConfigLayout. Bug: b/147473991 Test: run cts-on-gsi -m CtsDpiTestCases -t android.dpi.cts.ConfigurationScreenLayyoutTest#testScreenLayout Change-Id: Ie3d615e494cb3fd21f4388e969e5e637860b86ac Signed-off-by: Mark Hong <sungmin.h@samsung.com>
This commit is contained in:
@@ -375,7 +375,7 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
|
|||||||
*/
|
*/
|
||||||
final DisplayMetrics mRealDisplayMetrics = new DisplayMetrics();
|
final DisplayMetrics mRealDisplayMetrics = new DisplayMetrics();
|
||||||
|
|
||||||
/** @see #computeCompatSmallestWidth(boolean, int, int, int, DisplayCutout) */
|
/** @see #computeCompatSmallestWidth(boolean, int, int, int) */
|
||||||
private final DisplayMetrics mTmpDisplayMetrics = new DisplayMetrics();
|
private final DisplayMetrics mTmpDisplayMetrics = new DisplayMetrics();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1814,7 +1814,7 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
|
|||||||
|
|
||||||
final boolean rotated = (rotation == ROTATION_90 || rotation == ROTATION_270);
|
final boolean rotated = (rotation == ROTATION_90 || rotation == ROTATION_270);
|
||||||
outConfig.compatSmallestScreenWidthDp = computeCompatSmallestWidth(rotated, uiMode, dw,
|
outConfig.compatSmallestScreenWidthDp = computeCompatSmallestWidth(rotated, uiMode, dw,
|
||||||
dh, displayCutout);
|
dh);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1922,8 +1922,7 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
|
|||||||
mWmService.mPolicy.adjustConfigurationLw(config, keyboardPresence, navigationPresence);
|
mWmService.mPolicy.adjustConfigurationLw(config, keyboardPresence, navigationPresence);
|
||||||
}
|
}
|
||||||
|
|
||||||
private int computeCompatSmallestWidth(boolean rotated, int uiMode, int dw, int dh,
|
private int computeCompatSmallestWidth(boolean rotated, int uiMode, int dw, int dh) {
|
||||||
DisplayCutout displayCutout) {
|
|
||||||
mTmpDisplayMetrics.setTo(mDisplayMetrics);
|
mTmpDisplayMetrics.setTo(mDisplayMetrics);
|
||||||
final DisplayMetrics tmpDm = mTmpDisplayMetrics;
|
final DisplayMetrics tmpDm = mTmpDisplayMetrics;
|
||||||
final int unrotDw, unrotDh;
|
final int unrotDw, unrotDh;
|
||||||
@@ -1934,19 +1933,21 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
|
|||||||
unrotDw = dw;
|
unrotDw = dw;
|
||||||
unrotDh = dh;
|
unrotDh = dh;
|
||||||
}
|
}
|
||||||
int sw = reduceCompatConfigWidthSize(0, Surface.ROTATION_0, uiMode, tmpDm, unrotDw, unrotDh,
|
int sw = reduceCompatConfigWidthSize(0, Surface.ROTATION_0, uiMode, tmpDm, unrotDw,
|
||||||
displayCutout);
|
unrotDh);
|
||||||
sw = reduceCompatConfigWidthSize(sw, Surface.ROTATION_90, uiMode, tmpDm, unrotDh, unrotDw,
|
sw = reduceCompatConfigWidthSize(sw, Surface.ROTATION_90, uiMode, tmpDm, unrotDh,
|
||||||
displayCutout);
|
unrotDw);
|
||||||
sw = reduceCompatConfigWidthSize(sw, Surface.ROTATION_180, uiMode, tmpDm, unrotDw, unrotDh,
|
sw = reduceCompatConfigWidthSize(sw, Surface.ROTATION_180, uiMode, tmpDm, unrotDw,
|
||||||
displayCutout);
|
unrotDh);
|
||||||
sw = reduceCompatConfigWidthSize(sw, Surface.ROTATION_270, uiMode, tmpDm, unrotDh, unrotDw,
|
sw = reduceCompatConfigWidthSize(sw, Surface.ROTATION_270, uiMode, tmpDm, unrotDh,
|
||||||
displayCutout);
|
unrotDw);
|
||||||
return sw;
|
return sw;
|
||||||
}
|
}
|
||||||
|
|
||||||
private int reduceCompatConfigWidthSize(int curSize, int rotation, int uiMode,
|
private int reduceCompatConfigWidthSize(int curSize, int rotation, int uiMode,
|
||||||
DisplayMetrics dm, int dw, int dh, DisplayCutout displayCutout) {
|
DisplayMetrics dm, int dw, int dh) {
|
||||||
|
final DisplayCutout displayCutout = calculateDisplayCutoutForRotation(
|
||||||
|
rotation).getDisplayCutout();
|
||||||
dm.noncompatWidthPixels = mDisplayPolicy.getNonDecorDisplayWidth(dw, dh, rotation, uiMode,
|
dm.noncompatWidthPixels = mDisplayPolicy.getNonDecorDisplayWidth(dw, dh, rotation, uiMode,
|
||||||
displayCutout);
|
displayCutout);
|
||||||
dm.noncompatHeightPixels = mDisplayPolicy.getNonDecorDisplayHeight(dw, dh, rotation, uiMode,
|
dm.noncompatHeightPixels = mDisplayPolicy.getNonDecorDisplayHeight(dw, dh, rotation, uiMode,
|
||||||
@@ -1987,20 +1988,20 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
int sl = Configuration.resetScreenLayout(outConfig.screenLayout);
|
int sl = Configuration.resetScreenLayout(outConfig.screenLayout);
|
||||||
sl = reduceConfigLayout(sl, Surface.ROTATION_0, density, unrotDw, unrotDh, uiMode,
|
sl = reduceConfigLayout(sl, Surface.ROTATION_0, density, unrotDw, unrotDh, uiMode);
|
||||||
displayInfo.displayCutout);
|
sl = reduceConfigLayout(sl, Surface.ROTATION_90, density, unrotDh, unrotDw, uiMode);
|
||||||
sl = reduceConfigLayout(sl, Surface.ROTATION_90, density, unrotDh, unrotDw, uiMode,
|
sl = reduceConfigLayout(sl, Surface.ROTATION_180, density, unrotDw, unrotDh, uiMode);
|
||||||
displayInfo.displayCutout);
|
sl = reduceConfigLayout(sl, Surface.ROTATION_270, density, unrotDh, unrotDw, uiMode);
|
||||||
sl = reduceConfigLayout(sl, Surface.ROTATION_180, density, unrotDw, unrotDh, uiMode,
|
|
||||||
displayInfo.displayCutout);
|
|
||||||
sl = reduceConfigLayout(sl, Surface.ROTATION_270, density, unrotDh, unrotDw, uiMode,
|
|
||||||
displayInfo.displayCutout);
|
|
||||||
outConfig.smallestScreenWidthDp = (int)(displayInfo.smallestNominalAppWidth / density);
|
outConfig.smallestScreenWidthDp = (int)(displayInfo.smallestNominalAppWidth / density);
|
||||||
outConfig.screenLayout = sl;
|
outConfig.screenLayout = sl;
|
||||||
}
|
}
|
||||||
|
|
||||||
private int reduceConfigLayout(int curLayout, int rotation, float density, int dw, int dh,
|
private int reduceConfigLayout(int curLayout, int rotation, float density, int dw, int dh,
|
||||||
int uiMode, DisplayCutout displayCutout) {
|
int uiMode) {
|
||||||
|
// Get the display cutout at this rotation.
|
||||||
|
final DisplayCutout displayCutout = calculateDisplayCutoutForRotation(
|
||||||
|
rotation).getDisplayCutout();
|
||||||
|
|
||||||
// Get the app screen size at this rotation.
|
// Get the app screen size at this rotation.
|
||||||
int w = mDisplayPolicy.getNonDecorDisplayWidth(dw, dh, rotation, uiMode, displayCutout);
|
int w = mDisplayPolicy.getNonDecorDisplayWidth(dw, dh, rotation, uiMode, displayCutout);
|
||||||
int h = mDisplayPolicy.getNonDecorDisplayHeight(dw, dh, rotation, uiMode, displayCutout);
|
int h = mDisplayPolicy.getNonDecorDisplayHeight(dw, dh, rotation, uiMode, displayCutout);
|
||||||
|
|||||||
Reference in New Issue
Block a user