|
|
|
package com.todoroo.astrid.adapter
|
|
|
|
|
|
|
|
import android.content.Context
|
|
|
|
import com.todoroo.astrid.api.AstridOrderingFilter
|
|
|
|
import com.todoroo.astrid.api.CaldavFilter
|
|
|
|
import com.todoroo.astrid.api.Filter
|
|
|
|
import com.todoroo.astrid.api.GtasksFilter
|
|
|
|
import com.todoroo.astrid.api.TagFilter
|
|
|
|
import com.todoroo.astrid.core.BuiltInFilterExposer
|
|
|
|
import com.todoroo.astrid.dao.TaskDao
|
|
|
|
import org.tasks.data.entity.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
|
|
|
|
import kotlinx.coroutines.runBlocking
|
|
|
|
import org.tasks.LocalBroadcastManager
|
|
|
|
import org.tasks.Strings.isNullOrEmpty
|
|
|
|
import org.tasks.data.dao.CaldavDao
|
|
|
|
import org.tasks.data.dao.GoogleTaskDao
|
|
|
|
import org.tasks.data.entity.TaskListMetadata
|
|
|
|
import org.tasks.data.dao.TaskListMetadataDao
|
|
|
|
import org.tasks.preferences.Preferences
|
|
|
|
import javax.inject.Inject
|
|
|
|
|
|
|
|
class TaskAdapterProvider @Inject constructor(
|
|
|
|
@param:ApplicationContext private val context: Context,
|
|
|
|
private val preferences: Preferences,
|
|
|
|
private val taskListMetadataDao: TaskListMetadataDao,
|
|
|
|
private val taskDao: TaskDao,
|
|
|
|
private val googleTaskDao: GoogleTaskDao,
|
|
|
|
private val caldavDao: CaldavDao,
|
|
|
|
private val localBroadcastManager: LocalBroadcastManager,
|
|
|
|
private val taskMover: TaskMover,
|
|
|
|
) {
|
|
|
|
fun createTaskAdapter(filter: Filter): TaskAdapter {
|
|
|
|
if (filter is AstridOrderingFilter && preferences.isAstridSort) {
|
|
|
|
when (filter) {
|
|
|
|
is TagFilter -> return createManualTagTaskAdapter(filter)
|
|
|
|
else -> {
|
|
|
|
val adapter = createManualFilterTaskAdapter(filter)
|
|
|
|
if (adapter != null) {
|
|
|
|
return adapter
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if (filter.supportsManualSort() && preferences.isManualSort) {
|
|
|
|
when (filter) {
|
|
|
|
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, taskMover)
|
|
|
|
}
|
|
|
|
|
|
|
|
private fun createManualTagTaskAdapter(filter: TagFilter): TaskAdapter = runBlocking {
|
|
|
|
val tagData = filter.tagData
|
|
|
|
val tdId = tagData.remoteId
|
|
|
|
var list = taskListMetadataDao.fetchByTagOrFilter(tagData.remoteId!!)
|
|
|
|
if (list == null && !isUuidEmpty(tdId)) {
|
|
|
|
list = TaskListMetadata()
|
|
|
|
list.tagUuid = tdId
|
|
|
|
taskListMetadataDao.createNew(list)
|
|
|
|
}
|
|
|
|
val updater = SubtasksFilterUpdater(taskListMetadataDao, taskDao)
|
|
|
|
updater.initialize(list, filter)
|
|
|
|
AstridTaskAdapter(list!!, filter, updater, googleTaskDao, caldavDao, taskDao, localBroadcastManager, taskMover)
|
|
|
|
}
|
|
|
|
|
|
|
|
private fun createManualFilterTaskAdapter(filter: AstridOrderingFilter): TaskAdapter? = runBlocking {
|
|
|
|
var filterId: String? = null
|
|
|
|
var prefId: String? = null
|
|
|
|
if (BuiltInFilterExposer.isInbox(context, filter)) {
|
|
|
|
filterId = TaskListMetadata.FILTER_ID_ALL
|
|
|
|
prefId = SubtasksFilterUpdater.ACTIVE_TASKS_ORDER
|
|
|
|
} else if (BuiltInFilterExposer.isTodayFilter(context, filter)) {
|
|
|
|
filterId = TaskListMetadata.FILTER_ID_TODAY
|
|
|
|
prefId = SubtasksFilterUpdater.TODAY_TASKS_ORDER
|
|
|
|
}
|
|
|
|
if (filterId.isNullOrBlank()) {
|
|
|
|
return@runBlocking null
|
|
|
|
}
|
|
|
|
var list = taskListMetadataDao.fetchByTagOrFilter(filterId)
|
|
|
|
if (list == null) {
|
|
|
|
var defaultOrder = preferences.getStringValue(prefId)
|
|
|
|
if (isNullOrEmpty(defaultOrder)) {
|
|
|
|
defaultOrder = "[]" // $NON-NLS-1$
|
|
|
|
}
|
|
|
|
defaultOrder = SubtasksHelper.convertTreeToRemoteIds(taskDao, defaultOrder)
|
|
|
|
list = TaskListMetadata()
|
|
|
|
list.filter = filterId
|
|
|
|
list.taskIds = defaultOrder
|
|
|
|
taskListMetadataDao.createNew(list)
|
|
|
|
}
|
|
|
|
val updater = SubtasksFilterUpdater(taskListMetadataDao, taskDao)
|
|
|
|
updater.initialize(list, filter)
|
|
|
|
AstridTaskAdapter(list, filter, updater, googleTaskDao, caldavDao, taskDao, localBroadcastManager, taskMover)
|
|
|
|
}
|
|
|
|
}
|