diff options
author | Svetoslav Ganov <svetoslavganov@google.com> | 2011-11-30 10:25:42 -0800 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2011-11-30 10:25:42 -0800 |
commit | 2f504d9ea8aa18cd8dbaa2dcc3f3959252b414cc (patch) | |
tree | 8c1e3e349802e3351a24315da66dbbd44d6af9d5 | |
parent | db904b4782a4dfc9d81d5d0616dea3656893b539 (diff) | |
parent | 9f086d812ff04703de4b14e02a7702ba7c8acb33 (diff) | |
download | frameworks_base-2f504d9ea8aa18cd8dbaa2dcc3f3959252b414cc.zip frameworks_base-2f504d9ea8aa18cd8dbaa2dcc3f3959252b414cc.tar.gz frameworks_base-2f504d9ea8aa18cd8dbaa2dcc3f3959252b414cc.tar.bz2 |
Merge "NumberPicker incorrectly shown for the old theme." into ics-mr1
-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 | ||||
-rw-r--r-- | core/res/res/layout/date_picker.xml | 3 |
4 files changed, 52 insertions, 19 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. */ diff --git a/core/res/res/layout/date_picker.xml b/core/res/res/layout/date_picker.xml index 6f0517d..9c1def2 100644 --- a/core/res/res/layout/date_picker.xml +++ b/core/res/res/layout/date_picker.xml @@ -32,7 +32,6 @@ <LinearLayout android:id="@+id/pickers" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginRight="22dip" android:layout_weight="1" android:orientation="horizontal" android:gravity="center"> @@ -77,7 +76,7 @@ android:id="@+id/calendar_view" android:layout_width="245dip" android:layout_height="280dip" - android:layout_marginLeft="22dip" + android:layout_marginLeft="44dip" android:layout_weight="1" android:focusable="true" android:focusableInTouchMode="true" |