Skip to content

Commit

Permalink
Merge pull request #97 from StingerAJ/111011_aj_manage_old_gcal_entries
Browse files Browse the repository at this point in the history
Added gcal-deletion setting in Manage Old Tasks-settingsmenu
  • Loading branch information
Tim Su committed Nov 8, 2011
2 parents 965221b + c514c12 commit 734d9a9
Show file tree
Hide file tree
Showing 5 changed files with 140 additions and 9 deletions.
108 changes: 103 additions & 5 deletions astrid/plugin-src/com/todoroo/astrid/core/OldTaskPreferences.java
Expand Up @@ -26,7 +26,7 @@
import com.todoroo.astrid.service.TaskService;

/**
* Displays the preference screen for users to edit their preferences
* Displays the preference screen for users to manage their old tasks and events
*
* @author Tim Su <tim@todoroo.com>
*
Expand All @@ -50,21 +50,37 @@ public void onCreate(Bundle savedInstanceState) {
DependencyInjectionService.getInstance().inject(this);

// Extended prefs
Preference extpreference_completed = screen.findPreference(getString(R.string.EPr_manage_delete_completed));
extpreference_completed.setOnPreferenceClickListener(new OnPreferenceClickListener() {
Preference preference_delete_completed = screen.findPreference(getString(R.string.EPr_manage_delete_completed));
preference_delete_completed.setOnPreferenceClickListener(new OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference p) {
showDeleteCompletedDialog();
return true;
}
});

Preference extpreference_purged = screen.findPreference(getString(R.string.EPr_manage_purge_deleted));
extpreference_purged.setOnPreferenceClickListener(new OnPreferenceClickListener() {
Preference preference_purge_deleted = screen.findPreference(getString(R.string.EPr_manage_purge_deleted));
preference_purge_deleted.setOnPreferenceClickListener(new OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference p) {
showPurgeDeletedDialog();
return true;
}
});

Preference preference_delete_completed_events = screen.findPreference(getString(R.string.EPr_manage_delete_completed_gcal));
preference_delete_completed_events.setOnPreferenceClickListener(new OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference p) {
showDeleteCompletedEventsDialog();
return true;
}
});

Preference preference_delete_all_events = screen.findPreference(getString(R.string.EPr_manage_delete_all_gcal));
preference_delete_all_events.setOnPreferenceClickListener(new OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference p) {
showDeleteAllEventsDialog();
return true;
}
});
}

/* (non-Javadoc)
Expand Down Expand Up @@ -152,6 +168,88 @@ public void run() {
}, null);
}

/** Show the dialog to delete completed events */
private void showDeleteCompletedEventsDialog() {
DialogUtilities.okCancelDialog(
this,
getResources().getString(
R.string.EPr_manage_delete_completed_gcal_message),
new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
runWithDialog(new Runnable() {
@Override
public void run() {
int deletedEventCount = 0;
TodorooCursor<Task> cursor = taskService.query(Query.select(Task.ID, Task.CALENDAR_URI).where(
Criterion.and(Task.COMPLETION_DATE.gt(0), Task.CALENDAR_URI.isNotNull())));
try {
Task task = new Task();
int length = cursor.getCount();
for(int i = 0; i < length; i++) {
cursor.moveToNext();
task.readFromCursor(cursor);
if (GCalHelper.deleteTaskEvent(task))
deletedEventCount++;
}
} finally {
cursor.close();
}
// mass update the CALENDAR_URI here,
// since the GCalHelper doesnt save it due to performance-reasons
Task template = new Task();
template.setValue(Task.CALENDAR_URI, "");
int result = taskService.update(
Criterion.and(Task.COMPLETION_DATE.gt(0), Task.CALENDAR_URI.isNotNull()),
template);
showResult(R.string.EPr_manage_delete_completed_gcal_status, deletedEventCount);
}
});
}
}, null);
}

/** Show the dialog to delete all events */
private void showDeleteAllEventsDialog() {
DialogUtilities.okCancelDialog(
this,
getResources().getString(
R.string.EPr_manage_delete_all_gcal_message),
new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
runWithDialog(new Runnable() {
@Override
public void run() {
int deletedEventCount = 0;
TodorooCursor<Task> cursor = taskService.query(Query.select(Task.ID, Task.CALENDAR_URI).where(
Task.CALENDAR_URI.isNotNull()));
try {
Task task = new Task();
int length = cursor.getCount();
for(int i = 0; i < length; i++) {
cursor.moveToNext();
task.readFromCursor(cursor);
if (GCalHelper.deleteTaskEvent(task))
deletedEventCount++;
}
} finally {
cursor.close();
}
// mass update the CALENDAR_URI here,
// since the GCalHelper doesnt save it due to performance-reasons
Task template = new Task();
template.setValue(Task.CALENDAR_URI, "");
int result = taskService.update(
Task.CALENDAR_URI.isNotNull(),
template);
showResult(R.string.EPr_manage_delete_all_gcal_status, deletedEventCount);
}
});
}
}, null);
}

