| Index: content/public/android/java/src/org/chromium/content/browser/input/InputDialogContainer.java
|
| diff --git a/content/public/android/java/src/org/chromium/content/browser/input/InputDialogContainer.java b/content/public/android/java/src/org/chromium/content/browser/input/InputDialogContainer.java
|
| index 11189c5ac8fff0fe37807e8fef8ed3fd549e438b..c7e10d93910f123d6060a635ac08efe93979e58d 100644
|
| --- a/content/public/android/java/src/org/chromium/content/browser/input/InputDialogContainer.java
|
| +++ b/content/public/android/java/src/org/chromium/content/browser/input/InputDialogContainer.java
|
| @@ -20,6 +20,7 @@ import android.widget.TimePicker;
|
|
|
| import org.chromium.content.browser.input.DateTimePickerDialog.OnDateTimeSetListener;
|
| import org.chromium.content.browser.input.MonthPickerDialog.OnMonthSetListener;
|
| +import org.chromium.content.browser.input.WeekPickerDialog.OnWeekSetListener;
|
| import org.chromium.content.R;
|
|
|
| import java.text.ParseException;
|
| @@ -32,7 +33,8 @@ public class InputDialogContainer {
|
| interface InputActionDelegate {
|
| void cancelDateTimeDialog();
|
| void replaceDateTime(int dialogType,
|
| - int year, int month, int day, int hour, int minute, int second);
|
| + int year, int month, int day, int hour, int minute, int second,
|
| + int weekYear, int week);
|
| }
|
|
|
| // Default values used in Time representations of selected date/time before formatting.
|
| @@ -42,6 +44,8 @@ public class InputDialogContainer {
|
| private static final int MONTHDAY_DEFAULT = 1;
|
| private static final int HOUR_DEFAULT = 0;
|
| private static final int MINUTE_DEFAULT = 0;
|
| + private static final int WEEKYEAR_DEFAULT = 0;
|
| + private static final int WEEK_DEFAULT = 0;
|
|
|
| // Date formats as accepted by Time.format.
|
| private static final String HTML_DATE_FORMAT = "%Y-%m-%d";
|
| @@ -51,12 +55,14 @@ public class InputDialogContainer {
|
| private static final String HTML_DATE_TIME_FORMAT = "%Y-%m-%dT%H:%MZ";
|
| private static final String HTML_DATE_TIME_LOCAL_FORMAT = "%Y-%m-%dT%H:%M";
|
| private static final String HTML_MONTH_FORMAT = "%Y-%m";
|
| + private static final String HTML_WEEK_FORMAT = "%Y-%w";
|
|
|
| private static int sTextInputTypeDate;
|
| private static int sTextInputTypeDateTime;
|
| private static int sTextInputTypeDateTimeLocal;
|
| private static int sTextInputTypeMonth;
|
| private static int sTextInputTypeTime;
|
| + private static int sTextInputTypeWeek;
|
|
|
| private Context mContext;
|
|
|
| @@ -66,19 +72,22 @@ public class InputDialogContainer {
|
| private AlertDialog mDialog;
|
| private InputActionDelegate mInputActionDelegate;
|
|
|
| - static void initializeInputTypes(int textInputTypeDate, int textInputTypeDateTime,
|
| - int textInputTypeDateTimeLocal, int textInputTypeMonth, int textInputTypeTime) {
|
| + static void initializeInputTypes(int textInputTypeDate,
|
| + int textInputTypeDateTime, int textInputTypeDateTimeLocal,
|
| + int textInputTypeMonth, int textInputTypeTime,
|
| + int textInputTypeWeek) {
|
| sTextInputTypeDate = textInputTypeDate;
|
| sTextInputTypeDateTime = textInputTypeDateTime;
|
| sTextInputTypeDateTimeLocal = textInputTypeDateTimeLocal;
|
| sTextInputTypeMonth = textInputTypeMonth;
|
| sTextInputTypeTime = textInputTypeTime;
|
| + sTextInputTypeWeek = textInputTypeWeek;
|
| }
|
|
|
| static boolean isDialogInputType(int type) {
|
| return type == sTextInputTypeDate || type == sTextInputTypeTime
|
| || type == sTextInputTypeDateTime || type == sTextInputTypeDateTimeLocal
|
| - || type == sTextInputTypeMonth;
|
| + || type == sTextInputTypeMonth || type == sTextInputTypeWeek;
|
| }
|
|
|
| InputDialogContainer(Context context, InputActionDelegate inputActionDelegate) {
|
| @@ -102,26 +111,36 @@ public class InputDialogContainer {
|
| }
|
|
|
| void showDialog(final int dialogType, int year, int month, int monthDay,
|
| - int hour, int minute, int second) {
|
| + int hour, int minute, int second, int weekYear, int week) {
|
| if (isDialogShowing()) mDialog.dismiss();
|
|
|
| - 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);
|
| - mDialog.setTitle(mContext.getText(R.string.date_picker_dialog_title));
|
| - } else if (dialogType == sTextInputTypeTime) {
|
| - mDialog = new TimePickerDialog(mContext, new TimeListener(dialogType),
|
| - time.hour, time.minute, DateFormat.is24HourFormat(mContext));
|
| - } else if (dialogType == sTextInputTypeDateTime ||
|
| - dialogType == sTextInputTypeDateTimeLocal) {
|
| - mDialog = new DateTimePickerDialog(mContext,
|
| - new DateTimeListener(dialogType),
|
| - time.year, time.month, time.monthDay,
|
| - time.hour, time.minute, DateFormat.is24HourFormat(mContext));
|
| - } else if (dialogType == sTextInputTypeMonth) {
|
| - mDialog = new MonthPickerDialog(mContext, new MonthListener(dialogType),
|
| - time.year, time.month);
|
| + if (dialogType == sTextInputTypeWeek) {
|
| + if (weekYear == 0 && week == 0) {
|
| + Calendar cal = Calendar.getInstance();
|
| + weekYear = WeekPicker.getWeekYearForDate(cal);
|
| + week = WeekPicker.getWeekForDate(cal);
|
| + }
|
| + mDialog = new WeekPickerDialog(mContext, new WeekListener(dialogType),
|
| + weekYear, week);
|
| + } else {
|
| + 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);
|
| + mDialog.setTitle(mContext.getText(R.string.date_picker_dialog_title));
|
| + } else if (dialogType == sTextInputTypeTime) {
|
| + mDialog = new TimePickerDialog(mContext, new TimeListener(dialogType),
|
| + time.hour, time.minute, DateFormat.is24HourFormat(mContext));
|
| + } else if (dialogType == sTextInputTypeDateTime ||
|
| + dialogType == sTextInputTypeDateTimeLocal) {
|
| + mDialog = new DateTimePickerDialog(mContext,
|
| + new DateTimeListener(dialogType),
|
| + time.year, time.month, time.monthDay,
|
| + time.hour, time.minute, DateFormat.is24HourFormat(mContext));
|
| + } else if (dialogType == sTextInputTypeMonth) {
|
| + mDialog = new MonthPickerDialog(mContext, new MonthListener(dialogType),
|
| + time.year, time.month);
|
| + }
|
| }
|
|
|
| mDialog.setButton(DialogInterface.BUTTON_POSITIVE,
|
| @@ -144,7 +163,7 @@ public class InputDialogContainer {
|
| @Override
|
| public void onClick(DialogInterface dialog, int which) {
|
| mDialogAlreadyDismissed = true;
|
| - mInputActionDelegate.replaceDateTime(dialogType, 0, 0, 0, 0, 0, 0);
|
| + mInputActionDelegate.replaceDateTime(dialogType, 0, 0, 0, 0, 0, 0, 0, 0);
|
| }
|
| });
|
|
|
| @@ -171,7 +190,9 @@ public class InputDialogContainer {
|
| public void onDateSet(DatePicker view, int year, int month, int monthDay) {
|
| if (!mDialogAlreadyDismissed) {
|
| setFieldDateTimeValue(mDialogType,
|
| - year, month, monthDay, HOUR_DEFAULT, MINUTE_DEFAULT,
|
| + year, month, monthDay,
|
| + HOUR_DEFAULT, MINUTE_DEFAULT,
|
| + WEEKYEAR_DEFAULT, WEEK_DEFAULT,
|
| HTML_DATE_FORMAT);
|
| }
|
| }
|
| @@ -189,7 +210,8 @@ public class InputDialogContainer {
|
| if (!mDialogAlreadyDismissed) {
|
| setFieldDateTimeValue(mDialogType,
|
| YEAR_DEFAULT, MONTH_DEFAULT, MONTHDAY_DEFAULT,
|
| - hourOfDay, minute, HTML_TIME_FORMAT);
|
| + hourOfDay, minute,
|
| + WEEKYEAR_DEFAULT, WEEK_DEFAULT, HTML_TIME_FORMAT);
|
| }
|
| }
|
| }
|
| @@ -209,6 +231,7 @@ public class InputDialogContainer {
|
| int hourOfDay, int minute) {
|
| if (!mDialogAlreadyDismissed) {
|
| setFieldDateTimeValue(mDialogType, year, month, monthDay, hourOfDay, minute,
|
| + WEEKYEAR_DEFAULT, WEEK_DEFAULT,
|
| mLocal ? HTML_DATE_TIME_LOCAL_FORMAT : HTML_DATE_TIME_FORMAT);
|
| }
|
| }
|
| @@ -225,19 +248,36 @@ public class InputDialogContainer {
|
| public void onMonthSet(MonthPicker view, int year, int month) {
|
| if (!mDialogAlreadyDismissed) {
|
| setFieldDateTimeValue(mDialogType, year, month, MONTHDAY_DEFAULT,
|
| - HOUR_DEFAULT, MINUTE_DEFAULT, HTML_MONTH_FORMAT);
|
| + HOUR_DEFAULT, MINUTE_DEFAULT,
|
| + WEEKYEAR_DEFAULT, WEEK_DEFAULT, HTML_MONTH_FORMAT);
|
| + }
|
| + }
|
| + }
|
| +
|
| + private class WeekListener implements OnWeekSetListener {
|
| + private final int mDialogType;
|
| +
|
| + WeekListener(int dialogType) {
|
| + mDialogType = dialogType;
|
| + }
|
| +
|
| + @Override
|
| + public void onWeekSet(WeekPicker view, int weekYear, int week) {
|
| + if (!mDialogAlreadyDismissed) {
|
| + setFieldDateTimeValue(mDialogType, YEAR_DEFAULT, MONTH_DEFAULT, MONTHDAY_DEFAULT,
|
| + HOUR_DEFAULT, MINUTE_DEFAULT, weekYear, week, HTML_WEEK_FORMAT);
|
| }
|
| }
|
| }
|
|
|
| private void setFieldDateTimeValue(int dialogType,
|
| int year, int month, int monthDay, int hourOfDay,
|
| - int minute, String dateFormat) {
|
| + int minute, int weekYear, int week, String dateFormat) {
|
| // Prevents more than one callback being sent to the native
|
| // side when the dialog triggers multiple events.
|
| mDialogAlreadyDismissed = true;
|
|
|
| mInputActionDelegate.replaceDateTime(dialogType,
|
| - year, month, monthDay, hourOfDay, minute, 0 /* second */);
|
| + year, month, monthDay, hourOfDay, minute, 0 /* second */, weekYear, week);
|
| }
|
| }
|
|
|