Chromium Code Reviews| Index: content/public/android/java/src/org/chromium/content/browser/input/MonthPicker.java |
| diff --git a/content/public/android/java/src/org/chromium/content/browser/input/MonthPicker.java b/content/public/android/java/src/org/chromium/content/browser/input/MonthPicker.java |
| index b668c3fc71e6eb6c7aa266273dac11cce61eae98..2752f5dd98deb4a870043578eb8b99ac9df4877c 100644 |
| --- a/content/public/android/java/src/org/chromium/content/browser/input/MonthPicker.java |
| +++ b/content/public/android/java/src/org/chromium/content/browser/input/MonthPicker.java |
| @@ -5,11 +5,7 @@ |
| package org.chromium.content.browser.input; |
| import android.content.Context; |
| -import android.content.res.Configuration; |
| -import android.text.format.DateUtils; |
| import android.view.LayoutInflater; |
| -import android.view.accessibility.AccessibilityEvent; |
| -import android.widget.FrameLayout; |
| import android.widget.NumberPicker; |
| import android.widget.NumberPicker.OnValueChangeListener; |
| @@ -17,20 +13,12 @@ import java.text.DateFormatSymbols; |
| import java.util.Arrays; |
| import java.util.Calendar; |
| import java.util.Locale; |
| -import java.util.TimeZone; |
| import org.chromium.content.R; |
| -public class MonthPicker extends FrameLayout { |
| +public class MonthPicker extends TwoFieldDatePicker { |
| private static final int MONTHS_NUMBER = 12; |
| - private final NumberPicker mMonthSpinner; |
| - |
| - private final NumberPicker mYearSpinner; |
| - |
| - |
| - private OnMonthChangedListener mMonthChangedListener; |
| - |
| private String[] mShortMonths; |
| // It'd be nice to use android.text.Time like in other Dialogs but |
| @@ -40,26 +28,8 @@ public class MonthPicker extends FrameLayout { |
| private Calendar mMaxDate; |
| - private Calendar mCurrentDate; |
| - |
| - /** |
| - * The callback used to indicate the user changes\d the date. |
| - */ |
| - public interface OnMonthChangedListener { |
| - |
| - /** |
| - * Called upon a date change. |
| - * |
| - * @param view The view associated with this listener. |
| - * @param year The year that was set. |
| - * @param month The month that was set (0-11) for compatibility |
| - * with {@link java.util.Calendar}. |
| - */ |
| - void onMonthChanged(MonthPicker view, int year, int month); |
| - } |
| - |
| public MonthPicker(Context context, long minMonth, long maxMonth) { |
| - super(context, null, android.R.attr.datePickerStyle); |
| + super(context); |
| // initialization based on locale |
| mShortMonths = |
| @@ -76,7 +46,7 @@ public class MonthPicker extends FrameLayout { |
| int year = mCurrentDate.get(Calendar.YEAR); |
| // take care of wrapping of days and months to update greater fields |
| - if (picker == mMonthSpinner) { |
| + if (picker == mPositionInYearSpinner) { |
| month = newVal; |
| if (oldVal == (MONTHS_NUMBER - 1) && newVal == 0) { |
| year += 1; |
| @@ -97,12 +67,12 @@ public class MonthPicker extends FrameLayout { |
| }; |
| // month |
| - mMonthSpinner = (NumberPicker) findViewById(R.id.month); |
| - mMonthSpinner.setMinValue(0); |
| - mMonthSpinner.setMaxValue(MONTHS_NUMBER - 1); |
| - mMonthSpinner.setDisplayedValues(mShortMonths); |
| - mMonthSpinner.setOnLongPressUpdateInterval(200); |
| - mMonthSpinner.setOnValueChangedListener(onChangeListener); |
| + mPositionInYearSpinner = (NumberPicker) findViewById(R.id.month); |
| + mPositionInYearSpinner.setMinValue(0); |
| + mPositionInYearSpinner.setMaxValue(MONTHS_NUMBER - 1); |
| + mPositionInYearSpinner.setDisplayedValues(mShortMonths); |
| + mPositionInYearSpinner.setOnLongPressUpdateInterval(200); |
| + mPositionInYearSpinner.setOnValueChangedListener(onChangeListener); |
| // year |
| mYearSpinner = (NumberPicker) findViewById(R.id.year); |
| @@ -117,20 +87,6 @@ public class MonthPicker extends FrameLayout { |
| init(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), null); |
| } |
| - private void setCurrentDate(int year, int month) { |
| - if (mCurrentDate == null) { |
| - mCurrentDate = Calendar.getInstance(); |
| - } |
| - mCurrentDate.clear(); |
| - mCurrentDate.set(year, month, 1); |
| - if (mCurrentDate.getTimeInMillis() < mMinDate.getTimeInMillis()) { |
| - mCurrentDate = (Calendar) mMinDate.clone(); |
| - } else if (mCurrentDate.getTimeInMillis() > mMaxDate.getTimeInMillis()) { |
| - mCurrentDate = (Calendar) mMaxDate.clone(); |
| - } |
| - updateSpinners(); |
| - } |
| - |
| private static Calendar monthsToCalendar(long months) { |
| int year = (int)Math.min(months / 12 + 1970, Integer.MAX_VALUE); |
| int month = (int) (months % 12); |
| @@ -141,66 +97,36 @@ public class MonthPicker extends FrameLayout { |
| } |
| @Override |
| - public boolean dispatchPopulateAccessibilityEvent(AccessibilityEvent event) { |
| - onPopulateAccessibilityEvent(event); |
| - return true; |
| - } |
| - |
| - @Override |
| - public void onPopulateAccessibilityEvent(AccessibilityEvent event) { |
| - super.onPopulateAccessibilityEvent(event); |
| - |
| - final int flags = DateUtils.FORMAT_SHOW_DATE | DateUtils.FORMAT_SHOW_YEAR; |
| - String selectedDateUtterance = DateUtils.formatDateTime(getContext(), |
| - mCurrentDate.getTimeInMillis(), flags); |
| - event.getText().add(selectedDateUtterance); |
| + protected void setCurrentDate(int year, int month) { |
| + mCurrentDate.set(year, month, 1); |
| + if (mCurrentDate.before(mMinDate)) { |
| + mCurrentDate.setTimeInMillis(mMinDate.getTimeInMillis()); |
| + } else if (mCurrentDate.after(mMaxDate)) { |
| + mCurrentDate.setTimeInMillis(mMaxDate.getTimeInMillis()); |
| + } |
| } |
| @Override |
| - protected void onConfigurationChanged(Configuration newConfig) { |
| - super.onConfigurationChanged(newConfig); |
| - } |
| - |
| - /** |
| - * Initialize the state. If the provided values designate an inconsistent |
| - * date the values are normalized before updating the spinners. |
| - * |
| - * @param year The initial year. |
| - * @param month The initial month <strong>starting from zero</strong>. |
| - * @param onMonthChangedListener How user is notified date is changed by |
| - * user, can be null. |
| - */ |
| - public void init(int year, int month, OnMonthChangedListener onMonthChangedListener) { |
| - setCurrentDate(year, month); |
| - updateSpinners(); |
| - mMonthChangedListener = onMonthChangedListener; |
| - } |
| - |
| - private boolean isNewDate(int year, int month) { |
| - return (mCurrentDate.get(Calendar.YEAR) != year |
| - || mCurrentDate.get(Calendar.MONTH) != month); |
| - } |
| - |
| - private void updateSpinners() { |
| + protected void updateSpinners() { |
| // set the spinner ranges respecting the min and max dates |
| - mMonthSpinner.setDisplayedValues(null); |
| - mMonthSpinner.setMinValue(0); |
| - mMonthSpinner.setMaxValue(MONTHS_NUMBER - 1); |
| + mPositionInYearSpinner.setDisplayedValues(null); |
|
Miguel Garcia
2013/06/11 13:02:52
This logic is exactly the same for month and week
keishi
2013/06/12 13:23:07
Done.
|
| + mPositionInYearSpinner.setMinValue(0); |
| + mPositionInYearSpinner.setMaxValue(MONTHS_NUMBER - 1); |
| if (mCurrentDate.get(Calendar.YEAR) == mMinDate.get(Calendar.YEAR)) { |
| - mMonthSpinner.setMinValue(mMinDate.get(Calendar.MONTH)); |
| - mMonthSpinner.setWrapSelectorWheel(false); |
| + mPositionInYearSpinner.setMinValue(mMinDate.get(Calendar.MONTH)); |
| + mPositionInYearSpinner.setWrapSelectorWheel(false); |
| } else if (mCurrentDate.get(Calendar.YEAR) == mMaxDate.get(Calendar.YEAR)) { |
| - mMonthSpinner.setMaxValue(mMaxDate.get(Calendar.MONTH)); |
| - mMonthSpinner.setWrapSelectorWheel(false); |
| + mPositionInYearSpinner.setMaxValue(mMaxDate.get(Calendar.MONTH)); |
| + mPositionInYearSpinner.setWrapSelectorWheel(false); |
| } else { |
| - mMonthSpinner.setWrapSelectorWheel(true); |
| + mPositionInYearSpinner.setWrapSelectorWheel(true); |
| } |
| // make sure the month names are a zero based array |
| // with the months in the month spinner |
| String[] displayedValues = Arrays.copyOfRange(mShortMonths, |
| - mMonthSpinner.getMinValue(), mMonthSpinner.getMaxValue() + 1); |
| - mMonthSpinner.setDisplayedValues(displayedValues); |
| + mPositionInYearSpinner.getMinValue(), mPositionInYearSpinner.getMaxValue() + 1); |
| + mPositionInYearSpinner.setDisplayedValues(displayedValues); |
| // year spinner range does not change based on the current date |
| mYearSpinner.setMinValue(mMinDate.get(Calendar.YEAR)); |
| @@ -209,14 +135,7 @@ public class MonthPicker extends FrameLayout { |
| // set the spinner values |
| mYearSpinner.setValue(mCurrentDate.get(Calendar.YEAR)); |
| - mMonthSpinner.setValue(mCurrentDate.get(Calendar.MONTH)); |
| - } |
| - |
| - /** |
| - * @return The selected year. |
| - */ |
| - public int getYear() { |
| - return mCurrentDate.get(Calendar.YEAR); |
| + mPositionInYearSpinner.setValue(mCurrentDate.get(Calendar.MONTH)); |
| } |
| /** |
| @@ -226,13 +145,8 @@ public class MonthPicker extends FrameLayout { |
| return mCurrentDate.get(Calendar.MONTH); |
| } |
| - /** |
| - * Notifies the listener, if such, for a change in the selected date. |
| - */ |
| - private void notifyDateChanged() { |
| - sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_SELECTED); |
| - if (mMonthChangedListener != null) { |
| - mMonthChangedListener.onMonthChanged(this, getYear(), getMonth()); |
| - } |
| + @Override |
| + public int getMonthOrWeek() { |
| + return getMonth(); |
| } |
| } |