/** Run runnable with progress dialog */
protected void runWithDialog(final Runnable runnable) {
pd = DialogUtilities.progressDialog(this, getString(R.string.DLG_please_wait));
Expand Down
12 changes: 8 additions & 4 deletions astrid/plugin-src/com/todoroo/astrid/gcal/GCalHelper.java
Expand Up @@ -83,14 +83,15 @@ public static Uri createTaskEvent(Task task, ContentResolver cr, ContentValues v
return null;
}

public static void deleteTaskEvent(Task task) {
public static boolean deleteTaskEvent(Task task) {
boolean eventDeleted = false;
String uri;
if(task.containsNonNullValue(Task.CALENDAR_URI))
uri = task.getValue(Task.CALENDAR_URI);
else {
task = PluginServices.getTaskService().fetchById(task.getId(), Task.CALENDAR_URI);
if(task == null)
return;
return false;
uri = task.getValue(Task.CALENDAR_URI);
}

Expand All @@ -101,18 +102,21 @@ public static void deleteTaskEvent(Task task) {
// try to load calendar
ContentResolver cr = ContextManager.getContext().getContentResolver();
Cursor cursor = cr.query(calendarUri, new String[] { "dtstart" }, null, null, null); //$NON-NLS-1$
boolean deleted = cursor.getCount() == 0;
boolean alreadydeleted = cursor.getCount() == 0;
cursor.close();

if (!deleted) {
if (!alreadydeleted) {
cr.delete(calendarUri, null, null);
eventDeleted = true;
}

task.setValue(Task.CALENDAR_URI,"");
} catch (Exception e) {
Log.e("astrid-gcal", "error-deleting-calendar-event", e); //$NON-NLS-1$ //$NON-NLS-2$
}
}

return eventDeleted;
}

@SuppressWarnings("nls")
Expand Down
9 changes: 9 additions & 0 deletions astrid/res/values-de/strings.xml
Expand Up @@ -760,7 +760,16 @@
Achtung: diese Aufgaben sind unwiederbringlich verloren, wenn Sie kein Backup gemacht haben!</string>
<string name="EPr_manage_purge_deleted_summary">Achtung: diese Aufgaben können nur mit der Backupfunktion wiederhergestellt werden!</string>
<string name="EPr_manage_purge_deleted_status">Es wurden %d gelöschte Aufgaben endgültig entfernt!</string>

<string name="EPr_manage_delete_completed_gcal">Kalendereinträge von erledigten Aufgaben löschen</string>
<string name="EPr_manage_delete_completed_gcal_message">Wollen Sie wirklich alle Kalendereinträge von erledigten Aufgaben löschen?</string>
<string name="EPr_manage_delete_completed_gcal_summary"></string>
<string name="EPr_manage_delete_completed_gcal_status">Es wurden %d Kalendereinträge gelöscht!</string>

<string name="EPr_manage_delete_all_gcal">Alle von Astrid erzeugten Kalendereinträge löschen</string>
<string name="EPr_manage_delete_all_gcal_message">Wollen Sie wirklich alle von Astrid erzeugten Kalendereinträge löschen?</string>
<string name="EPr_manage_delete_all_gcal_summary"></string>
<string name="EPr_manage_delete_all_gcal_status">Es wurden %d Kalendereinträge gelöscht!</string>

<!-- ==================================================== AddOnActivity == -->

Expand Down
10 changes: 10 additions & 0 deletions astrid/res/values/strings-core.xml
Expand Up @@ -420,6 +420,16 @@
<string name="EPr_manage_purge_deleted_message">Do you really want to purge all your deleted tasks?\n\nThese tasks will be gone forever!</string>
<string name="EPr_manage_purge_deleted_status">Purged %d tasks!</string>
<string name="EPr_manage_purge_deleted_summary">Caution! Purged tasks can\'t be recovered without backup file!</string>

<string name="EPr_manage_delete_completed_gcal">Delete Calendar Events for Completed Tasks</string>
<string name="EPr_manage_delete_completed_gcal_message">Do you really want to delete all your events for completed tasks?</string>
<string name="EPr_manage_delete_completed_gcal_summary"></string>
<string name="EPr_manage_delete_completed_gcal_status">Deleted %d calendar events!</string>

<string name="EPr_manage_delete_all_gcal">Delete All Calendar Events for Tasks</string>
<string name="EPr_manage_delete_all_gcal_message">Do you really want to delete all your events for tasks?</string>
<string name="EPr_manage_delete_all_gcal_summary"></string>
<string name="EPr_manage_delete_all_gcal_status">Deleted %d calendar events!</string>

<!-- ==================================================== AddOnActivity == -->

Expand Down
10 changes: 10 additions & 0 deletions astrid/res/xml/preferences_oldtasks.xml
Expand Up @@ -12,5 +12,15 @@
android:title="@string/EPr_manage_purge_deleted"
android:key="@string/EPr_manage_purge_deleted"
android:summary="@string/EPr_manage_purge_deleted_summary"/>

<com.todoroo.astrid.ui.MultilinePreference
android:title="@string/EPr_manage_delete_completed_gcal"
android:key="@string/EPr_manage_delete_completed_gcal"
android:summary="@string/EPr_manage_delete_completed_gcal_summary"/>

<com.todoroo.astrid.ui.MultilinePreference
android:title="@string/EPr_manage_delete_all_gcal"
android:key="@string/EPr_manage_delete_all_gcal"
android:summary="@string/EPr_manage_delete_all_gcal_summary"/>

</PreferenceScreen>

0 comments on commit 734d9a9

Please sign in to comment.