diff --git a/src/main/java/com/todoroo/andlib/utility/DateUtilities.java b/src/main/java/com/todoroo/andlib/utility/DateUtilities.java index 42349be9f..70a01b86b 100644 --- a/src/main/java/com/todoroo/andlib/utility/DateUtilities.java +++ b/src/main/java/com/todoroo/andlib/utility/DateUtilities.java @@ -88,11 +88,10 @@ public class DateUtilities { public static String getTimeString(Context context, Date date) { String value; if (is24HourFormat(context)) { - value = "H:mm"; + value = "HH:mm"; } else if (date.getMinutes() == 0){ value = "h a"; - } - else { + } else { value = "h:mm a"; } return new SimpleDateFormat(value).format(date); @@ -104,12 +103,21 @@ public class DateUtilities { return Arrays.binarySearch(sortedValues, search) >= 0; } + + public static String getLongDateString(Date date) { + return getDateString(new SimpleDateFormat("MMMM"), date); + } + /** * @param date date to format * @return date, with month, day, and year */ public static String getDateString(Date date) { - String month = new SimpleDateFormat("MMM").format(date); + return getDateString(new SimpleDateFormat("MMM"), date); + } + + private static String getDateString(SimpleDateFormat simpleDateFormat, Date date) { + String month = simpleDateFormat.format(date); String value; String standardDate; Locale locale = Locale.getDefault(); @@ -130,12 +138,20 @@ public class DateUtilities { return standardDate; } + public static String getLongDateStringHideYear(Date date) { + return getDateStringHideYear(new SimpleDateFormat("MMMM"), date); + } + /** * @param date date to format * @return date, with month, day, and year */ public static String getDateStringHideYear(Date date) { - String month = new SimpleDateFormat("MMM").format(date); + return getDateStringHideYear(new SimpleDateFormat("MMM"), date); + } + + private static String getDateStringHideYear(SimpleDateFormat simpleDateFormat, Date date) { + String month = simpleDateFormat.format(date); String value; Locale locale = Locale.getDefault(); if (arrayBinaryContains(locale.getLanguage(), "ja", "ko", "zh") diff --git a/src/main/java/com/todoroo/astrid/ui/ReminderControlSet.java b/src/main/java/com/todoroo/astrid/ui/ReminderControlSet.java index 8d8589f6f..b6838197b 100644 --- a/src/main/java/com/todoroo/astrid/ui/ReminderControlSet.java +++ b/src/main/java/com/todoroo/astrid/ui/ReminderControlSet.java @@ -86,17 +86,45 @@ public class ReminderControlSet extends TaskEditControlSetBase implements Adapte return value; } - private void addAlarmRow(Long timestamp) { - addAlarmRow(getDisplayString(timestamp), timestamp, new OnClickListener() { + private void addNewAlarm() { + pickNewAlarm(newDateTime().withMillisOfDay(0), new DateAndTimePickerDialog.OnDateTimePicked() { + @Override + public void onDateTimePicked(DateTime dateTime) { + addAlarmRow(dateTime.getMillis()); + } + }); + } + + private void pickNewAlarm(DateTime initial, DateAndTimePickerDialog.OnDateTimePicked onDateTimePicked) { + DateAndTimePickerDialog.dateAndTimePickerDialog(taskEditFragment.getFragmentManager(), + taskEditFragment.getActivity(), initial, onDateTimePicked, null); + } + + private void addAlarmRow(final Long timestamp) { + final View alertItem = addAlarmRow(getDisplayString(timestamp), timestamp, null); + TextView display = (TextView) alertItem.findViewById(R.id.alarm_string); + display.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { + pickNewAlarm(newDateTime(timestamp), new DateAndTimePickerDialog.OnDateTimePicked() { + @Override + public void onDateTimePicked(DateTime dateTime) { + long millis = dateTime.getMillis(); + addAlarmRow(alertItem, getDisplayString(millis), millis, null); + } + }); } }); } - private View addAlarmRow(String text, Long timestamp, final View.OnClickListener onRemove) { + private View addAlarmRow(String text, Long timestamp, final OnClickListener onRemove) { final View alertItem = LayoutInflater.from(activity).inflate(R.layout.alarm_edit_row, null); alertContainer.addView(alertItem); + addAlarmRow(alertItem, text, timestamp, onRemove); + return alertItem; + } + + private View addAlarmRow(final View alertItem, String text, Long timestamp, final View.OnClickListener onRemove) { alertItem.setTag(timestamp); TextView display = (TextView) alertItem.findViewById(R.id.alarm_string); display.setText(text); @@ -104,7 +132,9 @@ public class ReminderControlSet extends TaskEditControlSetBase implements Adapte @Override public void onClick(View v) { alertContainer.removeView(alertItem); - onRemove.onClick(v); + if (onRemove != null) { + onRemove.onClick(v); + } updateSpinner(); } }); @@ -112,17 +142,6 @@ public class ReminderControlSet extends TaskEditControlSetBase implements Adapte return alertItem; } - private void addNewAlarm() { - DateAndTimePickerDialog.dateAndTimePickerDialog(taskEditFragment.getFragmentManager(), - taskEditFragment.getActivity(), newDateTime().withMillisOfDay(0), - new DateAndTimePickerDialog.OnDateTimePicked() { - @Override - public void onDateTimePicked(DateTime dateTime) { - addAlarmRow(dateTime.getMillis()); - } - }, null); - } - private void updateSpinner() { addSpinner.setSelection(0); spinnerOptions.clear(); @@ -149,12 +168,12 @@ public class ReminderControlSet extends TaskEditControlSetBase implements Adapte if (spinnerOptions.size() == 2) { addNewAlarm(); } else { - addSpinner.setOnItemSelectedListener(ReminderControlSet.this); addSpinner.performClick(); } } }); addSpinner = (Spinner) getView().findViewById(R.id.alarms_add_spinner); + addSpinner.setOnItemSelectedListener(ReminderControlSet.this); remindAdapter = new ArrayAdapter(activity, R.layout.simple_spinner_item, spinnerOptions) { @Override public View getDropDownView(int position, View convertView, ViewGroup parent) { @@ -309,15 +328,14 @@ public class ReminderControlSet extends TaskEditControlSetBase implements Adapte DateTime dateTime = newDateTime(forDate); Date d = dateTime.toDate(); return (dateTime.getYear() == newDateTime().getYear() - ? DateUtilities.getDateStringHideYear(d) - : DateUtilities.getDateString(d)) + + ? DateUtilities.getLongDateStringHideYear(d) + : DateUtilities.getLongDateString(d)) + ", " + DateUtilities.getTimeString(activity, d); } @Override public void onItemSelected(AdapterView parent, View view, int position, long id) { log.info("onItemSelected({}, {}, {}, {})", parent, view, position, id); - addSpinner.setOnItemSelectedListener(null); String selected = spinnerOptions.get(position); if (selected.equals(taskEditFragment.getString(R.string.when_due))) { addDue(); @@ -335,6 +353,5 @@ public class ReminderControlSet extends TaskEditControlSetBase implements Adapte @Override public void onNothingSelected(AdapterView parent) { - addSpinner.setOnItemSelectedListener(null); } } diff --git a/src/main/java/org/tasks/dialogs/DateAndTimePickerDialog.java b/src/main/java/org/tasks/dialogs/DateAndTimePickerDialog.java index 4981ffad9..72086fea0 100644 --- a/src/main/java/org/tasks/dialogs/DateAndTimePickerDialog.java +++ b/src/main/java/org/tasks/dialogs/DateAndTimePickerDialog.java @@ -37,7 +37,7 @@ public class DateAndTimePickerDialog { public void onDateSet(DatePickerDialog datePickerDialog, int year, int month, int day) { onDatePicked.onDatePicked(newDateTime().withYear(year).withMonthOfYear(month + 1).withDayOfMonth(day).withMillisOfDay(0)); } - }, initial.getYear(), initial.getMonthOfYear() - 1, initial.getDayOfMonth(), true); + }, initial.getYear(), initial.getMonthOfYear() - 1, initial.getDayOfMonth(), false); dialog.setOnDismissListener(dismissed); dialog.show(fragmentManager, FRAG_TAG_DATE_PICKER); } @@ -49,7 +49,7 @@ public class DateAndTimePickerDialog { public void onTimeSet(RadialPickerLayout radialPickerLayout, int hours, int minutes) { onTimePicked.onTimePicked(newDateTime().withMillisOfDay(0).withHourOfDay(hours).withMinuteOfHour(minutes).getMillisOfDay()); } - }, initial.getHourOfDay(), initial.getMinuteOfHour(), DateFormat.is24HourFormat(context), true); + }, initial.getHourOfDay(), initial.getMinuteOfHour(), DateFormat.is24HourFormat(context), false); dialog.setOnDismissListener(dismissed); dialog.show(fragmentManager, FRAG_TAG_TIME_PICKER); }