Merge tag '5.3.2'

pull/645/head
Alex Baker 7 years ago
commit 08e3a09c3c

@ -22,8 +22,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;

@ -11,10 +11,13 @@ 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.List; import java.util.List;
import static java.util.Collections.emptyList;
public class BackupContainer { public class BackupContainer {
List<TaskBackup> tasks; List<TaskBackup> tasks;
@ -39,17 +42,28 @@ public class BackupContainer {
List<Tag> tags; List<Tag> tags;
List<GoogleTask> google; List<GoogleTask> google;
List<UserActivity> comments; List<UserActivity> comments;
List<CaldavTask> caldavTasks; private List<TaskAttachment> attachments;
private List<CaldavTask> caldavTasks;
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<CaldavTask> caldavTasks) { List<GoogleTask> google, List<UserActivity> comments, List<TaskAttachment> attachments,
List<CaldavTask> caldavTasks) {
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;
this.caldavTasks = caldavTasks; this.caldavTasks = caldavTasks;
} }
List<TaskAttachment> getAttachments() {
return attachments == null ? emptyList() : attachments;
}
List<CaldavTask> getCaldavTasks() {
return caldavTasks == null ? emptyList() : caldavTasks;
}
} }
} }

@ -25,6 +25,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;
@ -64,6 +65,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 CaldavDao caldavDao; private final CaldavDao caldavDao;
private final TaskDao taskDao; private final TaskDao taskDao;
private final UserActivityDao userActivityDao; private final UserActivityDao userActivityDao;
@ -94,7 +96,8 @@ 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, CaldavDao caldavDao) { GoogleTaskListDao googleTaskListDao, TaskAttachmentDao taskAttachmentDao,
CaldavDao caldavDao) {
this.tagDataDao = tagDataDao; this.tagDataDao = tagDataDao;
this.taskDao = taskDao; this.taskDao = taskDao;
this.userActivityDao = userActivityDao; this.userActivityDao = userActivityDao;
@ -105,6 +108,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;
this.caldavDao = caldavDao; this.caldavDao = caldavDao;
} }
@ -159,6 +163,7 @@ public class TasksJsonExporter {
tagDao.getTagsForTask(taskId), tagDao.getTagsForTask(taskId),
googleTaskDao.getAllByTaskId(taskId), googleTaskDao.getAllByTaskId(taskId),
userActivityDao.getCommentsForTask(task.getUuid()), userActivityDao.getCommentsForTask(task.getUuid()),
taskAttachmentDao.getAttachments(task.getUuid()),
caldavDao.getTasks(taskId))); caldavDao.getTasks(taskId)));
} }

@ -32,6 +32,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;
@ -56,6 +58,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 CaldavDao caldavDao; private final CaldavDao caldavDao;
private final LocationDao locationDao; private final LocationDao locationDao;
@ -77,7 +80,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, CaldavDao caldavDao) { FilterDao filterDao, TaskAttachmentDao taskAttachmentDao, CaldavDao caldavDao) {
this.tagDataDao = tagDataDao; this.tagDataDao = tagDataDao;
this.userActivityDao = userActivityDao; this.userActivityDao = userActivityDao;
this.dialogBuilder = dialogBuilder; this.dialogBuilder = dialogBuilder;
@ -89,6 +92,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;
this.caldavDao = caldavDao; this.caldavDao = caldavDao;
} }
@ -170,7 +174,11 @@ public class TasksJsonImporter {
location.setTask(taskId); location.setTask(taskId);
locationDao.insert(location); locationDao.insert(location);
} }
for (CaldavTask caldavTask : backup.caldavTasks) { for (TaskAttachment attachment : backup.getAttachments()) {
attachment.setTaskId(taskUuid);
taskAttachmentDao.insert(attachment);
}
for (CaldavTask caldavTask : backup.getCaldavTasks()) {
caldavTask.setTask(taskId); caldavTask.setTask(taskId);
caldavDao.insert(caldavTask); caldavDao.insert(caldavTask);
} }

@ -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