From a7045c9d447cd727c58bdd8573d628283d89317a Mon Sep 17 00:00:00 2001 From: shawnlin Date: Fri, 27 Apr 2018 18:23:13 +0800 Subject: [PATCH] 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 --- .../widget/NotificationActionListLayout.java | 28 ++----------------- 1 file changed, 2 insertions(+), 26 deletions(-) diff --git a/core/java/com/android/internal/widget/NotificationActionListLayout.java b/core/java/com/android/internal/widget/NotificationActionListLayout.java index 5729b53e98d7a..9048f87ef512f 100644 --- a/core/java/com/android/internal/widget/NotificationActionListLayout.java +++ b/core/java/com/android/internal/widget/NotificationActionListLayout.java @@ -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));