Use DnD for tags and builtin filter subtasks

pull/820/head
Alex Baker 5 years ago
parent 7b2e7c3cc6
commit dbe04c8636

@ -40,13 +40,14 @@ public final class AstridTaskAdapter extends TaskAdapter {
@Override
public boolean canMove(ViewHolder source, ViewHolder target) {
return true;
return !updater.isDescendantOf(target.task.getUuid(), source.task.getUuid());
}
public boolean canIndent(int position, TaskContainer task) {
String parentUuid = getItemUuid(position - 1);
int parentIndent = updater.getIndentForTask(parentUuid);
return getIndent(task) <= parentIndent;
@Override
public int maxIndent(int previousPosition, TaskContainer task) {
TaskContainer previous = getTask(previousPosition);
String parentUuid = previous.getUuid();
return updater.getIndentForTask(parentUuid) + 1;
}
@Override
@ -56,11 +57,8 @@ public final class AstridTaskAdapter extends TaskAdapter {
@Override
public void moved(int from, int to, int indent) {
String targetTaskId = getItemUuid(from);
if (!Task.isValidUuid(targetTaskId)) {
return; // This can happen with gestures on empty parts of the list (e.g. extra space below
// tasks)
}
TaskContainer source = getTask(from);
String targetTaskId = source.getUuid();
try {
if (to >= getCount()) {
@ -69,6 +67,11 @@ public final class AstridTaskAdapter extends TaskAdapter {
String destinationTaskId = getItemUuid(to);
updater.moveTo(list, filter, targetTaskId, destinationTaskId);
}
int currentIndent = updater.getIndentForTask(targetTaskId);
int delta = indent - currentIndent;
for (int i = 0 ; i < Math.abs(delta) ; i++) {
updater.indent(list, filter, targetTaskId, delta);
}
} catch (Exception e) {
Timber.e(e);
}

@ -56,8 +56,8 @@ public final class GoogleTaskAdapter extends TaskAdapter {
}
@Override
public int maxIndent(int position, TaskContainer task) {
return position == 0 || task.hasChildren() ? 0 : 1;
public int maxIndent(int previousPosition, TaskContainer task) {
return task.hasChildren() ? 0 : 1;
}
@Override

@ -60,7 +60,7 @@ public class TaskAdapter {
return false;
}
public int maxIndent(int position, TaskContainer task) {
public int maxIndent(int previousPosition, TaskContainer task) {
return 0;
}

@ -391,6 +391,10 @@ public class SubtasksFilterUpdater {
applyToFilter(filter);
}
public boolean isDescendantOf(String desc, String parent) {
return isDescendantOf(idToNode.get(desc), idToNode.get(parent));
}
// Returns true if desc is a descendant of parent
private boolean isDescendantOf(Node desc, Node parent) {
Node curr = desc;

@ -9,7 +9,6 @@ import android.graphics.Canvas;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.ItemTouchHelper;
import androidx.recyclerview.widget.RecyclerView;
import com.todoroo.astrid.activity.TaskListFragment;
import com.todoroo.astrid.adapter.TaskAdapter;
import com.todoroo.astrid.utility.Flags;
import org.tasks.data.TaskContainer;
@ -17,7 +16,6 @@ import org.tasks.data.TaskContainer;
public class ItemTouchHelperCallback extends ItemTouchHelper.Callback {
private final TaskAdapter adapter;
private final TaskListRecyclerAdapter recyclerAdapter;
private final TaskListFragment taskList;
private final Runnable onClear;
private int from = -1;
private int to = -1;
@ -25,13 +23,9 @@ public class ItemTouchHelperCallback extends ItemTouchHelper.Callback {
private boolean swiping;
ItemTouchHelperCallback(
TaskAdapter adapter,
TaskListRecyclerAdapter recyclerAdapter,
TaskListFragment taskList,
Runnable onClear) {
TaskAdapter adapter, TaskListRecyclerAdapter recyclerAdapter, Runnable onClear) {
this.adapter = adapter;
this.recyclerAdapter = recyclerAdapter;
this.taskList = taskList;
this.onClear = onClear;
}
@ -85,7 +79,7 @@ public class ItemTouchHelperCallback extends ItemTouchHelper.Callback {
to == 0 || to == recyclerAdapter.getItemCount() - 1
? 0
: adapter.minIndent(from <= to ? to + 1 : to, task));
source.setMaxIndent(adapter.maxIndent(to, task));
source.setMaxIndent(to == 0 ? 0 : adapter.maxIndent(from >= to ? to - 1 : to, task));
}
@Override
@ -175,7 +169,6 @@ public class ItemTouchHelperCallback extends ItemTouchHelper.Callback {
int delta = direction == ItemTouchHelper.RIGHT ? 1 : -1;
int position = viewHolder.getAdapterPosition();
recyclerAdapter.swiped(position, delta);
taskList.loadTaskListContent();
}
boolean isDragging() {

@ -59,7 +59,7 @@ public class TaskListRecyclerAdapter extends RecyclerView.Adapter<ViewHolder>
this.actionModeProvider = actionModeProvider;
this.list = list;
itemTouchHelperCallback =
new ItemTouchHelperCallback(adapter, this, taskList, this::drainQueue);
new ItemTouchHelperCallback(adapter, this, this::drainQueue);
isGoogleTaskList = taskList.getFilter() instanceof GtasksFilter;
Pair<List<TaskContainer>, DiffResult> initial = Pair.create(list, null);
disposables.add(
@ -262,6 +262,7 @@ public class TaskListRecyclerAdapter extends RecyclerView.Adapter<ViewHolder>
adapter.moved(from, to, indent);
TaskContainer task = list.remove(from);
list.add(from < to ? to - 1 : to, task);
taskList.loadTaskListContent();
}
void swiped(int position, int delta) {

Loading…
Cancel
Save