diff --git a/astrid/res/values-de/strings.xml b/astrid/res/values-de/strings.xml index 2cb9e86df..6afa51feb 100644 --- a/astrid/res/values-de/strings.xml +++ b/astrid/res/values-de/strings.xml @@ -723,6 +723,17 @@ Am Stichtag oder überfällig + Erweitert + Alle erledigten Aufgaben löschen + Wollen Sie wirklich alle erledigten Aufgaben löschen? + Hiermit gelöschte Aufgaben können einzeln wiederhergestellt werden + Es wurden %d erledigte Aufgaben gelöscht! + Alle gelöschten Aufgaben endgültig entfernen + Wollen Sie wirklich alle gelöschten Aufgaben endgültig entfernen?\n +Achtung: diese Aufgaben sind unwiederbringlich verloren, wenn Sie kein Backup gemacht haben! + Achtung: diese Aufgaben können nur mit der Backupfunktion wiederhergestellt werden! + Es wurden %d gelöschte Aufgaben endgültig entfernt! + diff --git a/astrid/res/values/strings-core.xml b/astrid/res/values/strings-core.xml index cdc733696..afe002352 100644 --- a/astrid/res/values/strings-core.xml +++ b/astrid/res/values/strings-core.xml @@ -495,5 +495,17 @@ Astrid might not let you know when your tasks are due.\n Astrid is the much loved open-source todo list / task manager designed to help you get stuff done. It features reminders, tags, sync, Locale plug-in, a widget and more. + + + Extended + Delete completed tasks + Do you really want to delete all your completed tasks? + This deleted tasks can be undeleted individually + Deleted %d tasks! + Purge deleted tasks + Do you really want to purge all your deleted tasks?\n +Attention: these tasks will be lost forever, if you did not create a recent backup! + Purged %d tasks! + Attention: these purged tasks can\'t be recovered without a backup! diff --git a/astrid/res/xml/preferences.xml b/astrid/res/xml/preferences.xml index e2a198300..1a87dca91 100644 --- a/astrid/res/xml/preferences.xml +++ b/astrid/res/xml/preferences.xml @@ -50,6 +50,15 @@ android:key="@string/p_statistics" android:title="@string/EPr_statistics_title" android:defaultValue="true" /> + + + + diff --git a/astrid/src/com/todoroo/astrid/activity/EditPreferences.java b/astrid/src/com/todoroo/astrid/activity/EditPreferences.java index 98c3ee6f9..baaa322ba 100644 --- a/astrid/src/com/todoroo/astrid/activity/EditPreferences.java +++ b/astrid/src/com/todoroo/astrid/activity/EditPreferences.java @@ -32,6 +32,7 @@ import com.todoroo.andlib.service.ContextManager; import com.todoroo.andlib.service.DependencyInjectionService; import com.todoroo.andlib.sql.Criterion; import com.todoroo.andlib.utility.AndroidUtilities; +import com.todoroo.andlib.utility.DateUtilities; import com.todoroo.andlib.utility.DialogUtilities; import com.todoroo.andlib.utility.Preferences; import com.todoroo.andlib.utility.TodorooPreferenceActivity; @@ -40,6 +41,7 @@ import com.todoroo.astrid.dao.Database; import com.todoroo.astrid.data.Task; import com.todoroo.astrid.helper.MetadataHelper; import com.todoroo.astrid.service.AddOnService; +import com.todoroo.astrid.service.MetadataService; import com.todoroo.astrid.service.StartupService; import com.todoroo.astrid.service.TaskService; import com.todoroo.astrid.ui.ContactListAdapter; @@ -61,7 +63,8 @@ public class EditPreferences extends TodorooPreferenceActivity { // --- instance variables - @Autowired private TaskService taskService; // for debugging + @Autowired private TaskService taskService; + @Autowired private MetadataService metadataService; @Autowired private AddOnService addOnService; @Autowired @@ -102,6 +105,26 @@ public class EditPreferences extends TodorooPreferenceActivity { } }); +// PreferenceGroup extended = (PreferenceGroup) screen.findPreference(r.getString(R.string.EPr_extended_header)); +// extended.setOrder(screen.getPreferenceCount()); + + // Extended prefs + Preference extpreference_completed = screen.findPreference(r.getString(R.string.EPr_extended_delete_completed)); + extpreference_completed.setOnPreferenceClickListener(new OnPreferenceClickListener() { + public boolean onPreferenceClick(Preference p) { + showDeleteCompletedDialog(); + return true; + } + }); + + Preference extpreference_purged = screen.findPreference(r.getString(R.string.EPr_extended_purge_deleted)); + extpreference_purged.setOnPreferenceClickListener(new OnPreferenceClickListener() { + public boolean onPreferenceClick(Preference p) { + showPurgeDeletedDialog(); + return true; + } + }); + addDebugPreferences(); addPreferenceListeners(); @@ -118,6 +141,61 @@ public class EditPreferences extends TodorooPreferenceActivity { About.showAbout(this, version); } + /** Show the dialog to delete completed tasks */ + private void showDeleteCompletedDialog () { + DialogUtilities.okCancelDialog(this, + getResources().getString(R.string.EPr_extended_delete_completed_message), + new OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + Task template = new Task(); + template.setValue(Task.DELETION_DATE, DateUtilities.now()); + int result = taskService.update(Task.COMPLETION_DATE.gt(0), template); + DialogUtilities.okDialog(EditPreferences.this, + getResources().getString(R.string.EPr_extended_delete_completed_status, result), + new OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + } + }); + } + }, + new OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + } + }); + } + + /** Show the dialog to purge deleted tasks */ + private void showPurgeDeletedDialog () { + DialogUtilities.okCancelDialog(this, + getResources().getString(R.string.EPr_extended_purge_deleted_message), + new OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + int result = taskService.deleteWhere(Task.DELETION_DATE.gt(0)); + metadataService.cleanup(); + DialogUtilities.okDialog(EditPreferences.this, + getResources().getString(R.string.EPr_extended_purge_deleted_status, result), + new OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + } + }); + } + }, + new OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + } + }); + } + private void addPluginPreferences(PreferenceScreen screen) { Intent queryIntent = new Intent(AstridApiConstants.ACTION_SETTINGS); PackageManager pm = getPackageManager(); diff --git a/astrid/src/com/todoroo/astrid/service/TaskService.java b/astrid/src/com/todoroo/astrid/service/TaskService.java index 480f7df85..0470aaf1e 100644 --- a/astrid/src/com/todoroo/astrid/service/TaskService.java +++ b/astrid/src/com/todoroo/astrid/service/TaskService.java @@ -273,6 +273,23 @@ public class TaskService { } } + /** + * Update all matching a clause to have the values set on template object. + *

+ * Example (updates "joe" => "bob" in metadata value1): + * {code} + * Metadata item = new Metadata(); + * item.setValue(Metadata.VALUE1, "bob"); + * update(item, Metadata.VALUE1.eq("joe")); + * {code} + * @param where sql criteria + * @param template set fields on this object in order to set them in the db. + * @return # of updated items + */ + public int update(Criterion where, Task template) { + return taskDao.update(where, template); + } + /** * Count tasks overall * @param filter @@ -303,8 +320,8 @@ public class TaskService { * Delete all tasks matching a given criterion * @param all */ - public void deleteWhere(Criterion criteria) { - taskDao.deleteWhere(criteria); + public int deleteWhere(Criterion criteria) { + return taskDao.deleteWhere(criteria); } /**