Skip to content

Commit 12683db

Browse files
author
Tim Su
committed
Fix for AST-212 - hide until specific time setting
1 parent 3d6063b commit 12683db

3 files changed

Lines changed: 75 additions & 28 deletions

File tree

astrid/res/values/strings-core.xml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -213,10 +213,10 @@
213213
<string name="TEA_urgency_label">Deadline</string>
214214

215215
<!-- Task urgency specific time checkbox -->
216-
<string name="TEA_urgency_specific_time">Due at specific time?</string>
216+
<string name="TEA_urgency_specific_time">At specific time?</string>
217217

218218
<!-- Task urgency specific time title when specific time false -->
219-
<string name="TEA_urgency_time_none">No Due Time</string>
219+
<string name="TEA_urgency_time_none">No Time Set</string>
220220

221221
<!-- Task hide until label -->
222222
<string name="TEA_hideUntil_label">Hide Until</string>
@@ -270,7 +270,7 @@
270270
<item>Task is due</item>
271271
<item>Day before due</item>
272272
<item>Week before due</item>
273-
<item>Specific Day</item>
273+
<item>Specific Day/Time</item>
274274
</string-array>
275275

276276
<!-- Add Ons tab when no add-ons found -->

astrid/src/com/todoroo/astrid/activity/TaskEditActivity.java

Lines changed: 63 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -27,15 +27,15 @@
2727

2828
import android.app.AlertDialog;
2929
import android.app.DatePickerDialog;
30-
import android.app.DatePickerDialog.OnDateSetListener;
3130
import android.app.TabActivity;
31+
import android.app.DatePickerDialog.OnDateSetListener;
3232
import android.content.BroadcastReceiver;
3333
import android.content.ContentValues;
3434
import android.content.Context;
3535
import android.content.DialogInterface;
36-
import android.content.DialogInterface.OnCancelListener;
3736
import android.content.Intent;
3837
import android.content.IntentFilter;
38+
import android.content.DialogInterface.OnCancelListener;
3939
import android.content.res.Resources;
4040
import android.os.Bundle;
4141
import android.text.format.DateUtils;
@@ -46,7 +46,6 @@
4646
import android.view.View;
4747
import android.view.ViewGroup.LayoutParams;
4848
import android.widget.AdapterView;
49-
import android.widget.AdapterView.OnItemSelectedListener;
5049
import android.widget.ArrayAdapter;
5150
import android.widget.Button;
5251
import android.widget.CheckBox;
@@ -62,6 +61,7 @@
6261
import android.widget.TimePicker;
6362
import android.widget.Toast;
6463
import android.widget.ToggleButton;
64+
import android.widget.AdapterView.OnItemSelectedListener;
6565

6666
import com.flurry.android.FlurryAgent;
6767
import com.timsu.astrid.R;
@@ -740,7 +740,6 @@ private class UrgencyControlSet implements TaskEditControlSet,
740740
private ArrayAdapter<UrgencyValue> urgencyAdapter;
741741
private int previousSetting = Task.URGENCY_NONE;
742742

