From f1012018bf07a24dd89cb4ae9f7d48a448470e96 Mon Sep 17 00:00:00 2001 From: Naomi Musgrave Date: Wed, 17 Nov 2021 11:46:44 +0000 Subject: [PATCH] [DO NOT MERGE] Revert "PossibleMaximumWindowMetrics reports physical display insets for each" This reverts commit a77d7425a41f4fe28a27a2b25ceef80d71df8048. Reason for revert: remove from sc-v2 Test: manual Bug: 206649452 Change-Id: I461e6cec8ff2a14a57cf019861da2babd82d0a2a --- core/java/android/view/WindowManagerImpl.java | 35 ++++++++++--------- .../com/android/server/wm/DisplayContent.java | 22 +++++------- .../server/wm/PossibleDisplayInfoMapper.java | 9 +---- 3 files changed, 28 insertions(+), 38 deletions(-) diff --git a/core/java/android/view/WindowManagerImpl.java b/core/java/android/view/WindowManagerImpl.java index 1c915cb016d4e..7631269d9c1c9 100644 --- a/core/java/android/view/WindowManagerImpl.java +++ b/core/java/android/view/WindowManagerImpl.java @@ -352,11 +352,25 @@ public final class WindowManagerImpl implements WindowManager { throw e.rethrowFromSystemServer(); } - Set maxMetrics = new HashSet<>(); - WindowInsets windowInsets; + int size = possibleDisplayInfos.size(); DisplayInfo currentDisplayInfo; - final WindowManager.LayoutParams params = new WindowManager.LayoutParams(); - for (int i = 0; i < possibleDisplayInfos.size(); i++) { + WindowInsets windowInsets = null; + if (size > 0) { + currentDisplayInfo = possibleDisplayInfos.get(0); + + final WindowManager.LayoutParams params = new WindowManager.LayoutParams(); + final boolean isScreenRound = (currentDisplayInfo.flags & Display.FLAG_ROUND) != 0; + // TODO(181127261) not computing insets correctly - need to have underlying + // frame reflect the faked orientation. + windowInsets = getWindowInsetsFromServerForDisplay( + currentDisplayInfo.displayId, params, + new Rect(0, 0, currentDisplayInfo.getNaturalWidth(), + currentDisplayInfo.getNaturalHeight()), isScreenRound, + WINDOWING_MODE_FULLSCREEN); + } + + Set maxMetrics = new HashSet<>(); + for (int i = 0; i < size; i++) { currentDisplayInfo = possibleDisplayInfos.get(i); // Calculate max bounds for this rotation and state. @@ -364,18 +378,7 @@ public final class WindowManagerImpl implements WindowManager { currentDisplayInfo.logicalHeight); // Calculate insets for the rotated max bounds. - final boolean isScreenRound = (currentDisplayInfo.flags & Display.FLAG_ROUND) != 0; - // Initialize insets based upon display rotation. Note any window-provided insets - // will not be set. - windowInsets = getWindowInsetsFromServerForDisplay( - currentDisplayInfo.displayId, params, - new Rect(0, 0, currentDisplayInfo.getNaturalWidth(), - currentDisplayInfo.getNaturalHeight()), isScreenRound, - WINDOWING_MODE_FULLSCREEN); - // Set the hardware-provided insets. - windowInsets = new WindowInsets.Builder(windowInsets).setRoundedCorners( - currentDisplayInfo.roundedCorners) - .setDisplayCutout(currentDisplayInfo.displayCutout).build(); + // TODO(181127261) calculate insets for each display rotation and state. maxMetrics.add(new WindowMetrics(maxBounds, windowInsets)); } diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index c3c8318b45de9..b7c992e073f35 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -591,7 +591,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp /** Caches the value whether told display manager that we have content. */ private boolean mLastHasContent; - private static DisplayRotationUtil sRotationUtil = new DisplayRotationUtil(); + private DisplayRotationUtil mRotationUtil = new DisplayRotationUtil(); /** * The input method window for this display. @@ -2090,35 +2090,29 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp return mDisplayCutoutCache.getOrCompute(mInitialDisplayCutout, rotation); } - static WmDisplayCutout calculateDisplayCutoutForRotationAndDisplaySizeUncached( - DisplayCutout cutout, int rotation, int displayWidth, int displayHeight) { + private WmDisplayCutout calculateDisplayCutoutForRotationUncached( + DisplayCutout cutout, int rotation) { if (cutout == null || cutout == DisplayCutout.NO_CUTOUT) { return WmDisplayCutout.NO_CUTOUT; } if (rotation == ROTATION_0) { return WmDisplayCutout.computeSafeInsets( - cutout, displayWidth, displayHeight); + cutout, mInitialDisplayWidth, mInitialDisplayHeight); } final Insets waterfallInsets = RotationUtils.rotateInsets(cutout.getWaterfallInsets(), rotation); final boolean rotated = (rotation == ROTATION_90 || rotation == ROTATION_270); - final Rect[] newBounds = sRotationUtil.getRotatedBounds( + final Rect[] newBounds = mRotationUtil.getRotatedBounds( cutout.getBoundingRectsAll(), - rotation, displayWidth, displayHeight); + rotation, mInitialDisplayWidth, mInitialDisplayHeight); final CutoutPathParserInfo info = cutout.getCutoutPathParserInfo(); final CutoutPathParserInfo newInfo = new CutoutPathParserInfo( info.getDisplayWidth(), info.getDisplayHeight(), info.getDensity(), info.getCutoutSpec(), rotation, info.getScale()); return WmDisplayCutout.computeSafeInsets( DisplayCutout.constructDisplayCutout(newBounds, waterfallInsets, newInfo), - rotated ? displayHeight : displayWidth, - rotated ? displayWidth : displayHeight); - } - - private WmDisplayCutout calculateDisplayCutoutForRotationUncached( - DisplayCutout cutout, int rotation) { - return calculateDisplayCutoutForRotationAndDisplaySizeUncached(cutout, rotation, - mInitialDisplayWidth, mInitialDisplayHeight); + rotated ? mInitialDisplayHeight : mInitialDisplayWidth, + rotated ? mInitialDisplayWidth : mInitialDisplayHeight); } RoundedCorners calculateRoundedCornersForRotation(int rotation) { diff --git a/services/core/java/com/android/server/wm/PossibleDisplayInfoMapper.java b/services/core/java/com/android/server/wm/PossibleDisplayInfoMapper.java index 11a27c593d9ee..ef8dee401b050 100644 --- a/services/core/java/com/android/server/wm/PossibleDisplayInfoMapper.java +++ b/services/core/java/com/android/server/wm/PossibleDisplayInfoMapper.java @@ -120,15 +120,8 @@ public class PossibleDisplayInfoMapper { @Surface.Rotation int rotation) { DisplayInfo updatedDisplayInfo = new DisplayInfo(); updatedDisplayInfo.copyFrom(displayInfo); - // Apply rotations before updating width and height - updatedDisplayInfo.roundedCorners = updatedDisplayInfo.roundedCorners.rotate(rotation, - updatedDisplayInfo.logicalWidth, updatedDisplayInfo.logicalHeight); - updatedDisplayInfo.displayCutout = - DisplayContent.calculateDisplayCutoutForRotationAndDisplaySizeUncached( - updatedDisplayInfo.displayCutout, rotation, updatedDisplayInfo.logicalWidth, - updatedDisplayInfo.logicalHeight).getDisplayCutout(); - updatedDisplayInfo.rotation = rotation; + final int naturalWidth = updatedDisplayInfo.getNaturalWidth(); final int naturalHeight = updatedDisplayInfo.getNaturalHeight(); updatedDisplayInfo.logicalWidth = naturalWidth;