diff --git a/astrid/src/com/todoroo/astrid/activity/TaskEditActivity.java b/astrid/src/com/todoroo/astrid/activity/TaskEditActivity.java index de76f0813..c01519cc1 100644 --- a/astrid/src/com/todoroo/astrid/activity/TaskEditActivity.java +++ b/astrid/src/com/todoroo/astrid/activity/TaskEditActivity.java @@ -690,14 +690,17 @@ public final class TaskEditActivity extends TabActivity { OnItemSelectedListener, OnDeadlineTimeSetListener, OnDateSetListener, OnCancelListener { - private static final long SPECIFIC_DATE = -1; + private static final int SPECIFIC_DATE = -1; + private static final int EXISTING_TIME_UNSET = -2; private final Spinner spinner; private ArrayAdapter urgencyAdapter; private int previousSetting = Task.URGENCY_NONE; - private int existingDateHour = -1; - private int existingDateMinutes = -1; + + private long existingDate = EXISTING_TIME_UNSET; + private int existingDateHour = EXISTING_TIME_UNSET; + private int existingDateMinutes = EXISTING_TIME_UNSET; /** * Container class for urgencies @@ -762,6 +765,8 @@ public final class TaskEditActivity extends TabActivity { for(int i = 0; i < urgencyValues.length; i++) if(urgencyValues[i].dueDate == dueDate) { selection = i; + if(dueDate > 0) + existingDate = dueDate; break; } @@ -773,11 +778,14 @@ public final class TaskEditActivity extends TabActivity { Date dueDateAsDate = new Date(dueDate); updated[0] = new UrgencyValue(DateUtilities.getDateStringWithTime(TaskEditActivity.this, dueDateAsDate), Task.URGENCY_SPECIFIC_DAY_TIME, dueDate); + existingDate = dueDate; existingDateHour = dueDateAsDate.getHours(); existingDateMinutes = dueDateAsDate.getMinutes(); } else { updated[0] = new UrgencyValue(DateUtilities.getDateString(TaskEditActivity.this, new Date(dueDate)), Task.URGENCY_SPECIFIC_DAY, dueDate); + existingDate = dueDate; + existingDateHour = SPECIFIC_DATE; } selection = 0; urgencyValues = updated; @@ -800,7 +808,7 @@ public final class TaskEditActivity extends TabActivity { UrgencyValue item = urgencyAdapter.getItem(position); if(item.dueDate == SPECIFIC_DATE) { customSetting = item.setting; - customDate = new Date(); + customDate = new Date(existingDate == EXISTING_TIME_UNSET ? DateUtilities.now() : existingDate); customDate.setSeconds(0); DatePickerDialog datePicker = new DatePickerDialog(TaskEditActivity.this, this, 1900 + customDate.getYear(), customDate.getMonth(), customDate.getDate()); @@ -831,14 +839,17 @@ public final class TaskEditActivity extends TabActivity { return; } - if(existingDateHour == -1) + boolean specificTime = existingDateHour != SPECIFIC_DATE; + if(existingDateHour < 0) { existingDateHour = customDate.getHours(); - if(existingDateMinutes == -1) existingDateMinutes= customDate.getMinutes(); + } DeadlineTimePickerDialog timePicker = new DeadlineTimePickerDialog(TaskEditActivity.this, this, existingDateHour, existingDateMinutes, - DateUtilities.is24HourFormat(TaskEditActivity.this)); + DateUtilities.is24HourFormat(TaskEditActivity.this), + specificTime); + timePicker.setOnCancelListener(this); timePicker.show(); } diff --git a/astrid/src/com/todoroo/astrid/ui/DeadlineTimePickerDialog.java b/astrid/src/com/todoroo/astrid/ui/DeadlineTimePickerDialog.java index ffe89daf9..2a3f355a9 100644 --- a/astrid/src/com/todoroo/astrid/ui/DeadlineTimePickerDialog.java +++ b/astrid/src/com/todoroo/astrid/ui/DeadlineTimePickerDialog.java @@ -82,9 +82,9 @@ public class DeadlineTimePickerDialog extends AlertDialog implements OnClickList */ public DeadlineTimePickerDialog(Context context, OnDeadlineTimeSetListener callBack, - int hourOfDay, int minute, boolean is24HourView) { + int hourOfDay, int minute, boolean is24HourView, boolean hasTime) { this(context, android.R.style.Theme_Dialog, - callBack, hourOfDay, minute, is24HourView); + callBack, hourOfDay, minute, is24HourView, hasTime); } /** @@ -98,7 +98,7 @@ public class DeadlineTimePickerDialog extends AlertDialog implements OnClickList public DeadlineTimePickerDialog(Context context, int theme, OnDeadlineTimeSetListener callBack, - int hourOfDay, int minute, boolean is24HourView) { + int hourOfDay, int minute, boolean is24HourView, boolean hasTime) { super(context, theme); mCallback = callBack; mInitialHourOfDay = hourOfDay; @@ -118,7 +118,7 @@ public class DeadlineTimePickerDialog extends AlertDialog implements OnClickList setView(view); mTimePicker = (TimePicker) view.findViewById(R.id.timePicker); mHasTime = (CheckBox) view.findViewById(R.id.hasTime); - mHasTime.setOnCheckedChangeListener(new OnCheckedChangeListener() { + OnCheckedChangeListener listener = new OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { @@ -128,8 +128,10 @@ public class DeadlineTimePickerDialog extends AlertDialog implements OnClickList else setTitle(R.string.TEA_urgency_time_none); } - }); - mHasTime.setChecked(true); + }; + mHasTime.setOnCheckedChangeListener(listener); + mHasTime.setChecked(hasTime); + listener.onCheckedChanged(null, hasTime); // initialize state mTimePicker.setCurrentHour(mInitialHourOfDay);