async Task TaskAction(ButtonRow arg) { var item = arg.Tag as Tuple <TodoList, TodoTask>; await TodoListPage.TaskAction(this, item.Item2, item.Item1); }
void SetupRecentTasks() { { var tasks = new List <Tuple <TodoList, TodoTask> >(); var ids = new HashSet <long>(); foreach (var serviceNode in ServiceNodeManager.Current.ServiceNodes) { var todo = TodoApp.Current.GetTodo(serviceNode); if (todo != null) { foreach (var todoList in todo.TodoLists) { var listTasks = todoList.GetTasks(TodoTaskStatusTypes.Open, TodoListSortMethod.Ignored); foreach (var task in listTasks) { if (!ids.Contains(task.CurrentTaskStorage.TransactionId)) { tasks.Add(Tuple.Create(todoList, task)); ids.Add(task.CurrentTaskStorage.TransactionId); } } } } } tasks.Sort((a, b) => b.Item2.CurrentTaskStorage.TransactionId.CompareTo(a.Item2.CurrentTaskStorage.TransactionId)); if (tasks.Count > 0) { var header = GetRow <HeaderRow>("RecentTasks"); if (header == null) { AddIndex = GetRow("TodoLists"); AddIndexBefore = true; header = AddHeaderRow("RecentTasks"); var b = AddButtonRow("NewTask", NewTask); b.SetDetailViewIcon(Icons.Plus); b.RowStyle = Theme.SubmitButton; AddFooterRow(); } var rows = GetHeaderSectionRows(header); var rowIndex = 0; AddIndexBefore = false; AddIndex = header; foreach (var task in tasks) { if (!(rowIndex < rows.Count && rows[rowIndex] is ButtonRow button && button.Tag is Tuple <TodoList, TodoTask>)) { button = AddButtonRow(null, TaskAction); button.SetDetailViewIcon(Icons.Circle); } if (button.Label.Text != task.Item2.Text) { button.Label.Text = task.Item2.Text; } button.Tag = task; TodoListPage.UpdateTaskIcon(button, task.Item2); AddIndex = button; ++rowIndex; if (rowIndex >= 4) { break; } } for (var i = rowIndex; i < rows.Count; i++) { if (rows[i] is ButtonRow button && button.Tag is Tuple <TodoList, TodoTask> ) { RemoveView(button); } } } } }