Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit dce6b41a authored by Naomi Musgrave's avatar Naomi Musgrave Committed by Android (Google) Code Review
Browse files

Merge "[DO NOT MERGE] Revert "PossibleMaximumWindowMetrics reports physical...

Merge "[DO NOT MERGE] Revert "PossibleMaximumWindowMetrics reports physical display insets for each"" into sc-v2-dev
parents 99ab01f4 f1012018
Loading
Loading
Loading
Loading
+19 −16
Original line number Diff line number Diff line
@@ -352,11 +352,25 @@ public final class WindowManagerImpl implements WindowManager {
            throw e.rethrowFromSystemServer();
        }

        Set<WindowMetrics> maxMetrics = new HashSet<>();
        WindowInsets windowInsets;
        int size = possibleDisplayInfos.size();
        DisplayInfo currentDisplayInfo;
        WindowInsets windowInsets = null;
        if (size > 0) {
            currentDisplayInfo = possibleDisplayInfos.get(0);

            final WindowManager.LayoutParams params =  new WindowManager.LayoutParams();
        for (int i = 0; i < possibleDisplayInfos.size(); i++) {
            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<WindowMetrics> 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));
        }
+8 −14
Original line number Diff line number Diff line
@@ -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) {
+1 −8
Original line number Diff line number Diff line
@@ -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;