Remove manual sort list fragment helpers

pull/795/head
Alex Baker 7 years ago
parent b34694f0a4
commit 8d9972c4c3

@ -1,8 +1,16 @@
package com.todoroo.astrid.adapter; package com.todoroo.astrid.adapter;
import android.text.TextUtils;
import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.dao.TaskDao;
import com.todoroo.astrid.data.Task; import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.subtasks.SubtasksFilterUpdater; 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.TaskListMetadata; import org.tasks.data.TaskListMetadata;
import timber.log.Timber; import timber.log.Timber;
@ -11,12 +19,16 @@ public final class AstridTaskAdapter extends TaskAdapter {
private final TaskListMetadata list; private final TaskListMetadata list;
private final Filter filter; private final Filter filter;
private final SubtasksFilterUpdater updater; private final SubtasksFilterUpdater updater;
private final TaskDao taskDao;
private final Map<String, ArrayList<String>> chainedCompletions =
Collections.synchronizedMap(new HashMap<>());
public AstridTaskAdapter( public AstridTaskAdapter(
TaskListMetadata list, Filter filter, SubtasksFilterUpdater updater) { TaskListMetadata list, Filter filter, SubtasksFilterUpdater updater, TaskDao taskDao) {
this.list = list; this.list = list;
this.filter = filter; this.filter = filter;
this.updater = updater; this.updater = updater;
this.taskDao = taskDao;
} }
@Override @Override
@ -79,4 +91,49 @@ public final class AstridTaskAdapter extends TaskAdapter {
public void onTaskDeleted(Task task) { public void onTaskDeleted(Task task) {
updater.onDeleteTask(list, filter, task.getUuid()); updater.onDeleteTask(list, filter, task.getUuid());
} }
@Override
public void onCompletedTask(Task 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 (!TextUtils.isEmpty(t.getRecurrence())) {
updater.moveToParentOf(t.getUuid(), itemId);
madeChanges = true;
}
}
if (madeChanges) {
updater.writeSerialization(list, updater.serializeTree());
}
chainedCompletions.put(itemId, chained);
}
}
} }

@ -1,11 +1,18 @@
package com.todoroo.astrid.adapter; package com.todoroo.astrid.adapter;
import android.text.TextUtils;
import com.todoroo.andlib.data.Property; import com.todoroo.andlib.data.Property;
import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.astrid.dao.TaskDao;
import com.todoroo.astrid.data.Task; import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.gtasks.GtasksTaskListUpdater; import com.todoroo.astrid.gtasks.GtasksTaskListUpdater;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import org.tasks.data.GoogleTask; import org.tasks.data.GoogleTask;
import org.tasks.data.GoogleTaskDao;
import org.tasks.data.GoogleTaskList; import org.tasks.data.GoogleTaskList;
import timber.log.Timber; import timber.log.Timber;
@ -13,10 +20,20 @@ public final class GoogleTaskAdapter extends TaskAdapter {
private final GoogleTaskList list; private final GoogleTaskList list;
private final GtasksTaskListUpdater updater; private final GtasksTaskListUpdater updater;
private final TaskDao taskDao;
private final GoogleTaskDao googleTaskDao;
private final Map<Long, ArrayList<Long>> chainedCompletions =
Collections.synchronizedMap(new HashMap<>());
public GoogleTaskAdapter(GoogleTaskList list, GtasksTaskListUpdater updater) { public GoogleTaskAdapter(
GoogleTaskList list,
GtasksTaskListUpdater updater,
TaskDao taskDao,
GoogleTaskDao googleTaskDao) {
this.list = list; this.list = list;
this.updater = updater; this.updater = updater;
this.taskDao = taskDao;
this.googleTaskDao = googleTaskDao;
} }
@Override @Override
@ -81,4 +98,45 @@ public final class GoogleTaskAdapter extends TaskAdapter {
public void onTaskDeleted(Task task) { public void onTaskDeleted(Task task) {
updater.onDeleteTask(list, task.getId()); updater.onDeleteTask(list, task.getId());
} }
@Override
public void onCompletedTask(Task item, boolean completedState) {
final long itemId = item.getId();
final long completionDate = completedState ? DateUtilities.now() : 0;
if (!completedState) {
ArrayList<Long> chained = chainedCompletions.get(itemId);
if (chained != null) {
for (Long taskId : chained) {
Task task = taskDao.fetch(taskId);
task.setCompletionDate(completionDate);
taskDao.save(task);
}
}
return;
}
final ArrayList<Long> chained = new ArrayList<>();
final int parentIndent = item.getIndent();
updater.applyToChildren(
list,
itemId,
node -> {
Task childTask = taskDao.fetch(node.taskId);
if (!TextUtils.isEmpty(childTask.getRecurrence())) {
GoogleTask googleTask = updater.getTaskMetadata(node.taskId);
googleTask.setIndent(parentIndent);
googleTaskDao.update(googleTask);
}
childTask.setCompletionDate(completionDate);
taskDao.save(childTask);
chained.add(node.taskId);
});
if (chained.size() > 0) {
chainedCompletions.put(itemId, chained);
}
}
} }

