Index: ui/android/java/src/org/chromium/ui/picker/TwoFieldDatePicker.java |
diff --git a/ui/android/java/src/org/chromium/ui/picker/TwoFieldDatePicker.java b/ui/android/java/src/org/chromium/ui/picker/TwoFieldDatePicker.java |
index 85d285023d76b92a333a18f4a9d0677c22eeb8a1..5c4e8a7d88395472d14e81214460ac708e157b4d 100644 |
--- a/ui/android/java/src/org/chromium/ui/picker/TwoFieldDatePicker.java |
+++ b/ui/android/java/src/org/chromium/ui/picker/TwoFieldDatePicker.java |
@@ -4,6 +4,7 @@ |
package org.chromium.ui.picker; |
+import android.annotation.TargetApi; |
import android.content.Context; |
import android.os.Build; |
import android.text.format.DateFormat; |
@@ -112,12 +113,7 @@ public abstract class TwoFieldDatePicker extends FrameLayout { |
mYearSpinner.setOnLongPressUpdateInterval(100); |
mYearSpinner.setOnValueChangedListener(onChangeListener); |
- // TODO(tobiasjs): reorderSpinners causes a crash on Android versions before JB MR2 because |
- // it calls DateFormat.getBestDateTimePattern() which isn't available before then. Fix this |
- // crash and call reorderSpinners on all devices. http://crbug.com/463719 |
- if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) { |
- reorderSpinners(); |
- } |
+ reorderSpinners(); |
} |
/** |
@@ -125,35 +121,53 @@ public abstract class TwoFieldDatePicker extends FrameLayout { |
* Assumes that the order of month and year in the locale is also the right order |
* for the spinner columns. |
*/ |
+ @TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR2) |
private void reorderSpinners() { |
- // logic duplicated from android.widget.DatePicker |
+ boolean posInserted = false; |
+ boolean yearInserted = false; |
+ |
LinearLayout pickers = (LinearLayout) findViewById(R.id.pickers); |
+ |
pickers.removeView(mPositionInYearSpinner); |
pickers.removeView(mYearSpinner); |
- String pattern = DateFormat.getBestDateTimePattern(Locale.getDefault(), "yyyyMMMdd"); |
- |
- boolean pos_inserted = false; |
- boolean year_inserted = false; |
- |
- for (int i = 0; i < pattern.length(); ++i) { |
- char ch = pattern.charAt(i); |
- if (ch == '\'') { |
- i = pattern.indexOf('\'', i + 1); |
- if (i == -1) { |
- throw new IllegalArgumentException("Bad quoting in " + pattern); |
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) { |
+ // logic duplicated from android.widget.DatePicker |
+ String pattern = DateFormat.getBestDateTimePattern(Locale.getDefault(), "yyyyMMMdd"); |
+ |
+ for (int i = 0; i < pattern.length(); ++i) { |
+ char ch = pattern.charAt(i); |
+ if (ch == '\'') { |
+ i = pattern.indexOf('\'', i + 1); |
+ if (i == -1) { |
+ throw new IllegalArgumentException("Bad quoting in " + pattern); |
+ } |
+ } else if ((ch == 'M' || ch == 'L') && !posInserted) { |
+ pickers.addView(mPositionInYearSpinner); |
+ posInserted = true; |
+ } else if (ch == 'y' && !yearInserted) { |
+ pickers.addView(mYearSpinner); |
+ yearInserted = true; |
+ } |
+ } |
+ } else { |
+ // This method was used to order android.widget.DatePicker |
+ // fields in JB prior to the availability of |
+ // getBestDateTimePattern. |
+ char[] order = DateFormat.getDateFormatOrder(getContext()); |
+ for (int i = 0; i < order.length; ++i) { |
+ if (order[i] == 'M') { |
+ pickers.addView(mPositionInYearSpinner); |
+ posInserted = true; |
+ } else if (order[i] == 'y') { |
+ pickers.addView(mYearSpinner); |
+ yearInserted = true; |
} |
- } else if ((ch == 'M' || ch == 'L') && !pos_inserted) { |
- pickers.addView(mPositionInYearSpinner); |
- pos_inserted = true; |
- } else if (ch == 'y' && !year_inserted) { |
- pickers.addView(mYearSpinner); |
- year_inserted = true; |
} |
} |
- if (!pos_inserted) pickers.addView(mPositionInYearSpinner); |
- if (!year_inserted) pickers.addView(mYearSpinner); |
+ if (!posInserted) pickers.addView(mPositionInYearSpinner); |
+ if (!yearInserted) pickers.addView(mYearSpinner); |
} |
/** |