Detect indent changes in tags and filters

pull/645/head
Alex Baker 8 years ago
parent 8406a15836
commit 52f258d99b

@ -65,13 +65,13 @@ class OrderedMetadataListFragmentHelper {
@Override @Override
public int getIndent(Task task) { public int getIndent(Task task) {
return task.getGoogleTaskIndent(); return task.getIndent();
} }
@Override @Override
public boolean canIndent(int position, Task task) { public boolean canIndent(int position, Task task) {
Task parent = taskAdapter.getTask(position - 1); Task parent = taskAdapter.getTask(position - 1);
return parent != null && getIndent(task) <= parent.getGoogleTaskIndent(); return parent != null && getIndent(task) <= parent.getIndent();
} }
@Override @Override
@ -134,7 +134,7 @@ class OrderedMetadataListFragmentHelper {
} }
final ArrayList<Long> chained = new ArrayList<>(); final ArrayList<Long> chained = new ArrayList<>();
final int parentIndent = item.getGoogleTaskIndent(); final int parentIndent = item.getIndent();
updater.applyToChildren(list, itemId, node -> { updater.applyToChildren(list, itemId, node -> {
Task childTask = taskDao.fetch(node.taskId); Task childTask = taskDao.fetch(node.taskId);
if(!TextUtils.isEmpty(childTask.getRecurrence())) { if(!TextUtils.isEmpty(childTask.getRecurrence())) {

@ -208,7 +208,7 @@ public class Task implements Parcelable {
public static final int IMPORTANCE_NONE = 3; public static final int IMPORTANCE_NONE = 3;
@Ignore @Ignore
private transient int googleTaskIndent; private transient int indent;
@Ignore @Ignore
private transient String tags; private transient String tags;
@ -336,7 +336,7 @@ public class Task implements Parcelable {
calendarUri = _cursor.getString(_cursorIndexOfCalendarUri); calendarUri = _cursor.getString(_cursorIndexOfCalendarUri);
remoteId = _cursor.getString(_cursorIndexOfRemoteId); remoteId = _cursor.getString(_cursorIndexOfRemoteId);
if (_cursorIndexOfIndent >= 0) { if (_cursorIndexOfIndent >= 0) {
googleTaskIndent = _cursor.getInt(_cursorIndexOfIndent); indent = _cursor.getInt(_cursorIndexOfIndent);
} }
if (_cursorIndexOfTags >= 0) { if (_cursorIndexOfTags >= 0) {
tags = _cursor.getString(_cursorIndexOfTags); tags = _cursor.getString(_cursorIndexOfTags);
@ -394,7 +394,7 @@ public class Task implements Parcelable {
title = parcel.readString(); title = parcel.readString();
remoteId = parcel.readString(); remoteId = parcel.readString();
transitoryData = parcel.readHashMap(ContentValues.class.getClassLoader()); transitoryData = parcel.readHashMap(ContentValues.class.getClassLoader());
googleTaskIndent = parcel.readInt(); indent = parcel.readInt();
} }
public long getId() { public long getId() {
@ -852,7 +852,7 @@ public class Task implements Parcelable {
dest.writeString(title); dest.writeString(title);
dest.writeString(remoteId); dest.writeString(remoteId);
dest.writeMap(transitoryData); dest.writeMap(transitoryData);
dest.writeInt(googleTaskIndent); dest.writeInt(indent);
} }
@Override @Override
@ -883,8 +883,12 @@ public class Task implements Parcelable {
'}'; '}';
} }
public int getGoogleTaskIndent() { public int getIndent() {
return googleTaskIndent; return indent;
}
public void setIndent(int indent) {
this.indent = indent;
} }
public boolean insignificantChange(Task task) { public boolean insignificantChange(Task task) {
@ -985,7 +989,6 @@ public class Task implements Parcelable {
Task task = (Task) o; Task task = (Task) o;
if (googleTaskIndent != task.googleTaskIndent) return false;
if (hasFiles != task.hasFiles) return false; if (hasFiles != task.hasFiles) return false;
if (id != null ? !id.equals(task.id) : task.id != null) 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; 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 + (repeatUntil != null ? repeatUntil.hashCode() : 0);
result = 31 * result + (calendarUri != null ? calendarUri.hashCode() : 0); result = 31 * result + (calendarUri != null ? calendarUri.hashCode() : 0);
result = 31 * result + (remoteId != null ? remoteId.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 + (tags != null ? tags.hashCode() : 0);
result = 31 * result + (hasFiles ? 1 : 0); result = 31 * result + (hasFiles ? 1 : 0);
return result; return result;

@ -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<Task> {
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);
}
}

@ -5,8 +5,6 @@ import android.arch.paging.PagedList;
import android.arch.paging.PagedListAdapterHelper; import android.arch.paging.PagedListAdapterHelper;
import android.graphics.Canvas; import android.graphics.Canvas;
import android.os.Bundle; 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.recyclerview.extensions.ListAdapterConfig;
import android.support.v7.util.ListUpdateCallback; import android.support.v7.util.ListUpdateCallback;
import android.support.v7.view.ActionMode; import android.support.v7.view.ActionMode;
@ -40,18 +38,6 @@ public class TaskListRecyclerAdapter extends RecyclerView.Adapter<ViewHolder>
private static final String EXTRA_SELECTED_TASK_IDS = "extra_selected_task_ids"; private static final String EXTRA_SELECTED_TASK_IDS = "extra_selected_task_ids";
private static final DiffCallback<Task> DIFF_CALLBACK = new DiffCallback<Task>() {
@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 Activity activity;
private final TaskAdapter adapter; private final TaskAdapter adapter;
private final ViewHolderFactory viewHolderFactory; private final ViewHolderFactory viewHolderFactory;
@ -61,6 +47,7 @@ public class TaskListRecyclerAdapter extends RecyclerView.Adapter<ViewHolder>
private final Tracker tracker; private final Tracker tracker;
private final DialogBuilder dialogBuilder; private final DialogBuilder dialogBuilder;
private final ItemTouchHelper itemTouchHelper; private final ItemTouchHelper itemTouchHelper;
private final PagedListAdapterHelper<Task> adapterHelper;
private ActionMode mode = null; private ActionMode mode = null;
private boolean dragging; private boolean dragging;
@ -80,10 +67,9 @@ public class TaskListRecyclerAdapter extends RecyclerView.Adapter<ViewHolder>
this.tracker = tracker; this.tracker = tracker;
this.dialogBuilder = dialogBuilder; this.dialogBuilder = dialogBuilder;
itemTouchHelper = new ItemTouchHelper(new ItemTouchHelperCallback()); itemTouchHelper = new ItemTouchHelper(new ItemTouchHelperCallback());
adapterHelper = new PagedListAdapterHelper<>(this, new ListAdapterConfig.Builder<Task>().setDiffCallback(new DiffCallback(adapter)).build());
} }
private PagedListAdapterHelper<Task> adapterHelper = new PagedListAdapterHelper<>(this, new ListAdapterConfig.Builder<Task>().setDiffCallback(DIFF_CALLBACK).build());
public void applyToRecyclerView(RecyclerView recyclerView) { public void applyToRecyclerView(RecyclerView recyclerView) {
recyclerView.setAdapter(this); recyclerView.setAdapter(this);
itemTouchHelper.attachToRecyclerView(recyclerView); itemTouchHelper.attachToRecyclerView(recyclerView);
@ -119,7 +105,9 @@ public class TaskListRecyclerAdapter extends RecyclerView.Adapter<ViewHolder>
if (task != null) { if (task != null) {
holder.bindView(task); holder.bindView(task);
holder.setMoving(false); holder.setMoving(false);
holder.setIndent(adapter.getIndent(task)); int indent = adapter.getIndent(task);
task.setIndent(indent);
holder.setIndent(indent);
holder.setSelected(adapter.isSelected(task)); holder.setSelected(adapter.isSelected(task));
} }
} }

Loading…
Cancel
Save