From 6322af54cfb74be22386e4b7d17350cebf2da58f Mon Sep 17 00:00:00 2001 From: Adam Powell Date: Wed, 8 Aug 2012 15:59:12 -0700 Subject: [PATCH] Fix indeterminate ProgressBars with weird sizes and padding; optimize ActionBar measurement Fix a bug where preserved aspect ratios in ProgressBar indeterminate drawables were causing drawable bounds to be calculated incorrectly when the ProgressBar had padding specified. Measure the ActionBar menu view's height with EXACT measure mode, preventing an extra measure pass to match child heights for some cases. Change-Id: I8c4678662a015b57ba2686d5b5c5fc27d4ef8d36 --- core/java/android/widget/ProgressBar.java | 10 +++++++--- .../com/android/internal/widget/ActionBarView.java | 7 +++---- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/core/java/android/widget/ProgressBar.java b/core/java/android/widget/ProgressBar.java index a28e9ff26f826..860e583b01195 100644 --- a/core/java/android/widget/ProgressBar.java +++ b/core/java/android/widget/ProgressBar.java @@ -985,9 +985,13 @@ public class ProgressBar extends View { } private void updateDrawableBounds(int w, int h) { - // onDraw will translate the canvas so we draw starting at 0,0 - int right = w - mPaddingRight - mPaddingLeft; - int bottom = h - mPaddingBottom - mPaddingTop; + // onDraw will translate the canvas so we draw starting at 0,0. + // Subtract out padding for the purposes of the calculations below. + w -= mPaddingRight + mPaddingLeft; + h -= mPaddingTop + mPaddingBottom; + + int right = w; + int bottom = h; int top = 0; int left = 0; diff --git a/core/java/com/android/internal/widget/ActionBarView.java b/core/java/com/android/internal/widget/ActionBarView.java index d6d2cf61eaaad..2108d0d07fa78 100644 --- a/core/java/com/android/internal/widget/ActionBarView.java +++ b/core/java/com/android/internal/widget/ActionBarView.java @@ -856,6 +856,7 @@ public class ActionBarView extends AbsActionBarView { final int paddingRight = getPaddingRight(); final int height = maxHeight - verticalPadding; final int childSpecHeight = MeasureSpec.makeMeasureSpec(height, MeasureSpec.AT_MOST); + final int exactHeightSpec = MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY); int availableWidth = contentWidth - paddingLeft - paddingRight; int leftOfCenter = availableWidth / 2; @@ -871,16 +872,14 @@ public class ActionBarView extends AbsActionBarView { } else { homeWidthSpec = MeasureSpec.makeMeasureSpec(lp.width, MeasureSpec.EXACTLY); } - homeLayout.measure(homeWidthSpec, - MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY)); + homeLayout.measure(homeWidthSpec, exactHeightSpec); final int homeWidth = homeLayout.getMeasuredWidth() + homeLayout.getStartOffset(); availableWidth = Math.max(0, availableWidth - homeWidth); leftOfCenter = Math.max(0, availableWidth - homeWidth); } if (mMenuView != null && mMenuView.getParent() == this) { - availableWidth = measureChildView(mMenuView, availableWidth, - childSpecHeight, 0); + availableWidth = measureChildView(mMenuView, availableWidth, exactHeightSpec, 0); rightOfCenter = Math.max(0, rightOfCenter - mMenuView.getMeasuredWidth()); }