diff --git a/app/schemas/com.todoroo.astrid.dao.Database/84.json b/app/schemas/com.todoroo.astrid.dao.Database/84.json
new file mode 100644
index 000000000..c5aceab6a
--- /dev/null
+++ b/app/schemas/com.todoroo.astrid.dao.Database/84.json
@@ -0,0 +1,1417 @@
+{
+ "formatVersion": 1,
+ "database": {
+ "version": 84,
+ "identityHash": "14fb5c5a0c4aa58778c5ad68a8e3c0d3",
+ "entities": [
+ {
+ "tableName": "notification",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`uid` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `task` INTEGER NOT NULL, `timestamp` INTEGER NOT NULL, `type` INTEGER NOT NULL, `location` INTEGER, FOREIGN KEY(`task`) REFERENCES `tasks`(`_id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
+ "fields": [
+ {
+ "fieldPath": "uid",
+ "columnName": "uid",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "taskId",
+ "columnName": "task",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "timestamp",
+ "columnName": "timestamp",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "location",
+ "columnName": "location",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "columnNames": [
+ "uid"
+ ],
+ "autoGenerate": true
+ },
+ "indices": [
+ {
+ "name": "index_notification_task",
+ "unique": true,
+ "columnNames": [
+ "task"
+ ],
+ "orders": [],
+ "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_notification_task` ON `${TABLE_NAME}` (`task`)"
+ }
+ ],
+ "foreignKeys": [
+ {
+ "table": "tasks",
+ "onDelete": "CASCADE",
+ "onUpdate": "NO ACTION",
+ "columns": [
+ "task"
+ ],
+ "referencedColumns": [
+ "_id"
+ ]
+ }
+ ]
+ },
+ {
+ "tableName": "tagdata",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `remoteId` TEXT, `name` TEXT, `color` INTEGER, `tagOrdering` TEXT, `td_icon` INTEGER, `td_order` INTEGER NOT NULL)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remoteId",
+ "columnName": "remoteId",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "color",
+ "columnName": "color",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "tagOrdering",
+ "columnName": "tagOrdering",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "icon",
+ "columnName": "td_icon",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "order",
+ "columnName": "td_order",
+ "affinity": "INTEGER",
+ "notNull": true
+ }
+ ],
+ "primaryKey": {
+ "columnNames": [
+ "_id"
+ ],
+ "autoGenerate": true
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "userActivity",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `remoteId` TEXT, `message` TEXT, `picture` TEXT, `target_id` TEXT, `created_at` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remoteId",
+ "columnName": "remoteId",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "message",
+ "columnName": "message",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "picture",
+ "columnName": "picture",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "targetId",
+ "columnName": "target_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "created",
+ "columnName": "created_at",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "columnNames": [
+ "_id"
+ ],
+ "autoGenerate": true
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "task_attachments",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `remoteId` TEXT, `task_id` TEXT, `name` TEXT, `path` TEXT, `content_type` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remoteId",
+ "columnName": "remoteId",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "taskId",
+ "columnName": "task_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uri",
+ "columnName": "path",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "contentType",
+ "columnName": "content_type",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "columnNames": [
+ "_id"
+ ],
+ "autoGenerate": true
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "task_list_metadata",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `tag_uuid` TEXT, `filter` TEXT, `task_ids` TEXT)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "tagUuid",
+ "columnName": "tag_uuid",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "filter",
+ "columnName": "filter",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "taskIds",
+ "columnName": "task_ids",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "columnNames": [
+ "_id"
+ ],
+ "autoGenerate": true
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "tasks",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `title` TEXT, `importance` INTEGER NOT NULL, `dueDate` INTEGER NOT NULL, `hideUntil` INTEGER NOT NULL, `created` INTEGER NOT NULL, `modified` INTEGER NOT NULL, `completed` INTEGER NOT NULL, `deleted` INTEGER NOT NULL, `notes` TEXT, `estimatedSeconds` INTEGER NOT NULL, `elapsedSeconds` INTEGER NOT NULL, `timerStart` INTEGER NOT NULL, `notificationFlags` INTEGER NOT NULL, `lastNotified` INTEGER NOT NULL, `recurrence` TEXT, `repeatUntil` INTEGER NOT NULL, `calendarUri` TEXT, `remoteId` TEXT, `collapsed` INTEGER NOT NULL, `parent` INTEGER NOT NULL)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "title",
+ "columnName": "title",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "priority",
+ "columnName": "importance",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "dueDate",
+ "columnName": "dueDate",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "hideUntil",
+ "columnName": "hideUntil",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "creationDate",
+ "columnName": "created",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "modificationDate",
+ "columnName": "modified",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "completionDate",
+ "columnName": "completed",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "deletionDate",
+ "columnName": "deleted",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "notes",
+ "columnName": "notes",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "estimatedSeconds",
+ "columnName": "estimatedSeconds",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "elapsedSeconds",
+ "columnName": "elapsedSeconds",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "timerStart",
+ "columnName": "timerStart",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "ringFlags",
+ "columnName": "notificationFlags",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "reminderLast",
+ "columnName": "lastNotified",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "recurrence",
+ "columnName": "recurrence",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "repeatUntil",
+ "columnName": "repeatUntil",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "calendarURI",
+ "columnName": "calendarUri",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remoteId",
+ "columnName": "remoteId",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isCollapsed",
+ "columnName": "collapsed",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "parent",
+ "columnName": "parent",
+ "affinity": "INTEGER",
+ "notNull": true
+ }
+ ],
+ "primaryKey": {
+ "columnNames": [
+ "_id"
+ ],
+ "autoGenerate": true
+ },
+ "indices": [
+ {
+ "name": "t_rid",
+ "unique": true,
+ "columnNames": [
+ "remoteId"
+ ],
+ "orders": [],
+ "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `t_rid` ON `${TABLE_NAME}` (`remoteId`)"
+ },
+ {
+ "name": "active_and_visible",
+ "unique": false,
+ "columnNames": [
+ "completed",
+ "deleted",
+ "hideUntil"
+ ],
+ "orders": [],
+ "createSql": "CREATE INDEX IF NOT EXISTS `active_and_visible` ON `${TABLE_NAME}` (`completed`, `deleted`, `hideUntil`)"
+ }
+ ],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "alarms",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `task` INTEGER NOT NULL, `time` INTEGER NOT NULL, `type` INTEGER NOT NULL DEFAULT 0, `repeat` INTEGER NOT NULL DEFAULT 0, `interval` INTEGER NOT NULL DEFAULT 0, FOREIGN KEY(`task`) REFERENCES `tasks`(`_id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "task",
+ "columnName": "task",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "time",
+ "columnName": "time",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "type",
+ "columnName": "type",
+ "affinity": "INTEGER",
+ "notNull": true,
+ "defaultValue": "0"
+ },
+ {
+ "fieldPath": "repeat",
+ "columnName": "repeat",
+ "affinity": "INTEGER",
+ "notNull": true,
+ "defaultValue": "0"
+ },
+ {
+ "fieldPath": "interval",
+ "columnName": "interval",
+ "affinity": "INTEGER",
+ "notNull": true,
+ "defaultValue": "0"
+ }
+ ],
+ "primaryKey": {
+ "columnNames": [
+ "_id"
+ ],
+ "autoGenerate": true
+ },
+ "indices": [
+ {
+ "name": "index_alarms_task",
+ "unique": false,
+ "columnNames": [
+ "task"
+ ],
+ "orders": [],
+ "createSql": "CREATE INDEX IF NOT EXISTS `index_alarms_task` ON `${TABLE_NAME}` (`task`)"
+ }
+ ],
+ "foreignKeys": [
+ {
+ "table": "tasks",
+ "onDelete": "CASCADE",
+ "onUpdate": "NO ACTION",
+ "columns": [
+ "task"
+ ],
+ "referencedColumns": [
+ "_id"
+ ]
+ }
+ ]
+ },
+ {
+ "tableName": "places",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`place_id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `uid` TEXT, `name` TEXT, `address` TEXT, `phone` TEXT, `url` TEXT, `latitude` REAL NOT NULL, `longitude` REAL NOT NULL, `place_color` INTEGER NOT NULL, `place_icon` INTEGER NOT NULL, `place_order` INTEGER NOT NULL, `radius` INTEGER NOT NULL DEFAULT 250)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "place_id",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "uid",
+ "columnName": "uid",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "address",
+ "columnName": "address",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "phone",
+ "columnName": "phone",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "url",
+ "columnName": "url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "latitude",
+ "columnName": "latitude",
+ "affinity": "REAL",
+ "notNull": true
+ },
+ {
+ "fieldPath": "longitude",
+ "columnName": "longitude",
+ "affinity": "REAL",
+ "notNull": true
+ },
+ {
+ "fieldPath": "color",
+ "columnName": "place_color",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "icon",
+ "columnName": "place_icon",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "order",
+ "columnName": "place_order",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "radius",
+ "columnName": "radius",
+ "affinity": "INTEGER",
+ "notNull": true,
+ "defaultValue": "250"
+ }
+ ],
+ "primaryKey": {
+ "columnNames": [
+ "place_id"
+ ],
+ "autoGenerate": true
+ },
+ "indices": [
+ {
+ "name": "place_uid",
+ "unique": true,
+ "columnNames": [
+ "uid"
+ ],
+ "orders": [],
+ "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `place_uid` ON `${TABLE_NAME}` (`uid`)"
+ }
+ ],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "geofences",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`geofence_id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `task` INTEGER NOT NULL, `place` TEXT, `arrival` INTEGER NOT NULL, `departure` INTEGER NOT NULL, FOREIGN KEY(`task`) REFERENCES `tasks`(`_id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "geofence_id",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "task",
+ "columnName": "task",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "place",
+ "columnName": "place",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isArrival",
+ "columnName": "arrival",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "isDeparture",
+ "columnName": "departure",
+ "affinity": "INTEGER",
+ "notNull": true
+ }
+ ],
+ "primaryKey": {
+ "columnNames": [
+ "geofence_id"
+ ],
+ "autoGenerate": true
+ },
+ "indices": [
+ {
+ "name": "index_geofences_task",
+ "unique": false,
+ "columnNames": [
+ "task"
+ ],
+ "orders": [],
+ "createSql": "CREATE INDEX IF NOT EXISTS `index_geofences_task` ON `${TABLE_NAME}` (`task`)"
+ }
+ ],
+ "foreignKeys": [
+ {
+ "table": "tasks",
+ "onDelete": "CASCADE",
+ "onUpdate": "NO ACTION",
+ "columns": [
+ "task"
+ ],
+ "referencedColumns": [
+ "_id"
+ ]
+ }
+ ]
+ },
+ {
+ "tableName": "tags",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `task` INTEGER NOT NULL, `name` TEXT, `tag_uid` TEXT, `task_uid` TEXT, FOREIGN KEY(`task`) REFERENCES `tasks`(`_id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "task",
+ "columnName": "task",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "tagUid",
+ "columnName": "tag_uid",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "taskUid",
+ "columnName": "task_uid",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "columnNames": [
+ "_id"
+ ],
+ "autoGenerate": true
+ },
+ "indices": [
+ {
+ "name": "index_tags_task",
+ "unique": false,
+ "columnNames": [
+ "task"
+ ],
+ "orders": [],
+ "createSql": "CREATE INDEX IF NOT EXISTS `index_tags_task` ON `${TABLE_NAME}` (`task`)"
+ }
+ ],
+ "foreignKeys": [
+ {
+ "table": "tasks",
+ "onDelete": "CASCADE",
+ "onUpdate": "NO ACTION",
+ "columns": [
+ "task"
+ ],
+ "referencedColumns": [
+ "_id"
+ ]
+ }
+ ]
+ },
+ {
+ "tableName": "google_tasks",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`gt_id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `gt_task` INTEGER NOT NULL, `gt_remote_id` TEXT, `gt_list_id` TEXT, `gt_parent` INTEGER NOT NULL, `gt_remote_parent` TEXT, `gt_moved` INTEGER NOT NULL, `gt_order` INTEGER NOT NULL, `gt_remote_order` INTEGER NOT NULL, `gt_last_sync` INTEGER NOT NULL, `gt_deleted` INTEGER NOT NULL, FOREIGN KEY(`gt_task`) REFERENCES `tasks`(`_id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "gt_id",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "task",
+ "columnName": "gt_task",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "remoteId",
+ "columnName": "gt_remote_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "listId",
+ "columnName": "gt_list_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "parent",
+ "columnName": "gt_parent",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "remoteParent",
+ "columnName": "gt_remote_parent",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isMoved",
+ "columnName": "gt_moved",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "order",
+ "columnName": "gt_order",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "remoteOrder",
+ "columnName": "gt_remote_order",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "lastSync",
+ "columnName": "gt_last_sync",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "deleted",
+ "columnName": "gt_deleted",
+ "affinity": "INTEGER",
+ "notNull": true
+ }
+ ],
+ "primaryKey": {
+ "columnNames": [
+ "gt_id"
+ ],
+ "autoGenerate": true
+ },
+ "indices": [
+ {
+ "name": "gt_list_parent",
+ "unique": false,
+ "columnNames": [
+ "gt_list_id",
+ "gt_parent"
+ ],
+ "orders": [],
+ "createSql": "CREATE INDEX IF NOT EXISTS `gt_list_parent` ON `${TABLE_NAME}` (`gt_list_id`, `gt_parent`)"
+ },
+ {
+ "name": "index_google_tasks_gt_task",
+ "unique": false,
+ "columnNames": [
+ "gt_task"
+ ],
+ "orders": [],
+ "createSql": "CREATE INDEX IF NOT EXISTS `index_google_tasks_gt_task` ON `${TABLE_NAME}` (`gt_task`)"
+ }
+ ],
+ "foreignKeys": [
+ {
+ "table": "tasks",
+ "onDelete": "CASCADE",
+ "onUpdate": "NO ACTION",
+ "columns": [
+ "gt_task"
+ ],
+ "referencedColumns": [
+ "_id"
+ ]
+ }
+ ]
+ },
+ {
+ "tableName": "filters",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `title` TEXT, `sql` TEXT, `values` TEXT, `criterion` TEXT, `f_color` INTEGER, `f_icon` INTEGER, `f_order` INTEGER NOT NULL)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "_id",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "title",
+ "columnName": "title",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "sql",
+ "columnName": "sql",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "values",
+ "columnName": "values",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "criterion",
+ "columnName": "criterion",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "color",
+ "columnName": "f_color",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "icon",
+ "columnName": "f_icon",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "order",
+ "columnName": "f_order",
+ "affinity": "INTEGER",
+ "notNull": true
+ }
+ ],
+ "primaryKey": {
+ "columnNames": [
+ "_id"
+ ],
+ "autoGenerate": true
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "google_task_lists",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`gtl_id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `gtl_account` TEXT, `gtl_remote_id` TEXT, `gtl_title` TEXT, `gtl_remote_order` INTEGER NOT NULL, `gtl_last_sync` INTEGER NOT NULL, `gtl_color` INTEGER, `gtl_icon` INTEGER)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "gtl_id",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "account",
+ "columnName": "gtl_account",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remoteId",
+ "columnName": "gtl_remote_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "title",
+ "columnName": "gtl_title",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "order",
+ "columnName": "gtl_remote_order",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "lastSync",
+ "columnName": "gtl_last_sync",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "color",
+ "columnName": "gtl_color",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "icon",
+ "columnName": "gtl_icon",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "columnNames": [
+ "gtl_id"
+ ],
+ "autoGenerate": true
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "caldav_lists",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`cdl_id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `cdl_account` TEXT, `cdl_uuid` TEXT, `cdl_name` TEXT, `cdl_color` INTEGER NOT NULL, `cdl_ctag` TEXT, `cdl_url` TEXT, `cdl_icon` INTEGER, `cdl_order` INTEGER NOT NULL, `cdl_access` INTEGER NOT NULL)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "cdl_id",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "account",
+ "columnName": "cdl_account",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "uuid",
+ "columnName": "cdl_uuid",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "cdl_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "color",
+ "columnName": "cdl_color",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "ctag",
+ "columnName": "cdl_ctag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "url",
+ "columnName": "cdl_url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "icon",
+ "columnName": "cdl_icon",
+ "affinity": "INTEGER",
+ "notNull": false
+ },
+ {
+ "fieldPath": "order",
+ "columnName": "cdl_order",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "access",
+ "columnName": "cdl_access",
+ "affinity": "INTEGER",
+ "notNull": true
+ }
+ ],
+ "primaryKey": {
+ "columnNames": [
+ "cdl_id"
+ ],
+ "autoGenerate": true
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "caldav_tasks",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`cd_id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `cd_task` INTEGER NOT NULL, `cd_calendar` TEXT, `cd_object` TEXT, `cd_remote_id` TEXT, `cd_etag` TEXT, `cd_last_sync` INTEGER NOT NULL, `cd_deleted` INTEGER NOT NULL, `cd_remote_parent` TEXT, `cd_order` INTEGER, FOREIGN KEY(`cd_task`) REFERENCES `tasks`(`_id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "cd_id",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "task",
+ "columnName": "cd_task",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "calendar",
+ "columnName": "cd_calendar",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "object",
+ "columnName": "cd_object",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "remoteId",
+ "columnName": "cd_remote_id",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "cd_etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "lastSync",
+ "columnName": "cd_last_sync",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "deleted",
+ "columnName": "cd_deleted",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "remoteParent",
+ "columnName": "cd_remote_parent",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "order",
+ "columnName": "cd_order",
+ "affinity": "INTEGER",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "columnNames": [
+ "cd_id"
+ ],
+ "autoGenerate": true
+ },
+ "indices": [
+ {
+ "name": "index_caldav_tasks_cd_task",
+ "unique": false,
+ "columnNames": [
+ "cd_task"
+ ],
+ "orders": [],
+ "createSql": "CREATE INDEX IF NOT EXISTS `index_caldav_tasks_cd_task` ON `${TABLE_NAME}` (`cd_task`)"
+ }
+ ],
+ "foreignKeys": [
+ {
+ "table": "tasks",
+ "onDelete": "CASCADE",
+ "onUpdate": "NO ACTION",
+ "columns": [
+ "cd_task"
+ ],
+ "referencedColumns": [
+ "_id"
+ ]
+ }
+ ]
+ },
+ {
+ "tableName": "caldav_accounts",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`cda_id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `cda_uuid` TEXT, `cda_name` TEXT, `cda_url` TEXT, `cda_username` TEXT, `cda_password` TEXT, `cda_error` TEXT, `cda_account_type` INTEGER NOT NULL, `cda_collapsed` INTEGER NOT NULL, `cda_server_type` INTEGER NOT NULL)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "cda_id",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "uuid",
+ "columnName": "cda_uuid",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "name",
+ "columnName": "cda_name",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "url",
+ "columnName": "cda_url",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "username",
+ "columnName": "cda_username",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "password",
+ "columnName": "cda_password",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "error",
+ "columnName": "cda_error",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "accountType",
+ "columnName": "cda_account_type",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "isCollapsed",
+ "columnName": "cda_collapsed",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "serverType",
+ "columnName": "cda_server_type",
+ "affinity": "INTEGER",
+ "notNull": true
+ }
+ ],
+ "primaryKey": {
+ "columnNames": [
+ "cda_id"
+ ],
+ "autoGenerate": true
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "google_task_accounts",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`gta_id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `gta_account` TEXT, `gta_error` TEXT, `gta_etag` TEXT, `gta_collapsed` INTEGER NOT NULL)",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "gta_id",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "account",
+ "columnName": "gta_account",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "error",
+ "columnName": "gta_error",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "etag",
+ "columnName": "gta_etag",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "isCollapsed",
+ "columnName": "gta_collapsed",
+ "affinity": "INTEGER",
+ "notNull": true
+ }
+ ],
+ "primaryKey": {
+ "columnNames": [
+ "gta_id"
+ ],
+ "autoGenerate": true
+ },
+ "indices": [],
+ "foreignKeys": []
+ },
+ {
+ "tableName": "principals",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `account` INTEGER NOT NULL, `href` TEXT NOT NULL, `email` TEXT, `display_name` TEXT, FOREIGN KEY(`account`) REFERENCES `caldav_accounts`(`cda_id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "id",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "account",
+ "columnName": "account",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "href",
+ "columnName": "href",
+ "affinity": "TEXT",
+ "notNull": true
+ },
+ {
+ "fieldPath": "email",
+ "columnName": "email",
+ "affinity": "TEXT",
+ "notNull": false
+ },
+ {
+ "fieldPath": "displayName",
+ "columnName": "display_name",
+ "affinity": "TEXT",
+ "notNull": false
+ }
+ ],
+ "primaryKey": {
+ "columnNames": [
+ "id"
+ ],
+ "autoGenerate": true
+ },
+ "indices": [
+ {
+ "name": "index_principals_account_href",
+ "unique": true,
+ "columnNames": [
+ "account",
+ "href"
+ ],
+ "orders": [],
+ "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_principals_account_href` ON `${TABLE_NAME}` (`account`, `href`)"
+ }
+ ],
+ "foreignKeys": [
+ {
+ "table": "caldav_accounts",
+ "onDelete": "CASCADE",
+ "onUpdate": "NO ACTION",
+ "columns": [
+ "account"
+ ],
+ "referencedColumns": [
+ "cda_id"
+ ]
+ }
+ ]
+ },
+ {
+ "tableName": "principal_access",
+ "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `principal` INTEGER NOT NULL, `list` INTEGER NOT NULL, `invite` INTEGER NOT NULL, `access` INTEGER NOT NULL, FOREIGN KEY(`principal`) REFERENCES `principals`(`id`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`list`) REFERENCES `caldav_lists`(`cdl_id`) ON UPDATE NO ACTION ON DELETE CASCADE )",
+ "fields": [
+ {
+ "fieldPath": "id",
+ "columnName": "id",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "principal",
+ "columnName": "principal",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "list",
+ "columnName": "list",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "invite",
+ "columnName": "invite",
+ "affinity": "INTEGER",
+ "notNull": true
+ },
+ {
+ "fieldPath": "access",
+ "columnName": "access",
+ "affinity": "INTEGER",
+ "notNull": true
+ }
+ ],
+ "primaryKey": {
+ "columnNames": [
+ "id"
+ ],
+ "autoGenerate": true
+ },
+ "indices": [
+ {
+ "name": "index_principal_access_list_principal",
+ "unique": true,
+ "columnNames": [
+ "list",
+ "principal"
+ ],
+ "orders": [],
+ "createSql": "CREATE UNIQUE INDEX IF NOT EXISTS `index_principal_access_list_principal` ON `${TABLE_NAME}` (`list`, `principal`)"
+ },
+ {
+ "name": "index_principal_access_principal",
+ "unique": false,
+ "columnNames": [
+ "principal"
+ ],
+ "orders": [],
+ "createSql": "CREATE INDEX IF NOT EXISTS `index_principal_access_principal` ON `${TABLE_NAME}` (`principal`)"
+ }
+ ],
+ "foreignKeys": [
+ {
+ "table": "principals",
+ "onDelete": "CASCADE",
+ "onUpdate": "NO ACTION",
+ "columns": [
+ "principal"
+ ],
+ "referencedColumns": [
+ "id"
+ ]
+ },
+ {
+ "table": "caldav_lists",
+ "onDelete": "CASCADE",
+ "onUpdate": "NO ACTION",
+ "columns": [
+ "list"
+ ],
+ "referencedColumns": [
+ "cdl_id"
+ ]
+ }
+ ]
+ }
+ ],
+ "views": [],
+ "setupQueries": [
+ "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)",
+ "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '14fb5c5a0c4aa58778c5ad68a8e3c0d3')"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/todoroo/astrid/dao/Database.kt b/app/src/main/java/com/todoroo/astrid/dao/Database.kt
index 97928758e..acc501476 100644
--- a/app/src/main/java/com/todoroo/astrid/dao/Database.kt
+++ b/app/src/main/java/com/todoroo/astrid/dao/Database.kt
@@ -65,8 +65,9 @@ import org.tasks.notifications.NotificationDao
],
autoMigrations = [
AutoMigration(from = 82, to = 83, spec = Migrations.AutoMigrate82to83::class),
+ AutoMigration(from = 83, to = 84, spec = Migrations.AutoMigrate83to84::class),
],
- version = 83
+ version = 84
)
abstract class Database : RoomDatabase() {
abstract fun notificationDao(): NotificationDao
diff --git a/app/src/main/java/org/tasks/caldav/BaseCaldavAccountSettingsActivity.kt b/app/src/main/java/org/tasks/caldav/BaseCaldavAccountSettingsActivity.kt
index 6d63cd067..05176d573 100644
--- a/app/src/main/java/org/tasks/caldav/BaseCaldavAccountSettingsActivity.kt
+++ b/app/src/main/java/org/tasks/caldav/BaseCaldavAccountSettingsActivity.kt
@@ -10,6 +10,7 @@ import android.view.MenuItem
import android.view.View
import android.view.inputmethod.InputMethodManager
import androidx.annotation.StringRes
+import androidx.appcompat.content.res.AppCompatResources
import androidx.appcompat.widget.Toolbar
import androidx.core.content.ContextCompat
import androidx.core.widget.addTextChangedListener
@@ -79,12 +80,11 @@ abstract class BaseCaldavAccountSettingsActivity : ThemedInjectingAppCompatActiv
if (!isNullOrEmpty(it.password)) {
binding.password.setText(PASSWORD_MASK)
}
- binding.repeat.isChecked = it.isSuppressRepeatingTasks
}
}
val toolbar = binding.toolbar.toolbar
toolbar.title = if (caldavAccount == null) getString(R.string.add_account) else caldavAccount!!.name
- toolbar.navigationIcon = getDrawable(R.drawable.ic_outline_save_24px)
+ toolbar.navigationIcon = AppCompatResources.getDrawable(this, R.drawable.ic_outline_save_24px)
toolbar.setNavigationOnClickListener { save() }
toolbar.inflateMenu(menuRes)
toolbar.setOnMenuItemClickListener(this)
@@ -283,11 +283,8 @@ abstract class BaseCaldavAccountSettingsActivity : ThemedInjectingAppCompatActiv
(!isNullOrEmpty(binding.name.text.toString().trim { it <= ' ' })
|| !isNullOrEmpty(newPassword)
|| !isNullOrEmpty(binding.url.text.toString().trim { it <= ' ' })
- || !isNullOrEmpty(newUsername)
- || binding.repeat.isChecked)
- } else needsValidation()
- || newName != caldavAccount!!.name
- || binding.repeat.isChecked != caldavAccount!!.isSuppressRepeatingTasks
+ || !isNullOrEmpty(newUsername))
+ } else needsValidation() || newName != caldavAccount!!.name
}
protected open fun needsValidation(): Boolean =
diff --git a/app/src/main/java/org/tasks/caldav/CaldavAccountSettingsActivity.kt b/app/src/main/java/org/tasks/caldav/CaldavAccountSettingsActivity.kt
index 96fbd12c3..575daa417 100644
--- a/app/src/main/java/org/tasks/caldav/CaldavAccountSettingsActivity.kt
+++ b/app/src/main/java/org/tasks/caldav/CaldavAccountSettingsActivity.kt
@@ -63,7 +63,6 @@ class CaldavAccountSettingsActivity : BaseCaldavAccountSettingsActivity(), Toolb
if (passwordChanged()) {
caldavAccount!!.password = encryption.encrypt(newPassword!!)
}
- caldavAccount!!.isSuppressRepeatingTasks = binding.repeat.isChecked
caldavDao.update(caldavAccount!!)
setResult(Activity.RESULT_OK)
finish()
diff --git a/app/src/main/java/org/tasks/data/CaldavAccount.kt b/app/src/main/java/org/tasks/data/CaldavAccount.kt
index f4144d03b..c50053641 100644
--- a/app/src/main/java/org/tasks/data/CaldavAccount.kt
+++ b/app/src/main/java/org/tasks/data/CaldavAccount.kt
@@ -54,14 +54,6 @@ class CaldavAccount : Parcelable {
@Transient
var error: String? = ""
- @ColumnInfo(name = "cda_repeat")
- var isSuppressRepeatingTasks = false
-
- @Deprecated("use etebase")
- @ColumnInfo(name = "cda_encryption_key")
- @Transient
- var encryptionKey: String? = null
-
@ColumnInfo(name = "cda_account_type")
var accountType = TYPE_CALDAV
@@ -82,9 +74,7 @@ class CaldavAccount : Parcelable {
username = source.readString()
password = source.readString()
error = source.readString()
- isSuppressRepeatingTasks = ParcelCompat.readBoolean(source)
accountType = source.readInt()
- encryptionKey = source.readString()
isCollapsed = ParcelCompat.readBoolean(source)
serverType = source.readInt()
}
@@ -93,11 +83,6 @@ class CaldavAccount : Parcelable {
return encryption.decrypt(password) ?: ""
}
- @Deprecated("use etebase")
- fun getEncryptionPassword(encryption: KeyStoreEncryption): String {
- return encryption.decrypt(encryptionKey) ?: ""
- }
-
val isCaldavAccount: Boolean
get() = accountType == TYPE_CALDAV
@@ -105,10 +90,10 @@ class CaldavAccount : Parcelable {
val isEteSyncAccount: Boolean
get() = accountType == TYPE_ETESYNC
- val isEtebaseAccount: Boolean
+ private val isEtebaseAccount: Boolean
get() = accountType == TYPE_ETEBASE
- val isOpenTasks: Boolean
+ private val isOpenTasks: Boolean
get() = accountType == TYPE_OPENTASKS
val isTasksOrg: Boolean
@@ -130,6 +115,9 @@ class CaldavAccount : Parcelable {
else -> throw IllegalArgumentException("Unexpected account type: $this")
}
+ val isSuppressRepeatingTasks: Boolean
+ get() = serverType == SERVER_OPEN_XCHANGE
+
override fun describeContents() = 0
override fun writeToParcel(dest: Parcel, flags: Int) {
@@ -141,9 +129,7 @@ class CaldavAccount : Parcelable {
writeString(username)
writeString(password)
writeString(error)
- ParcelCompat.writeBoolean(this, isSuppressRepeatingTasks)
writeInt(accountType)
- writeString(encryptionKey)
ParcelCompat.writeBoolean(this, isCollapsed)
writeInt(serverType)
}
@@ -162,8 +148,6 @@ class CaldavAccount : Parcelable {
if (username != other.username) return false
if (password != other.password) return false
if (error != other.error) return false
- if (isSuppressRepeatingTasks != other.isSuppressRepeatingTasks) return false
- if (encryptionKey != other.encryptionKey) return false
if (accountType != other.accountType) return false
if (isCollapsed != other.isCollapsed) return false
if (serverType != other.serverType) return false
@@ -179,8 +163,6 @@ class CaldavAccount : Parcelable {
result = 31 * result + (username?.hashCode() ?: 0)
result = 31 * result + (password?.hashCode() ?: 0)
result = 31 * result + (error?.hashCode() ?: 0)
- result = 31 * result + isSuppressRepeatingTasks.hashCode()
- result = 31 * result + (encryptionKey?.hashCode() ?: 0)
result = 31 * result + accountType
result = 31 * result + isCollapsed.hashCode()
result = 31 * result + serverType
@@ -188,7 +170,7 @@ class CaldavAccount : Parcelable {
}
override fun toString(): String {
- return "CaldavAccount(id=$id, uuid=$uuid, name=$name, url=$url, username=$username, password=$password, error=$error, isSuppressRepeatingTasks=$isSuppressRepeatingTasks, encryptionKey=$encryptionKey, accountType=$accountType, isCollapsed=$isCollapsed, serverType=$serverType)"
+ return "CaldavAccount(id=$id, uuid=$uuid, name=$name, url=$url, username=$username, password=$password, error=$error, accountType=$accountType, isCollapsed=$isCollapsed, serverType=$serverType)"
}
fun isTasksSubscription(context: Context): Boolean {
diff --git a/app/src/main/java/org/tasks/db/Migrations.kt b/app/src/main/java/org/tasks/db/Migrations.kt
index 9046d8dff..6d51860cb 100644
--- a/app/src/main/java/org/tasks/db/Migrations.kt
+++ b/app/src/main/java/org/tasks/db/Migrations.kt
@@ -9,8 +9,6 @@ import com.todoroo.astrid.api.FilterListItem.NO_ORDER
import com.todoroo.astrid.data.Task.Companion.NOTIFY_AFTER_DEADLINE
import com.todoroo.astrid.data.Task.Companion.NOTIFY_AT_DEADLINE
import com.todoroo.astrid.data.Task.Companion.NOTIFY_AT_START
-import com.todoroo.astrid.data.Task.Companion.NOTIFY_MODE_FIVE
-import com.todoroo.astrid.data.Task.Companion.NOTIFY_MODE_NONSTOP
import org.tasks.caldav.FileStorage
import org.tasks.data.Alarm.Companion.TYPE_RANDOM
import org.tasks.data.Alarm.Companion.TYPE_REL_END
@@ -33,6 +31,12 @@ object Migrations {
)
class AutoMigrate82to83: AutoMigrationSpec
+ @DeleteColumn.Entries(
+ DeleteColumn(tableName = "caldav_accounts", columnName = "cda_encryption_key"),
+ DeleteColumn(tableName = "caldav_accounts", columnName = "cda_repeat"),
+ )
+ class AutoMigrate83to84: AutoMigrationSpec
+
private val MIGRATION_35_36: Migration = object : Migration(35, 36) {
override fun migrate(database: SupportSQLiteDatabase) {
database.execSQL("ALTER TABLE `tagdata` ADD COLUMN `color` INTEGER DEFAULT -1")
diff --git a/app/src/main/java/org/tasks/etebase/EtebaseAccountSettingsActivity.kt b/app/src/main/java/org/tasks/etebase/EtebaseAccountSettingsActivity.kt
index 6932ea2e2..8ebfd4eec 100644
--- a/app/src/main/java/org/tasks/etebase/EtebaseAccountSettingsActivity.kt
+++ b/app/src/main/java/org/tasks/etebase/EtebaseAccountSettingsActivity.kt
@@ -9,7 +9,6 @@ import com.todoroo.astrid.data.Task
import com.todoroo.astrid.helper.UUIDHelper
import dagger.hilt.android.AndroidEntryPoint
import org.tasks.R
-import org.tasks.Strings.isNullOrEmpty
import org.tasks.analytics.Constants
import org.tasks.caldav.BaseCaldavAccountSettingsActivity
import org.tasks.data.CaldavAccount
@@ -25,7 +24,6 @@ class EtebaseAccountSettingsActivity : BaseCaldavAccountSettingsActivity(), Tool
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
- binding.repeat.visibility = View.GONE
binding.showAdvanced.visibility = View.VISIBLE
binding.showAdvanced.setOnCheckedChangeListener { _, _ ->
updateUrlVisibility()
@@ -77,9 +75,6 @@ class EtebaseAccountSettingsActivity : BaseCaldavAccountSettingsActivity(), Tool
binding.urlLayout.visibility = if (binding.showAdvanced.isChecked) View.VISIBLE else View.GONE
}
- override fun needsValidation(): Boolean =
- super.needsValidation() || isNullOrEmpty(caldavAccount!!.encryptionKey)
-
override suspend fun addAccount(url: String, username: String, password: String) =
addAccountViewModel.addAccount(url, username, password)
diff --git a/app/src/main/java/org/tasks/etesync/EteSyncAccountSettingsActivity.kt b/app/src/main/java/org/tasks/etesync/EteSyncAccountSettingsActivity.kt
index 0e8b5bed8..81e2d1e1b 100644
--- a/app/src/main/java/org/tasks/etesync/EteSyncAccountSettingsActivity.kt
+++ b/app/src/main/java/org/tasks/etesync/EteSyncAccountSettingsActivity.kt
@@ -14,7 +14,6 @@ import org.tasks.caldav.BaseCaldavAccountSettingsActivity
class EteSyncAccountSettingsActivity : BaseCaldavAccountSettingsActivity(), Toolbar.OnMenuItemClickListener {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
- binding.repeat.visibility = View.GONE
binding.showAdvanced.visibility = View.GONE
binding.description.visibility = View.VISIBLE
binding.description.setTextColor(ContextCompat.getColor(this, R.color.overdue))
diff --git a/app/src/main/java/org/tasks/opentasks/OpenTaskAccountSettingsActivity.kt b/app/src/main/java/org/tasks/opentasks/OpenTaskAccountSettingsActivity.kt
index 606f7c605..4e0ea178c 100644
--- a/app/src/main/java/org/tasks/opentasks/OpenTaskAccountSettingsActivity.kt
+++ b/app/src/main/java/org/tasks/opentasks/OpenTaskAccountSettingsActivity.kt
@@ -9,7 +9,6 @@ import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.launch
import org.tasks.R
import org.tasks.caldav.BaseCaldavAccountSettingsActivity
-import org.tasks.data.OpenTaskDao.Companion.isDavx5
@AndroidEntryPoint
class OpenTaskAccountSettingsActivity : BaseCaldavAccountSettingsActivity(), Toolbar.OnMenuItemClickListener {
@@ -20,10 +19,6 @@ class OpenTaskAccountSettingsActivity : BaseCaldavAccountSettingsActivity(), Too
binding.userLayout.visibility = View.GONE
binding.passwordLayout.visibility = View.GONE
binding.urlLayout.visibility = View.GONE
-
- if (caldavAccount?.uuid?.isDavx5() != true) {
- binding.repeat.visibility = View.GONE
- }
}
override val newPassword = ""
@@ -37,15 +32,12 @@ class OpenTaskAccountSettingsActivity : BaseCaldavAccountSettingsActivity(), Too
if (passwordChanged()) {
caldavAccount!!.password = encryption.encrypt(newPassword)
}
- caldavAccount!!.isSuppressRepeatingTasks = binding.repeat.isChecked
caldavDao.update(caldavAccount!!)
setResult(Activity.RESULT_OK)
finish()
}
- override fun hasChanges() =
- newName != caldavAccount!!.name
- || binding.repeat.isChecked != caldavAccount!!.isSuppressRepeatingTasks
+ override fun hasChanges() = newName != caldavAccount!!.name
override fun save() = lifecycleScope.launch {
if (newName.isBlank()) {
diff --git a/app/src/main/res/layout/activity_caldav_account_settings.xml b/app/src/main/res/layout/activity_caldav_account_settings.xml
index e8a61ab7c..27a065566 100644
--- a/app/src/main/res/layout/activity_caldav_account_settings.xml
+++ b/app/src/main/res/layout/activity_caldav_account_settings.xml
@@ -92,11 +92,6 @@
-
-
diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml
index 43445c01f..cd6868219 100644
--- a/app/src/main/res/values-ar/strings.xml
+++ b/app/src/main/res/values-ar/strings.xml
@@ -516,7 +516,6 @@
إعدادات شريط العنوان
عرض عداد المهمة على مشغل ايقونة التطبيق. ليس جميع المشغلات تدعم الشارات(العداد).
خطأ في إضافة المهمة للتقويم!
- يعالج الخادم المهام المتكررة
سمي سعرك
الاضافة داشكلوك
لم يتم العثور على المجموعة الرئيسية
diff --git a/app/src/main/res/values-bg-rBG/strings.xml b/app/src/main/res/values-bg-rBG/strings.xml
index 1432c896b..8920fb66a 100644
--- a/app/src/main/res/values-bg-rBG/strings.xml
+++ b/app/src/main/res/values-bg-rBG/strings.xml
@@ -550,7 +550,6 @@
Избор на услуга
Въведете заглавие
Вложени задачи не се поддържат от Google Tasks
- Сървърът се грижи за повтарящите се задачи
При щракване
Какво е новото
Няма приложение, което да обработи тази заявка
diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml
index 44bb6a94f..b96329c2d 100644
--- a/app/src/main/res/values-cs/strings.xml
+++ b/app/src/main/res/values-cs/strings.xml
@@ -437,7 +437,6 @@
Zvolený soubor neobsahuje zálohu
Nové úkoly nahoře
Zaplaťte libovolnou částku
- Povolit serveru plánovat opakující se úkoly
Rozbalit podúkoly
Sbalit podúkoly
Úkoly Google nepodporují víceúrovňové podúkoly
diff --git a/app/src/main/res/values-da/strings.xml b/app/src/main/res/values-da/strings.xml
index e186060d7..5414c3920 100644
--- a/app/src/main/res/values-da/strings.xml
+++ b/app/src/main/res/values-da/strings.xml
@@ -186,7 +186,6 @@
Flere niveauer af underopgaver understøttes ikke af Google Tasks
Skjul underopgaver
Udvid underopgaver
- Server håndterer tilbagevendende opgaver
Betal, hvad du vil
Nye opgaver øverst
Ugyldig sikkerhedskopi-fil
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index 8ac03b973..194dd36b4 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -430,7 +430,6 @@
Abonnement kündigen
Nennen Sie Ihren Preis
Eigene Sortierung
- Server behandelt wiederkehrende Aufgaben
Datum ganz anzeigen
- %d Teilaufgabe
diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml
index e22507cda..9347850c3 100644
--- a/app/src/main/res/values-es/strings.xml
+++ b/app/src/main/res/values-es/strings.xml
@@ -430,7 +430,6 @@
Cancelar la suscripción
Precio flexible
Mi orden
- El servidor se encarga de las tareas recurrentes
- %d subtarea
- %d subtareas
diff --git a/app/src/main/res/values-eu/strings.xml b/app/src/main/res/values-eu/strings.xml
index 91cda398f..be8b0bc13 100644
--- a/app/src/main/res/values-eu/strings.xml
+++ b/app/src/main/res/values-eu/strings.xml
@@ -430,7 +430,6 @@
Jarri zuk prezioa
Errorea: %s
Nire eskaria
- Zerbitzariari kudeatzen ditu zeregin errepikakorrak
- Azpi-zeregin %d
- %d azpi-zeregin
diff --git a/app/src/main/res/values-fi/strings.xml b/app/src/main/res/values-fi/strings.xml
index 1096ae5da..23217efd2 100644
--- a/app/src/main/res/values-fi/strings.xml
+++ b/app/src/main/res/values-fi/strings.xml
@@ -400,7 +400,6 @@
Google Tasks ei tue monitasoisia alitehtäviä
Pienennä alitehtävät
Laajenna alitehtävät
- Palvelin käsittelee toistuvia tehtäviä
Nimeä hintasi
Uudet tehtävät huipulla
Epäsopiva varmuuskopiotiedosto
diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml
index 1b6aa9f20..9e8903438 100644
--- a/app/src/main/res/values-fr/strings.xml
+++ b/app/src/main/res/values-fr/strings.xml
@@ -425,7 +425,6 @@
Donnez votre prix
Erreur : %s
Mon tri
- Le serveur gère les tâches récurrentes
- %d sous-tâche
- %d sous-tâches
diff --git a/app/src/main/res/values-hr/strings.xml b/app/src/main/res/values-hr/strings.xml
index df3d7ccdd..391e5e520 100644
--- a/app/src/main/res/values-hr/strings.xml
+++ b/app/src/main/res/values-hr/strings.xml
@@ -287,7 +287,6 @@
Google Tasks ne podržava višerazinske podzadatke
Sklopi podzadatke
Rasklopi podzadatke
- Poslužitelj obrađuje ponavljajuće zadatke
Odredi tvoju cijenu
Novi zadaci na vrh popisa
Neispravna datoteka sigurnosne kopije
diff --git a/app/src/main/res/values-hu/strings.xml b/app/src/main/res/values-hu/strings.xml
index 3b671e4a0..0599fbeb5 100644
--- a/app/src/main/res/values-hu/strings.xml
+++ b/app/src/main/res/values-hu/strings.xml
@@ -428,7 +428,6 @@
Nevezd meg az árat
Egyéni sorrend
Hiba: %s
- A szerver kezeli az ismétlődő feladatokat
- %d részfeladat
- %d részfeladat
diff --git a/app/src/main/res/values-id/strings.xml b/app/src/main/res/values-id/strings.xml
index 8ffd8a7bc..f206c4d7f 100644
--- a/app/src/main/res/values-id/strings.xml
+++ b/app/src/main/res/values-id/strings.xml
@@ -400,7 +400,6 @@
Nonaktifkan grup sortir
Nonaktifkan grup sortir dan subtugas yang bisa diciutkan untuk meningkatkan kinerja aplikasi
Tingkatkan kinerja
- Server yang menjadwalkan tugas berulang
Apa yang Baru
Perizinan hilang
Menghasilkan notifikasi
diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml
index e764bd077..3587565a1 100644
--- a/app/src/main/res/values-it/strings.xml
+++ b/app/src/main/res/values-it/strings.xml
@@ -482,7 +482,6 @@
Crea «%s»
Google Tasks non supporta attività secondarie su più livelli
Espandi attività secondarie
- Il server gestisce le attività ricorrenti
Nuove attività in cima alla lista
File di backup non valido
Versione %s
diff --git a/app/src/main/res/values-iw/strings.xml b/app/src/main/res/values-iw/strings.xml
index 08e60be81..3a82907fe 100644
--- a/app/src/main/res/values-iw/strings.xml
+++ b/app/src/main/res/values-iw/strings.xml
@@ -528,7 +528,6 @@
השבתת מיון קבוצות ותת־משימות מצטמצמות כדי לשפר את ביצועי היישומון
שיפור הביצועים
תת־משימות מקוננות אינן נתמכות על ידי Google Tasks
- השרת מטפל במשימות חוזרות
לתזמן משימה מחדש
לפתוח רשימה
לא לעשות כלום
diff --git a/app/src/main/res/values-ko/strings.xml b/app/src/main/res/values-ko/strings.xml
index da9bc6d50..0313f5d92 100644
--- a/app/src/main/res/values-ko/strings.xml
+++ b/app/src/main/res/values-ko/strings.xml
@@ -426,7 +426,6 @@
구독 취소
구독 금액 정하기
순서 직접 정렬
- 서버가 반복 할일 처리
- %d 하위할일
diff --git a/app/src/main/res/values-lt/strings.xml b/app/src/main/res/values-lt/strings.xml
index 90e12ac03..6984bef29 100644
--- a/app/src/main/res/values-lt/strings.xml
+++ b/app/src/main/res/values-lt/strings.xml
@@ -711,6 +711,5 @@
„Google Tasks“ nepalaiko kelių lygių antrinių užduočių
Sutraukti antrines užduotis
Išplėsti antrines užduotis
- Serveris tvarko pasikartojančias užduotis
Kai pradedama
\ No newline at end of file
diff --git a/app/src/main/res/values-nb/strings.xml b/app/src/main/res/values-nb/strings.xml
index 7ffe4489f..fb68c0740 100644
--- a/app/src/main/res/values-nb/strings.xml
+++ b/app/src/main/res/values-nb/strings.xml
@@ -430,7 +430,6 @@
Betal det du vil
Feil: %s
Min bestilling
- Tjeneren håndterer gjentagende gjøremål
- %d gjøremålssteg
- %d gjøremålssteg
diff --git a/app/src/main/res/values-nl/strings.xml b/app/src/main/res/values-nl/strings.xml
index 4229ce93a..ac439cd6e 100644
--- a/app/src/main/res/values-nl/strings.xml
+++ b/app/src/main/res/values-nl/strings.xml
@@ -430,7 +430,6 @@
Pictogram
Mijn volgorde
Fout: %s
- Server handelt terugkerende taken af
- %d subtaak
- %d subtaken
diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml
index f2fa626ec..7368e2db4 100644
--- a/app/src/main/res/values-pl/strings.xml
+++ b/app/src/main/res/values-pl/strings.xml
@@ -440,7 +440,6 @@
Anuluj subskrypcję
Nazwij swoją cenę
Ręczne
- Serwer obsługuje powtarzające się zadania
- %d podzadanie
- %d podzadania
diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml
index a2faa3ac1..55ae08030 100644
--- a/app/src/main/res/values-pt-rBR/strings.xml
+++ b/app/src/main/res/values-pt-rBR/strings.xml
@@ -474,7 +474,6 @@
Sub-tarefas em múltiplos níveis não suportado pelo Google Tasks
Recolher sub-tarefas
Expandir sub-tarefas
- Servidor lida com tarefas recorrentes
Dê seu valor
Novas tarefas ao topo
Arquivo de backup inválido
diff --git a/app/src/main/res/values-pt/strings.xml b/app/src/main/res/values-pt/strings.xml
index f3302169f..a2dcfca16 100644
--- a/app/src/main/res/values-pt/strings.xml
+++ b/app/src/main/res/values-pt/strings.xml
@@ -538,7 +538,6 @@
- %d subtarefa
- %d subtarefas
- O servidor lida com tarefas recorrentes
Minha ordem
Dê o seu valor
Não foi possível conectar
diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml
index 8743995a7..fa7f756f3 100644
--- a/app/src/main/res/values-ro/strings.xml
+++ b/app/src/main/res/values-ro/strings.xml
@@ -635,7 +635,6 @@
Subactivitățile pe mai multe niveluri nu sunt acceptate de Google Tasks
Colapsarea subactivităților
Extindeți subactivitățile
- Serverul se ocupă de sarcinile recurente
Spuneți-vă prețul
Sarcini noi în partea de sus
Fișier de backup invalid
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index a28166229..6b85eb721 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -452,7 +452,6 @@
Доступ к данным геолокации нужен, чтобы определить ваше текущее местоположение
Сторонние лицензии
Новые задачи наверху
- Сервер обрабатывает повторяющиеся задачи
Развернуть подзадачи
Свернуть подзадачи
Многоуровневые подзадачи не поддерживаются Google Tasks
diff --git a/app/src/main/res/values-si/strings.xml b/app/src/main/res/values-si/strings.xml
index 181bec271..7716ed12b 100644
--- a/app/src/main/res/values-si/strings.xml
+++ b/app/src/main/res/values-si/strings.xml
@@ -415,7 +415,6 @@
End-to-end encrypted සමමුහුර්තකරණය
විවෘත අන්තර්ජාල ප්රමිතීන් මත පදනම් වූ සමමුහුර්තකරණය
ඔබගේ Google ගිණුම සමඟ සමමුහුර්ත කරන මූලික සේවාව
- සේවාදායකය පුනරාවර්තන කාර්යයන් හසුරුවයි
මිලක් නියම කරන්න
අවසරය ලැබී නොමැත
%s වෙත පැමිණියේය
diff --git a/app/src/main/res/values-sv/strings.xml b/app/src/main/res/values-sv/strings.xml
index ea419a1af..bf8dfcfc1 100644
--- a/app/src/main/res/values-sv/strings.xml
+++ b/app/src/main/res/values-sv/strings.xml
@@ -428,7 +428,6 @@
Namnge ditt pris
Min ordning
Fel: %s
- Server hanterar återkommande uppgifter
Listor
Modifierad %s
Skapad %s
diff --git a/app/src/main/res/values-ta/strings.xml b/app/src/main/res/values-ta/strings.xml
index 950a363aa..f8638801e 100644
--- a/app/src/main/res/values-ta/strings.xml
+++ b/app/src/main/res/values-ta/strings.xml
@@ -234,7 +234,6 @@
கூகிள் பணிகளால் பல நிலை துணை பணிகள் ஆதரிக்கப்படவில்லை
துணை பணிகளைச் சுருக்கவும்
துணை பணிகளை விரிவாக்குங்கள்
- தொடர்ச்சியான பணிகளை சேவையாக அட்டவணைப்படுத்தட்டும்
உங்கள் விலைக்கு பெயரிடுங்கள்
மேலே புதிய பணிகள்
தவறான காப்பு கோப்பு
diff --git a/app/src/main/res/values-th/strings.xml b/app/src/main/res/values-th/strings.xml
index 44a20b3d7..3ea682648 100644
--- a/app/src/main/res/values-th/strings.xml
+++ b/app/src/main/res/values-th/strings.xml
@@ -191,7 +191,6 @@
งานย่อยหลายระดับไม่ได้รับการสนับสนุนโดย Google Tasks
ยุบงานย่อย
ขยายงานย่อย
- เซิร์ฟเวอร์จัดการงานที่เกิดประจํา
ตั้งชื่อราคาของคุณ
งานใหม่อยู่บนสุด
แฟ้มสํารองข้อมูลไม่ถูกต้อง
diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml
index 61ce800d7..b44b5eaa2 100644
--- a/app/src/main/res/values-tr/strings.xml
+++ b/app/src/main/res/values-tr/strings.xml
@@ -430,7 +430,6 @@
Aboneliği iptal et
Fiyat belirle
Düzenim
- Sunucu, yineleyen görevleri halleder
- %d alt görev
- %d alt görev
diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml
index 65780eaca..083bf910c 100644
--- a/app/src/main/res/values-uk/strings.xml
+++ b/app/src/main/res/values-uk/strings.xml
@@ -477,7 +477,6 @@
Багаторівневі підзавдання не підтримуються Google Tasks
Згорнути підзавдання
Розгорнути підзавдання
- Сервер обробляє повторювані завдання
Назвіть свою ціну
Ця функція потребує підписки
Скасувати підписку
diff --git a/app/src/main/res/values-ur/strings.xml b/app/src/main/res/values-ur/strings.xml
index 43985d4db..e6f7ff862 100644
--- a/app/src/main/res/values-ur/strings.xml
+++ b/app/src/main/res/values-ur/strings.xml
@@ -499,7 +499,6 @@
کثیر الدرجی ذیلی ٹاسکس کو گوگل ٹاسکس سپورٹ نہیں کرتا
ذیلی ٹاسکس کو بند کریں
ذیلی ٹاسکس کو کھولیں
- بار بار واقع ہونے والے ٹاسکس کو سرور چلاتا ہے
اپنی قیمت بتائیں
نئے ٹاسکس اوپر رکھیں
غلط بیک اپ فائل
diff --git a/app/src/main/res/values-vi/strings.xml b/app/src/main/res/values-vi/strings.xml
index da1a2b647..e594561e0 100644
--- a/app/src/main/res/values-vi/strings.xml
+++ b/app/src/main/res/values-vi/strings.xml
@@ -253,7 +253,6 @@
Các công việc con có nhiều cấp không được Google Tasks hỗ trợ
Thu gọn các công việc con
Mở rộng các công việc con
- Máy chủ xử lý các công việc lặp lại
Đặt giá của bạn
Công việc mới ở trên đầu
Tệp sao lưu không hợp lệ
diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
index 41659a3d0..1003c2453 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -421,7 +421,6 @@
", "
错误:%s
我的顺序
- 服务器处理重复任务
- %d 个子任务
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 46653e4d5..b48659abb 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -522,7 +522,6 @@ File %1$s contained %2$s.\n\n
Invalid backup file
New tasks on top
Name your price
- Server handles recurring tasks
Expand subtasks
Collapse subtasks
Multi-level subtasks not supported by Google Tasks