| 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..a6260aa3d5c56f0998a89c2836e8a805be8ee5a2 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,32 +5,19 @@
|
| 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;
|
|
|
| -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 +27,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 +45,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 +66,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 +86,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 +96,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);
|
| + 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 +134,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 +144,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();
|
| }
|
| }
|
|
|