Add attachment metadata to backup file

pull/645/head 5.3.2
Alex Baker 8 years ago
parent 3dd4fef7c9
commit 9b3372f1ae

@ -33,8 +33,8 @@ android {
defaultConfig { defaultConfig {
testApplicationId "org.tasks.test" testApplicationId "org.tasks.test"
applicationId "org.tasks" applicationId "org.tasks"
versionCode 501 versionCode 504
versionName "5.3.1" versionName "5.3.2"
targetSdkVersion 27 targetSdkVersion 27
minSdkVersion 15 minSdkVersion 15
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

@ -35,7 +35,10 @@ public class Tracking {
RECURRENCE_CUSTOM(R.string.tracking_category_recurrence, R.string.tracking_action_custom), RECURRENCE_CUSTOM(R.string.tracking_category_recurrence, R.string.tracking_action_custom),
RECURRENCE_PRESET(R.string.tracking_category_recurrence, R.string.tracking_action_preset), 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_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 category;
public final int action; public final int action;

@ -9,10 +9,14 @@ import org.tasks.data.GoogleTaskList;
import org.tasks.data.Location; import org.tasks.data.Location;
import org.tasks.data.Tag; import org.tasks.data.Tag;
import org.tasks.data.TagData; import org.tasks.data.TagData;
import org.tasks.data.TaskAttachment;
import org.tasks.data.UserActivity; import org.tasks.data.UserActivity;
import java.util.Collections;
import java.util.List; import java.util.List;
import static java.util.Collections.emptyList;
public class BackupContainer { public class BackupContainer {
List<TaskBackup> tasks; List<TaskBackup> tasks;
@ -34,15 +38,21 @@ public class BackupContainer {
List<Tag> tags; List<Tag> tags;
List<GoogleTask> google; List<GoogleTask> google;
List<UserActivity> comments; List<UserActivity> comments;
private List<TaskAttachment> attachments;
TaskBackup(Task task, List<Alarm> alarms, List<Location> locations, List<Tag> tags, TaskBackup(Task task, List<Alarm> alarms, List<Location> locations, List<Tag> tags,
List<GoogleTask> google, List<UserActivity> comments) { List<GoogleTask> google, List<UserActivity> comments, List<TaskAttachment> attachments) {
this.task = task; this.task = task;
this.alarms = alarms; this.alarms = alarms;
this.locations = locations; this.locations = locations;
this.tags = tags; this.tags = tags;
this.google = google; this.google = google;
this.comments = comments; this.comments = comments;
this.attachments = attachments;
}
List<TaskAttachment> getAttachments() {
return attachments == null ? emptyList() : attachments;
} }
} }
} }

@ -24,6 +24,7 @@ import org.tasks.data.GoogleTaskListDao;
import org.tasks.data.LocationDao; import org.tasks.data.LocationDao;
import org.tasks.data.TagDao; import org.tasks.data.TagDao;
import org.tasks.data.TagDataDao; import org.tasks.data.TagDataDao;
import org.tasks.data.TaskAttachmentDao;
import org.tasks.data.UserActivityDao; import org.tasks.data.UserActivityDao;
import org.tasks.preferences.Preferences; import org.tasks.preferences.Preferences;
@ -63,6 +64,7 @@ public class TasksJsonExporter {
private final GoogleTaskDao googleTaskDao; private final GoogleTaskDao googleTaskDao;
private final FilterDao filterDao; private final FilterDao filterDao;
private final GoogleTaskListDao googleTaskListDao; private final GoogleTaskListDao googleTaskListDao;
private final TaskAttachmentDao taskAttachmentDao;
private final TaskDao taskDao; private final TaskDao taskDao;
private final UserActivityDao userActivityDao; private final UserActivityDao userActivityDao;
private final Preferences preferences; private final Preferences preferences;
@ -92,7 +94,7 @@ public class TasksJsonExporter {
public TasksJsonExporter(TagDataDao tagDataDao, TaskDao taskDao, UserActivityDao userActivityDao, public TasksJsonExporter(TagDataDao tagDataDao, TaskDao taskDao, UserActivityDao userActivityDao,
Preferences preferences, AlarmDao alarmDao, LocationDao locationDao, Preferences preferences, AlarmDao alarmDao, LocationDao locationDao,
TagDao tagDao, GoogleTaskDao googleTaskDao, FilterDao filterDao, TagDao tagDao, GoogleTaskDao googleTaskDao, FilterDao filterDao,
GoogleTaskListDao googleTaskListDao) { GoogleTaskListDao googleTaskListDao, TaskAttachmentDao taskAttachmentDao) {
this.tagDataDao = tagDataDao; this.tagDataDao = tagDataDao;
this.taskDao = taskDao; this.taskDao = taskDao;
this.userActivityDao = userActivityDao; this.userActivityDao = userActivityDao;
@ -103,6 +105,7 @@ public class TasksJsonExporter {
this.googleTaskDao = googleTaskDao; this.googleTaskDao = googleTaskDao;
this.filterDao = filterDao; this.filterDao = filterDao;
this.googleTaskListDao = googleTaskListDao; this.googleTaskListDao = googleTaskListDao;
this.taskAttachmentDao = taskAttachmentDao;
} }
public void exportTasks(final Context context, final ExportType exportType, @Nullable final ProgressDialog progressDialog) { public void exportTasks(final Context context, final ExportType exportType, @Nullable final ProgressDialog progressDialog) {
@ -155,7 +158,8 @@ public class TasksJsonExporter {
locationDao.getGeofences(taskId), locationDao.getGeofences(taskId),
tagDao.getTagsForTask(taskId), tagDao.getTagsForTask(taskId),
googleTaskDao.getAllByTaskId(taskId), googleTaskDao.getAllByTaskId(taskId),
userActivityDao.getCommentsForTask(task.getUuid()))); userActivityDao.getCommentsForTask(task.getUuid()),
taskAttachmentDao.getAttachments(task.getUuid())));
} }
Map<String, Object> data = new HashMap<>(); Map<String, Object> data = new HashMap<>();

@ -29,6 +29,8 @@ import org.tasks.data.Tag;
import org.tasks.data.TagDao; import org.tasks.data.TagDao;
import org.tasks.data.TagData; import org.tasks.data.TagData;
import org.tasks.data.TagDataDao; import org.tasks.data.TagDataDao;
import org.tasks.data.TaskAttachment;
import org.tasks.data.TaskAttachmentDao;
import org.tasks.data.UserActivity; import org.tasks.data.UserActivity;
import org.tasks.data.UserActivityDao; import org.tasks.data.UserActivityDao;
import org.tasks.dialogs.DialogBuilder; import org.tasks.dialogs.DialogBuilder;
@ -53,6 +55,7 @@ public class TasksJsonImporter {
private final GoogleTaskDao googleTaskDao; private final GoogleTaskDao googleTaskDao;
private final GoogleTaskListDao googleTaskListDao; private final GoogleTaskListDao googleTaskListDao;
private final FilterDao filterDao; private final FilterDao filterDao;
private final TaskAttachmentDao taskAttachmentDao;
private final LocationDao locationDao; private final LocationDao locationDao;
private Activity activity; private Activity activity;
@ -73,7 +76,7 @@ public class TasksJsonImporter {
DialogBuilder dialogBuilder, TaskDao taskDao, LocationDao locationDao, DialogBuilder dialogBuilder, TaskDao taskDao, LocationDao locationDao,
LocalBroadcastManager localBroadcastManager, AlarmDao alarmDao, LocalBroadcastManager localBroadcastManager, AlarmDao alarmDao,
TagDao tagDao, GoogleTaskDao googleTaskDao, GoogleTaskListDao googleTaskListDao, TagDao tagDao, GoogleTaskDao googleTaskDao, GoogleTaskListDao googleTaskListDao,
FilterDao filterDao) { FilterDao filterDao, TaskAttachmentDao taskAttachmentDao) {
this.tagDataDao = tagDataDao; this.tagDataDao = tagDataDao;
this.userActivityDao = userActivityDao; this.userActivityDao = userActivityDao;
this.dialogBuilder = dialogBuilder; this.dialogBuilder = dialogBuilder;
@ -85,6 +88,7 @@ public class TasksJsonImporter {
this.googleTaskDao = googleTaskDao; this.googleTaskDao = googleTaskDao;
this.googleTaskListDao = googleTaskListDao; this.googleTaskListDao = googleTaskListDao;
this.filterDao = filterDao; this.filterDao = filterDao;
this.taskAttachmentDao = taskAttachmentDao;
} }
public void importTasks(Activity activity, String input, ProgressDialog progressDialog) { public void importTasks(Activity activity, String input, ProgressDialog progressDialog) {
@ -160,6 +164,10 @@ public class TasksJsonImporter {
location.setTask(taskId); location.setTask(taskId);
locationDao.insert(location); locationDao.insert(location);
} }
for (TaskAttachment attachment : backup.getAttachments()) {
attachment.setTaskId(taskUuid);
taskAttachmentDao.insert(attachment);
}
importCount++; importCount++;
} }
} finally { } finally {

@ -21,7 +21,7 @@ public final class TaskAttachment {
@PrimaryKey(autoGenerate = true) @PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "_id") @ColumnInfo(name = "_id")
private Long id; private transient Long id;
@ColumnInfo(name = "remoteId") @ColumnInfo(name = "remoteId")
private String remoteId = Task.NO_UUID; private String remoteId = Task.NO_UUID;

@ -5,6 +5,8 @@ import android.app.ProgressDialog;
import android.os.Bundle; import android.os.Bundle;
import android.support.annotation.NonNull; import android.support.annotation.NonNull;
import org.tasks.analytics.Tracker;
import org.tasks.analytics.Tracking;
import org.tasks.backup.TasksJsonExporter; import org.tasks.backup.TasksJsonExporter;
import org.tasks.injection.InjectingNativeDialogFragment; import org.tasks.injection.InjectingNativeDialogFragment;
@ -20,6 +22,7 @@ public class ExportTasksDialog extends InjectingNativeDialogFragment {
@Inject DialogBuilder dialogBuilder; @Inject DialogBuilder dialogBuilder;
@Inject TasksJsonExporter tasksJsonExporter; @Inject TasksJsonExporter tasksJsonExporter;
@Inject Tracker tracker;
private ProgressDialog progressDialog; private ProgressDialog progressDialog;
@ -35,6 +38,7 @@ public class ExportTasksDialog extends InjectingNativeDialogFragment {
setCancelable(false); setCancelable(false);
tasksJsonExporter.exportTasks(getActivity(), TasksJsonExporter.ExportType.EXPORT_TYPE_MANUAL, progressDialog); tasksJsonExporter.exportTasks(getActivity(), TasksJsonExporter.ExportType.EXPORT_TYPE_MANUAL, progressDialog);
tracker.reportEvent(Tracking.Events.EXPORT);
return progressDialog; return progressDialog;
} }

@ -6,6 +6,8 @@ import android.os.Bundle;
import com.todoroo.astrid.backup.TasksXmlImporter; import com.todoroo.astrid.backup.TasksXmlImporter;
import org.tasks.analytics.Tracker;
import org.tasks.analytics.Tracking;
import org.tasks.backup.TasksJsonImporter; import org.tasks.backup.TasksJsonImporter;
import org.tasks.injection.InjectingNativeDialogFragment; import org.tasks.injection.InjectingNativeDialogFragment;
import org.tasks.injection.NativeDialogFragmentComponent; import org.tasks.injection.NativeDialogFragmentComponent;
@ -27,6 +29,7 @@ public class ImportTasksDialog extends InjectingNativeDialogFragment {
@Inject TasksXmlImporter xmlImporter; @Inject TasksXmlImporter xmlImporter;
@Inject TasksJsonImporter jsonImporter; @Inject TasksJsonImporter jsonImporter;
@Inject DialogBuilder dialogBuilder; @Inject DialogBuilder dialogBuilder;
@Inject Tracker tracker;
@Override @Override
public Dialog onCreateDialog(Bundle savedInstanceState) { public Dialog onCreateDialog(Bundle savedInstanceState) {
@ -40,8 +43,10 @@ public class ImportTasksDialog extends InjectingNativeDialogFragment {
setCancelable(false); setCancelable(false);
if (path.endsWith(".xml")) { if (path.endsWith(".xml")) {
xmlImporter.importTasks(getActivity(), path, progressDialog); xmlImporter.importTasks(getActivity(), path, progressDialog);
tracker.reportEvent(Tracking.Events.IMPORT_XML);
} else { } else {
jsonImporter.importTasks(getActivity(), path, progressDialog); jsonImporter.importTasks(getActivity(), path, progressDialog);
tracker.reportEvent(Tracking.Events.IMPORT_JSON);
} }
return progressDialog; return progressDialog;
} }

@ -231,6 +231,7 @@
<string name="tracking_category_event">Event</string> <string name="tracking_category_event">Event</string>
<string name="tracking_category_error">Error</string> <string name="tracking_category_error">Error</string>
<string name="tracking_category_tasker">Tasker</string> <string name="tracking_category_tasker">Tasker</string>
<string name="tracking_category_backup">Backup</string>
<string name="tracking_action_add">Add</string> <string name="tracking_action_add">Add</string>
<string name="tracking_action_start">Start</string> <string name="tracking_action_start">Start</string>
<string name="tracking_action_move">Move</string> <string name="tracking_action_move">Move</string>
@ -245,6 +246,9 @@
<string name="tracking_action_preset">Preset</string> <string name="tracking_action_preset">Preset</string>
<string name="tracking_action_task_created">Task created</string> <string name="tracking_action_task_created">Task created</string>
<string name="tracking_action_list_notification">List Notification</string> <string name="tracking_action_list_notification">List Notification</string>
<string name="tracking_action_import_xml">Import XML</string>
<string name="tracking_action_import_json">Import JSON</string>
<string name="tracking_action_export">Export</string>
<string name="tracking_event_night_mode_mismatch">Night Mismatch</string> <string name="tracking_event_night_mode_mismatch">Night Mismatch</string>
<string name="tracking_event_play_services_error">Play Services Error</string> <string name="tracking_event_play_services_error">Play Services Error</string>

Loading…
Cancel
Save