@ -51,7 +51,6 @@ public class TaskAdapter {
Property.class); Property.class);
private final Set<Long> selected = new HashSet<>(); private final Set<Long> selected = new HashSet<>();
private AsyncPagedListDiffer<Task> helper; private AsyncPagedListDiffer<Task> helper;
private OnCompletedTaskListener onCompletedTaskListener = null;
public int getCount() { public int getCount() {
return helper.getItemCount(); return helper.getItemCount();
@ -119,30 +118,13 @@ public class TaskAdapter {
return getTask(position).getUuid(); return getTask(position).getUuid();
} }
public void onCompletedTask(Task task, boolean newState) {
if (onCompletedTaskListener != null) {
onCompletedTaskListener.onCompletedTask(task, newState);
}
}
public void setOnCompletedTaskListener(final OnCompletedTaskListener newListener) {
this.onCompletedTaskListener = newListener;
}
public Property<?>[] getTaskProperties() { public Property<?>[] getTaskProperties() {
return PROPERTIES; return PROPERTIES;
} }
public void onTaskCreated(String uuid) { public void onCompletedTask(Task task, boolean newState) {}
} public void onTaskCreated(String uuid) {}
public void onTaskDeleted(Task task) { public void onTaskDeleted(Task task) {}
}
public interface OnCompletedTaskListener {
void onCompletedTask(Task item, boolean newState);
}
} }

