Compute size range before setting DisplayInfoOverride
The original logic didn't adjust the size range within the DisplayInfo before setting it to DisplayManager, which caused apps would get the previous size ranges which might be incorrect. Bug: 132678244 Test: atest DisplaySizeTest Change-Id: Iaf08ae8a16d4d95516d9c8ae316b6efcd7240751
This commit is contained in:
@@ -1480,7 +1480,7 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
|
||||
// the top of the method, the caller is obligated to call computeNewConfigurationLocked().
|
||||
// By updating the Display info here it will be available to
|
||||
// #computeScreenConfiguration() later.
|
||||
updateDisplayAndOrientation(getConfiguration().uiMode);
|
||||
updateDisplayAndOrientation(getConfiguration().uiMode, null /* outConfig */);
|
||||
|
||||
// NOTE: We disable the rotation in the emulator because
|
||||
// it doesn't support hardware OpenGL emulation yet.
|
||||
@@ -1578,7 +1578,7 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
|
||||
* changed.
|
||||
* Do not call if {@link WindowManagerService#mDisplayReady} == false.
|
||||
*/
|
||||
private DisplayInfo updateDisplayAndOrientation(int uiMode) {
|
||||
private DisplayInfo updateDisplayAndOrientation(int uiMode, Configuration outConfig) {
|
||||
// Use the effective "visual" dimensions based on current rotation
|
||||
final boolean rotated = (mRotation == ROTATION_90 || mRotation == ROTATION_270);
|
||||
final int dw = rotated ? mBaseDisplayHeight : mBaseDisplayWidth;
|
||||
@@ -1610,6 +1610,9 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
|
||||
mDisplayInfo.flags &= ~Display.FLAG_SCALING_DISABLED;
|
||||
}
|
||||
|
||||
computeSizeRangesAndScreenLayout(mDisplayInfo, rotated, uiMode, dw, dh,
|
||||
mDisplayMetrics.density, outConfig);
|
||||
|
||||
// We usually set the override info in DisplayManager so that we get consistent display
|
||||
// metrics values when displays are changing and don't send out new values until WM is aware
|
||||
// of them. However, we don't do this for displays that serve as containers for ActivityView
|
||||
@@ -1658,7 +1661,7 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
|
||||
* Do not call if mDisplayReady == false.
|
||||
*/
|
||||
void computeScreenConfiguration(Configuration config) {
|
||||
final DisplayInfo displayInfo = updateDisplayAndOrientation(config.uiMode);
|
||||
final DisplayInfo displayInfo = updateDisplayAndOrientation(config.uiMode, config);
|
||||
calculateBounds(displayInfo, mTmpBounds);
|
||||
config.windowConfiguration.setBounds(mTmpBounds);
|
||||
|
||||
@@ -1688,9 +1691,6 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
|
||||
final boolean rotated = (displayInfo.rotation == Surface.ROTATION_90
|
||||
|| displayInfo.rotation == Surface.ROTATION_270);
|
||||
|
||||
computeSizeRangesAndScreenLayout(displayInfo, rotated, config.uiMode, dw, dh, density,
|
||||
config);
|
||||
|
||||
config.screenLayout = (config.screenLayout & ~Configuration.SCREENLAYOUT_ROUND_MASK)
|
||||
| ((displayInfo.flags & Display.FLAG_ROUND) != 0
|
||||
? Configuration.SCREENLAYOUT_ROUND_YES
|
||||
@@ -1844,6 +1844,10 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
|
||||
adjustDisplaySizeRanges(displayInfo, Surface.ROTATION_90, uiMode, unrotDh, unrotDw);
|
||||
adjustDisplaySizeRanges(displayInfo, Surface.ROTATION_180, uiMode, unrotDw, unrotDh);
|
||||
adjustDisplaySizeRanges(displayInfo, Surface.ROTATION_270, uiMode, unrotDh, unrotDw);
|
||||
|
||||
if (outConfig == null) {
|
||||
return;
|
||||
}
|
||||
int sl = Configuration.resetScreenLayout(outConfig.screenLayout);
|
||||
sl = reduceConfigLayout(sl, Surface.ROTATION_0, density, unrotDw, unrotDh, uiMode,
|
||||
displayInfo.displayCutout);
|
||||
|
||||
Reference in New Issue
Block a user