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

Commit a7045c9d authored by shawnlin's avatar shawnlin Committed by Shawn Lin
Browse files

Fix incorrect width of right most action button in notification

Measure the last action view normally instead of measuring it full width.

Test: enable show layout bounds and check the bounds of it.
Change-Id: I38f234928f7214baf2b532ecae63c3f4514b3247
Fixes: 78032480
parent 8f5b3f19
Loading
Loading
Loading
Loading
+2 −26
Original line number Diff line number Diff line
@@ -77,7 +77,6 @@ public class NotificationActionListLayout extends LinearLayout {
        int otherViews = 0;
        int notGoneChildren = 0;

        View lastNotGoneChild = null;
        for (int i = 0; i < N; i++) {
            View c = getChildAt(i);
            if (c instanceof TextView) {
@@ -87,7 +86,6 @@ public class NotificationActionListLayout extends LinearLayout {
            }
            if (c.getVisibility() != GONE) {
                notGoneChildren++;
                lastNotGoneChild = c;
            }
        }

@@ -107,11 +105,8 @@ public class NotificationActionListLayout extends LinearLayout {
                }
            }
        }
        boolean centerAligned = (mGravity & Gravity.CENTER_HORIZONTAL) != 0;
        boolean singleChildCentered = notGoneChildren == 1 && centerAligned;
        boolean needsRegularMeasurement = notGoneChildren > 1 || singleChildCentered;

        if (needsRegularMeasurement && needRebuild) {
        if (needRebuild) {
            rebuildMeasureOrder(textViews, otherViews);
        }

@@ -123,7 +118,7 @@ public class NotificationActionListLayout extends LinearLayout {
        int usedWidth = 0;

        int measuredChildren = 0;
        for (int i = 0; i < N && needsRegularMeasurement; i++) {
        for (int i = 0; i < N; i++) {
            // Measure shortest children first. To avoid measuring twice, we approximate by looking
            // at the text length.
            View c;
@@ -156,25 +151,6 @@ public class NotificationActionListLayout extends LinearLayout {
            measuredChildren++;
        }

        // Make sure to measure the last child full-width if we didn't use up the entire width,
        // or we didn't measure yet because there's just one child.
        if (lastNotGoneChild != null && !centerAligned && (constrained && usedWidth < innerWidth
                || notGoneChildren == 1)) {
            MarginLayoutParams lp = (MarginLayoutParams) lastNotGoneChild.getLayoutParams();
            if (notGoneChildren > 1) {
                // Need to make room, since we already measured this once.
                usedWidth -= lastNotGoneChild.getMeasuredWidth() + lp.rightMargin + lp.leftMargin;
            }

            int originalWidth = lp.width;
            lp.width = LayoutParams.MATCH_PARENT;
            measureChildWithMargins(lastNotGoneChild, widthMeasureSpec, usedWidth,
                    heightMeasureSpec, 0 /* usedHeight */);
            lp.width = originalWidth;

            usedWidth += lastNotGoneChild.getMeasuredWidth() + lp.rightMargin + lp.leftMargin;
        }

        mTotalWidth = usedWidth + mPaddingRight + mPaddingLeft;
        setMeasuredDimension(resolveSize(getSuggestedMinimumWidth(), widthMeasureSpec),
                resolveSize(getSuggestedMinimumHeight(), heightMeasureSpec));