diff --git a/astrid/plugin-src/com/todoroo/astrid/backup/BackupActivity.java b/astrid/plugin-src/com/todoroo/astrid/backup/BackupActivity.java index 90cc90e52..0f6ef3d4c 100644 --- a/astrid/plugin-src/com/todoroo/astrid/backup/BackupActivity.java +++ b/astrid/plugin-src/com/todoroo/astrid/backup/BackupActivity.java @@ -35,8 +35,13 @@ public class BackupActivity extends Activity { FilePickerBuilder.OnFilePickedListener listener = new FilePickerBuilder.OnFilePickedListener() { @Override public void onFilePicked(String filePath) { - TasksXmlImporter.importTasks(BackupActivity.this, filePath, null); - finish(); + TasksXmlImporter.importTasks(BackupActivity.this, filePath, + new Runnable() { + @Override + public void run() { + finish(); + } + }); } }; new FilePickerBuilder(this, diff --git a/astrid/plugin-src/com/todoroo/astrid/backup/TasksXmlImporter.java b/astrid/plugin-src/com/todoroo/astrid/backup/TasksXmlImporter.java index 01ebb728e..796561782 100644 --- a/astrid/plugin-src/com/todoroo/astrid/backup/TasksXmlImporter.java +++ b/astrid/plugin-src/com/todoroo/astrid/backup/TasksXmlImporter.java @@ -14,6 +14,7 @@ import android.app.AlertDialog; import android.app.ProgressDialog; import android.content.Context; import android.content.DialogInterface; +import android.content.res.Resources; import android.os.Handler; import android.os.Looper; import android.util.Log; @@ -23,10 +24,10 @@ import com.timsu.astrid.R; import com.todoroo.andlib.data.TodorooCursor; import com.todoroo.andlib.service.ContextManager; import com.todoroo.andlib.service.ExceptionService; +import com.todoroo.andlib.sql.Criterion; import com.todoroo.andlib.sql.Query; import com.todoroo.andlib.utility.DateUtilities; import com.todoroo.astrid.core.PluginServices; -import com.todoroo.astrid.dao.TaskDao.TaskCriteria; import com.todoroo.astrid.legacy.LegacyImportance; import com.todoroo.astrid.legacy.LegacyRepeatInfo; import com.todoroo.astrid.legacy.LegacyRepeatInfo.LegacyRepeatInterval; @@ -64,7 +65,8 @@ public class TasksXmlImporter { private final TaskService taskService = PluginServices.getTaskService(); private final MetadataService metadataService = PluginServices.getMetadataService(); private final ExceptionService exceptionService = PluginServices.getExceptionService(); - protected ProgressDialog progressDialog; + private final ProgressDialog progressDialog; + private final Runnable runAfterImport; private void setProgressMessage(final String message) { importHandler.post(new Runnable() { @@ -78,15 +80,16 @@ public class TasksXmlImporter { * Import tasks. * @param runAfterImport optional runnable after import */ - private TasksXmlImporter(final Context context, String input, final Runnable runAfterImport) { + private TasksXmlImporter(final Context context, String input, Runnable runAfterImport) { this.input = input; this.context = context; + this.runAfterImport = runAfterImport; + progressDialog = new ProgressDialog(context); importHandler = new Handler(); importHandler.post(new Runnable() { @Override public void run() { - progressDialog = new ProgressDialog(context); progressDialog.setIcon(android.R.drawable.ic_dialog_info); progressDialog.setTitle(R.string.import_progress_title); progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER); @@ -102,9 +105,6 @@ public class TasksXmlImporter { Looper.prepare(); try { performImport(); - if (runAfterImport != null) { - importHandler.post(runAfterImport); - } } catch (IOException e) { exceptionService.displayAndReportError(context, context.getString(R.string.backup_TXI_error), e); @@ -125,7 +125,6 @@ public class TasksXmlImporter { XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); XmlPullParser xpp = factory.newPullParser(); xpp.setInput(new FileReader(input)); - setProgressMessage(context.getString(R.string.import_progress_opened)); try { while (xpp.next() != XmlPullParser.END_DOCUMENT) { @@ -163,13 +162,20 @@ public class TasksXmlImporter { private void showSummary() { AlertDialog.Builder builder = new AlertDialog.Builder(context); builder.setTitle(R.string.import_summary_title); + Resources r = context.getResources(); String message = context.getString(R.string.import_summary_message, - input, taskCount, importCount, skipCount); + input, + r.getQuantityString(R.plurals.Ntasks, taskCount, taskCount), + r.getQuantityString(R.plurals.Ntasks, importCount, importCount), + r.getQuantityString(R.plurals.Ntasks, skipCount, skipCount)); builder.setMessage(message); builder.setPositiveButton(context.getString(android.R.string.ok), new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int id) { dialog.dismiss(); + if (runAfterImport != null) { + importHandler.post(runAfterImport); + } } }); builder.show(); @@ -285,7 +291,9 @@ public class TasksXmlImporter { } // if the task's name and creation date match an existing task, skip - TodorooCursor cursor = taskService.query(Query.select(Task.ID).where(TaskCriteria.createdOn(creationDate.getTime()))); + TodorooCursor cursor = taskService.query(Query.select(Task.ID). + where(Criterion.and(Task.TITLE.eq(taskName), + Task.CREATION_DATE.like(creationDate.getTime()/1000L + "%")))); try { if(cursor.getCount() > 0) { skipCount++; @@ -318,7 +326,6 @@ public class TasksXmlImporter { // Save the task to the database. taskService.save(task, false); importCount++; - setProgressMessage(context.getString(R.string.import_progress_add, taskCount)); return task; } diff --git a/astrid/res/values/strings-backup.xml b/astrid/res/values/strings-backup.xml index 3309603db..f9b9d4bde 100644 --- a/astrid/res/values/strings-backup.xml +++ b/astrid/res/values/strings-backup.xml @@ -39,19 +39,21 @@ Import Error - Backed Up %s to %s. - Restore Summary - -File %s contained %d tasks.\n -Restored %d tasks.\n -Skipped %d tasks.\n + Backed Up %s to %s. + + + Restore Summary + + + +File %s contained %s.\n\n +%s imported,\n +%s already exist\n - Restore - Opening file... - File opened... - Reading task %d... - Skipped task %d... - Restored task %d... - Select a File to Restore + + Restore + Opening file... + Reading task %d... + Select a File to Restore diff --git a/astrid/res/values/strings-core.xml b/astrid/res/values/strings-core.xml index c49278fa0..c5865db01 100644 --- a/astrid/res/values/strings-core.xml +++ b/astrid/res/values/strings-core.xml @@ -72,8 +72,8 @@ - 1 Task - %d Tasks + 1 task + %d tasks diff --git a/astrid/src/com/todoroo/astrid/dao/TaskDao.java b/astrid/src/com/todoroo/astrid/dao/TaskDao.java index 0fd0861de..f4c68ec78 100644 --- a/astrid/src/com/todoroo/astrid/dao/TaskDao.java +++ b/astrid/src/com/todoroo/astrid/dao/TaskDao.java @@ -98,11 +98,6 @@ public class TaskDao extends GenericDao { return Criterion.or(Task.TITLE.isNull(), Task.TITLE.eq("")); } - /** @return tasks with this exact creation date */ - public static Criterion createdOn(long date) { - return Criterion.or(Task.CREATION_DATE.eq(date)); - } - } // --- custom operations