Added gcal task complete listener, made period spinner actually do what it's supposed to.

pull/14/head
Tim Su 14 years ago
parent 6784269f47
commit 95154ca51c

@ -196,6 +196,14 @@
<action android:name="com.todoroo.astrid.TASK_COMPLETED" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
<!-- calendar -->
<receiver android:name="com.todoroo.astrid.gcal.GCalTaskCompleteListener">
<intent-filter>
<action android:name="com.todoroo.astrid.TASK_COMPLETED" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</receiver>
<!-- notes -->

@ -1,24 +1,16 @@
package com.todoroo.astrid.gcal;
import java.text.ParseException;
import java.util.Date;
import java.util.TimeZone;
import android.content.BroadcastReceiver;
import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.text.TextUtils;
import com.google.ical.iter.RecurrenceIterator;
import com.google.ical.iter.RecurrenceIteratorFactory;
import com.google.ical.values.DateTimeValueImpl;
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.timsu.astrid.R;
import com.todoroo.andlib.service.Autowired;
import com.todoroo.andlib.service.DependencyInjectionService;
import com.todoroo.andlib.service.ExceptionService;
import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.astrid.api.AstridApiConstants;
import com.todoroo.astrid.model.Task;
import com.todoroo.astrid.service.TaskService;
@ -28,9 +20,7 @@ public class GCalTaskCompleteListener extends BroadcastReceiver {
@Autowired
private TaskService taskService;
@Autowired
private ExceptionService exceptionService;
@SuppressWarnings("nls")
@Override
public void onReceive(Context context, Intent intent) {
long taskId = intent.getLongExtra(AstridApiConstants.EXTRAS_TASK_ID, -1);
@ -39,82 +29,18 @@ public class GCalTaskCompleteListener extends BroadcastReceiver {
DependencyInjectionService.getInstance().inject(this);
Task task = taskService.fetchById(taskId, Task.ID, Task.RECURRENCE,
Task.DUE_DATE, Task.FLAGS, Task.HIDE_UNTIL);
Task task = taskService.fetchById(taskId, Task.ID, Task.TITLE, Task.CALENDAR_URI);
if(task == null)
return;
String recurrence = task.getValue(Task.RECURRENCE);
if(recurrence != null && recurrence.length() > 0) {
DateValue repeatFrom;
Date repeatFromDate = new Date();
DateValue today = new DateValueImpl(repeatFromDate.getYear() + 1900,
repeatFromDate.getMonth() + 1, repeatFromDate.getDate());
if(task.hasDueDate() && !task.getFlag(Task.FLAGS, Task.FLAG_REPEAT_AFTER_COMPLETION)) {
repeatFromDate = new Date(task.getValue(Task.DUE_DATE));
if(task.hasDueTime()) {
repeatFrom = new DateTimeValueImpl(repeatFromDate.getYear() + 1900,
repeatFromDate.getMonth() + 1, repeatFromDate.getDate(),
repeatFromDate.getHours(), repeatFromDate.getMinutes(), repeatFromDate.getSeconds());
} else {
repeatFrom = new DateValueImpl(repeatFromDate.getYear() + 1900,
repeatFromDate.getMonth() + 1, repeatFromDate.getDate());
}
} else {
repeatFrom = today;
}
// invoke the recurrence iterator
try {
long newDueDate;
RRule rrule = new RRule(recurrence);
if(rrule.getFreq() == Frequency.HOURLY) {
newDueDate = task.createDueDate(Task.URGENCY_SPECIFIC_DAY_TIME,
repeatFromDate.getTime() + DateUtilities.ONE_HOUR * rrule.getInterval());
} else {
RecurrenceIterator iterator = RecurrenceIteratorFactory.createRecurrenceIterator(rrule,
repeatFrom, TimeZone.getDefault());
DateValue nextDate;
if(repeatFrom.compareTo(today) < 0) {
iterator.advanceTo(today);
if(!iterator.hasNext())
return;
nextDate = iterator.next();
} else {
iterator.advanceTo(repeatFrom);
if(!iterator.hasNext())
return;
nextDate = iterator.next();
nextDate = iterator.next();
}
if(nextDate instanceof DateTimeValueImpl) {
DateTimeValueImpl newDateTime = (DateTimeValueImpl)nextDate;
newDueDate = task.createDueDate(Task.URGENCY_SPECIFIC_DAY_TIME,
Date.UTC(newDateTime.year() - 1900, newDateTime.month() - 1,
newDateTime.day(), newDateTime.hour(),
newDateTime.minute(), newDateTime.second()));
} else {
newDueDate = task.createDueDate(Task.URGENCY_SPECIFIC_DAY,
new Date(nextDate.year() - 1900, nextDate.month() - 1,
nextDate.day()).getTime());
}
}
long hideUntil = task.getValue(Task.HIDE_UNTIL);
if(hideUntil > 0 && task.getValue(Task.DUE_DATE) > 0) {
hideUntil += newDueDate - task.getValue(Task.DUE_DATE);
}
task = taskService.clone(task);
task.setValue(Task.DUE_DATE, newDueDate);
task.setValue(Task.HIDE_UNTIL, hideUntil);
task.setValue(Task.COMPLETION_DATE, 0L);
taskService.save(task, false);
} catch (ParseException e) {
exceptionService.reportError("recurrence-rule: " + recurrence, e); //$NON-NLS-1$
}
String calendarUri = task.getValue(Task.CALENDAR_URI);
if(!TextUtils.isEmpty(calendarUri)) {
// change title of calendar event
ContentResolver cr = context.getContentResolver();
ContentValues values = new ContentValues();
values.put("title", context.getString(R.string.gcal_completed_title,
task.getValue(Task.TITLE)));
cr.update(Uri.parse(calendarUri), values, null, null);
}
}

@ -122,12 +122,6 @@
android:layout_height="wrap_content"
android:layout_weight="1"
android:src="@drawable/tango_stop" />
<ImageButton
android:id="@+id/delete_basic"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:src="@drawable/tango_trash" />
</LinearLayout>
</LinearLayout>
</ScrollView>
@ -236,12 +230,6 @@
android:layout_height="wrap_content"
android:layout_weight="1"
android:src="@drawable/tango_stop" />
<ImageButton
android:id="@+id/delete_extra"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:src="@drawable/tango_trash" />
</LinearLayout>
</LinearLayout>
</ScrollView>
@ -313,12 +301,6 @@
android:layout_height="wrap_content"
android:layout_weight="1"
android:src="@drawable/tango_stop" />
<ImageButton
android:id="@+id/delete_addons"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:src="@drawable/tango_trash" />
</LinearLayout>
</LinearLayout>
</ScrollView>

@ -18,14 +18,17 @@
<!-- Label when calendar event already exists -->
<string name="gcal_TEA_showCalendar_label">Open Calendar Event</string>
<!-- ======================================================== Calendars == -->
<!-- Calendar event name when task is completed (%s => task title) -->
<string name="gcal_completed_title">%s (completed)</string>
<!-- ================================================== Preference Keys == -->
<!-- ============================================== Calendar Preferences == -->
<!-- Calendar Setting Title -->
<!-- Preference: Calendar Setting Title -->
<string name="gcal_GCP_title">Default Calendar</string>
<!-- Calendar Setting Summary (%s -> calendar summary) -->
<!-- Preference: Calendar Setting Summary (%s -> calendar summary) -->
<string name="gcal_GCP_summary">Current Setting: %s</string>
<!-- System Default Calendar (displayed if we can't figure out calendars) -->

@ -40,7 +40,6 @@ import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup.LayoutParams;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
@ -251,11 +250,6 @@ public final class TaskEditActivity extends TabActivity {
discardButtonClick();
}
};
/*final View.OnClickListener mDeleteListener = new View.OnClickListener() {
public void onClick(View v) {
deleteButtonClick();
}
};*/
// set up save, cancel, and delete buttons
ImageButton saveButtonGeneral = (ImageButton) findViewById(R.id.save_basic);
@ -271,15 +265,6 @@ public final class TaskEditActivity extends TabActivity {
discardButtonDates.setOnClickListener(mDiscardListener);
ImageButton discardButtonNotify = (ImageButton) findViewById(R.id.discard_addons);
discardButtonNotify.setOnClickListener(mDiscardListener);
ImageButton deleteButtonGeneral = (ImageButton) findViewById(R.id.delete_basic);
ImageButton deleteButtonDates = (ImageButton) findViewById(R.id.delete_extra);
ImageButton deleteButtonNotify = (ImageButton) findViewById(R.id.delete_addons);
// hide the delete button always for now
deleteButtonGeneral.setVisibility(View.GONE);
deleteButtonDates.setVisibility(View.GONE);
deleteButtonNotify.setVisibility(View.GONE);
}
/* ======================================================================
@ -1083,15 +1068,24 @@ public final class TaskEditActivity extends TabActivity {
private final CheckBox settingCheckbox;
private final Spinner periodSpinner;
private boolean periodSpinnerInitialized = false;
private final int[] hours;
public RandomReminderControlSet(int settingCheckboxId, int periodButtonId) {
settingCheckbox = (CheckBox)findViewById(settingCheckboxId);
periodSpinner = (Spinner)findViewById(periodButtonId);
periodSpinner.setOnClickListener(new OnClickListener() {
periodSpinner.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
if(periodSpinnerInitialized)
settingCheckbox.setChecked(true);
periodSpinnerInitialized = true;
}
@Override
public void onClick(View v) {
settingCheckbox.setChecked(true);
public void onNothingSelected(AdapterView<?> arg0) {
// ignore
}
});

Loading…
Cancel
Save