// Copyright 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.content.browser.input;
import android.content.Context;
import org.chromium.content.R;
import java.text.DateFormatSymbols;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Locale;
import java.util.TimeZone;
public class MonthPicker extends TwoFieldDatePicker {
private static final int MONTHS_NUMBER = 12;
private final String[] mShortMonths;
public MonthPicker(Context context, double minValue, double maxValue) {
super(context, minValue, maxValue);
getPositionInYearSpinner().setContentDescription(
getResources().getString(R.string.accessibility_date_picker_month));
// initialization based on locale
mShortMonths =
DateFormatSymbols.getInstance(Locale.getDefault()).getShortMonths();
// initialize to current date
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
init(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), null);
}
/**
* Creates a date object from the |value| which is months since epoch.
*/
public static Calendar createDateFromValue(double value) {
int year = (int) Math.min(value / 12 + 1970, Integer.MAX_VALUE);
int month = (int) (value % 12);
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
cal.clear();
cal.set(year, month, 1);
return cal;
}
@Override
protected Calendar getDateForValue(double value) {
return MonthPicker.createDateFromValue(value);
}
@Override
protected void setCurrentDate(int year, int month) {
Calendar date = Calendar.getInstance(TimeZone.getTimeZone("UTC"));
date.set(year, month, 1);
if (date.before(getMinDate())) {
setCurrentDate(getMinDate());
} else if (date.after(getMaxDate())) {
setCurrentDate(getMaxDate());
} else {
setCurrentDate(date);
}
}
@Override
protected void updateSpinners() {
super.updateSpinners();
// make sure the month names are a zero based array
// with the months in the month spinner
String[] displayedValues = Arrays.copyOfRange(mShortMonths,
getPositionInYearSpinner().getMinValue(),
getPositionInYearSpinner().getMaxValue() + 1);
getPositionInYearSpinner().setDisplayedValues(displayedValues);
}
/**
* @return The selected month.
*/
public int getMonth() {
return getCurrentDate().get(Calendar.MONTH);
}
@Override
public int getPositionInYear() {
return getMonth();
}
@Override
protected int getMaxYear() {
return getMaxDate().get(Calendar.YEAR);
}
@Override
protected int getMinYear() {
return getMinDate().get(Calendar.YEAR);
}
@Override
protected int getMaxPositionInYear(int year) {
if (year == getMaxDate().get(Calendar.YEAR)) {
return getMaxDate().get(Calendar.MONTH);
}
return MONTHS_NUMBER - 1;
}
@Override
protected int getMinPositionInYear(int year) {
if (year == getMinDate().get(Calendar.YEAR)) {
return getMinDate().get(Calendar.MONTH);
}
return 0;
}
}