Merge "Clean up date picker"

This commit is contained in:
Alan Viverette
2015-03-23 21:36:07 +00:00
committed by Android (Google) Code Review
2 changed files with 32 additions and 77 deletions

View File

@@ -348,9 +348,13 @@ public class DatePicker extends FrameLayout {
}
/**
* Gets whether the {@link CalendarView} is shown.
* Returns whether the {@link CalendarView} is shown.
* <p>
* <strong>Note:</strong> This method returns {@code false} when the
* {@link android.R.styleable#DatePicker_datePickerMode} attribute is set
* to {@code calendar}.
*
* @return True if the calendar view is shown.
* @return {@code true} if the calendar view is shown
* @see #getCalendarView()
*/
public boolean getCalendarViewShown() {
@@ -358,13 +362,13 @@ public class DatePicker extends FrameLayout {
}
/**
* Gets the {@link CalendarView}.
* Returns the {@link CalendarView} used by this picker.
* <p>
* This method returns {@code null} when the
* <strong>Note:</strong> This method returns {@code null} when the
* {@link android.R.styleable#DatePicker_datePickerMode} attribute is set
* to {@code calendar}.
*
* @return The calendar view.
* @return the calendar view
* @see #getCalendarViewShown()
*/
public CalendarView getCalendarView() {
@@ -374,20 +378,25 @@ public class DatePicker extends FrameLayout {
/**
* Sets whether the {@link CalendarView} is shown.
* <p>
* Calling this method has no effect when the
* <strong>Note:</strong> Calling this method has no effect when the
* {@link android.R.styleable#DatePicker_datePickerMode} attribute is set
* to {@code calendar}.
*
* @param shown True if the calendar view is to be shown.
* @param shown {@code true} to show the calendar view, {@code false} to
* hide it
*/
public void setCalendarViewShown(boolean shown) {
mDelegate.setCalendarViewShown(shown);
}
/**
* Gets whether the spinners are shown.
* Returns whether the spinners are shown.
* <p>
* T<strong>Note:</strong> his method returns {@code false} when the
* {@link android.R.styleable#DatePicker_datePickerMode} attribute is set
* to {@code calendar}.
*
* @return True if the spinners are shown.
* @return {@code true} if the spinners are shown
*/
public boolean getSpinnersShown() {
return mDelegate.getSpinnersShown();
@@ -395,8 +404,13 @@ public class DatePicker extends FrameLayout {
/**
* Sets whether the spinners are shown.
* <p>
* Calling this method has no effect when the
* {@link android.R.styleable#DatePicker_datePickerMode} attribute is set
* to {@code calendar}.
*
* @param shown True if the spinners are to be shown.
* @param shown {@code true} to show the spinners, {@code false} to hide
* them
*/
public void setSpinnersShown(boolean shown) {
mDelegate.setSpinnersShown(shown);

View File

@@ -61,10 +61,6 @@ class DatePickerCalendarDelegate extends DatePicker.AbstractDatePickerDelegate {
private static final int ANIMATION_DURATION = 300;
private static final int MONTH_INDEX = 0;
private static final int DAY_INDEX = 1;
private static final int YEAR_INDEX = 2;
public static final int[] ATTRS_TEXT_COLOR = new int[]{com.android.internal.R.attr.textColor};
public static final int[] ATTRS_DISABLED_ALPHA = new int[]{
@@ -93,10 +89,10 @@ class DatePickerCalendarDelegate extends DatePicker.AbstractDatePickerDelegate {
private int mCurrentView = UNINITIALIZED;
private Calendar mCurrentDate;
private Calendar mTempDate;
private Calendar mMinDate;
private Calendar mMaxDate;
private final Calendar mCurrentDate;
private final Calendar mTempDate;
private final Calendar mMinDate;
private final Calendar mMaxDate;
private int mFirstDayOfWeek = USE_LOCALE;
@@ -105,10 +101,10 @@ class DatePickerCalendarDelegate extends DatePicker.AbstractDatePickerDelegate {
super(delegator, context);
final Locale locale = mCurrentLocale;
mMinDate = getCalendarForLocale(mMinDate, locale);
mMaxDate = getCalendarForLocale(mMaxDate, locale);
mTempDate = getCalendarForLocale(mMaxDate, locale);
mCurrentDate = getCalendarForLocale(mCurrentDate, locale);
mCurrentDate = Calendar.getInstance(locale);
mTempDate = Calendar.getInstance(locale);
mMinDate = Calendar.getInstance(locale);
mMaxDate = Calendar.getInstance(locale);
mMinDate.set(DEFAULT_START_YEAR, Calendar.JANUARY, 1);
mMaxDate.set(DEFAULT_END_YEAR, Calendar.DECEMBER, 31);
@@ -315,61 +311,6 @@ class DatePickerCalendarDelegate extends DatePicker.AbstractDatePickerDelegate {
}
};
/**
* Gets a calendar for locale bootstrapped with the value of a given calendar.
*
* @param oldCalendar The old calendar.
* @param locale The locale.
*/
private Calendar getCalendarForLocale(Calendar oldCalendar, Locale locale) {
if (oldCalendar == null) {
return Calendar.getInstance(locale);
} else {
final long currentTimeMillis = oldCalendar.getTimeInMillis();
Calendar newCalendar = Calendar.getInstance(locale);
newCalendar.setTimeInMillis(currentTimeMillis);
return newCalendar;
}
}
/**
* Compute the array representing the order of Month / Day / Year views in their layout.
* Will be used for I18N purpose as the order of them depends on the Locale.
*/
private int[] getMonthDayYearIndexes(String pattern) {
int[] result = new int[3];
final String filteredPattern = pattern.replaceAll("'.*?'", "");
final int dayIndex = filteredPattern.indexOf('d');
final int monthMIndex = filteredPattern.indexOf("M");
final int monthIndex = (monthMIndex != -1) ? monthMIndex : filteredPattern.indexOf("L");
final int yearIndex = filteredPattern.indexOf("y");
if (yearIndex < monthIndex) {
result[YEAR_INDEX] = 0;
if (monthIndex < dayIndex) {
result[MONTH_INDEX] = 1;
result[DAY_INDEX] = 2;
} else {
result[MONTH_INDEX] = 2;
result[DAY_INDEX] = 1;
}
} else {
result[YEAR_INDEX] = 2;
if (monthIndex < dayIndex) {
result[MONTH_INDEX] = 0;
result[DAY_INDEX] = 1;
} else {
result[MONTH_INDEX] = 1;
result[DAY_INDEX] = 0;
}
}
return result;
}
@Override
protected void onLocaleChanged(Locale locale) {
final TextView headerYear = mHeaderYear;