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

Commit b7476795 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Respect PopupWindow.setOverlapAnchor when above anchor"

parents 3dfe492a 07084924
Loading
Loading
Loading
Loading
+20 −5
Original line number Diff line number Diff line
@@ -1620,17 +1620,32 @@ public class PopupWindow {
            int anchorHeight, int drawingLocationY, int screenLocationY, int displayFrameTop,
            int displayFrameBottom, boolean allowResize) {
        final int winOffsetY = screenLocationY - drawingLocationY;
        final int anchorTopInScreen = outParams.y + winOffsetY;
        final int spaceBelow = displayFrameBottom - anchorTopInScreen;
        if (anchorTopInScreen >= 0 && height <= spaceBelow) {
        final int popupScreenTop = outParams.y + winOffsetY;
        final int spaceBelow = displayFrameBottom - popupScreenTop;
        if (popupScreenTop >= 0 && height <= spaceBelow) {
            return true;
        }

        final int spaceAbove = anchorTopInScreen - anchorHeight - displayFrameTop;
        final int popupScreenBottom;
        if (mOverlapAnchor) {
            // popupScreenTop equals the anchor's top at this point.
            // When shown above the anchor, an overlapping popup's bottom should be aligned with
            // the anchor's bottom.
            popupScreenBottom = popupScreenTop + anchorHeight;
        } else {
            // popupScreenTop equals the anchor's bottom at this point.
            // When shown above the anchor, a non-overlapping popup's bottom is aligned with
            // the anchor's top.
            popupScreenBottom = popupScreenTop - anchorHeight;
        }
        final int spaceAbove = popupScreenBottom - displayFrameTop;
        if (height <= spaceAbove) {
            // Move everything up.
            if (mOverlapAnchor) {
                yOffset += anchorHeight;
                // Add one anchorHeight to compensate for the correction made at the start of
                // findDropDownPosition, and another to account for being aligned to the anchor's
                // bottom, not top.
                yOffset += anchorHeight * 2;
            }
            outParams.y = drawingLocationY - height + yOffset;