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

Commit 0e14a857 authored by Alan Viverette's avatar Alan Viverette
Browse files

Revert RelativeLayout's baseline view to API 22 and below behavior

The previous behavior used the top-start-most view, rather than the view
with the bottom-most baseline. Which doesn't really make sense, but
that's what it did.

Bug: 19653790
Change-Id: Ia23476f1d2de5313fd82aac037e90d45b0af8972
parent 3c36b8e9
Loading
Loading
Loading
Loading
+31 −15
Original line number Diff line number Diff line
@@ -515,6 +515,23 @@ public class RelativeLayout extends ViewGroup {
            }
        }

        // Use the top-start-most laid out view as the baseline. RTL offsets are
        // applied later, so we can use the left-most edge as the starting edge.
        View baselineView = null;
        LayoutParams baselineParams = null;
        for (int i = 0; i < count; i++) {
            final View child = getChildAt(i);
            if (child.getVisibility() != GONE) {
                final LayoutParams childParams = (LayoutParams) child.getLayoutParams();
                if (baselineView == null || baselineParams == null
                        || compareLayoutPosition(childParams, baselineParams) < 0) {
                    baselineView = child;
                    baselineParams = childParams;
                }
            }
        }
        mBaselineView = baselineView;

        if (isWrapContentWidth) {
            // Width already has left padding in it since it was calculated by looking at
            // the right of each child view
@@ -616,22 +633,21 @@ public class RelativeLayout extends ViewGroup {
            }
        }

        // Use the bottom-most laid out view as the baseline.
        View baselineView = null;
        int baseline = 0;
        for (int i = 0; i < count; i++) {
            final View child = getChildAt(i);
            if (child.getVisibility() != GONE) {
                final int childBaseline = child.getBaseline();
                if (childBaseline >= baseline) {
                    baselineView = child;
                    baseline = childBaseline;
                }
            }
        setMeasuredDimension(width, height);
    }
        mBaselineView = baselineView;

        setMeasuredDimension(width, height);
    /**
     * @return a negative number if the top of {@code p1} is above the top of
     *         {@code p2} or if they have identical top values and the left of
     *         {@code p1} is to the left of {@code p2}, or a positive number
     *         otherwise
     */
    private int compareLayoutPosition(LayoutParams p1, LayoutParams p2) {
        final int topDiff = p1.mTop - p2.mTop;
        if (topDiff != 0) {
            return topDiff;
        }
        return p1.mLeft - p2.mLeft;
    }

    /**