@ -6,20 +6,22 @@
package com.todoroo.astrid.gtasks; package com.todoroo.astrid.gtasks;
import android.app.Activity;
import android.os.Bundle;
import com.todoroo.astrid.activity.TaskListFragment; import com.todoroo.astrid.activity.TaskListFragment;
import com.todoroo.astrid.adapter.GoogleTaskAdapter;
import com.todoroo.astrid.adapter.TaskAdapter; import com.todoroo.astrid.adapter.TaskAdapter;
import com.todoroo.astrid.api.GtasksFilter; import com.todoroo.astrid.api.GtasksFilter;
import com.todoroo.astrid.data.Task; import com.todoroo.astrid.dao.TaskDao;
import javax.inject.Inject; import javax.inject.Inject;
import org.tasks.data.GoogleTaskDao;
import org.tasks.data.GoogleTaskList; import org.tasks.data.GoogleTaskList;
import org.tasks.injection.FragmentComponent; import org.tasks.injection.FragmentComponent;
import org.tasks.tasklist.GtasksListFragment; import org.tasks.tasklist.GtasksListFragment;
public class GtasksSubtaskListFragment extends GtasksListFragment { public class GtasksSubtaskListFragment extends GtasksListFragment {
@Inject OrderedMetadataListFragmentHelper helper; @Inject TaskDao taskDao;
@Inject GtasksTaskListUpdater updater;
@Inject GoogleTaskDao googleTaskDao;
public static TaskListFragment newGtasksSubtaskListFragment( public static TaskListFragment newGtasksSubtaskListFragment(
GtasksFilter filter, GoogleTaskList list) { GtasksFilter filter, GoogleTaskList list) {
@ -29,25 +31,10 @@ public class GtasksSubtaskListFragment extends GtasksListFragment {
return fragment; return fragment;
} }
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
helper.setList(list);
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
helper.setTaskListFragment(this);
}
@Override @Override
protected TaskAdapter createTaskAdapter() { protected TaskAdapter createTaskAdapter() {
helper.setList(list); updater.initialize(filter);
helper.beforeSetUpTaskList(filter); return new GoogleTaskAdapter(list, updater, taskDao, googleTaskDao);
return helper.createTaskAdapter();
} }
@Override @Override

@ -50,7 +50,7 @@ public class GtasksTaskListUpdater {
// --- overrides // --- overrides
GoogleTask getTaskMetadata(long taskId) { public GoogleTask getTaskMetadata(long taskId) {
return googleTaskDao.getByTaskId(taskId); return googleTaskDao.getByTaskId(taskId);
} }
@ -338,7 +338,7 @@ public class GtasksTaskListUpdater {
} }
/** Apply an operation only to the children of the task */ /** Apply an operation only to the children of the task */
void applyToChildren(GoogleTaskList list, long targetTaskId, OrderedListNodeVisitor visitor) { public void applyToChildren(GoogleTaskList list, long targetTaskId, OrderedListNodeVisitor visitor) {
Node root = buildTreeModel(list); Node root = buildTreeModel(list);
Node target = findNode(root, targetTaskId); Node target = findNode(root, targetTaskId);
@ -385,12 +385,12 @@ public class GtasksTaskListUpdater {
void processTask(long taskId, GoogleTask googleTask); void processTask(long taskId, GoogleTask googleTask);
} }
interface OrderedListNodeVisitor { public interface OrderedListNodeVisitor {
void visitNode(Node node); void visitNode(Node node);
} }
static class Node { public static class Node {
public final long taskId; public final long taskId;
final ArrayList<Node> children = new ArrayList<>(); final ArrayList<Node> children = new ArrayList<>();

@ -1,106 +0,0 @@
/*
* Copyright (c) 2012 Todoroo Inc
*
* See the file "LICENSE" for the full license governing this code.
*/
package com.todoroo.astrid.gtasks;
import android.text.TextUtils;
import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.astrid.activity.TaskListFragment;
import com.todoroo.astrid.adapter.GoogleTaskAdapter;
import com.todoroo.astrid.adapter.TaskAdapter;
import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.dao.TaskDao;
import com.todoroo.astrid.data.Task;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import javax.inject.Inject;
import org.tasks.data.GoogleTask;
import org.tasks.data.GoogleTaskDao;
import org.tasks.data.GoogleTaskList;
class OrderedMetadataListFragmentHelper {
private final GtasksTaskListUpdater updater;
private final GoogleTaskDao googleTaskDao;
private final TaskDao taskDao;
private final Map<Long, ArrayList<Long>> chainedCompletions =
Collections.synchronizedMap(new HashMap<>());
private TaskListFragment fragment;
private GoogleTaskList list;
@Inject
OrderedMetadataListFragmentHelper(
TaskDao taskDao, GtasksTaskListUpdater updater, GoogleTaskDao googleTaskDao) {
this.taskDao = taskDao;
this.updater = updater;
this.googleTaskDao = googleTaskDao;
}
void setTaskListFragment(TaskListFragment fragment) {
this.fragment = fragment;
}
void beforeSetUpTaskList(Filter filter) {
updater.initialize(filter);
}
TaskAdapter createTaskAdapter() {
GoogleTaskAdapter taskAdapter = new GoogleTaskAdapter(list, updater);
taskAdapter.setOnCompletedTaskListener(this::setCompletedForItemAndSubtasks);
return taskAdapter;
}
private void setCompletedForItemAndSubtasks(final Task item, final boolean completedState) {
final long itemId = item.getId();
final long completionDate = completedState ? DateUtilities.now() : 0;
if (!completedState) {
ArrayList<Long> chained = chainedCompletions.get(itemId);
if (chained != null) {
for (Long taskId : chained) {
Task task = taskDao.fetch(taskId);
task.setCompletionDate(completionDate);
taskDao.save(task);
}
fragment.loadTaskListContent();
}
return;
}
final ArrayList<Long> chained = new ArrayList<>();
final int parentIndent = item.getIndent();
updater.applyToChildren(
list,
itemId,
node -> {
Task childTask = taskDao.fetch(node.taskId);
if (!TextUtils.isEmpty(childTask.getRecurrence())) {
GoogleTask googleTask = updater.getTaskMetadata(node.taskId);
googleTask.setIndent(parentIndent);
googleTaskDao.update(googleTask);
}
childTask.setCompletionDate(completionDate);
taskDao.save(childTask);
chained.add(node.taskId);
});
if (chained.size() > 0) {
chainedCompletions.put(itemId, chained);
fragment.loadTaskListContent();
}
}
public void setList(GoogleTaskList list) {
this.list = list;
}
}

@ -1,99 +0,0 @@
package com.todoroo.astrid.subtasks;
import android.text.TextUtils;
import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.astrid.activity.TaskListFragment;
import com.todoroo.astrid.adapter.AstridTaskAdapter;
import com.todoroo.astrid.adapter.TaskAdapter;
import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.dao.TaskDao;
import com.todoroo.astrid.data.Task;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.inject.Inject;
import org.tasks.data.TaskListMetadata;
class AstridOrderedListFragmentHelper {
private final SubtasksFilterUpdater updater;
private final TaskDao taskDao;
private final Map<String, ArrayList<String>> chainedCompletions =
Collections.synchronizedMap(new HashMap<>());
private TaskListFragment fragment;
private TaskListMetadata list;
@Inject
AstridOrderedListFragmentHelper(SubtasksFilterUpdater updater, TaskDao taskDao) {
this.updater = updater;
this.taskDao = taskDao;
}
void setTaskListFragment(TaskListFragment fragment) {
this.fragment = fragment;
}
void beforeSetUpTaskList(Filter filter) {
updater.initialize(list, filter);
}
TaskAdapter createTaskAdapter() {
AstridTaskAdapter taskAdapter = new AstridTaskAdapter(list, fragment.getFilter(), updater);
taskAdapter.setOnCompletedTaskListener(this::setCompletedForItemAndSubtasks);
return taskAdapter;
}
private void setCompletedForItemAndSubtasks(final Task item, final 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);
}
fragment.loadTaskListContent();
}
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 (!TextUtils.isEmpty(t.getRecurrence())) {
updater.moveToParentOf(t.getUuid(), itemId);
madeChanges = true;
}
}
if (madeChanges) {
updater.writeSerialization(list, updater.serializeTree());
}
chainedCompletions.put(itemId, chained);
fragment.loadTaskListContent();
}
}
public void setList(TaskListMetadata list) {
this.list = list;
}
}

