diff options
3 files changed, 34 insertions, 8 deletions
diff --git a/services/core/java/com/android/server/display/LogicalDisplay.java b/services/core/java/com/android/server/display/LogicalDisplay.java index a947b4106794..5f348bfdfdb7 100644 --- a/services/core/java/com/android/server/display/LogicalDisplay.java +++ b/services/core/java/com/android/server/display/LogicalDisplay.java @@ -261,6 +261,7 @@ final class LogicalDisplay { mPrimaryDisplayDeviceInfo = deviceInfo; mInfo = null; + mOverrideDisplayInfo = null; } } diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index c45136ca2472..18bd9b0a00fb 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -919,6 +919,10 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo void updateDisplayInfo() { mDisplay.getDisplayInfo(mDisplayInfo); mDisplay.getMetrics(mDisplayMetrics); + + // Check if display metrics changed and update base values if needed. + updateBaseDisplayMetricsIfNeeded(); + for (int i = mTaskStackContainers.size() - 1; i >= 0; --i) { mTaskStackContainers.get(i).updateDisplayInfo(null); } @@ -934,10 +938,8 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo } } - mBaseDisplayWidth = mInitialDisplayWidth = mDisplayInfo.logicalWidth; - mBaseDisplayHeight = mInitialDisplayHeight = mDisplayInfo.logicalHeight; - mBaseDisplayDensity = mInitialDisplayDensity = mDisplayInfo.logicalDensityDpi; - mBaseDisplayRect.set(0, 0, mBaseDisplayWidth, mBaseDisplayHeight); + updateBaseDisplayMetrics(mDisplayInfo.logicalWidth, mDisplayInfo.logicalHeight, + mDisplayInfo.logicalDensityDpi); } void getLogicalDisplayRect(Rect out) { @@ -967,6 +969,30 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo } } + /** If display metrics changed and it's not just a rotation - update base values. */ + private void updateBaseDisplayMetricsIfNeeded() { + final int orientation = mDisplayInfo.rotation; + final boolean rotated = (orientation == ROTATION_90 || orientation == ROTATION_270); + final int newWidth = rotated ? mDisplayInfo.logicalHeight : mDisplayInfo.logicalWidth; + final int newHeight = rotated ? mDisplayInfo.logicalWidth : mDisplayInfo.logicalHeight; + + boolean displayMetricsChanged + = mBaseDisplayWidth != newWidth || mBaseDisplayHeight != newHeight; + displayMetricsChanged |= mBaseDisplayDensity != mDisplayInfo.logicalDensityDpi; + + if (displayMetricsChanged) { + updateBaseDisplayMetrics(newWidth, newHeight, mDisplayInfo.logicalDensityDpi); + mService.reconfigureDisplayLocked(this); + } + } + + void updateBaseDisplayMetrics(int baseWidth, int baseHeight, int baseDensity) { + mBaseDisplayWidth = mInitialDisplayWidth = baseWidth; + mBaseDisplayHeight = mInitialDisplayHeight = baseHeight; + mBaseDisplayDensity = mInitialDisplayDensity = baseDensity; + mBaseDisplayRect.set(0, 0, mBaseDisplayWidth, mBaseDisplayHeight); + } + void getContentRect(Rect out) { out.set(mContentRect); } diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index be0771ae97b5..266454f7f921 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -5920,8 +5920,8 @@ public class WindowManagerService extends IWindowManager.Stub if (displayContent.mBaseDisplayWidth != width || displayContent.mBaseDisplayHeight != height) { Slog.i(TAG_WM, "FORCED DISPLAY SIZE: " + width + "x" + height); - displayContent.mBaseDisplayWidth = width; - displayContent.mBaseDisplayHeight = height; + displayContent.updateBaseDisplayMetrics(width, height, + displayContent.mBaseDisplayDensity); } } catch (NumberFormatException ex) { } @@ -5946,8 +5946,7 @@ public class WindowManagerService extends IWindowManager.Stub // displayContent must not be null private void setForcedDisplaySizeLocked(DisplayContent displayContent, int width, int height) { Slog.i(TAG_WM, "Using new display size: " + width + "x" + height); - displayContent.mBaseDisplayWidth = width; - displayContent.mBaseDisplayHeight = height; + displayContent.updateBaseDisplayMetrics(width, height, displayContent.mBaseDisplayDensity); reconfigureDisplayLocked(displayContent); } |