summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Svetoslav Ganov <svetoslavganov@google.com> 2011-02-24 15:44:59 -0800
committer Svetoslav Ganov <svetoslavganov@google.com> 2011-02-24 15:45:04 -0800
commitef7ec7a029425bfb42be1476261c463c424f70be (patch)
tree9300b087986702bdccb1c1a88da6444475ca459e
parent1175ef7e2e4f68532d8ade672d7f5502d9946ce4 (diff)
Use different version of CLDR data in DatePicker
The ICU CLDR data doesn't use the month abbreviations that are appropriate for the DatePicker, so use the framework copy of the CLDR data. Bug: 2641810 Note: cherry-picked from Honeycomb Change-Id: I3c045dbfb751b8b7ce6361b5a67407206fc64db1
-rw-r--r--core/java/android/widget/DatePicker.java39
1 files changed, 33 insertions, 6 deletions
diff --git a/core/java/android/widget/DatePicker.java b/core/java/android/widget/DatePicker.java
index a3712902b85e..595b4871c9e6 100644
--- a/core/java/android/widget/DatePicker.java
+++ b/core/java/android/widget/DatePicker.java
@@ -22,6 +22,7 @@ import android.content.res.TypedArray;
import android.os.Parcel;
import android.os.Parcelable;
import android.text.format.DateFormat;
+import android.text.format.DateUtils;
import android.util.AttributeSet;
import android.util.SparseArray;
import android.view.LayoutInflater;
@@ -33,6 +34,7 @@ import com.android.internal.R;
import java.text.DateFormatSymbols;
import java.text.SimpleDateFormat;
import java.util.Calendar;
+import java.util.Locale;
/**
* A view for selecting a month / year / day based on a calendar like layout.
@@ -47,7 +49,10 @@ public class DatePicker extends FrameLayout {
private static final int DEFAULT_START_YEAR = 1900;
private static final int DEFAULT_END_YEAR = 2100;
-
+
+ // This ignores Undecimber, but we only support real Gregorian calendars.
+ private static final int NUMBER_OF_MONTHS = 12;
+
/* UI Components */
private final NumberPicker mDayPicker;
private final NumberPicker mMonthPicker;
@@ -62,6 +67,10 @@ public class DatePicker extends FrameLayout {
private int mMonth;
private int mYear;
+ private Object mMonthUpdateLock = new Object();
+ private volatile Locale mMonthLocale;
+ private String[] mShortMonths;
+
/**
* The callback used to indicate the user changes the date.
*/
@@ -102,8 +111,7 @@ public class DatePicker extends FrameLayout {
});
mMonthPicker = (NumberPicker) findViewById(R.id.month);
mMonthPicker.setFormatter(NumberPicker.TWO_DIGIT_FORMATTER);
- DateFormatSymbols dfs = new DateFormatSymbols();
- String[] months = dfs.getShortMonths();
+ final String[] months = getShortMonths();
/*
* If the user is in a locale where the month names are numeric,
@@ -114,9 +122,9 @@ public class DatePicker extends FrameLayout {
for (int i = 0; i < months.length; i++) {
months[i] = String.valueOf(i + 1);
}
- mMonthPicker.setRange(1, 12);
+ mMonthPicker.setRange(1, NUMBER_OF_MONTHS);
} else {
- mMonthPicker.setRange(1, 12, months);
+ mMonthPicker.setRange(1, NUMBER_OF_MONTHS, months);
}
mMonthPicker.setSpeed(200);
@@ -246,11 +254,30 @@ public class DatePicker extends FrameLayout {
mMonth = monthOfYear;
mDay = dayOfMonth;
updateSpinners();
- reorderPickers(new DateFormatSymbols().getShortMonths());
+ reorderPickers(getShortMonths());
notifyDateChanged();
}
}
+ private String[] getShortMonths() {
+ final Locale currentLocale = Locale.getDefault();
+ if (currentLocale.equals(mMonthLocale) && mShortMonths != null) {
+ return mShortMonths;
+ } else {
+ synchronized (mMonthUpdateLock) {
+ if (!currentLocale.equals(mMonthLocale)) {
+ mShortMonths = new String[NUMBER_OF_MONTHS];
+ for (int i = 0; i < NUMBER_OF_MONTHS; i++) {
+ mShortMonths[i] = DateUtils.getMonthString(Calendar.JANUARY + i,
+ DateUtils.LENGTH_MEDIUM);
+ }
+ mMonthLocale = currentLocale;
+ }
+ }
+ return mShortMonths;
+ }
+ }
+
private static class SavedState extends BaseSavedState {
private final int mYear;