@ -116,7 +116,7 @@ public class SubtasksFilterUpdater {
return order; return order;
} }
void writeSerialization(TaskListMetadata list, String serialized) { public void writeSerialization(TaskListMetadata list, String serialized) {
if (list != null) { if (list != null) {
list.setTaskIds(serialized); list.setTaskIds(serialized);
taskListMetadataDao.update(list); taskListMetadataDao.update(list);
@ -236,7 +236,7 @@ public class SubtasksFilterUpdater {
} }
} }
void applyToDescendants(String taskId, OrderedListNodeVisitor visitor) { public void applyToDescendants(String taskId, OrderedListNodeVisitor visitor) {
Node n = idToNode.get(taskId); Node n = idToNode.get(taskId);
if (n == null) { if (n == null) {
return; return;
@ -342,7 +342,7 @@ public class SubtasksFilterUpdater {
moveHelper(list, filter, target, before); moveHelper(list, filter, target, before);
} }
void moveToParentOf(String moveThis, String toParentOfThis) { public void moveToParentOf(String moveThis, String toParentOfThis) {
Node target = idToNode.get(toParentOfThis); Node target = idToNode.get(toParentOfThis);
if (target == null) { if (target == null) {
return; return;
@ -450,11 +450,11 @@ public class SubtasksFilterUpdater {
applyToFilter(filter); applyToFilter(filter);
} }
String serializeTree() { public String serializeTree() {
return serializeTree(treeRoot); return serializeTree(treeRoot);
} }
interface OrderedListNodeVisitor { public interface OrderedListNodeVisitor {
void visitNode(Node node); void visitNode(Node node);
} }
@ -464,7 +464,7 @@ public class SubtasksFilterUpdater {
void afterAddNode(Node node); void afterAddNode(Node node);
} }
static class Node { public static class Node {
final ArrayList<Node> children = new ArrayList<>(); final ArrayList<Node> children = new ArrayList<>();
public String uuid; public String uuid;

@ -10,6 +10,7 @@ import android.app.Activity;
import android.content.Context; import android.content.Context;
import android.text.TextUtils; import android.text.TextUtils;
import com.todoroo.astrid.activity.TaskListFragment; import com.todoroo.astrid.activity.TaskListFragment;
import com.todoroo.astrid.adapter.AstridTaskAdapter;
import com.todoroo.astrid.adapter.TaskAdapter; import com.todoroo.astrid.adapter.TaskAdapter;
import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.core.BuiltInFilterExposer; import com.todoroo.astrid.core.BuiltInFilterExposer;
@ -32,8 +33,8 @@ public class SubtasksListFragment extends TaskListFragment {
@Inject Preferences preferences; @Inject Preferences preferences;
@Inject @ForApplication Context context; @Inject @ForApplication Context context;
@Inject TaskListMetadataDao taskListMetadataDao; @Inject TaskListMetadataDao taskListMetadataDao;
@Inject SubtasksFilterUpdater updater;
@Inject TaskDao taskDao; @Inject TaskDao taskDao;
@Inject AstridOrderedListFragmentHelper helper;
public static TaskListFragment newSubtasksListFragment(Filter filter) { public static TaskListFragment newSubtasksListFragment(Filter filter) {
SubtasksListFragment fragment = new SubtasksListFragment(); SubtasksListFragment fragment = new SubtasksListFragment();
@ -42,10 +43,10 @@ public class SubtasksListFragment extends TaskListFragment {
} }
@Override @Override
public void onAttach(Activity activity) { protected TaskAdapter createTaskAdapter() {
super.onAttach(activity); TaskListMetadata list = initializeTaskListMetadata();
updater.initialize(list, filter);
helper.setTaskListFragment(this); return new AstridTaskAdapter(list, filter, updater, taskDao);
} }
private TaskListMetadata initializeTaskListMetadata() { private TaskListMetadata initializeTaskListMetadata() {
@ -76,13 +77,6 @@ public class SubtasksListFragment extends TaskListFragment {
return taskListMetadata; return taskListMetadata;
} }
@Override
protected TaskAdapter createTaskAdapter() {
helper.setList(initializeTaskListMetadata());
helper.beforeSetUpTaskList(filter);
return helper.createTaskAdapter();
}
@Override @Override
public void inject(FragmentComponent component) { public void inject(FragmentComponent component) {
component.inject(this); component.inject(this);

@ -6,10 +6,11 @@
package com.todoroo.astrid.subtasks; package com.todoroo.astrid.subtasks;
import android.app.Activity;
import com.todoroo.astrid.activity.TaskListFragment; import com.todoroo.astrid.activity.TaskListFragment;
import com.todoroo.astrid.adapter.AstridTaskAdapter;
import com.todoroo.astrid.adapter.TaskAdapter; import com.todoroo.astrid.adapter.TaskAdapter;
import com.todoroo.astrid.api.TagFilter; import com.todoroo.astrid.api.TagFilter;
import com.todoroo.astrid.dao.TaskDao;
import com.todoroo.astrid.data.Task; import com.todoroo.astrid.data.Task;
import javax.inject.Inject; import javax.inject.Inject;
import org.tasks.data.TagData; import org.tasks.data.TagData;
@ -21,7 +22,8 @@ import org.tasks.tasklist.TagListFragment;
public class SubtasksTagListFragment extends TagListFragment { public class SubtasksTagListFragment extends TagListFragment {
@Inject TaskListMetadataDao taskListMetadataDao; @Inject TaskListMetadataDao taskListMetadataDao;
@Inject AstridOrderedListFragmentHelper helper; @Inject SubtasksFilterUpdater updater;
@Inject TaskDao taskDao;
public static TaskListFragment newSubtasksTagListFragment(TagFilter filter, TagData tagData) { public static TaskListFragment newSubtasksTagListFragment(TagFilter filter, TagData tagData) {
SubtasksTagListFragment fragment = new SubtasksTagListFragment(); SubtasksTagListFragment fragment = new SubtasksTagListFragment();
@ -31,14 +33,13 @@ public class SubtasksTagListFragment extends TagListFragment {
} }
@Override @Override
public void onAttach(Activity activity) { protected TaskAdapter createTaskAdapter() {
super.onAttach(activity); TaskListMetadata list = initializeTaskListMetadata();
updater.initialize(list, filter);
helper.setTaskListFragment(this); return new AstridTaskAdapter(list, filter, updater, taskDao);
} }
@Override private TaskListMetadata initializeTaskListMetadata() {
protected TaskAdapter createTaskAdapter() {
String tdId = tagData.getRemoteId(); String tdId = tagData.getRemoteId();
TaskListMetadata taskListMetadata = TaskListMetadata taskListMetadata =
taskListMetadataDao.fetchByTagOrFilter(tagData.getRemoteId()); taskListMetadataDao.fetchByTagOrFilter(tagData.getRemoteId());
@ -47,9 +48,7 @@ public class SubtasksTagListFragment extends TagListFragment {
taskListMetadata.setTagUuid(tdId); taskListMetadata.setTagUuid(tdId);
taskListMetadataDao.createNew(taskListMetadata); taskListMetadataDao.createNew(taskListMetadata);
} }
helper.setList(taskListMetadata); return taskListMetadata;
helper.beforeSetUpTaskList(filter);
return helper.createTaskAdapter();
} }
@Override @Override

@ -99,6 +99,7 @@ public class TaskListRecyclerAdapter extends RecyclerView.Adapter<ViewHolder>
@Override @Override
public void onCompletedTask(Task task, boolean newState) { public void onCompletedTask(Task task, boolean newState) {
adapter.onCompletedTask(task, newState); adapter.onCompletedTask(task, newState);
taskList.loadTaskListContent();
} }
@Override @Override

Loading…
Cancel
Save