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);
}
/* ======================================================================