diff options
Diffstat (limited to 'core/java')
-rw-r--r-- | core/java/android/app/DatePickerDialog.java | 7 | ||||
-rw-r--r-- | core/java/android/app/TimePickerDialog.java | 8 | ||||
-rw-r--r-- | core/java/android/widget/NumberPicker.java | 53 |
3 files changed, 51 insertions, 17 deletions
diff --git a/core/java/android/app/DatePickerDialog.java b/core/java/android/app/DatePickerDialog.java index 8b70370..bf8fde0 100644 --- a/core/java/android/app/DatePickerDialog.java +++ b/core/java/android/app/DatePickerDialog.java @@ -91,13 +91,14 @@ public class DatePickerDialog extends AlertDialog implements OnClickListener, mCallBack = callBack; - setButton(BUTTON_POSITIVE, context.getText(R.string.date_time_set), this); - setButton(BUTTON_NEGATIVE, context.getText(R.string.cancel), (OnClickListener) null); + Context themeContext = getContext(); + setButton(BUTTON_POSITIVE, themeContext.getText(R.string.date_time_set), this); + setButton(BUTTON_NEGATIVE, themeContext.getText(R.string.cancel), (OnClickListener) null); setIcon(0); setTitle(R.string.date_picker_dialog_title); LayoutInflater inflater = - (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + (LayoutInflater) themeContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); View view = inflater.inflate(R.layout.date_picker_dialog, null); setView(view); mDatePicker = (DatePicker) view.findViewById(R.id.datePicker); diff --git a/core/java/android/app/TimePickerDialog.java b/core/java/android/app/TimePickerDialog.java index a990ee9..353b415 100644 --- a/core/java/android/app/TimePickerDialog.java +++ b/core/java/android/app/TimePickerDialog.java @@ -92,16 +92,16 @@ public class TimePickerDialog extends AlertDialog mInitialMinute = minute; mIs24HourView = is24HourView; - setCanceledOnTouchOutside(false); setIcon(0); setTitle(R.string.time_picker_dialog_title); - setButton(BUTTON_POSITIVE, context.getText(R.string.date_time_set), this); - setButton(BUTTON_NEGATIVE, context.getText(R.string.cancel), + Context themeContext = getContext(); + setButton(BUTTON_POSITIVE, themeContext.getText(R.string.date_time_set), this); + setButton(BUTTON_NEGATIVE, themeContext.getText(R.string.cancel), (OnClickListener) null); LayoutInflater inflater = - (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); + (LayoutInflater) themeContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); View view = inflater.inflate(R.layout.time_picker_dialog, null); setView(view); mTimePicker = (TimePicker) view.findViewById(R.id.timePicker); diff --git a/core/java/android/widget/NumberPicker.java b/core/java/android/widget/NumberPicker.java index 1a1b8d0..d185370 100644 --- a/core/java/android/widget/NumberPicker.java +++ b/core/java/android/widget/NumberPicker.java @@ -165,6 +165,11 @@ public class NumberPicker extends LinearLayout { }; /** + * Constant for unspecified size. + */ + private static final int SIZE_UNSPECIFIED = -1; + + /** * Use a custom NumberPicker formatting callback to use two-digit minutes * strings like "01". Keeping a static formatter etc. is the most efficient * way to do this; it avoids creating temporary objects on every call to @@ -542,16 +547,20 @@ public class NumberPicker extends LinearLayout { getResources().getDisplayMetrics()); mSelectionDividerHeight = attributesArray.getDimensionPixelSize( R.styleable.NumberPicker_selectionDividerHeight, defSelectionDividerHeight); - mMinHeight = attributesArray.getDimensionPixelSize(R.styleable.NumberPicker_minHeight, 0); + mMinHeight = attributesArray.getDimensionPixelSize(R.styleable.NumberPicker_minHeight, + SIZE_UNSPECIFIED); mMaxHeight = attributesArray.getDimensionPixelSize(R.styleable.NumberPicker_maxHeight, - Integer.MAX_VALUE); - if (mMinHeight > mMaxHeight) { + SIZE_UNSPECIFIED); + if (mMinHeight != SIZE_UNSPECIFIED && mMaxHeight != SIZE_UNSPECIFIED + && mMinHeight > mMaxHeight) { throw new IllegalArgumentException("minHeight > maxHeight"); } - mMinWidth = attributesArray.getDimensionPixelSize(R.styleable.NumberPicker_minWidth, 0); + mMinWidth = attributesArray.getDimensionPixelSize(R.styleable.NumberPicker_minWidth, + SIZE_UNSPECIFIED); mMaxWidth = attributesArray.getDimensionPixelSize(R.styleable.NumberPicker_maxWidth, - Integer.MAX_VALUE); - if (mMinWidth > mMaxWidth) { + SIZE_UNSPECIFIED); + if (mMinWidth != SIZE_UNSPECIFIED && mMaxWidth != SIZE_UNSPECIFIED + && mMinWidth > mMaxWidth) { throw new IllegalArgumentException("minWidth > maxWidth"); } mComputeMaxWidth = (mMaxWidth == Integer.MAX_VALUE); @@ -746,10 +755,10 @@ public class NumberPicker extends LinearLayout { 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); + final int widthSize = resolveSizeAndStateRespectingMinSize(mMinWidth, getMeasuredWidth(), + widthMeasureSpec); + final int heightSize = resolveSizeAndStateRespectingMinSize(mMinHeight, getMeasuredHeight(), + heightMeasureSpec); setMeasuredDimension(widthSize, heightSize); } @@ -1243,6 +1252,7 @@ public class NumberPicker extends LinearLayout { } updateInputTextView(); initializeSelectorWheelIndices(); + tryComputeMaxWidth(); } @Override @@ -1368,6 +1378,9 @@ public class NumberPicker extends LinearLayout { * @return A measure spec greedily imposing the max size. */ private int makeMeasureSpec(int measureSpec, int maxSize) { + if (maxSize == SIZE_UNSPECIFIED) { + return measureSpec; + } final int size = MeasureSpec.getSize(measureSpec); final int mode = MeasureSpec.getMode(measureSpec); switch (mode) { @@ -1383,6 +1396,26 @@ public class NumberPicker extends LinearLayout { } /** + * Utility to reconcile a desired size and state, with constraints imposed by + * a MeasureSpec. Tries to respect the min size, unless a different size is + * imposed by the constraints. + * + * @param minSize The minimal desired size. + * @param measuredSize The currently measured size. + * @param measureSpec The current measure spec. + * @return The resolved size and state. + */ + private int resolveSizeAndStateRespectingMinSize(int minSize, int measuredSize, + int measureSpec) { + if (minSize != SIZE_UNSPECIFIED) { + final int desiredWidth = Math.max(minSize, measuredSize); + return resolveSizeAndState(desiredWidth, measureSpec, 0); + } else { + return measuredSize; + } + } + + /** * Resets the selector indices and clear the cached * string representation of these indices. */ |