diff --git a/astrid/plugin-src/com/todoroo/astrid/repeats/RepeatControlSet.java b/astrid/plugin-src/com/todoroo/astrid/repeats/RepeatControlSet.java index 2b1e69d7b..cf4bddc5c 100644 --- a/astrid/plugin-src/com/todoroo/astrid/repeats/RepeatControlSet.java +++ b/astrid/plugin-src/com/todoroo/astrid/repeats/RepeatControlSet.java @@ -12,13 +12,13 @@ import android.view.View; import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; import android.widget.AdapterView; +import android.widget.AdapterView.OnItemSelectedListener; import android.widget.Button; import android.widget.CheckBox; import android.widget.CompoundButton; +import android.widget.CompoundButton.OnCheckedChangeListener; import android.widget.LinearLayout; import android.widget.Spinner; -import android.widget.AdapterView.OnItemSelectedListener; -import android.widget.CompoundButton.OnCheckedChangeListener; import com.google.ical.values.Frequency; import com.google.ical.values.RRule; @@ -62,6 +62,7 @@ public class RepeatControlSet implements TaskEditControlSet { private final LinearLayout repeatContainer; private final LinearLayout daysOfWeekContainer; private final CompoundButton[] daysOfWeek = new CompoundButton[7]; + private Task model; @Autowired ExceptionService exceptionService; @@ -118,17 +119,17 @@ public class RepeatControlSet implements TaskEditControlSet { interval.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView parentView, View view, int position, long id) { - if(setInterval) { - setInterval = false; - return; - } + daysOfWeekContainer.setVisibility(position == INTERVAL_WEEKS ? View.VISIBLE : View.GONE); if(position == INTERVAL_WEEKS) { - int dayOfWeek = new Date().getDay(); + Date date; + if(model.getValue(Task.DUE_DATE) == 0) + date = new Date(); + else + date = new Date(model.getValue(Task.DUE_DATE)); + + int dayOfWeek = date.getDay(); for(int i = 0; i < 7; i++) daysOfWeek[i].setChecked(i == dayOfWeek); - } else { - for(int i = 0; i < 7; i++) - daysOfWeek[i].setChecked(true); } } @@ -137,7 +138,7 @@ public class RepeatControlSet implements TaskEditControlSet { // } }); - daysOfWeekContainer.setVisibility(View.VISIBLE); + daysOfWeekContainer.setVisibility(View.GONE); } /** Set up the repeat value button */ @@ -172,6 +173,8 @@ public class RepeatControlSet implements TaskEditControlSet { @Override public void readFromTask(Task task) { + model = task; + String recurrence = task.getValue(Task.RECURRENCE); if(recurrence == null) recurrence = ""; //$NON-NLS-1$ @@ -244,6 +247,12 @@ public class RepeatControlSet implements TaskEditControlSet { break; case INTERVAL_WEEKS: { rrule.setFreq(Frequency.WEEKLY); + + ArrayList days = new ArrayList(); + for(int i = 0; i < daysOfWeek.length; i++) + if(daysOfWeek[i].isChecked()) + days.add(new WeekdayNum(0, (Weekday)daysOfWeek[i].getTag())); + rrule.setByDay(days); break; } case INTERVAL_MONTHS: @@ -253,12 +262,6 @@ public class RepeatControlSet implements TaskEditControlSet { rrule.setFreq(Frequency.HOURLY); } - ArrayList days = new ArrayList(); - for(int i = 0; i < daysOfWeek.length; i++) - if(daysOfWeek[i].isChecked()) - days.add(new WeekdayNum(0, (Weekday)daysOfWeek[i].getTag())); - rrule.setByDay(days); - result = rrule.toIcal(); } task.setValue(Task.RECURRENCE, result); diff --git a/astrid/plugin-src/com/todoroo/astrid/repeats/RepeatTaskCompleteListener.java b/astrid/plugin-src/com/todoroo/astrid/repeats/RepeatTaskCompleteListener.java index 4edd9b249..f1934471e 100644 --- a/astrid/plugin-src/com/todoroo/astrid/repeats/RepeatTaskCompleteListener.java +++ b/astrid/plugin-src/com/todoroo/astrid/repeats/RepeatTaskCompleteListener.java @@ -3,7 +3,6 @@ package com.todoroo.astrid.repeats; import java.text.ParseException; import java.util.Collections; import java.util.Date; -import java.util.List; import java.util.TimeZone; import android.content.BroadcastReceiver; @@ -17,7 +16,6 @@ import com.google.ical.values.DateValue; import com.google.ical.values.DateValueImpl; import com.google.ical.values.Frequency; import com.google.ical.values.RRule; -import com.google.ical.values.WeekdayNum; import com.todoroo.andlib.utility.DateUtilities; import com.todoroo.astrid.api.AstridApiConstants; import com.todoroo.astrid.core.PluginServices; @@ -102,9 +100,7 @@ public class RepeatTaskCompleteListener extends BroadcastReceiver { // handle the iCalendar "byDay" field differently depending on if // we are weekly or otherwise - List byDay = null; if(rrule.getFreq() != Frequency.WEEKLY) { - byDay = rrule.getByDay(); rrule.setByDay(Collections.EMPTY_LIST); } @@ -147,20 +143,6 @@ public class RepeatTaskCompleteListener extends BroadcastReceiver { if(newDueDate == -1) return -1; - // what we do with the by day information is to add days until - // weekday equals one of this list - if(byDay != null && byDay.size() > 0) { - Date newDueDateDate = new Date(newDueDate); - outer: for(int i = 0; i < 7; i++) { - int weekday = newDueDateDate.getDay(); - for(WeekdayNum wdn : byDay) - if(wdn.wday.jsDayNum == weekday) - break outer; - newDueDateDate.setDate(newDueDateDate.getDate() + 1); - } - newDueDate = newDueDateDate.getTime(); - } - return newDueDate; } diff --git a/astrid/src/com/todoroo/astrid/activity/TaskEditActivity.java b/astrid/src/com/todoroo/astrid/activity/TaskEditActivity.java index eac621235..4d8eedd01 100644 --- a/astrid/src/com/todoroo/astrid/activity/TaskEditActivity.java +++ b/astrid/src/com/todoroo/astrid/activity/TaskEditActivity.java @@ -27,14 +27,14 @@ import java.util.List; import android.app.AlertDialog; import android.app.DatePickerDialog; -import android.app.TabActivity; import android.app.DatePickerDialog.OnDateSetListener; +import android.app.TabActivity; import android.content.BroadcastReceiver; 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.graphics.Color; import android.os.Bundle; @@ -45,6 +45,7 @@ import android.view.View; import android.view.ViewGroup; 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; @@ -59,7 +60,6 @@ import android.widget.TabHost; 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; @@ -793,6 +793,7 @@ public final class TaskEditActivity extends TabActivity { datePicker.show(); } else { previousSetting = position; + model.setValue(Task.DUE_DATE, item.dueDate); } } @@ -840,6 +841,7 @@ public final class TaskEditActivity extends TabActivity { private void customDateFinished() { long time = model.createDueDate(customSetting, customDate.getTime()); + model.setValue(Task.DUE_DATE, time); createUrgencyList(time); }