743-
744743
private long existingDate = EXISTING_TIME_UNSET;
745744
private int existingDateHour = EXISTING_TIME_UNSET;
746745
private int existingDateMinutes = EXISTING_TIME_UNSET;
@@ -948,12 +947,19 @@ public String writeToModel(Task task) {
948947
*
949948
*/
950949
private class HideUntilControlSet implements TaskEditControlSet,
951-
OnItemSelectedListener, OnDateSetListener, OnCancelListener {
950+
OnItemSelectedListener, OnDateSetListener, OnCancelListener,
951+
OnDeadlineTimeSetListener {
952952

953953
private static final int SPECIFIC_DATE = -1;
954+
private static final int EXISTING_TIME_UNSET = -2;
955+
954956
private final Spinner spinner;
955957
private int previousSetting = Task.HIDE_UNTIL_NONE;
956958

959+
private long existingDate = EXISTING_TIME_UNSET;
960+
private int existingDateHour = EXISTING_TIME_UNSET;
961+
private int existingDateMinutes = EXISTING_TIME_UNSET;
962+
957963
public HideUntilControlSet(int hideUntil) {
958964
this.spinner = (Spinner) findViewById(hideUntil);
959965
this.spinner.setOnItemSelectedListener(this);
@@ -1002,8 +1008,19 @@ private HideUntilValue[] createHideUntilList(long specificDate) {
10021008
HideUntilValue[] updated = new HideUntilValue[values.length + 1];
10031009
for(int i = 0; i < values.length; i++)
10041010
updated[i+1] = values[i];
1005-
updated[0] = new HideUntilValue(DateUtilities.getDateString(TaskEditActivity.this, new Date(specificDate)),
1006-
Task.HIDE_UNTIL_SPECIFIC_DAY, specificDate);
1011+
Date hideUntilAsDate = new Date(specificDate);
1012+
if(hideUntilAsDate.getHours() == 0 && hideUntilAsDate.getMinutes() == 0 && hideUntilAsDate.getSeconds() == 0) {
1013+
updated[0] = new HideUntilValue(DateUtilities.getDateString(TaskEditActivity.this, new Date(specificDate)),
1014+
Task.HIDE_UNTIL_SPECIFIC_DAY, specificDate);
1015+
existingDate = specificDate;
1016+
existingDateHour = SPECIFIC_DATE;
1017+
} else {
1018+
updated[0] = new HideUntilValue(DateUtilities.getDateStringWithTime(TaskEditActivity.this, new Date(specificDate)),
1019+
Task.HIDE_UNTIL_SPECIFIC_DAY_TIME, specificDate);
1020+
existingDate = specificDate;
1021+
existingDateHour = hideUntilAsDate.getHours();
1022+
existingDateMinutes = hideUntilAsDate.getMinutes();
1023+
}
10071024
values = updated;
10081025
}
10091026

@@ -1018,14 +1035,17 @@ public void onItemSelected(AdapterView<?> parent, View view, int position, long
10181035
// ... at conclusion of dialog, update our list
10191036
HideUntilValue item = adapter.getItem(position);
10201037
if(item.date == SPECIFIC_DATE) {
1021-
intermediateDate = new Date();
1022-
intermediateDate.setSeconds(0);
1038+
customDate = new Date(existingDate == EXISTING_TIME_UNSET ? DateUtilities.now() : existingDate);
1039+
customDate.setSeconds(0);
10231040
DatePickerDialog datePicker = new DatePickerDialog(TaskEditActivity.this,
1024-
this, 1900 + intermediateDate.getYear(), intermediateDate.getMonth(), intermediateDate.getDate());
1041+
this, 1900 + customDate.getYear(), customDate.getMonth(), customDate.getDate());
10251042
datePicker.setOnCancelListener(this);
10261043
datePicker.show();
1044+
1045+
spinner.setSelection(previousSetting);
10271046
} else {
10281047
previousSetting = position;
1048+
model.setValue(Task.HIDE_UNTIL, item.date);
10291049
}
10301050
}
10311051

@@ -1034,14 +1054,39 @@ public void onNothingSelected(AdapterView<?> arg0) {
10341054
// ignore
10351055
}
10361056

1037-
Date intermediateDate;
1057+
Date customDate;
10381058

10391059
public void onDateSet(DatePicker view, int year, int month, int monthDay) {
1040-
intermediateDate.setYear(year - 1900);
1041-
intermediateDate.setMonth(month);
1042-
intermediateDate.setDate(monthDay);
1043-
intermediateDate.setHours(0);
1044-
intermediateDate.setMinutes(0);
1060+
customDate.setYear(year - 1900);
1061+
customDate.setMonth(month);
1062+
customDate.setDate(monthDay);
1063+
1064+
boolean specificTime = existingDateHour != SPECIFIC_DATE;
1065+
if(existingDateHour < 0) {
1066+
existingDateHour = customDate.getHours();
1067+
existingDateMinutes= customDate.getMinutes();
1068+
}
1069+
1070+
DeadlineTimePickerDialog timePicker = new DeadlineTimePickerDialog(TaskEditActivity.this, this,
1071+
existingDateHour, existingDateMinutes,
1072+
DateUtilities.is24HourFormat(TaskEditActivity.this),
1073+
specificTime);
1074+
1075+
timePicker.setOnCancelListener(this);
1076+
timePicker.show();
1077+
}
1078+
1079+
public void onTimeSet(TimePicker view, boolean hasTime, int hourOfDay, int minute) {
1080+
if(!hasTime) {
1081+
customDate.setHours(0);
1082+
customDate.setMinutes(0);
1083+
customDate.setSeconds(0);
1084+
} else {
1085+
customDate.setHours(hourOfDay);
1086+
customDate.setMinutes(minute);
1087+
existingDateHour = hourOfDay;
1088+
existingDateMinutes = minute;
1089+
}
10451090
customDateFinished();
10461091
}
10471092

@@ -1052,7 +1097,7 @@ public void onCancel(DialogInterface dialog) {
10521097
}
10531098

10541099
private void customDateFinished() {
1055-
HideUntilValue[] list = createHideUntilList(intermediateDate.getTime());
1100+
HideUntilValue[] list = createHideUntilList(customDate.getTime());
10561101
adapter = new ArrayAdapter<HideUntilValue>(
10571102
TaskEditActivity.this, android.R.layout.simple_spinner_item,
10581103
list);
@@ -1098,6 +1143,7 @@ public String writeToModel(Task task) {
10981143
HideUntilValue item = adapter.getItem(spinner.getSelectedItemPosition());
10991144
long value = task.createHideUntil(item.setting, item.date);
11001145
task.setValue(Task.HIDE_UNTIL, value);
1146+
System.err.println("hide until: " + new Date(value));
11011147
return null;
11021148
}
11031149

astrid/src/com/todoroo/astrid/activity/TaskListActivity.java

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
import java.util.Date;
44
import java.util.LinkedHashSet;
55
import java.util.List;
6-
import java.util.Map.Entry;
76
import java.util.Timer;
87
import java.util.TimerTask;
8+
import java.util.Map.Entry;
99
import java.util.concurrent.atomic.AtomicReference;
1010

1111
import android.app.AlertDialog;
@@ -27,27 +27,27 @@
2727
import android.text.TextUtils;
2828
import android.text.TextWatcher;
2929
import android.view.ContextMenu;
30-
import android.view.ContextMenu.ContextMenuInfo;
3130
import android.view.KeyEvent;
3231
import android.view.Menu;
3332
import android.view.MenuItem;
3433
import android.view.View;
35-
import android.view.View.OnClickListener;
36-
import android.view.View.OnKeyListener;
3734
import android.view.Window;
3835
import android.view.WindowManager;
36+
import android.view.ContextMenu.ContextMenuInfo;
37+
import android.view.View.OnClickListener;
38+
import android.view.View.OnKeyListener;
3939
import android.view.inputmethod.EditorInfo;
4040
import android.widget.AbsListView;
41-
import android.widget.AbsListView.OnScrollListener;
42-
import android.widget.AdapterView.AdapterContextMenuInfo;
4341
import android.widget.ArrayAdapter;
4442
import android.widget.EditText;
4543
import android.widget.ImageButton;
4644
import android.widget.ImageView;
4745
import android.widget.ListView;
4846
import android.widget.TextView;
49-
import android.widget.TextView.OnEditorActionListener;
5047
import android.widget.Toast;
48+
import android.widget.AbsListView.OnScrollListener;
49+
import android.widget.AdapterView.AdapterContextMenuInfo;
50+
import android.widget.TextView.OnEditorActionListener;
5151

5252
import com.flurry.android.FlurryAgent;
5353
import com.timsu.astrid.R;
@@ -102,6 +102,7 @@ public class TaskListActivity extends ListActivity implements OnScrollListener,
102102

103103
// --- activities
104104

105+
private static final long BACKGROUND_REFRESH_INTERVAL = 120000L;
105106
public static final int ACTIVITY_EDIT_TASK = 0;
106107
public static final int ACTIVITY_SETTINGS = 1;
107108
public static final int ACTIVITY_SORT = 2;
@@ -405,7 +406,7 @@ public void run() {
405406
}
406407
});
407408
}
408-
}, 120000L, 120000L);
409+
}, BACKGROUND_REFRESH_INTERVAL, BACKGROUND_REFRESH_INTERVAL);
409410
}
410411

411412
/* ======================================================================

0 commit comments

Comments
 (0)