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

Commit cc03abe1 authored by Svetoslav Ganov's avatar Svetoslav Ganov Committed by Android Git Automerger
Browse files

am 1bef480b: Merge "NumberPicker incorectly enforcing minimal width and height." into ics-mr1

* commit '1bef480b':
  NumberPicker incorectly enforcing minimal width and height.
parents 79c4ad17 1bef480b
Loading
Loading
Loading
Loading
+13 −10
Original line number Diff line number Diff line
@@ -741,9 +741,16 @@ public class NumberPicker extends LinearLayout {

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        final int newWidthMeasureSpec = makeMeasureSpec(widthMeasureSpec, mMinWidth, mMaxWidth);
        final int newHeightMeasureSpec = makeMeasureSpec(heightMeasureSpec, mMinHeight, mMaxHeight);
        // Try greedily to fit the max width and height.
        final int newWidthMeasureSpec = makeMeasureSpec(widthMeasureSpec, mMaxWidth);
        final int newHeightMeasureSpec = makeMeasureSpec(heightMeasureSpec, mMaxHeight);
        super.onMeasure(newWidthMeasureSpec, newHeightMeasureSpec);
        // Flag if we are measured with width or height less than the respective min.
        final int desiredWidth = Math.max(mMinWidth, getMeasuredWidth());
        final int desiredHeight = Math.max(mMinHeight, getMeasuredHeight());
        final int widthSize = resolveSizeAndState(desiredWidth, newWidthMeasureSpec, 0);
        final int heightSize = resolveSizeAndState(desiredHeight, newHeightMeasureSpec, 0);
        setMeasuredDimension(widthSize, heightSize);
    }

    @Override
@@ -1357,23 +1364,19 @@ public class NumberPicker extends LinearLayout {
     * Makes a measure spec that tries greedily to use the max value.
     *
     * @param measureSpec The measure spec.
     * @param maxValue The max value for the size.
     * @param maxSize The max value for the size.
     * @return A measure spec greedily imposing the max size.
     */
    private int makeMeasureSpec(int measureSpec, int minValue, int maxValue) {
    private int makeMeasureSpec(int measureSpec, int maxSize) {
        final int size = MeasureSpec.getSize(measureSpec);
        if (size < minValue) {
            throw new IllegalArgumentException("Available space is less than min size: "
                    +  size + " < " + minValue);
        }
        final int mode = MeasureSpec.getMode(measureSpec);
        switch (mode) {
            case MeasureSpec.EXACTLY:
                return measureSpec;
            case MeasureSpec.AT_MOST:
                return MeasureSpec.makeMeasureSpec(Math.min(size, maxValue), MeasureSpec.EXACTLY);
                return MeasureSpec.makeMeasureSpec(Math.min(size, maxSize), MeasureSpec.EXACTLY);
            case MeasureSpec.UNSPECIFIED:
                return MeasureSpec.makeMeasureSpec(maxValue, MeasureSpec.EXACTLY);
                return MeasureSpec.makeMeasureSpec(maxSize, MeasureSpec.EXACTLY);
            default:
                throw new IllegalArgumentException("Unknown measure mode: " + mode);
        }