diff --git a/astrid/res/values/strings-core.xml b/astrid/res/values/strings-core.xml index 24da47783..e5f1a8428 100644 --- a/astrid/res/values/strings-core.xml +++ b/astrid/res/values/strings-core.xml @@ -213,10 +213,10 @@ Deadline - Due at specific time? + At specific time? - No Due Time + No Time Set Hide Until @@ -270,7 +270,7 @@ Task is due Day before due Week before due - Specific Day + Specific Day/Time diff --git a/astrid/src/com/todoroo/astrid/activity/TaskEditActivity.java b/astrid/src/com/todoroo/astrid/activity/TaskEditActivity.java index 965d17fad..267a99e42 100644 --- a/astrid/src/com/todoroo/astrid/activity/TaskEditActivity.java +++ b/astrid/src/com/todoroo/astrid/activity/TaskEditActivity.java @@ -27,15 +27,15 @@ import java.util.List; import android.app.AlertDialog; import android.app.DatePickerDialog; -import android.app.DatePickerDialog.OnDateSetListener; import android.app.TabActivity; +import android.app.DatePickerDialog.OnDateSetListener; import android.content.BroadcastReceiver; import android.content.ContentValues; import android.content.Context; import android.content.DialogInterface; -import android.content.DialogInterface.OnCancelListener; import android.content.Intent; import android.content.IntentFilter; +import android.content.DialogInterface.OnCancelListener; import android.content.res.Resources; import android.os.Bundle; import android.text.format.DateUtils; @@ -46,7 +46,6 @@ import android.view.MenuItem; import android.view.View; import android.view.ViewGroup.LayoutParams; import android.widget.AdapterView; -import android.widget.AdapterView.OnItemSelectedListener; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.CheckBox; @@ -62,6 +61,7 @@ import android.widget.TextView; import android.widget.TimePicker; import android.widget.Toast; import android.widget.ToggleButton; +import android.widget.AdapterView.OnItemSelectedListener; import com.flurry.android.FlurryAgent; import com.timsu.astrid.R; @@ -740,7 +740,6 @@ public final class TaskEditActivity extends TabActivity { private ArrayAdapter urgencyAdapter; private int previousSetting = Task.URGENCY_NONE; - private long existingDate = EXISTING_TIME_UNSET; private int existingDateHour = EXISTING_TIME_UNSET; private int existingDateMinutes = EXISTING_TIME_UNSET; @@ -948,12 +947,19 @@ public final class TaskEditActivity extends TabActivity { * */ private class HideUntilControlSet implements TaskEditControlSet, - OnItemSelectedListener, OnDateSetListener, OnCancelListener { + OnItemSelectedListener, OnDateSetListener, OnCancelListener, + OnDeadlineTimeSetListener { private static final int SPECIFIC_DATE = -1; + private static final int EXISTING_TIME_UNSET = -2; + private final Spinner spinner; private int previousSetting = Task.HIDE_UNTIL_NONE; + private long existingDate = EXISTING_TIME_UNSET; + private int existingDateHour = EXISTING_TIME_UNSET; + private int existingDateMinutes = EXISTING_TIME_UNSET; + public HideUntilControlSet(int hideUntil) { this.spinner = (Spinner) findViewById(hideUntil); this.spinner.setOnItemSelectedListener(this); @@ -1002,8 +1008,19 @@ public final class TaskEditActivity extends TabActivity { HideUntilValue[] updated = new HideUntilValue[values.length + 1]; for(int i = 0; i < values.length; i++) updated[i+1] = values[i]; - updated[0] = new HideUntilValue(DateUtilities.getDateString(TaskEditActivity.this, new Date(specificDate)), - Task.HIDE_UNTIL_SPECIFIC_DAY, specificDate); + Date hideUntilAsDate = new Date(specificDate); + if(hideUntilAsDate.getHours() == 0 && hideUntilAsDate.getMinutes() == 0 && hideUntilAsDate.getSeconds() == 0) { + updated[0] = new HideUntilValue(DateUtilities.getDateString(TaskEditActivity.this, new Date(specificDate)), + Task.HIDE_UNTIL_SPECIFIC_DAY, specificDate); + existingDate = specificDate; + existingDateHour = SPECIFIC_DATE; + } else { + updated[0] = new HideUntilValue(DateUtilities.getDateStringWithTime(TaskEditActivity.this, new Date(specificDate)), + Task.HIDE_UNTIL_SPECIFIC_DAY_TIME, specificDate); + existingDate = specificDate; + existingDateHour = hideUntilAsDate.getHours(); + existingDateMinutes = hideUntilAsDate.getMinutes(); + } values = updated; } @@ -1018,14 +1035,17 @@ public final class TaskEditActivity extends TabActivity { // ... at conclusion of dialog, update our list HideUntilValue item = adapter.getItem(position); if(item.date == SPECIFIC_DATE) { - intermediateDate = new Date(); - intermediateDate.setSeconds(0); + customDate = new Date(existingDate == EXISTING_TIME_UNSET ? DateUtilities.now() : existingDate); + customDate.setSeconds(0); DatePickerDialog datePicker = new DatePickerDialog(TaskEditActivity.this, - this, 1900 + intermediateDate.getYear(), intermediateDate.getMonth(), intermediateDate.getDate()); + this, 1900 + customDate.getYear(), customDate.getMonth(), customDate.getDate()); datePicker.setOnCancelListener(this); datePicker.show(); + + spinner.setSelection(previousSetting); } else { previousSetting = position; + model.setValue(Task.HIDE_UNTIL, item.date); } } @@ -1034,14 +1054,39 @@ public final class TaskEditActivity extends TabActivity { // ignore } - Date intermediateDate; + Date customDate; public void onDateSet(DatePicker view, int year, int month, int monthDay) { - intermediateDate.setYear(year - 1900); - intermediateDate.setMonth(month); - intermediateDate.setDate(monthDay); - intermediateDate.setHours(0); - intermediateDate.setMinutes(0); + customDate.setYear(year - 1900); + customDate.setMonth(month); + customDate.setDate(monthDay); + + boolean specificTime = existingDateHour != SPECIFIC_DATE; + if(existingDateHour < 0) { + existingDateHour = customDate.getHours(); + existingDateMinutes= customDate.getMinutes(); + } + + DeadlineTimePickerDialog timePicker = new DeadlineTimePickerDialog(TaskEditActivity.this, this, + existingDateHour, existingDateMinutes, + DateUtilities.is24HourFormat(TaskEditActivity.this), + specificTime); + + timePicker.setOnCancelListener(this); + timePicker.show(); + } + + public void onTimeSet(TimePicker view, boolean hasTime, int hourOfDay, int minute) { + if(!hasTime) { + customDate.setHours(0); + customDate.setMinutes(0); + customDate.setSeconds(0); + } else { + customDate.setHours(hourOfDay); + customDate.setMinutes(minute); + existingDateHour = hourOfDay; + existingDateMinutes = minute; + } customDateFinished(); } @@ -1052,7 +1097,7 @@ public final class TaskEditActivity extends TabActivity { } private void customDateFinished() { - HideUntilValue[] list = createHideUntilList(intermediateDate.getTime()); + HideUntilValue[] list = createHideUntilList(customDate.getTime()); adapter = new ArrayAdapter( TaskEditActivity.this, android.R.layout.simple_spinner_item, list); @@ -1098,6 +1143,7 @@ public final class TaskEditActivity extends TabActivity { HideUntilValue item = adapter.getItem(spinner.getSelectedItemPosition()); long value = task.createHideUntil(item.setting, item.date); task.setValue(Task.HIDE_UNTIL, value); + System.err.println("hide until: " + new Date(value)); return null; } diff --git a/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java b/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java index 0f664961a..8ed69b769 100644 --- a/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java +++ b/astrid/src/com/todoroo/astrid/activity/TaskListActivity.java @@ -3,9 +3,9 @@ package com.todoroo.astrid.activity; import java.util.Date; import java.util.LinkedHashSet; import java.util.List; -import java.util.Map.Entry; import java.util.Timer; import java.util.TimerTask; +import java.util.Map.Entry; import java.util.concurrent.atomic.AtomicReference; import android.app.AlertDialog; @@ -27,27 +27,27 @@ import android.text.Editable; import android.text.TextUtils; import android.text.TextWatcher; import android.view.ContextMenu; -import android.view.ContextMenu.ContextMenuInfo; import android.view.KeyEvent; import android.view.Menu; import android.view.MenuItem; import android.view.View; -import android.view.View.OnClickListener; -import android.view.View.OnKeyListener; import android.view.Window; import android.view.WindowManager; +import android.view.ContextMenu.ContextMenuInfo; +import android.view.View.OnClickListener; +import android.view.View.OnKeyListener; import android.view.inputmethod.EditorInfo; import android.widget.AbsListView; -import android.widget.AbsListView.OnScrollListener; -import android.widget.AdapterView.AdapterContextMenuInfo; import android.widget.ArrayAdapter; import android.widget.EditText; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; -import android.widget.TextView.OnEditorActionListener; import android.widget.Toast; +import android.widget.AbsListView.OnScrollListener; +import android.widget.AdapterView.AdapterContextMenuInfo; +import android.widget.TextView.OnEditorActionListener; import com.flurry.android.FlurryAgent; import com.timsu.astrid.R; @@ -102,6 +102,7 @@ public class TaskListActivity extends ListActivity implements OnScrollListener, // --- activities + private static final long BACKGROUND_REFRESH_INTERVAL = 120000L; public static final int ACTIVITY_EDIT_TASK = 0; public static final int ACTIVITY_SETTINGS = 1; public static final int ACTIVITY_SORT = 2; @@ -405,7 +406,7 @@ public class TaskListActivity extends ListActivity implements OnScrollListener, } }); } - }, 120000L, 120000L); + }, BACKGROUND_REFRESH_INTERVAL, BACKGROUND_REFRESH_INTERVAL); } /* ======================================================================