Index: content/public/android/java/src/org/chromium/content/browser/InputDialogContainer.java |
diff --git a/content/public/android/java/src/org/chromium/content/browser/InputDialogContainer.java b/content/public/android/java/src/org/chromium/content/browser/InputDialogContainer.java |
index 590e87dba2cd7e063743cea8ade060288cbde432..f40d54e682d77bf497b7d05af7cb4fb29ee2a6e5 100644 |
--- a/content/public/android/java/src/org/chromium/content/browser/InputDialogContainer.java |
+++ b/content/public/android/java/src/org/chromium/content/browser/InputDialogContainer.java |
@@ -24,13 +24,15 @@ import org.chromium.content.R; |
import java.text.ParseException; |
import java.text.SimpleDateFormat; |
+import java.util.Calendar; |
import java.util.Date; |
class InputDialogContainer { |
interface InputActionDelegate { |
void cancelDateTimeDialog(); |
- void replaceDateTime(String dateTime); |
+ void replaceDateTime(int dialogType, |
+ int year, int month, int day, int hour, int minute, int second); |
} |
// Default values used in Time representations of selected date/time before formatting. |
@@ -50,13 +52,6 @@ class InputDialogContainer { |
private static final String HTML_DATE_TIME_LOCAL_FORMAT = "%Y-%m-%dT%H:%M"; |
private static final String HTML_MONTH_FORMAT = "%Y-%m"; |
- // Date formats as accepted by SimpleDateFormat. |
- private static final String PARSE_DATE_FORMAT = "yyyy-MM-dd"; |
- private static final String PARSE_TIME_FORMAT = "HH:mm"; |
- private static final String PARSE_DATE_TIME_FORMAT = "yyyy-MM-dd'T'HH:mm'Z'"; |
- private static final String PARSE_DATE_TIME_LOCAL_FORMAT = "yyyy-MM-dd'T'HH:mm"; |
- private static final String PARSE_MONTH_FORMAT = "yyyy-MM"; |
- |
private static int sTextInputTypeDate; |
private static int sTextInputTypeDateTime; |
private static int sTextInputTypeDateTimeLocal; |
@@ -91,24 +86,40 @@ class InputDialogContainer { |
mInputActionDelegate = inputActionDelegate; |
} |
- void showDialog(String text, int textInputType) { |
+ private Time normalizeTime(int year, int month, int monthDay, |
+ int hour, int minute, int second) { |
+ Time result = new Time(); |
+ if (year == 0 && month == 0 && monthDay == 0 && hour == 0 && |
+ minute == 0 && second == 0) { |
+ Calendar cal = Calendar.getInstance(); |
+ result.set(cal.get(Calendar.SECOND), cal.get(Calendar.MINUTE), |
+ cal.get(Calendar.HOUR), cal.get(Calendar.DATE), |
+ cal.get(Calendar.MONTH), cal.get(Calendar.YEAR)); |
+ } else { |
+ result.set(second, minute, hour, monthDay, month, year); |
+ } |
+ return result; |
+ } |
+ |
+ void showDialog(final int dialogType, int year, int month, int monthDay, |
+ int hour, int minute, int second) { |
if (isDialogShowing()) mDialog.dismiss(); |
- Time time = parse(text, textInputType); |
- if (textInputType == sTextInputTypeDate) { |
- mDialog = new DatePickerDialog(mContext, new DateListener(), |
+ Time time = normalizeTime(year, month, monthDay, hour, minute, second); |
+ if (dialogType == sTextInputTypeDate) { |
+ mDialog = new DatePickerDialog(mContext, new DateListener(dialogType), |
time.year, time.month, time.monthDay); |
- } else if (textInputType == sTextInputTypeTime) { |
- mDialog = new TimePickerDialog(mContext, new TimeListener(), |
+ } else if (dialogType == sTextInputTypeTime) { |
+ mDialog = new TimePickerDialog(mContext, new TimeListener(dialogType), |
time.hour, time.minute, DateFormat.is24HourFormat(mContext)); |
- } else if (textInputType == sTextInputTypeDateTime || |
- textInputType == sTextInputTypeDateTimeLocal) { |
+ } else if (dialogType == sTextInputTypeDateTime || |
+ dialogType == sTextInputTypeDateTimeLocal) { |
mDialog = new DateTimePickerDialog(mContext, |
- new DateTimeListener(textInputType == sTextInputTypeDateTimeLocal), |
+ new DateTimeListener(dialogType), |
time.year, time.month, time.monthDay, |
time.hour, time.minute, DateFormat.is24HourFormat(mContext)); |
- } else if (textInputType == sTextInputTypeMonth) { |
- mDialog = new MonthPickerDialog(mContext, new MonthListener(), |
+ } else if (dialogType == sTextInputTypeMonth) { |
+ mDialog = new MonthPickerDialog(mContext, new MonthListener(dialogType), |
time.year, time.month); |
} |
@@ -132,7 +143,7 @@ class InputDialogContainer { |
@Override |
public void onClick(DialogInterface dialog, int which) { |
mDialogAlreadyDismissed = true; |
- mInputActionDelegate.replaceDateTime(""); |
+ mInputActionDelegate.replaceDateTime(dialogType, 0, 0, 0, 0, 0, 0); |
} |
}); |
@@ -148,78 +159,47 @@ class InputDialogContainer { |
if (isDialogShowing()) mDialog.dismiss(); |
} |
- private static SimpleDateFormat getParseDateFormat(int textInputType) { |
- String formatString = null; |
- if (textInputType == sTextInputTypeDate) { |
- formatString = PARSE_DATE_FORMAT; |
- } else if (textInputType == sTextInputTypeTime) { |
- formatString = PARSE_TIME_FORMAT; |
- } else if (textInputType == sTextInputTypeDateTime) { |
- formatString = PARSE_DATE_TIME_FORMAT; |
- } else if (textInputType == sTextInputTypeDateTimeLocal) { |
- formatString = PARSE_DATE_TIME_LOCAL_FORMAT; |
- } else if (textInputType == sTextInputTypeMonth) { |
- formatString = PARSE_MONTH_FORMAT; |
- } |
- |
- if (formatString != null) { |
- return new SimpleDateFormat(formatString); |
- } |
- |
- return null; |
- } |
- |
- /** |
- * Parse the text String as a date or time according to the provided text input type. |
- */ |
- private static Time parse(String text, int textInputType) { |
- Time result = null; |
- if (!TextUtils.isEmpty(text)) { |
- try { |
- SimpleDateFormat format = getParseDateFormat(textInputType); |
- if (format != null) { |
- Date date = format.parse(text); |
- result = new Time(); |
- result.set(date.getTime()); |
- } |
- } catch (ParseException e) { |
- // Leave time as null. |
- } |
- } |
+ private class DateListener implements OnDateSetListener { |
+ private final int mDialogType; |
- if (result == null) { |
- result = new Time(); |
- result.setToNow(); |
+ DateListener(int dialogType) { |
+ mDialogType = dialogType; |
} |
- return result; |
- } |
- |
- private class DateListener implements OnDateSetListener { |
@Override |
public void onDateSet(DatePicker view, int year, int month, int monthDay) { |
if (!mDialogAlreadyDismissed) { |
- setFieldDateTimeValue(year, month, monthDay, HOUR_DEFAULT, MINUTE_DEFAULT, |
+ setFieldDateTimeValue(mDialogType, |
+ year, month, monthDay, HOUR_DEFAULT, MINUTE_DEFAULT, |
HTML_DATE_FORMAT); |
} |
} |
} |
private class TimeListener implements OnTimeSetListener { |
+ private final int mDialogType; |
+ |
+ TimeListener(int dialogType) { |
+ mDialogType = dialogType; |
+ } |
+ |
@Override |
public void onTimeSet(TimePicker view, int hourOfDay, int minute) { |
if (!mDialogAlreadyDismissed) { |
- setFieldDateTimeValue(YEAR_DEFAULT, MONTH_DEFAULT, MONTHDAY_DEFAULT, |
+ setFieldDateTimeValue(mDialogType, |
+ YEAR_DEFAULT, MONTH_DEFAULT, MONTHDAY_DEFAULT, |
hourOfDay, minute, HTML_TIME_FORMAT); |
} |
} |
} |
private class DateTimeListener implements OnDateTimeSetListener { |
- private boolean mLocal; |
+ private final boolean mLocal; |
+ private final int mDialogType; |
- public DateTimeListener(boolean local) { |
- mLocal = local; |
+ public DateTimeListener(int dialogType) { |
+ mLocal = dialogType == sTextInputTypeDateTimeLocal; |
+ mDialogType = dialogType; |
} |
@Override |
@@ -227,34 +207,36 @@ class InputDialogContainer { |
int year, int month, int monthDay, |
int hourOfDay, int minute) { |
if (!mDialogAlreadyDismissed) { |
- setFieldDateTimeValue(year, month, monthDay, hourOfDay, minute, |
+ setFieldDateTimeValue(mDialogType, year, month, monthDay, hourOfDay, minute, |
mLocal ? HTML_DATE_TIME_LOCAL_FORMAT : HTML_DATE_TIME_FORMAT); |
} |
} |
} |
private class MonthListener implements OnMonthSetListener { |
+ private final int mDialogType; |
+ |
+ MonthListener(int dialogType) { |
+ mDialogType = dialogType; |
+ } |
+ |
@Override |
public void onMonthSet(MonthPicker view, int year, int month) { |
if (!mDialogAlreadyDismissed) { |
- setFieldDateTimeValue(year, month, MONTHDAY_DEFAULT, |
+ setFieldDateTimeValue(mDialogType, year, month, MONTHDAY_DEFAULT, |
HOUR_DEFAULT, MINUTE_DEFAULT, HTML_MONTH_FORMAT); |
} |
} |
} |
- private void setFieldDateTimeValue(int year, int month, int monthDay, int hourOfDay, |
+ private void setFieldDateTimeValue(int dialogType, |
+ int year, int month, int monthDay, int hourOfDay, |
int minute, String dateFormat) { |
// Prevents more than one callback being sent to the native |
// side when the dialog triggers multiple events. |
mDialogAlreadyDismissed = true; |
- Time time = new Time(); |
- time.year = year; |
- time.month = month; |
- time.monthDay = monthDay; |
- time.hour = hourOfDay; |
- time.minute = minute; |
- mInputActionDelegate.replaceDateTime(time.format(dateFormat)); |
+ mInputActionDelegate.replaceDateTime(dialogType, |
+ year, month, monthDay, hourOfDay, minute, 0 /* second */); |
} |
} |