From c303ce32ab6382d53ae3d51cda3e31524d1f5ef0 Mon Sep 17 00:00:00 2001 From: Alex Baker Date: Thu, 20 Apr 2023 12:06:14 -0500 Subject: [PATCH] Change lists with drag and drop --- .../astrid/adapter/AstridTaskAdapter.kt | 6 ++++-- .../adapter/CaldavManualSortTaskAdapter.kt | 6 ++++-- .../adapter/GoogleTaskManualSortAdapter.kt | 6 ++++-- .../com/todoroo/astrid/adapter/TaskAdapter.kt | 6 +++++- .../astrid/adapter/TaskAdapterProvider.kt | 15 +++++++++------ .../com/todoroo/astrid/service/TaskMover.kt | 18 +++++++++++++++++- 6 files changed, 43 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/com/todoroo/astrid/adapter/AstridTaskAdapter.kt b/app/src/main/java/com/todoroo/astrid/adapter/AstridTaskAdapter.kt index ba9fd63d7..8500ee1de 100644 --- a/app/src/main/java/com/todoroo/astrid/adapter/AstridTaskAdapter.kt +++ b/app/src/main/java/com/todoroo/astrid/adapter/AstridTaskAdapter.kt @@ -4,6 +4,7 @@ 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.service.TaskMover import com.todoroo.astrid.subtasks.SubtasksFilterUpdater import org.tasks.LocalBroadcastManager import org.tasks.Strings.isNullOrEmpty @@ -23,8 +24,9 @@ class AstridTaskAdapter internal constructor( googleTaskDao: GoogleTaskDao, caldavDao: CaldavDao, private val taskDao: TaskDao, - private val localBroadcastManager: LocalBroadcastManager) - : TaskAdapter(false, googleTaskDao, caldavDao, taskDao, localBroadcastManager) { + private val localBroadcastManager: LocalBroadcastManager, + taskMover: TaskMover, +) : TaskAdapter(false, googleTaskDao, caldavDao, taskDao, localBroadcastManager, taskMover) { private val chainedCompletions = Collections.synchronizedMap(HashMap>()) diff --git a/app/src/main/java/com/todoroo/astrid/adapter/CaldavManualSortTaskAdapter.kt b/app/src/main/java/com/todoroo/astrid/adapter/CaldavManualSortTaskAdapter.kt index e8be88b56..791db65bb 100644 --- a/app/src/main/java/com/todoroo/astrid/adapter/CaldavManualSortTaskAdapter.kt +++ b/app/src/main/java/com/todoroo/astrid/adapter/CaldavManualSortTaskAdapter.kt @@ -1,6 +1,7 @@ package com.todoroo.astrid.adapter import com.todoroo.astrid.dao.TaskDao +import com.todoroo.astrid.service.TaskMover import org.tasks.LocalBroadcastManager import org.tasks.data.CaldavDao import org.tasks.data.GoogleTaskDao @@ -10,8 +11,9 @@ class CaldavManualSortTaskAdapter internal constructor( googleTaskDao: GoogleTaskDao, private val caldavDao: CaldavDao, private val taskDao: TaskDao, - private val localBroadcastManager: LocalBroadcastManager) - : TaskAdapter(false, googleTaskDao, caldavDao, taskDao, localBroadcastManager) { + private val localBroadcastManager: LocalBroadcastManager, + taskMover: TaskMover, +) : TaskAdapter(false, googleTaskDao, caldavDao, taskDao, localBroadcastManager, taskMover) { override suspend fun moved(from: Int, to: Int, indent: Int) { val task = getTask(from) diff --git a/app/src/main/java/com/todoroo/astrid/adapter/GoogleTaskManualSortAdapter.kt b/app/src/main/java/com/todoroo/astrid/adapter/GoogleTaskManualSortAdapter.kt index 4df89c343..12590af39 100644 --- a/app/src/main/java/com/todoroo/astrid/adapter/GoogleTaskManualSortAdapter.kt +++ b/app/src/main/java/com/todoroo/astrid/adapter/GoogleTaskManualSortAdapter.kt @@ -1,6 +1,7 @@ package com.todoroo.astrid.adapter import com.todoroo.astrid.dao.TaskDao +import com.todoroo.astrid.service.TaskMover import org.tasks.BuildConfig import org.tasks.LocalBroadcastManager import org.tasks.data.CaldavDao @@ -10,8 +11,9 @@ class GoogleTaskManualSortAdapter internal constructor( private val googleTaskDao: GoogleTaskDao, caldavDao: CaldavDao, private val taskDao: TaskDao, - private val localBroadcastManager: LocalBroadcastManager) - : TaskAdapter(false, googleTaskDao, caldavDao, taskDao, localBroadcastManager) { + private val localBroadcastManager: LocalBroadcastManager, + taskMover: TaskMover, +) : TaskAdapter(false, googleTaskDao, caldavDao, taskDao, localBroadcastManager, taskMover) { override suspend fun moved(from: Int, to: Int, indent: Int) { val task = getTask(from) diff --git a/app/src/main/java/com/todoroo/astrid/adapter/TaskAdapter.kt b/app/src/main/java/com/todoroo/astrid/adapter/TaskAdapter.kt index 0676ace39..218aaa020 100644 --- a/app/src/main/java/com/todoroo/astrid/adapter/TaskAdapter.kt +++ b/app/src/main/java/com/todoroo/astrid/adapter/TaskAdapter.kt @@ -9,6 +9,7 @@ import com.todoroo.astrid.core.SortHelper.* import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.data.Task import com.todoroo.astrid.data.Task.Companion.HIDE_UNTIL_SPECIFIC_DAY +import com.todoroo.astrid.service.TaskMover import org.tasks.BuildConfig import org.tasks.LocalBroadcastManager import org.tasks.data.CaldavDao @@ -25,7 +26,9 @@ open class TaskAdapter( private val googleTaskDao: GoogleTaskDao, private val caldavDao: CaldavDao, private val taskDao: TaskDao, - private val localBroadcastManager: LocalBroadcastManager) { + private val localBroadcastManager: LocalBroadcastManager, + private val taskMover: TaskMover, +) { private val selected = HashSet() private val collapsed = mutableSetOf(HEADER_COMPLETED) @@ -204,6 +207,7 @@ open class TaskAdapter( taskDao.save(t) } } + SORT_LIST -> taskMover.move(task.id, dataSource.nearestHeader(if (pos == 0) 1 else pos)) SORT_DUE -> applyDueDate(task.task, dataSource.nearestHeader(if (pos == 0) 1 else pos)) SORT_START -> applyStartDate(task.task, dataSource.nearestHeader(if (pos == 0) 1 else pos)) } diff --git a/app/src/main/java/com/todoroo/astrid/adapter/TaskAdapterProvider.kt b/app/src/main/java/com/todoroo/astrid/adapter/TaskAdapterProvider.kt index 9cfac4964..3bde054ed 100644 --- a/app/src/main/java/com/todoroo/astrid/adapter/TaskAdapterProvider.kt +++ b/app/src/main/java/com/todoroo/astrid/adapter/TaskAdapterProvider.kt @@ -8,6 +8,7 @@ import com.todoroo.astrid.api.TagFilter import com.todoroo.astrid.core.BuiltInFilterExposer import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.data.Task.Companion.isUuidEmpty +import com.todoroo.astrid.service.TaskMover import com.todoroo.astrid.subtasks.SubtasksFilterUpdater import com.todoroo.astrid.subtasks.SubtasksHelper import dagger.hilt.android.qualifiers.ApplicationContext @@ -28,7 +29,9 @@ class TaskAdapterProvider @Inject constructor( private val taskDao: TaskDao, private val googleTaskDao: GoogleTaskDao, private val caldavDao: CaldavDao, - private val localBroadcastManager: LocalBroadcastManager) { + private val localBroadcastManager: LocalBroadcastManager, + private val taskMover: TaskMover, +) { fun createTaskAdapter(filter: Filter): TaskAdapter { if (filter.supportsAstridSorting() && preferences.isAstridSort) { when (filter) { @@ -43,11 +46,11 @@ class TaskAdapterProvider @Inject constructor( } if (filter.supportsManualSort() && preferences.isManualSort) { when (filter) { - is GtasksFilter -> return GoogleTaskManualSortAdapter(googleTaskDao, caldavDao, taskDao, localBroadcastManager) - is CaldavFilter -> return CaldavManualSortTaskAdapter(googleTaskDao, caldavDao, taskDao, localBroadcastManager) + is GtasksFilter -> return GoogleTaskManualSortAdapter(googleTaskDao, caldavDao, taskDao, localBroadcastManager, taskMover) + is CaldavFilter -> return CaldavManualSortTaskAdapter(googleTaskDao, caldavDao, taskDao, localBroadcastManager, taskMover) } } - return TaskAdapter(preferences.addTasksToTop(), googleTaskDao, caldavDao, taskDao, localBroadcastManager) + return TaskAdapter(preferences.addTasksToTop(), googleTaskDao, caldavDao, taskDao, localBroadcastManager, taskMover) } private fun createManualTagTaskAdapter(filter: TagFilter): TaskAdapter = runBlocking { @@ -61,7 +64,7 @@ class TaskAdapterProvider @Inject constructor( } val updater = SubtasksFilterUpdater(taskListMetadataDao, taskDao) updater.initialize(list, filter) - AstridTaskAdapter(list!!, filter, updater, googleTaskDao, caldavDao, taskDao, localBroadcastManager) + AstridTaskAdapter(list!!, filter, updater, googleTaskDao, caldavDao, taskDao, localBroadcastManager, taskMover) } private fun createManualFilterTaskAdapter(filter: Filter): TaskAdapter? = runBlocking { @@ -91,6 +94,6 @@ class TaskAdapterProvider @Inject constructor( } val updater = SubtasksFilterUpdater(taskListMetadataDao, taskDao) updater.initialize(list, filter) - AstridTaskAdapter(list, filter, updater, googleTaskDao, caldavDao, taskDao, localBroadcastManager) + AstridTaskAdapter(list, filter, updater, googleTaskDao, caldavDao, taskDao, localBroadcastManager, taskMover) } } \ No newline at end of file diff --git a/app/src/main/java/com/todoroo/astrid/service/TaskMover.kt b/app/src/main/java/com/todoroo/astrid/service/TaskMover.kt index da8a20252..4f08b3a66 100644 --- a/app/src/main/java/com/todoroo/astrid/service/TaskMover.kt +++ b/app/src/main/java/com/todoroo/astrid/service/TaskMover.kt @@ -10,7 +10,12 @@ import dagger.hilt.android.qualifiers.ApplicationContext import org.tasks.BuildConfig import org.tasks.LocalBroadcastManager import org.tasks.caldav.VtodoCache -import org.tasks.data.* +import org.tasks.data.CaldavAccount +import org.tasks.data.CaldavDao +import org.tasks.data.CaldavTask +import org.tasks.data.GoogleTaskDao +import org.tasks.data.GoogleTaskListDao +import org.tasks.data.TaskDao import org.tasks.db.DbUtils.dbchunk import org.tasks.preferences.Preferences import org.tasks.sync.SyncAdapters @@ -43,6 +48,17 @@ class TaskMover @Inject constructor( return null } + suspend fun move(task: Long, list: Long) { + val list = caldavDao.getCalendarById(list) ?: return + val account = list.account?.let { caldavDao.getAccountByUuid(it) } ?: return + move( + ids = listOf(task), + selectedList = if (account.accountType == CaldavAccount.TYPE_GOOGLE_TASKS) + GtasksFilter(list) + else + CaldavFilter(list)) + } + suspend fun move(ids: List, selectedList: Filter) { val tasks = ids .dbchunk()