From 9b3372f1aea27d68a15ab163777ed16e3688719c Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Thu, 15 Mar 2018 09:33:03 -0500 Subject: [PATCH] Add attachment metadata to backup file --- app/build.gradle | 4 ++-- app/src/main/java/org/tasks/analytics/Tracking.java | 5 ++++- .../main/java/org/tasks/backup/BackupContainer.java | 12 +++++++++++- .../java/org/tasks/backup/TasksJsonExporter.java | 8 ++++++-- .../java/org/tasks/backup/TasksJsonImporter.java | 10 +++++++++- app/src/main/java/org/tasks/data/TaskAttachment.java | 2 +- .../java/org/tasks/dialogs/ExportTasksDialog.java | 4 ++++ .../java/org/tasks/dialogs/ImportTasksDialog.java | 5 +++++ app/src/main/res/values/keys.xml | 4 ++++ 9 files changed, 46 insertions(+), 8 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 506da9ca5..0aff0404c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -33,8 +33,8 @@ android { defaultConfig { testApplicationId "org.tasks.test" applicationId "org.tasks" - versionCode 501 - versionName "5.3.1" + versionCode 504 + versionName "5.3.2" targetSdkVersion 27 minSdkVersion 15 testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" diff --git a/app/src/main/java/org/tasks/analytics/Tracking.java b/app/src/main/java/org/tasks/analytics/Tracking.java index 9e4678683..8147d557a 100644 --- a/app/src/main/java/org/tasks/analytics/Tracking.java +++ b/app/src/main/java/org/tasks/analytics/Tracking.java @@ -35,7 +35,10 @@ public class Tracking { RECURRENCE_CUSTOM(R.string.tracking_category_recurrence, R.string.tracking_action_custom), RECURRENCE_PRESET(R.string.tracking_category_recurrence, R.string.tracking_action_preset), TASKER_CREATE(R.string.tracking_category_tasker, R.string.tracking_action_task_created), - TASKER_LIST_NOTIFICATION(R.string.tracking_category_tasker, R.string.tracking_action_list_notification); + TASKER_LIST_NOTIFICATION(R.string.tracking_category_tasker, R.string.tracking_action_list_notification), + IMPORT_XML(R.string.tracking_category_backup, R.string.tracking_action_import_xml), + IMPORT_JSON(R.string.tracking_category_backup, R.string.tracking_action_import_json), + EXPORT(R.string.tracking_category_backup, R.string.tracking_action_export); public final int category; public final int action; diff --git a/app/src/main/java/org/tasks/backup/BackupContainer.java b/app/src/main/java/org/tasks/backup/BackupContainer.java index 4f735afe2..d76a2b790 100644 --- a/app/src/main/java/org/tasks/backup/BackupContainer.java +++ b/app/src/main/java/org/tasks/backup/BackupContainer.java @@ -9,10 +9,14 @@ import org.tasks.data.GoogleTaskList; import org.tasks.data.Location; import org.tasks.data.Tag; import org.tasks.data.TagData; +import org.tasks.data.TaskAttachment; import org.tasks.data.UserActivity; +import java.util.Collections; import java.util.List; +import static java.util.Collections.emptyList; + public class BackupContainer { List tasks; @@ -34,15 +38,21 @@ public class BackupContainer { List tags; List google; List comments; + private List attachments; TaskBackup(Task task, List alarms, List locations, List tags, - List google, List comments) { + List google, List comments, List attachments) { this.task = task; this.alarms = alarms; this.locations = locations; this.tags = tags; this.google = google; this.comments = comments; + this.attachments = attachments; + } + + List getAttachments() { + return attachments == null ? emptyList() : attachments; } } } diff --git a/app/src/main/java/org/tasks/backup/TasksJsonExporter.java b/app/src/main/java/org/tasks/backup/TasksJsonExporter.java index 05e1d05ef..a631760d2 100755 --- a/app/src/main/java/org/tasks/backup/TasksJsonExporter.java +++ b/app/src/main/java/org/tasks/backup/TasksJsonExporter.java @@ -24,6 +24,7 @@ import org.tasks.data.GoogleTaskListDao; import org.tasks.data.LocationDao; import org.tasks.data.TagDao; import org.tasks.data.TagDataDao; +import org.tasks.data.TaskAttachmentDao; import org.tasks.data.UserActivityDao; import org.tasks.preferences.Preferences; @@ -63,6 +64,7 @@ public class TasksJsonExporter { private final GoogleTaskDao googleTaskDao; private final FilterDao filterDao; private final GoogleTaskListDao googleTaskListDao; + private final TaskAttachmentDao taskAttachmentDao; private final TaskDao taskDao; private final UserActivityDao userActivityDao; private final Preferences preferences; @@ -92,7 +94,7 @@ public class TasksJsonExporter { public TasksJsonExporter(TagDataDao tagDataDao, TaskDao taskDao, UserActivityDao userActivityDao, Preferences preferences, AlarmDao alarmDao, LocationDao locationDao, TagDao tagDao, GoogleTaskDao googleTaskDao, FilterDao filterDao, - GoogleTaskListDao googleTaskListDao) { + GoogleTaskListDao googleTaskListDao, TaskAttachmentDao taskAttachmentDao) { this.tagDataDao = tagDataDao; this.taskDao = taskDao; this.userActivityDao = userActivityDao; @@ -103,6 +105,7 @@ public class TasksJsonExporter { this.googleTaskDao = googleTaskDao; this.filterDao = filterDao; this.googleTaskListDao = googleTaskListDao; + this.taskAttachmentDao = taskAttachmentDao; } public void exportTasks(final Context context, final ExportType exportType, @Nullable final ProgressDialog progressDialog) { @@ -155,7 +158,8 @@ public class TasksJsonExporter { locationDao.getGeofences(taskId), tagDao.getTagsForTask(taskId), googleTaskDao.getAllByTaskId(taskId), - userActivityDao.getCommentsForTask(task.getUuid()))); + userActivityDao.getCommentsForTask(task.getUuid()), + taskAttachmentDao.getAttachments(task.getUuid()))); } Map data = new HashMap<>(); diff --git a/app/src/main/java/org/tasks/backup/TasksJsonImporter.java b/app/src/main/java/org/tasks/backup/TasksJsonImporter.java index eb23e4e07..de4cf6f02 100644 --- a/app/src/main/java/org/tasks/backup/TasksJsonImporter.java +++ b/app/src/main/java/org/tasks/backup/TasksJsonImporter.java @@ -29,6 +29,8 @@ import org.tasks.data.Tag; import org.tasks.data.TagDao; import org.tasks.data.TagData; import org.tasks.data.TagDataDao; +import org.tasks.data.TaskAttachment; +import org.tasks.data.TaskAttachmentDao; import org.tasks.data.UserActivity; import org.tasks.data.UserActivityDao; import org.tasks.dialogs.DialogBuilder; @@ -53,6 +55,7 @@ public class TasksJsonImporter { private final GoogleTaskDao googleTaskDao; private final GoogleTaskListDao googleTaskListDao; private final FilterDao filterDao; + private final TaskAttachmentDao taskAttachmentDao; private final LocationDao locationDao; private Activity activity; @@ -73,7 +76,7 @@ public class TasksJsonImporter { DialogBuilder dialogBuilder, TaskDao taskDao, LocationDao locationDao, LocalBroadcastManager localBroadcastManager, AlarmDao alarmDao, TagDao tagDao, GoogleTaskDao googleTaskDao, GoogleTaskListDao googleTaskListDao, - FilterDao filterDao) { + FilterDao filterDao, TaskAttachmentDao taskAttachmentDao) { this.tagDataDao = tagDataDao; this.userActivityDao = userActivityDao; this.dialogBuilder = dialogBuilder; @@ -85,6 +88,7 @@ public class TasksJsonImporter { this.googleTaskDao = googleTaskDao; this.googleTaskListDao = googleTaskListDao; this.filterDao = filterDao; + this.taskAttachmentDao = taskAttachmentDao; } public void importTasks(Activity activity, String input, ProgressDialog progressDialog) { @@ -160,6 +164,10 @@ public class TasksJsonImporter { location.setTask(taskId); locationDao.insert(location); } + for (TaskAttachment attachment : backup.getAttachments()) { + attachment.setTaskId(taskUuid); + taskAttachmentDao.insert(attachment); + } importCount++; } } finally { diff --git a/app/src/main/java/org/tasks/data/TaskAttachment.java b/app/src/main/java/org/tasks/data/TaskAttachment.java index edf1b4219..61316a86f 100644 --- a/app/src/main/java/org/tasks/data/TaskAttachment.java +++ b/app/src/main/java/org/tasks/data/TaskAttachment.java @@ -21,7 +21,7 @@ public final class TaskAttachment { @PrimaryKey(autoGenerate = true) @ColumnInfo(name = "_id") - private Long id; + private transient Long id; @ColumnInfo(name = "remoteId") private String remoteId = Task.NO_UUID; diff --git a/app/src/main/java/org/tasks/dialogs/ExportTasksDialog.java b/app/src/main/java/org/tasks/dialogs/ExportTasksDialog.java index e8d1cea55..b1e9b6b2f 100644 --- a/app/src/main/java/org/tasks/dialogs/ExportTasksDialog.java +++ b/app/src/main/java/org/tasks/dialogs/ExportTasksDialog.java @@ -5,6 +5,8 @@ import android.app.ProgressDialog; import android.os.Bundle; import android.support.annotation.NonNull; +import org.tasks.analytics.Tracker; +import org.tasks.analytics.Tracking; import org.tasks.backup.TasksJsonExporter; import org.tasks.injection.InjectingNativeDialogFragment; @@ -20,6 +22,7 @@ public class ExportTasksDialog extends InjectingNativeDialogFragment { @Inject DialogBuilder dialogBuilder; @Inject TasksJsonExporter tasksJsonExporter; + @Inject Tracker tracker; private ProgressDialog progressDialog; @@ -35,6 +38,7 @@ public class ExportTasksDialog extends InjectingNativeDialogFragment { setCancelable(false); tasksJsonExporter.exportTasks(getActivity(), TasksJsonExporter.ExportType.EXPORT_TYPE_MANUAL, progressDialog); + tracker.reportEvent(Tracking.Events.EXPORT); return progressDialog; } diff --git a/app/src/main/java/org/tasks/dialogs/ImportTasksDialog.java b/app/src/main/java/org/tasks/dialogs/ImportTasksDialog.java index 17d6a0ef5..b891d91b6 100644 --- a/app/src/main/java/org/tasks/dialogs/ImportTasksDialog.java +++ b/app/src/main/java/org/tasks/dialogs/ImportTasksDialog.java @@ -6,6 +6,8 @@ import android.os.Bundle; import com.todoroo.astrid.backup.TasksXmlImporter; +import org.tasks.analytics.Tracker; +import org.tasks.analytics.Tracking; import org.tasks.backup.TasksJsonImporter; import org.tasks.injection.InjectingNativeDialogFragment; import org.tasks.injection.NativeDialogFragmentComponent; @@ -27,6 +29,7 @@ public class ImportTasksDialog extends InjectingNativeDialogFragment { @Inject TasksXmlImporter xmlImporter; @Inject TasksJsonImporter jsonImporter; @Inject DialogBuilder dialogBuilder; + @Inject Tracker tracker; @Override public Dialog onCreateDialog(Bundle savedInstanceState) { @@ -40,8 +43,10 @@ public class ImportTasksDialog extends InjectingNativeDialogFragment { setCancelable(false); if (path.endsWith(".xml")) { xmlImporter.importTasks(getActivity(), path, progressDialog); + tracker.reportEvent(Tracking.Events.IMPORT_XML); } else { jsonImporter.importTasks(getActivity(), path, progressDialog); + tracker.reportEvent(Tracking.Events.IMPORT_JSON); } return progressDialog; } diff --git a/app/src/main/res/values/keys.xml b/app/src/main/res/values/keys.xml index a1995ac90..1fc75d39a 100644 --- a/app/src/main/res/values/keys.xml +++ b/app/src/main/res/values/keys.xml @@ -231,6 +231,7 @@ Event Error Tasker + Backup Add Start Move @@ -245,6 +246,9 @@ Preset Task created List Notification + Import XML + Import JSON + Export Night Mismatch Play Services Error