From 52f258d99bb958cc511af73157f555e45a191469 Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Sun, 25 Feb 2018 02:47:47 -0600 Subject: [PATCH] Detect indent changes in tags and filters --- .../OrderedMetadataListFragmentHelper.java | 6 ++--- .../java/com/todoroo/astrid/data/Task.java | 19 ++++++++------ .../java/org/tasks/tasklist/DiffCallback.java | 25 +++++++++++++++++++ .../tasklist/TaskListRecyclerAdapter.java | 22 ++++------------ 4 files changed, 44 insertions(+), 28 deletions(-) create mode 100644 app/src/main/java/org/tasks/tasklist/DiffCallback.java diff --git a/app/src/googleplay/java/com/todoroo/astrid/gtasks/OrderedMetadataListFragmentHelper.java b/app/src/googleplay/java/com/todoroo/astrid/gtasks/OrderedMetadataListFragmentHelper.java index 0fd76b0bc..cc6e511df 100644 --- a/app/src/googleplay/java/com/todoroo/astrid/gtasks/OrderedMetadataListFragmentHelper.java +++ b/app/src/googleplay/java/com/todoroo/astrid/gtasks/OrderedMetadataListFragmentHelper.java @@ -65,13 +65,13 @@ class OrderedMetadataListFragmentHelper { @Override public int getIndent(Task task) { - return task.getGoogleTaskIndent(); + return task.getIndent(); } @Override public boolean canIndent(int position, Task task) { Task parent = taskAdapter.getTask(position - 1); - return parent != null && getIndent(task) <= parent.getGoogleTaskIndent(); + return parent != null && getIndent(task) <= parent.getIndent(); } @Override @@ -134,7 +134,7 @@ class OrderedMetadataListFragmentHelper { } final ArrayList chained = new ArrayList<>(); - final int parentIndent = item.getGoogleTaskIndent(); + final int parentIndent = item.getIndent(); updater.applyToChildren(list, itemId, node -> { Task childTask = taskDao.fetch(node.taskId); if(!TextUtils.isEmpty(childTask.getRecurrence())) { diff --git a/app/src/main/java/com/todoroo/astrid/data/Task.java b/app/src/main/java/com/todoroo/astrid/data/Task.java index 9a89aab65..4fa76ba75 100644 --- a/app/src/main/java/com/todoroo/astrid/data/Task.java +++ b/app/src/main/java/com/todoroo/astrid/data/Task.java @@ -208,7 +208,7 @@ public class Task implements Parcelable { public static final int IMPORTANCE_NONE = 3; @Ignore - private transient int googleTaskIndent; + private transient int indent; @Ignore private transient String tags; @@ -336,7 +336,7 @@ public class Task implements Parcelable { calendarUri = _cursor.getString(_cursorIndexOfCalendarUri); remoteId = _cursor.getString(_cursorIndexOfRemoteId); if (_cursorIndexOfIndent >= 0) { - googleTaskIndent = _cursor.getInt(_cursorIndexOfIndent); + indent = _cursor.getInt(_cursorIndexOfIndent); } if (_cursorIndexOfTags >= 0) { tags = _cursor.getString(_cursorIndexOfTags); @@ -394,7 +394,7 @@ public class Task implements Parcelable { title = parcel.readString(); remoteId = parcel.readString(); transitoryData = parcel.readHashMap(ContentValues.class.getClassLoader()); - googleTaskIndent = parcel.readInt(); + indent = parcel.readInt(); } public long getId() { @@ -852,7 +852,7 @@ public class Task implements Parcelable { dest.writeString(title); dest.writeString(remoteId); dest.writeMap(transitoryData); - dest.writeInt(googleTaskIndent); + dest.writeInt(indent); } @Override @@ -883,8 +883,12 @@ public class Task implements Parcelable { '}'; } - public int getGoogleTaskIndent() { - return googleTaskIndent; + public int getIndent() { + return indent; + } + + public void setIndent(int indent) { + this.indent = indent; } public boolean insignificantChange(Task task) { @@ -985,7 +989,6 @@ public class Task implements Parcelable { Task task = (Task) o; - if (googleTaskIndent != task.googleTaskIndent) return false; if (hasFiles != task.hasFiles) return false; if (id != null ? !id.equals(task.id) : task.id != null) return false; if (title != null ? !title.equals(task.title) : task.title != null) return false; @@ -1049,7 +1052,7 @@ public class Task implements Parcelable { result = 31 * result + (repeatUntil != null ? repeatUntil.hashCode() : 0); result = 31 * result + (calendarUri != null ? calendarUri.hashCode() : 0); result = 31 * result + (remoteId != null ? remoteId.hashCode() : 0); - result = 31 * result + googleTaskIndent; + result = 31 * result + indent; result = 31 * result + (tags != null ? tags.hashCode() : 0); result = 31 * result + (hasFiles ? 1 : 0); return result; diff --git a/app/src/main/java/org/tasks/tasklist/DiffCallback.java b/app/src/main/java/org/tasks/tasklist/DiffCallback.java new file mode 100644 index 000000000..82d1b867c --- /dev/null +++ b/app/src/main/java/org/tasks/tasklist/DiffCallback.java @@ -0,0 +1,25 @@ +package org.tasks.tasklist; + +import android.support.annotation.NonNull; + +import com.todoroo.astrid.adapter.TaskAdapter; +import com.todoroo.astrid.data.Task; + +public class DiffCallback extends android.support.v7.recyclerview.extensions.DiffCallback { + + private final TaskAdapter adapter; + + public DiffCallback(TaskAdapter adapter) { + this.adapter = adapter; + } + + @Override + public boolean areItemsTheSame(@NonNull Task oldItem, @NonNull Task newItem) { + return oldItem.getId() == newItem.getId(); + } + + @Override + public boolean areContentsTheSame(@NonNull Task oldItem, @NonNull Task newItem) { + return oldItem.equals(newItem) && oldItem.getIndent() == adapter.getIndent(newItem); + } +} diff --git a/app/src/main/java/org/tasks/tasklist/TaskListRecyclerAdapter.java b/app/src/main/java/org/tasks/tasklist/TaskListRecyclerAdapter.java index 90b46926d..da6449039 100644 --- a/app/src/main/java/org/tasks/tasklist/TaskListRecyclerAdapter.java +++ b/app/src/main/java/org/tasks/tasklist/TaskListRecyclerAdapter.java @@ -5,8 +5,6 @@ import android.arch.paging.PagedList; import android.arch.paging.PagedListAdapterHelper; import android.graphics.Canvas; import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.v7.recyclerview.extensions.DiffCallback; import android.support.v7.recyclerview.extensions.ListAdapterConfig; import android.support.v7.util.ListUpdateCallback; import android.support.v7.view.ActionMode; @@ -40,18 +38,6 @@ public class TaskListRecyclerAdapter extends RecyclerView.Adapter private static final String EXTRA_SELECTED_TASK_IDS = "extra_selected_task_ids"; - private static final DiffCallback DIFF_CALLBACK = new DiffCallback() { - @Override - public boolean areItemsTheSame(@NonNull Task oldItem, @NonNull Task newItem) { - return oldItem.getId() == newItem.getId(); - } - - @Override - public boolean areContentsTheSame(@NonNull Task oldItem, @NonNull Task newItem) { - return oldItem.equals(newItem); - } - }; - private final Activity activity; private final TaskAdapter adapter; private final ViewHolderFactory viewHolderFactory; @@ -61,6 +47,7 @@ public class TaskListRecyclerAdapter extends RecyclerView.Adapter private final Tracker tracker; private final DialogBuilder dialogBuilder; private final ItemTouchHelper itemTouchHelper; + private final PagedListAdapterHelper adapterHelper; private ActionMode mode = null; private boolean dragging; @@ -80,10 +67,9 @@ public class TaskListRecyclerAdapter extends RecyclerView.Adapter this.tracker = tracker; this.dialogBuilder = dialogBuilder; itemTouchHelper = new ItemTouchHelper(new ItemTouchHelperCallback()); + adapterHelper = new PagedListAdapterHelper<>(this, new ListAdapterConfig.Builder().setDiffCallback(new DiffCallback(adapter)).build()); } - private PagedListAdapterHelper adapterHelper = new PagedListAdapterHelper<>(this, new ListAdapterConfig.Builder().setDiffCallback(DIFF_CALLBACK).build()); - public void applyToRecyclerView(RecyclerView recyclerView) { recyclerView.setAdapter(this); itemTouchHelper.attachToRecyclerView(recyclerView); @@ -119,7 +105,9 @@ public class TaskListRecyclerAdapter extends RecyclerView.Adapter if (task != null) { holder.bindView(task); holder.setMoving(false); - holder.setIndent(adapter.getIndent(task)); + int indent = adapter.getIndent(task); + task.setIndent(indent); + holder.setIndent(indent); holder.setSelected(adapter.isSelected(task)); } }