2727
2828import android .app .AlertDialog ;
2929import android .app .DatePickerDialog ;
30- import android .app .DatePickerDialog .OnDateSetListener ;
3130import android .app .TabActivity ;
31+ import android .app .DatePickerDialog .OnDateSetListener ;
3232import android .content .BroadcastReceiver ;
3333import android .content .ContentValues ;
3434import android .content .Context ;
3535import android .content .DialogInterface ;
36- import android .content .DialogInterface .OnCancelListener ;
3736import android .content .Intent ;
3837import android .content .IntentFilter ;
38+ import android .content .DialogInterface .OnCancelListener ;
3939import android .content .res .Resources ;
4040import android .os .Bundle ;
4141import android .text .format .DateUtils ;
4646import android .view .View ;
4747import android .view .ViewGroup .LayoutParams ;
4848import android .widget .AdapterView ;
49- import android .widget .AdapterView .OnItemSelectedListener ;
5049import android .widget .ArrayAdapter ;
5150import android .widget .Button ;
5251import android .widget .CheckBox ;
6261import android .widget .TimePicker ;
6362import android .widget .Toast ;
6463import android .widget .ToggleButton ;
64+ import android .widget .AdapterView .OnItemSelectedListener ;
6565
6666import com .flurry .android .FlurryAgent ;
6767import 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
0 commit comments