mirror of https://github.com/tasks/tasks
Convert UserActivityDao to Room
parent
5bee730f1c
commit
accbeabe01
@ -0,0 +1,172 @@
|
|||||||
|
{
|
||||||
|
"formatVersion": 1,
|
||||||
|
"database": {
|
||||||
|
"version": 41,
|
||||||
|
"identityHash": "c6760f6f6fe7d106e61239bfa9189694",
|
||||||
|
"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)",
|
||||||
|
"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
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"primaryKey": {
|
||||||
|
"columnNames": [
|
||||||
|
"uid"
|
||||||
|
],
|
||||||
|
"autoGenerate": true
|
||||||
|
},
|
||||||
|
"indices": [
|
||||||
|
{
|
||||||
|
"name": "index_notification_task",
|
||||||
|
"unique": true,
|
||||||
|
"columnNames": [
|
||||||
|
"task"
|
||||||
|
],
|
||||||
|
"createSql": "CREATE UNIQUE INDEX `index_notification_task` ON `${TABLE_NAME}` (`task`)"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"foreignKeys": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tableName": "tagdata",
|
||||||
|
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `remoteId` TEXT, `name` TEXT, `color` INTEGER, `tagOrdering` TEXT, `deleted` INTEGER)",
|
||||||
|
"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": "deleted",
|
||||||
|
"columnName": "deleted",
|
||||||
|
"affinity": "INTEGER",
|
||||||
|
"notNull": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"primaryKey": {
|
||||||
|
"columnNames": [
|
||||||
|
"_id"
|
||||||
|
],
|
||||||
|
"autoGenerate": true
|
||||||
|
},
|
||||||
|
"indices": [],
|
||||||
|
"foreignKeys": []
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"tableName": "userActivity",
|
||||||
|
"createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`_id` INTEGER PRIMARY KEY AUTOINCREMENT, `remoteId` TEXT, `action` TEXT, `message` TEXT, `picture` TEXT, `target_id` TEXT, `created_at` INTEGER, `deleted_at` INTEGER)",
|
||||||
|
"fields": [
|
||||||
|
{
|
||||||
|
"fieldPath": "id",
|
||||||
|
"columnName": "_id",
|
||||||
|
"affinity": "INTEGER",
|
||||||
|
"notNull": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldPath": "remoteId",
|
||||||
|
"columnName": "remoteId",
|
||||||
|
"affinity": "TEXT",
|
||||||
|
"notNull": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldPath": "action",
|
||||||
|
"columnName": "action",
|
||||||
|
"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
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fieldPath": "deleted",
|
||||||
|
"columnName": "deleted_at",
|
||||||
|
"affinity": "INTEGER",
|
||||||
|
"notNull": false
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"primaryKey": {
|
||||||
|
"columnNames": [
|
||||||
|
"_id"
|
||||||
|
],
|
||||||
|
"autoGenerate": true
|
||||||
|
},
|
||||||
|
"indices": [],
|
||||||
|
"foreignKeys": []
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"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, \"c6760f6f6fe7d106e61239bfa9189694\")"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
@ -1,36 +1,32 @@
|
|||||||
package com.todoroo.astrid.dao;
|
package com.todoroo.astrid.dao;
|
||||||
|
|
||||||
import com.todoroo.andlib.sql.Criterion;
|
import android.arch.persistence.room.Dao;
|
||||||
import com.todoroo.andlib.sql.Order;
|
import android.arch.persistence.room.Insert;
|
||||||
import com.todoroo.andlib.sql.Query;
|
import android.arch.persistence.room.Query;
|
||||||
|
|
||||||
import com.todoroo.andlib.utility.DateUtilities;
|
import com.todoroo.andlib.utility.DateUtilities;
|
||||||
|
import com.todoroo.astrid.data.RemoteModel;
|
||||||
import com.todoroo.astrid.data.UserActivity;
|
import com.todoroo.astrid.data.UserActivity;
|
||||||
|
import com.todoroo.astrid.helper.UUIDHelper;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import javax.inject.Inject;
|
@Dao
|
||||||
|
public abstract class UserActivityDao {
|
||||||
public class UserActivityDao {
|
|
||||||
|
|
||||||
private final RemoteModelDao<UserActivity> dao;
|
@Insert
|
||||||
|
public abstract void insert(UserActivity userActivity);
|
||||||
|
|
||||||
@Inject
|
@Query("SELECT * FROM userActivity WHERE `action` = 'task_comment' AND target_id = :taskUuid AND deleted_at = 0 ORDER BY created_at DESC ")
|
||||||
public UserActivityDao(Database database) {
|
public abstract List<UserActivity> getCommentsForTask(String taskUuid);
|
||||||
dao = new RemoteModelDao<>(database, UserActivity.class);
|
|
||||||
}
|
|
||||||
|
|
||||||
public void createNew(UserActivity item) {
|
public void createNew(UserActivity item) {
|
||||||
if (!item.containsValue(UserActivity.CREATED_AT)) {
|
if (item.getCreated() == null || item.getCreated() == 0L) {
|
||||||
item.setCreatedAt(DateUtilities.now());
|
item.setCreated(DateUtilities.now());
|
||||||
}
|
}
|
||||||
dao.createNew(item);
|
if (RemoteModel.isUuidEmpty(item.getRemoteId())) {
|
||||||
}
|
item.setRemoteId(UUIDHelper.newUUID());
|
||||||
|
}
|
||||||
public List<UserActivity> getCommentsForTask(String taskUuid) {
|
insert(item);
|
||||||
return dao.toList(Query.select(UserActivity.PROPERTIES).where(
|
|
||||||
Criterion.and(UserActivity.ACTION.eq(UserActivity.ACTION_TASK_COMMENT),
|
|
||||||
UserActivity.TARGET_ID.eq(taskUuid),
|
|
||||||
UserActivity.DELETED_AT.eq(0)))
|
|
||||||
.orderBy(Order.desc(UserActivity.CREATED_AT)));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,124 +1,176 @@
|
|||||||
package com.todoroo.astrid.data;
|
package com.todoroo.astrid.data;
|
||||||
|
|
||||||
import android.content.ContentValues;
|
import android.arch.persistence.room.ColumnInfo;
|
||||||
|
import android.arch.persistence.room.Entity;
|
||||||
|
import android.arch.persistence.room.Ignore;
|
||||||
|
import android.arch.persistence.room.PrimaryKey;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
|
import android.os.Parcel;
|
||||||
|
import android.os.Parcelable;
|
||||||
|
|
||||||
import com.todoroo.andlib.data.Property;
|
import org.tasks.backup.XmlReader;
|
||||||
import com.todoroo.andlib.data.Property.LongProperty;
|
import org.tasks.backup.XmlWriter;
|
||||||
import com.todoroo.andlib.data.Property.StringProperty;
|
|
||||||
import com.todoroo.andlib.data.Table;
|
|
||||||
|
|
||||||
public class UserActivity extends RemoteModel {
|
@Entity(tableName = "userActivity")
|
||||||
|
public class UserActivity implements Parcelable {
|
||||||
|
|
||||||
// --- table
|
public static final String ACTION_TASK_COMMENT = "task_comment";
|
||||||
|
|
||||||
/** table for this model */
|
|
||||||
public static final Table TABLE = new Table("userActivity", UserActivity.class);
|
|
||||||
|
|
||||||
// --- properties
|
|
||||||
|
|
||||||
/** ID */
|
@PrimaryKey(autoGenerate = true)
|
||||||
@SuppressWarnings("WeakerAccess")
|
@ColumnInfo(name = "_id")
|
||||||
public static final LongProperty ID = new LongProperty(
|
private Long id;
|
||||||
TABLE, ID_PROPERTY_NAME);
|
|
||||||
|
|
||||||
/** Remote ID */
|
@ColumnInfo(name = "remoteId")
|
||||||
@SuppressWarnings("WeakerAccess")
|
private String remoteId = RemoteModel.NO_UUID;
|
||||||
public static final StringProperty UUID = new StringProperty(
|
|
||||||
TABLE, UUID_PROPERTY_NAME);
|
|
||||||
|
|
||||||
/** Action */
|
@ColumnInfo(name = "action")
|
||||||
public static final StringProperty ACTION = new StringProperty(
|
private String action = "";
|
||||||
TABLE, "action");
|
|
||||||
|
|
||||||
/** Message */
|
@ColumnInfo(name = "message")
|
||||||
@SuppressWarnings("WeakerAccess")
|
private String message = "";
|
||||||
public static final StringProperty MESSAGE = new StringProperty(
|
|
||||||
TABLE, "message");
|
|
||||||
|
|
||||||
/** Picture */
|
@ColumnInfo(name = "picture")
|
||||||
@SuppressWarnings("WeakerAccess")
|
private String picture = "";
|
||||||
public static final StringProperty PICTURE = new StringProperty(
|
|
||||||
TABLE, "picture", Property.PROP_FLAG_JSON | Property.PROP_FLAG_PICTURE);
|
|
||||||
|
|
||||||
/** Target id */
|
@ColumnInfo(name = "target_id")
|
||||||
public static final StringProperty TARGET_ID = new StringProperty(
|
private String targetId = RemoteModel.NO_UUID;
|
||||||
TABLE, "target_id");
|
|
||||||
|
|
||||||
/** Created at */
|
@ColumnInfo(name = "created_at")
|
||||||
public static final LongProperty CREATED_AT = new LongProperty(
|
private Long created = 0L;
|
||||||
TABLE, "created_at", Property.PROP_FLAG_DATE);
|
|
||||||
|
|
||||||
/** Deleted at */
|
@ColumnInfo(name = "deleted_at")
|
||||||
public static final LongProperty DELETED_AT = new LongProperty(
|
private Long deleted = 0L;
|
||||||
TABLE, "deleted_at", Property.PROP_FLAG_DATE);
|
|
||||||
|
|
||||||
public UserActivity() {
|
public UserActivity() {
|
||||||
super();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// --- Action codes
|
@Ignore
|
||||||
public static final String ACTION_TASK_COMMENT = "task_comment";
|
public UserActivity(XmlReader reader) {
|
||||||
|
reader.readString("remoteId", this::setRemoteId);
|
||||||
// --- helpers
|
reader.readString("action", this::setAction);
|
||||||
|
reader.readString("message", this::setMessage);
|
||||||
|
reader.readString("picture", this::setPicture);
|
||||||
|
reader.readString("target_id", this::setTargetId);
|
||||||
|
reader.readLong("created_at", this::setCreated);
|
||||||
|
reader.readLong("deleted_at", this::setDeleted);
|
||||||
|
}
|
||||||
|
|
||||||
/** Default values container */
|
@Ignore
|
||||||
private static final ContentValues defaultValues = new ContentValues();
|
private UserActivity(Parcel parcel) {
|
||||||
|
id = parcel.readLong();
|
||||||
|
remoteId = parcel.readString();
|
||||||
|
action = parcel.readString();
|
||||||
|
message = parcel.readString();
|
||||||
|
picture = parcel.readString();
|
||||||
|
targetId = parcel.readString();
|
||||||
|
created = parcel.readLong();
|
||||||
|
deleted = parcel.readLong();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
public void writeToXml(XmlWriter writer) {
|
||||||
public ContentValues getDefaultValues() {
|
writer.writeString("remoteId", remoteId);
|
||||||
return defaultValues;
|
writer.writeString("action", action);
|
||||||
|
writer.writeString("message", message);
|
||||||
|
writer.writeString("picture", picture);
|
||||||
|
writer.writeString("target_id", targetId);
|
||||||
|
writer.writeLong("created_at", created);
|
||||||
|
writer.writeLong("deleted_at", deleted);
|
||||||
}
|
}
|
||||||
|
|
||||||
static {
|
public Long getId() {
|
||||||
defaultValues.put(UUID.name, NO_UUID);
|
return id;
|
||||||
defaultValues.put(ACTION.name, "");
|
|
||||||
defaultValues.put(MESSAGE.name, "");
|
|
||||||
defaultValues.put(PICTURE.name, "");
|
|
||||||
defaultValues.put(TARGET_ID.name, NO_UUID);
|
|
||||||
defaultValues.put(CREATED_AT.name, 0L);
|
|
||||||
defaultValues.put(DELETED_AT.name, 0L);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** List of all properties for this model */
|
public void setId(Long id) {
|
||||||
public static final Property<?>[] PROPERTIES = generateProperties(UserActivity.class);
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
public String getRemoteId() {
|
||||||
public long getId() {
|
return remoteId;
|
||||||
return getIdHelper(ID);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final Creator<UserActivity> CREATOR = new ModelCreator<>(UserActivity.class);
|
public void setRemoteId(String remoteId) {
|
||||||
|
this.remoteId = remoteId;
|
||||||
|
}
|
||||||
|
|
||||||
public Long getCreatedAt() {
|
public String getAction() {
|
||||||
return getValue(CREATED_AT);
|
return action;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setCreatedAt(Long createdAt) {
|
public void setAction(String action) {
|
||||||
setValue(CREATED_AT, createdAt);
|
this.action = action;
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getMessage() {
|
public String getMessage() {
|
||||||
return getValue(MESSAGE);
|
return message;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setMessage(String message) {
|
public void setMessage(String message) {
|
||||||
setValue(MESSAGE, message);
|
this.message = message;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getPicture() {
|
||||||
|
return picture;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPicture(String picture) {
|
||||||
|
this.picture = picture;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getTargetId() {
|
||||||
|
return targetId;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setTargetId(String targetId) {
|
public void setTargetId(String targetId) {
|
||||||
setValue(TARGET_ID, targetId);
|
this.targetId = targetId;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setAction(String action) {
|
public Long getCreated() {
|
||||||
setValue(ACTION, action);
|
return created;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setPicture(String picture) {
|
public void setCreated(Long created) {
|
||||||
setValue(PICTURE, picture);
|
this.created = created;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Long getDeleted() {
|
||||||
|
return deleted;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDeleted(Long deleted) {
|
||||||
|
this.deleted = deleted;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Uri getPictureUri() {
|
public Uri getPictureUri() {
|
||||||
return PictureHelper.getPictureUri(getValue(PICTURE));
|
return RemoteModel.PictureHelper.getPictureUri(picture);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final Creator<UserActivity> CREATOR = new Creator<UserActivity>() {
|
||||||
|
@Override
|
||||||
|
public UserActivity createFromParcel(Parcel source) {
|
||||||
|
return new UserActivity(source);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public UserActivity[] newArray(int size) {
|
||||||
|
return new UserActivity[size];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int describeContents() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void writeToParcel(Parcel dest, int flags) {
|
||||||
|
dest.writeLong(id);
|
||||||
|
dest.writeString(remoteId);
|
||||||
|
dest.writeString(action);
|
||||||
|
dest.writeString(message);
|
||||||
|
dest.writeString(picture);
|
||||||
|
dest.writeString(targetId);
|
||||||
|
dest.writeLong(created);
|
||||||
|
dest.writeLong(deleted);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue