Convert task adapters to Kotlin

pull/996/head
Alex Baker 6 years ago
parent 563567a5dc
commit fe9dbe4585

@ -182,7 +182,7 @@ class TaskListFragment : InjectingFragment(), OnRefreshListener, Toolbar.OnMenuI
override fun onSaveInstanceState(outState: Bundle) { override fun onSaveInstanceState(outState: Bundle) {
super.onSaveInstanceState(outState) super.onSaveInstanceState(outState)
val selectedTaskIds: List<Long> = taskAdapter.selected val selectedTaskIds: List<Long> = taskAdapter.getSelected()
outState.putLongArray(EXTRA_SELECTED_TASK_IDS, selectedTaskIds.toLongArray()) outState.putLongArray(EXTRA_SELECTED_TASK_IDS, selectedTaskIds.toLongArray())
outState.putString(EXTRA_SEARCH, searchQuery) outState.putString(EXTRA_SEARCH, searchQuery)
} }
@ -492,7 +492,7 @@ class TaskListFragment : InjectingFragment(), OnRefreshListener, Toolbar.OnMenuI
loadTaskListContent() loadTaskListContent()
} }
fun onTaskCreated(uuid: String?) { fun onTaskCreated(uuid: String) {
taskAdapter.onTaskCreated(uuid) taskAdapter.onTaskCreated(uuid)
} }
@ -522,7 +522,7 @@ class TaskListFragment : InjectingFragment(), OnRefreshListener, Toolbar.OnMenuI
} }
REQUEST_MOVE_TASKS -> if (resultCode == Activity.RESULT_OK) { REQUEST_MOVE_TASKS -> if (resultCode == Activity.RESULT_OK) {
taskMover.move( taskMover.move(
taskAdapter.selected, taskAdapter.getSelected(),
data!!.getParcelableExtra(RemoteListPicker.EXTRA_SELECTED_FILTER)) data!!.getParcelableExtra(RemoteListPicker.EXTRA_SELECTED_FILTER))
finishActionMode() finishActionMode()
} }
@ -605,7 +605,7 @@ class TaskListFragment : InjectingFragment(), OnRefreshListener, Toolbar.OnMenuI
} }
override fun onActionItemClicked(mode: ActionMode, item: MenuItem): Boolean { override fun onActionItemClicked(mode: ActionMode, item: MenuItem): Boolean {
val selected = taskAdapter.selected val selected = taskAdapter.getSelected()
return when (item.itemId) { return when (item.itemId) {
R.id.edit_tags -> { R.id.edit_tags -> {
val tags = tagDataDao.getTagSelections(selected) val tags = tagDataDao.getTagSelections(selected)
@ -632,10 +632,9 @@ class TaskListFragment : InjectingFragment(), OnRefreshListener, Toolbar.OnMenuI
true true
} }
R.id.menu_share -> { R.id.menu_share -> {
send( DbUtils
DbUtils.collect( .collect(selected) { taskDao.fetchTasks(preferences, IdListFilter(it)) }
taskAdapter.selected .apply(this::send)
) { ids: List<Long?>? -> taskDao.fetchTasks(preferences, IdListFilter(ids)) })
true true
} }
R.id.delete -> { R.id.delete -> {

@ -1,145 +0,0 @@
package com.todoroo.astrid.adapter;
import static org.tasks.Strings.isNullOrEmpty;
import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.dao.TaskDao;
import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.subtasks.SubtasksFilterUpdater;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.tasks.data.TaskContainer;
import org.tasks.data.TaskListMetadata;
import org.tasks.tasklist.ViewHolder;
import timber.log.Timber;
public final class AstridTaskAdapter extends TaskAdapter {
private final TaskListMetadata list;
private final Filter filter;
private final SubtasksFilterUpdater updater;
private final TaskDao taskDao;
private final Map<String, ArrayList<String>> chainedCompletions =
Collections.synchronizedMap(new HashMap<>());
AstridTaskAdapter(
TaskListMetadata list, Filter filter, SubtasksFilterUpdater updater, TaskDao taskDao) {
this.list = list;
this.filter = filter;
this.updater = updater;
this.taskDao = taskDao;
}
@Override
public int getIndent(TaskContainer task) {
return updater.getIndentForTask(task.getUuid());
}
@Override
public boolean canMove(ViewHolder source, ViewHolder target) {
return !updater.isDescendantOf(target.task.getUuid(), source.task.getUuid());
}
@Override
public int maxIndent(int previousPosition, TaskContainer task) {
TaskContainer previous = getTask(previousPosition);
String parentUuid = previous.getUuid();
return updater.getIndentForTask(parentUuid) + 1;
}
@Override
public boolean supportsParentingOrManualSort() {
return true;
}
@Override
public boolean supportsManualSorting() {
return true;
}
@Override
public void moved(int from, int to, int indent) {
TaskContainer source = getTask(from);
String targetTaskId = source.getUuid();
try {
if (to >= getCount()) {
updater.moveTo(list, filter, targetTaskId, "-1"); // $NON-NLS-1$
} else {
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);
}
}
@Override
public void onTaskCreated(String uuid) {
updater.onCreateTask(list, filter, uuid);
}
@Override
public void onTaskDeleted(Task task) {
updater.onDeleteTask(list, filter, task.getUuid());
}
@Override
public void onCompletedTask(TaskContainer item, boolean completedState) {
final String itemId = item.getUuid();
final long completionDate = completedState ? DateUtilities.now() : 0;
if (!completedState) {
ArrayList<String> chained = chainedCompletions.get(itemId);
if (chained != null) {
for (String taskId : chained) {
taskDao.setCompletionDate(taskId, completionDate);
}
}
return;
}
final ArrayList<String> chained = new ArrayList<>();
updater.applyToDescendants(
itemId,
node -> {
String uuid = node.uuid;
taskDao.setCompletionDate(uuid, completionDate);
chained.add(node.uuid);
});
if (chained.size() > 0) {
// move recurring items to item parent
List<Task> tasks = taskDao.getRecurringTasks(chained);
boolean madeChanges = false;
for (Task t : tasks) {
if (!isNullOrEmpty(t.getRecurrence())) {
updater.moveToParentOf(t.getUuid(), itemId);
madeChanges = true;
}
}
if (madeChanges) {
updater.writeSerialization(list, updater.serializeTree());
}
chainedCompletions.put(itemId, chained);
}
}
@Override
public boolean supportsHiddenTasks() {
return false;
}
}

@ -0,0 +1,97 @@
package com.todoroo.astrid.adapter
import com.todoroo.andlib.utility.DateUtilities
import com.todoroo.astrid.api.Filter
import com.todoroo.astrid.dao.TaskDao
import com.todoroo.astrid.data.Task
import com.todoroo.astrid.subtasks.SubtasksFilterUpdater
import org.tasks.Strings.isNullOrEmpty
import org.tasks.data.TaskContainer
import org.tasks.data.TaskListMetadata
import org.tasks.tasklist.ViewHolder
import timber.log.Timber
import java.util.*
import kotlin.math.abs
class AstridTaskAdapter internal constructor(
private val list: TaskListMetadata,
private val filter: Filter,
private val updater: SubtasksFilterUpdater,
private val taskDao: TaskDao) : TaskAdapter() {
private val chainedCompletions = Collections.synchronizedMap(HashMap<String, ArrayList<String>>())
override fun getIndent(task: TaskContainer) = updater.getIndentForTask(task.uuid)
override fun canMove(source: ViewHolder, target: ViewHolder) = !updater.isDescendantOf(target.task.uuid, source.task.uuid)
override fun maxIndent(previousPosition: Int, task: TaskContainer): Int {
val previous = getTask(previousPosition)
return updater.getIndentForTask(previous.uuid) + 1
}
override fun supportsParentingOrManualSort() = true
override fun supportsManualSorting() = true
override fun moved(from: Int, to: Int, indent: Int) {
val source = getTask(from)
val targetTaskId = source.uuid
try {
if (to >= count) {
updater.moveTo(list, filter, targetTaskId, "-1") // $NON-NLS-1$
} else {
val destinationTaskId = getItemUuid(to)
updater.moveTo(list, filter, targetTaskId, destinationTaskId)
}
val currentIndent = updater.getIndentForTask(targetTaskId)
val delta = indent - currentIndent
for (i in 0 until abs(delta)) {
updater.indent(list, filter, targetTaskId, delta)
}
} catch (e: Exception) {
Timber.e(e)
}
}
override fun onTaskCreated(uuid: String) = updater.onCreateTask(list, filter, uuid)
override fun onTaskDeleted(task: Task) = updater.onDeleteTask(list, filter, task.uuid)
override fun onCompletedTask(task: TaskContainer, newState: Boolean) {
val itemId = task.uuid
val completionDate = if (newState) DateUtilities.now() else 0
if (!newState) {
val chained = chainedCompletions[itemId]
if (chained != null) {
for (taskId in chained) {
taskDao.setCompletionDate(taskId, completionDate)
}
}
return
}
val chained = ArrayList<String>()
updater.applyToDescendants(itemId) { node: SubtasksFilterUpdater.Node ->
val uuid = node.uuid
taskDao.setCompletionDate(uuid, completionDate)
chained.add(node.uuid)
}
if (chained.size > 0) {
// move recurring items to item parent
val tasks = taskDao.getRecurringTasks(chained)
var madeChanges = false
for (t in tasks) {
if (!isNullOrEmpty(t.recurrence)) {
updater.moveToParentOf(t.uuid, itemId)
madeChanges = true
}
}
if (madeChanges) {
updater.writeSerialization(list, updater.serializeTree())
}
chainedCompletions[itemId] = chained
}
}
override fun supportsHiddenTasks() = false
}

@ -1,110 +0,0 @@
package com.todoroo.astrid.adapter;
import com.todoroo.astrid.dao.TaskDao;
import org.tasks.data.CaldavDao;
import org.tasks.data.CaldavTask;
import org.tasks.data.SubsetCaldav;
import org.tasks.data.TaskContainer;
import org.tasks.tasklist.ViewHolder;
public final class CaldavTaskAdapter extends TaskAdapter {
private final TaskDao taskDao;
private final CaldavDao caldavDao;
CaldavTaskAdapter(TaskDao taskDao, CaldavDao caldavDao) {
this.taskDao = taskDao;
this.caldavDao = caldavDao;
}
@Override
public boolean canMove(ViewHolder sourceVh, ViewHolder targetVh) {
TaskContainer source = sourceVh.task;
int to = targetVh.getAdapterPosition();
return !taskIsChild(source, to);
}
@Override
public int maxIndent(int previousPosition, TaskContainer task) {
TaskContainer previous = getTask(previousPosition);
return previous.getIndent() + 1;
}
@Override
public int minIndent(int nextPosition, TaskContainer task) {
return 0;
}
@Override
public boolean supportsParentingOrManualSort() {
return true;
}
@Override
public void moved(int from, int to, int indent) {
TaskContainer task = getTask(from);
TaskContainer previous = to > 0 ? getTask(to - 1) : null;
long newParent = task.getParent();
if (indent == 0) {
newParent = 0;
} else if (previous != null) {
if (indent == previous.getIndent()) {
newParent = previous.getParent();
} else if (indent > previous.getIndent()) {
newParent = previous.getId();
} else if (indent < previous.getIndent()) {
newParent = previous.getParent();
int currentIndex = to;
for (int i = 0 ; i < previous.getIndent() - indent ; i++) {
long thisParent = newParent;
while (newParent == thisParent) {
thisParent = getTask(--currentIndex).getParent();
}
newParent = thisParent;
}
}
}
// If nothing is changing, return
if (newParent == task.getParent()) {
return;
}
changeParent(task, newParent);
taskDao.touch(task.getId());
}
private void changeParent(TaskContainer task, long newParent) {
SubsetCaldav caldavTask = task.getCaldavTask();
if (newParent == 0) {
caldavTask.setRemoteParent("");
task.setParent(0);
} else {
CaldavTask parentTask = caldavDao.getTask(newParent);
if (parentTask == null) {
return;
}
caldavTask.setRemoteParent(parentTask.getRemoteId());
task.setParent(newParent);
}
caldavDao.update(caldavTask);
taskDao.save(task.getTask());
}
private boolean taskIsChild(TaskContainer source, int destinationIndex) {
TaskContainer destination = getTask(destinationIndex);
while (destination.getParent() != 0) {
if (destination.getParent() == source.getParent()) {
return false;
}
if (destination.getParent() == source.getId()) {
return true;
}
destination = getTask(--destinationIndex);
}
return false;
}
}

@ -0,0 +1,80 @@
package com.todoroo.astrid.adapter
import com.todoroo.astrid.dao.TaskDao
import org.tasks.data.CaldavDao
import org.tasks.data.TaskContainer
import org.tasks.tasklist.ViewHolder
class CaldavTaskAdapter internal constructor(private val taskDao: TaskDao, private val caldavDao: CaldavDao) : TaskAdapter() {
override fun canMove(sourceVh: ViewHolder, targetVh: ViewHolder): Boolean {
val source = sourceVh.task
val to = targetVh.adapterPosition
return !taskIsChild(source, to)
}
override fun maxIndent(previousPosition: Int, task: TaskContainer): Int {
val previous = getTask(previousPosition)
return previous.getIndent() + 1
}
override fun minIndent(nextPosition: Int, task: TaskContainer) = 0
override fun supportsParentingOrManualSort() = true
override fun moved(from: Int, to: Int, indent: Int) {
val task = getTask(from)
val previous = if (to > 0) getTask(to - 1) else null
var newParent = task.parent
if (indent == 0) {
newParent = 0
} else if (previous != null) {
when {
indent == previous.getIndent() -> newParent = previous.parent
indent > previous.getIndent() -> newParent = previous.id
indent < previous.getIndent() -> {
newParent = previous.parent
var currentIndex = to
for (i in 0 until previous.getIndent() - indent) {
var thisParent = newParent
while (newParent == thisParent) {
thisParent = getTask(--currentIndex).parent
}
newParent = thisParent
}
}
}
}
// If nothing is changing, return
if (newParent == task.parent) {
return
}
changeParent(task, newParent)
taskDao.touch(task.id)
}
private fun changeParent(task: TaskContainer, newParent: Long) {
val caldavTask = task.getCaldavTask()
if (newParent == 0L) {
caldavTask.remoteParent = ""
task.parent = 0
} else {
val parentTask = caldavDao.getTask(newParent) ?: return
caldavTask.remoteParent = parentTask.remoteId
task.parent = newParent
}
caldavDao.update(caldavTask)
taskDao.save(task.getTask())
}
private fun taskIsChild(source: TaskContainer, destinationIndex: Int): Boolean {
(destinationIndex downTo 0).forEach {
when (getTask(it).parent) {
0L -> return false
source.parent -> return false
source.id -> return true
}
}
return false
}
}

@ -1,51 +0,0 @@
package com.todoroo.astrid.adapter;
import com.todoroo.astrid.dao.TaskDao;
import org.tasks.BuildConfig;
import org.tasks.data.GoogleTaskDao;
import org.tasks.data.SubsetGoogleTask;
import org.tasks.data.TaskContainer;
public final class GoogleTaskAdapter extends GoogleTaskManualSortAdapter {
private final boolean newTasksOnTop;
GoogleTaskAdapter(TaskDao taskDao, GoogleTaskDao googleTaskDao, boolean newTasksOnTop) {
super(taskDao, googleTaskDao);
this.newTasksOnTop = newTasksOnTop;
}
@Override
public boolean supportsManualSorting() {
return false;
}
@Override
public void moved(int from, int to, int indent) {
TaskContainer task = getTask(from);
SubsetGoogleTask googleTask = task.getGoogleTask();
TaskContainer previous = to > 0 ? getTask(to - 1) : null;
if (indent == 0) {
if (googleTask.getIndent() == 0) {
return;
}
googleTaskDao.move(
googleTask, 0, newTasksOnTop ? 0 : googleTaskDao.getBottom(googleTask.getListId(), 0));
} else {
long newParent = previous.hasParent() ? previous.getParent() : previous.getId();
if (googleTask.getParent() == newParent) {
return;
}
googleTaskDao.move(
googleTask,
newParent,
newTasksOnTop ? 0 : googleTaskDao.getBottom(googleTask.getListId(), newParent));
}
taskDao.touch(task.getId());
if (BuildConfig.DEBUG) {
googleTaskDao.validateSorting(task.getGoogleTaskList());
}
}
}

@ -0,0 +1,35 @@
package com.todoroo.astrid.adapter
import com.todoroo.astrid.dao.TaskDao
import org.tasks.BuildConfig
import org.tasks.data.GoogleTaskDao
class GoogleTaskAdapter internal constructor(taskDao: TaskDao, googleTaskDao: GoogleTaskDao, private val newTasksOnTop: Boolean) : GoogleTaskManualSortAdapter(taskDao, googleTaskDao) {
override fun supportsManualSorting() = false
override fun moved(from: Int, to: Int, indent: Int) {
val task = getTask(from)
val googleTask = task.googleTask
val previous = if (to > 0) getTask(to - 1) else null
if (indent == 0) {
if (googleTask.indent == 0) {
return
}
googleTaskDao.move(
googleTask, 0, if (newTasksOnTop) 0 else googleTaskDao.getBottom(googleTask.listId, 0))
} else {
val newParent = if (previous!!.hasParent()) previous.parent else previous.id
if (googleTask.parent == newParent) {
return
}
googleTaskDao.move(
googleTask,
newParent,
if (newTasksOnTop) 0 else googleTaskDao.getBottom(googleTask.listId, newParent))
}
taskDao.touch(task.id)
if (BuildConfig.DEBUG) {
googleTaskDao.validateSorting(task.googleTaskList)
}
}
}

@ -1,109 +0,0 @@
package com.todoroo.astrid.adapter;
import com.todoroo.astrid.dao.TaskDao;
import org.tasks.BuildConfig;
import org.tasks.data.GoogleTaskDao;
import org.tasks.data.SubsetGoogleTask;
import org.tasks.data.TaskContainer;
import org.tasks.tasklist.ViewHolder;
public class GoogleTaskManualSortAdapter extends TaskAdapter {
final TaskDao taskDao;
final GoogleTaskDao googleTaskDao;
GoogleTaskManualSortAdapter(TaskDao taskDao, GoogleTaskDao googleTaskDao) {
this.taskDao = taskDao;
this.googleTaskDao = googleTaskDao;
}
@Override
public boolean canMove(ViewHolder sourceVh, ViewHolder targetVh) {
TaskContainer source = sourceVh.task;
int to = targetVh.getAdapterPosition();
if (!source.hasChildren() || to <= 0 || to >= getCount() - 1) {
return true;
}
TaskContainer target = targetVh.task;
if (sourceVh.getAdapterPosition() < to) {
if (target.hasChildren()) {
return false;
}
if (target.hasParent()) {
return target.isLastSubtask();
}
return true;
} else {
if (target.hasChildren()) {
return true;
}
if (target.hasParent()) {
return target.getParent() == source.getId() && target.secondarySort == 0;
}
return true;
}
}
@Override
public int maxIndent(int previousPosition, TaskContainer task) {
return task.hasChildren() ? 0 : 1;
}
@Override
public int minIndent(int nextPosition, TaskContainer task) {
return task.hasChildren() || !getTask(nextPosition).hasParent() ? 0 : 1;
}
@Override
public boolean supportsParentingOrManualSort() {
return true;
}
@Override
public boolean supportsManualSorting() {
return true;
}
@Override
public void moved(int from, int to, int indent) {
TaskContainer task = getTask(from);
SubsetGoogleTask googleTask = task.getGoogleTask();
TaskContainer previous = to > 0 ? getTask(to - 1) : null;
if (previous == null) {
googleTaskDao.move(googleTask, 0, 0);
} else if (to == getCount() || to <= from) {
if (indent == 0) {
googleTaskDao.move(googleTask, 0, previous.getPrimarySort() + 1);
} else if (previous.hasParent()) {
googleTaskDao.move(googleTask, previous.getParent(), previous.getSecondarySort() + 1);
} else {
googleTaskDao.move(googleTask, previous.getId(), 0);
}
} else {
if (indent == 0) {
googleTaskDao.move(
googleTask,
0,
task.hasParent() ? previous.getPrimarySort() + 1 : previous.getPrimarySort());
} else if (previous.hasParent()) {
googleTaskDao.move(
googleTask,
previous.getParent(),
task.getParent() == previous.getParent()
? previous.getSecondarySort()
: previous.getSecondarySort() + 1);
} else {
googleTaskDao.move(googleTask, previous.getId(), 0);
}
}
taskDao.touch(task.getId());
if (BuildConfig.DEBUG) {
googleTaskDao.validateSorting(task.getGoogleTaskList());
}
}
}

@ -0,0 +1,75 @@
package com.todoroo.astrid.adapter
import com.todoroo.astrid.dao.TaskDao
import org.tasks.BuildConfig
import org.tasks.data.GoogleTaskDao
import org.tasks.data.TaskContainer
import org.tasks.tasklist.ViewHolder
open class GoogleTaskManualSortAdapter internal constructor(val taskDao: TaskDao, val googleTaskDao: GoogleTaskDao) : TaskAdapter() {
override fun canMove(sourceVh: ViewHolder, targetVh: ViewHolder): Boolean {
val source = sourceVh.task
val to = targetVh.adapterPosition
if (!source.hasChildren() || to <= 0 || to >= count - 1) {
return true
}
val target = targetVh.task
return if (sourceVh.adapterPosition < to) {
if (target.hasChildren()) {
return false
}
if (target.hasParent()) {
target.isLastSubtask
} else true
} else {
if (target.hasChildren()) {
return true
}
if (target.hasParent()) {
target.parent == source.id && target.secondarySort == 0L
} else true
}
}
override fun maxIndent(previousPosition: Int, task: TaskContainer) = if (task.hasChildren()) 0 else 1
override fun minIndent(nextPosition: Int, task: TaskContainer) = if (task.hasChildren() || !getTask(nextPosition).hasParent()) 0 else 1
override fun supportsParentingOrManualSort() = true
override fun supportsManualSorting() = true
override fun moved(from: Int, to: Int, indent: Int) {
val task = getTask(from)
val googleTask = task.googleTask
val previous = if (to > 0) getTask(to - 1) else null
if (previous == null) {
googleTaskDao.move(googleTask, 0, 0)
} else if (to == count || to <= from) {
when {
indent == 0 -> googleTaskDao.move(googleTask, 0, previous.getPrimarySort() + 1)
previous.hasParent() -> googleTaskDao.move(googleTask, previous.parent, previous.getSecondarySort() + 1)
else -> googleTaskDao.move(googleTask, previous.id, 0)
}
} else {
when {
indent == 0 ->
googleTaskDao.move(
googleTask,
0,
if (task.hasParent()) previous.getPrimarySort() + 1 else previous.getPrimarySort())
previous.hasParent() ->
googleTaskDao.move(
googleTask,
previous.parent,
if (task.parent == previous.parent) previous.getSecondarySort() else previous.getSecondarySort() + 1)
else -> googleTaskDao.move(googleTask, previous.id, 0)
}
}
taskDao.touch(task.id)
if (BuildConfig.DEBUG) {
googleTaskDao.validateSorting(task.googleTaskList)
}
}
}

@ -1,115 +0,0 @@
/*
* Copyright (c) 2012 Todoroo Inc
*
* See the file "LICENSE" for the full license governing this code.
*/
package com.todoroo.astrid.adapter;
import static com.google.common.primitives.Longs.asList;
import com.todoroo.astrid.data.Task;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
import org.tasks.data.TaskContainer;
import org.tasks.tasklist.TaskListRecyclerAdapter;
import org.tasks.tasklist.ViewHolder;
/**
* Adapter for displaying a user's tasks as a list
*
* @author Tim Su <tim@todoroo.com>
*/
public class TaskAdapter {
private final Set<Long> selected = new HashSet<>();
private TaskListRecyclerAdapter helper;
int getCount() {
return helper.getItemCount();
}
public void setHelper(TaskListRecyclerAdapter helper) {
this.helper = helper;
}
public int getNumSelected() {
return selected.size();
}
public ArrayList<Long> getSelected() {
return new ArrayList<>(selected);
}
public void setSelected(long... ids) {
setSelected(asList(ids));
}
public void setSelected(Collection<Long> ids) {
selected.clear();
selected.addAll(ids);
}
public void clearSelections() {
selected.clear();
}
public int getIndent(TaskContainer task) {
return task.getIndent();
}
public boolean canMove(ViewHolder source, ViewHolder target) {
return false;
}
public int maxIndent(int previousPosition, TaskContainer task) {
return 0;
}
public int minIndent(int nextPosition, TaskContainer task) {
return 0;
}
public boolean isSelected(TaskContainer task) {
return selected.contains(task.getId());
}
public void toggleSelection(TaskContainer task) {
long id = task.getId();
if (selected.contains(id)) {
selected.remove(id);
} else {
selected.add(id);
}
}
public boolean supportsParentingOrManualSort() {
return false;
}
public boolean supportsManualSorting() {
return false;
}
public void moved(int from, int to, int indent) {}
TaskContainer getTask(int position) {
return helper.getItem(position);
}
String getItemUuid(int position) {
return getTask(position).getUuid();
}
public void onCompletedTask(TaskContainer task, boolean newState) {}
public void onTaskCreated(String uuid) {}
public void onTaskDeleted(Task task) {}
public boolean supportsHiddenTasks() {
return true;
}
}

@ -0,0 +1,75 @@
/*
* Copyright (c) 2012 Todoroo Inc
*
* See the file "LICENSE" for the full license governing this code.
*/
package com.todoroo.astrid.adapter
import com.todoroo.astrid.data.Task
import org.tasks.data.TaskContainer
import org.tasks.tasklist.TaskListRecyclerAdapter
import org.tasks.tasklist.ViewHolder
import java.util.*
open class TaskAdapter {
private val selected = HashSet<Long>()
private lateinit var helper: TaskListRecyclerAdapter
val count: Int
get() = helper.itemCount
fun setHelper(helper: TaskListRecyclerAdapter) {
this.helper = helper
}
val numSelected: Int
get() = selected.size
fun getSelected(): ArrayList<Long> = ArrayList(selected)
fun setSelected(vararg ids: Long) = setSelected(ids.toList())
fun setSelected(ids: Collection<Long>) {
selected.clear()
selected.addAll(ids)
}
fun clearSelections() = selected.clear()
open fun getIndent(task: TaskContainer): Int = task.getIndent()
open fun canMove(source: ViewHolder, target: ViewHolder): Boolean = false
open fun maxIndent(previousPosition: Int, task: TaskContainer): Int = 0
open fun minIndent(nextPosition: Int, task: TaskContainer): Int = 0
fun isSelected(task: TaskContainer): Boolean = selected.contains(task.id)
fun toggleSelection(task: TaskContainer) {
val id = task.id
if (selected.contains(id)) {
selected.remove(id)
} else {
selected.add(id)
}
}
open fun supportsParentingOrManualSort(): Boolean = false
open fun supportsManualSorting(): Boolean = false
open fun moved(from: Int, to: Int, indent: Int) {}
fun getTask(position: Int): TaskContainer = helper.getItem(position)
fun getItemUuid(position: Int): String = getTask(position).uuid
open fun onCompletedTask(task: TaskContainer, newState: Boolean) {}
open fun onTaskCreated(uuid: String) {}
open fun onTaskDeleted(task: Task) {}
open fun supportsHiddenTasks(): Boolean = true
}
Loading…
Cancel
Save