Create blocking room daos

pull/1043/head
Alex Baker 4 years ago
parent ad92b68b32
commit f33ecdda7d

@ -3,7 +3,7 @@ package com.todoroo.astrid.adapter
import com.natpryce.makeiteasy.MakeItEasy.with import com.natpryce.makeiteasy.MakeItEasy.with
import com.natpryce.makeiteasy.PropertyValue import com.natpryce.makeiteasy.PropertyValue
import com.todoroo.astrid.api.CaldavFilter import com.todoroo.astrid.api.CaldavFilter
import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.dao.TaskDaoBlocking
import com.todoroo.astrid.data.Task import com.todoroo.astrid.data.Task
import dagger.hilt.android.testing.HiltAndroidTest import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules import dagger.hilt.android.testing.UninstallModules
@ -14,8 +14,8 @@ import org.junit.Test
import org.tasks.LocalBroadcastManager import org.tasks.LocalBroadcastManager
import org.tasks.R import org.tasks.R
import org.tasks.data.CaldavCalendar import org.tasks.data.CaldavCalendar
import org.tasks.data.CaldavDao import org.tasks.data.CaldavDaoBlocking
import org.tasks.data.GoogleTaskDao import org.tasks.data.GoogleTaskDaoBlocking
import org.tasks.data.TaskContainer import org.tasks.data.TaskContainer
import org.tasks.data.TaskListQuery.getQuery import org.tasks.data.TaskListQuery.getQuery
import org.tasks.injection.InjectingTestCase import org.tasks.injection.InjectingTestCase
@ -34,9 +34,9 @@ import javax.inject.Inject
@UninstallModules(ProductionModule::class) @UninstallModules(ProductionModule::class)
@HiltAndroidTest @HiltAndroidTest
class CaldavManualSortTaskAdapterTest : InjectingTestCase() { class CaldavManualSortTaskAdapterTest : InjectingTestCase() {
@Inject lateinit var googleTaskDao: GoogleTaskDao @Inject lateinit var googleTaskDao: GoogleTaskDaoBlocking
@Inject lateinit var taskDao: TaskDao @Inject lateinit var taskDao: TaskDaoBlocking
@Inject lateinit var caldavDao: CaldavDao @Inject lateinit var caldavDao: CaldavDaoBlocking
@Inject lateinit var preferences: Preferences @Inject lateinit var preferences: Preferences
@Inject lateinit var localBroadcastManager: LocalBroadcastManager @Inject lateinit var localBroadcastManager: LocalBroadcastManager

@ -2,7 +2,7 @@ package com.todoroo.astrid.adapter
import com.natpryce.makeiteasy.MakeItEasy.with import com.natpryce.makeiteasy.MakeItEasy.with
import com.natpryce.makeiteasy.PropertyValue import com.natpryce.makeiteasy.PropertyValue
import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.dao.TaskDaoBlocking
import dagger.hilt.android.testing.HiltAndroidTest import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules import dagger.hilt.android.testing.UninstallModules
import org.junit.Assert.* import org.junit.Assert.*
@ -19,9 +19,9 @@ import javax.inject.Inject
@UninstallModules(ProductionModule::class) @UninstallModules(ProductionModule::class)
@HiltAndroidTest @HiltAndroidTest
class CaldavTaskAdapterTest : InjectingTestCase() { class CaldavTaskAdapterTest : InjectingTestCase() {
@Inject lateinit var taskDao: TaskDao @Inject lateinit var taskDao: TaskDaoBlocking
@Inject lateinit var caldavDao: CaldavDao @Inject lateinit var caldavDao: CaldavDaoBlocking
@Inject lateinit var googleTaskDao: GoogleTaskDao @Inject lateinit var googleTaskDao: GoogleTaskDaoBlocking
@Inject lateinit var localBroadcastManager: LocalBroadcastManager @Inject lateinit var localBroadcastManager: LocalBroadcastManager
private lateinit var adapter: TaskAdapter private lateinit var adapter: TaskAdapter

@ -3,7 +3,7 @@ package com.todoroo.astrid.adapter
import com.natpryce.makeiteasy.MakeItEasy.with import com.natpryce.makeiteasy.MakeItEasy.with
import com.natpryce.makeiteasy.PropertyValue import com.natpryce.makeiteasy.PropertyValue
import com.todoroo.astrid.api.GtasksFilter import com.todoroo.astrid.api.GtasksFilter
import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.dao.TaskDaoBlocking
import com.todoroo.astrid.data.Task import com.todoroo.astrid.data.Task
import dagger.hilt.android.testing.HiltAndroidTest import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules import dagger.hilt.android.testing.UninstallModules
@ -12,8 +12,8 @@ import org.junit.Before
import org.junit.Test import org.junit.Test
import org.tasks.LocalBroadcastManager import org.tasks.LocalBroadcastManager
import org.tasks.R import org.tasks.R
import org.tasks.data.CaldavDao import org.tasks.data.CaldavDaoBlocking
import org.tasks.data.GoogleTaskDao import org.tasks.data.GoogleTaskDaoBlocking
import org.tasks.data.TaskContainer import org.tasks.data.TaskContainer
import org.tasks.data.TaskListQuery.getQuery import org.tasks.data.TaskListQuery.getQuery
import org.tasks.injection.InjectingTestCase import org.tasks.injection.InjectingTestCase
@ -32,9 +32,9 @@ import javax.inject.Inject
@UninstallModules(ProductionModule::class) @UninstallModules(ProductionModule::class)
@HiltAndroidTest @HiltAndroidTest
class GoogleTaskManualSortAdapterTest : InjectingTestCase() { class GoogleTaskManualSortAdapterTest : InjectingTestCase() {
@Inject lateinit var taskDao: TaskDao @Inject lateinit var taskDao: TaskDaoBlocking
@Inject lateinit var caldavDao: CaldavDao @Inject lateinit var caldavDao: CaldavDaoBlocking
@Inject lateinit var googleTaskDao: GoogleTaskDao @Inject lateinit var googleTaskDao: GoogleTaskDaoBlocking
@Inject lateinit var preferences: Preferences @Inject lateinit var preferences: Preferences
@Inject lateinit var localBroadcastManager: LocalBroadcastManager @Inject lateinit var localBroadcastManager: LocalBroadcastManager

@ -5,7 +5,7 @@ import androidx.test.core.app.ApplicationProvider
import com.natpryce.makeiteasy.MakeItEasy.with import com.natpryce.makeiteasy.MakeItEasy.with
import com.natpryce.makeiteasy.PropertyValue import com.natpryce.makeiteasy.PropertyValue
import com.todoroo.astrid.core.BuiltInFilterExposer import com.todoroo.astrid.core.BuiltInFilterExposer
import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.dao.TaskDaoBlocking
import com.todoroo.astrid.data.Task import com.todoroo.astrid.data.Task
import dagger.hilt.android.testing.HiltAndroidTest import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules import dagger.hilt.android.testing.UninstallModules
@ -14,8 +14,8 @@ import org.junit.Before
import org.junit.Test import org.junit.Test
import org.tasks.LocalBroadcastManager import org.tasks.LocalBroadcastManager
import org.tasks.R import org.tasks.R
import org.tasks.data.CaldavDao import org.tasks.data.CaldavDaoBlocking
import org.tasks.data.GoogleTaskDao import org.tasks.data.GoogleTaskDaoBlocking
import org.tasks.data.TaskContainer import org.tasks.data.TaskContainer
import org.tasks.data.TaskListQuery.getQuery import org.tasks.data.TaskListQuery.getQuery
import org.tasks.injection.InjectingTestCase import org.tasks.injection.InjectingTestCase
@ -28,9 +28,9 @@ import javax.inject.Inject
@UninstallModules(ProductionModule::class) @UninstallModules(ProductionModule::class)
@HiltAndroidTest @HiltAndroidTest
class NonRecursiveQueryTest : InjectingTestCase() { class NonRecursiveQueryTest : InjectingTestCase() {
@Inject lateinit var googleTaskDao: GoogleTaskDao @Inject lateinit var googleTaskDao: GoogleTaskDaoBlocking
@Inject lateinit var caldavDao: CaldavDao @Inject lateinit var caldavDao: CaldavDaoBlocking
@Inject lateinit var taskDao: TaskDao @Inject lateinit var taskDao: TaskDaoBlocking
@Inject lateinit var preferences: Preferences @Inject lateinit var preferences: Preferences
@Inject lateinit var localBroadcastManager: LocalBroadcastManager @Inject lateinit var localBroadcastManager: LocalBroadcastManager

@ -5,7 +5,7 @@ import androidx.test.core.app.ApplicationProvider
import com.natpryce.makeiteasy.MakeItEasy.with import com.natpryce.makeiteasy.MakeItEasy.with
import com.natpryce.makeiteasy.PropertyValue import com.natpryce.makeiteasy.PropertyValue
import com.todoroo.astrid.core.BuiltInFilterExposer import com.todoroo.astrid.core.BuiltInFilterExposer
import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.dao.TaskDaoBlocking
import com.todoroo.astrid.data.Task import com.todoroo.astrid.data.Task
import dagger.hilt.android.testing.HiltAndroidTest import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules import dagger.hilt.android.testing.UninstallModules
@ -13,8 +13,8 @@ import org.junit.Assert.assertEquals
import org.junit.Before import org.junit.Before
import org.junit.Test import org.junit.Test
import org.tasks.LocalBroadcastManager import org.tasks.LocalBroadcastManager
import org.tasks.data.CaldavDao import org.tasks.data.CaldavDaoBlocking
import org.tasks.data.GoogleTaskDao import org.tasks.data.GoogleTaskDaoBlocking
import org.tasks.data.TaskContainer import org.tasks.data.TaskContainer
import org.tasks.data.TaskListQuery.getQuery import org.tasks.data.TaskListQuery.getQuery
import org.tasks.injection.InjectingTestCase import org.tasks.injection.InjectingTestCase
@ -27,9 +27,9 @@ import javax.inject.Inject
@UninstallModules(ProductionModule::class) @UninstallModules(ProductionModule::class)
@HiltAndroidTest @HiltAndroidTest
class OfflineSubtaskTest : InjectingTestCase() { class OfflineSubtaskTest : InjectingTestCase() {
@Inject lateinit var googleTaskDao: GoogleTaskDao @Inject lateinit var googleTaskDao: GoogleTaskDaoBlocking
@Inject lateinit var caldavDao: CaldavDao @Inject lateinit var caldavDao: CaldavDaoBlocking
@Inject lateinit var taskDao: TaskDao @Inject lateinit var taskDao: TaskDaoBlocking
@Inject lateinit var preferences: Preferences @Inject lateinit var preferences: Preferences
@Inject lateinit var localBroadcastManager: LocalBroadcastManager @Inject lateinit var localBroadcastManager: LocalBroadcastManager

@ -1,14 +1,14 @@
package com.todoroo.astrid.alarms package com.todoroo.astrid.alarms
import com.natpryce.makeiteasy.MakeItEasy.with import com.natpryce.makeiteasy.MakeItEasy.with
import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.dao.TaskDaoBlocking
import dagger.hilt.android.testing.HiltAndroidTest import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules import dagger.hilt.android.testing.UninstallModules
import org.junit.Assert.assertEquals import org.junit.Assert.assertEquals
import org.junit.Assert.assertTrue import org.junit.Assert.assertTrue
import org.junit.Test import org.junit.Test
import org.tasks.data.Alarm import org.tasks.data.Alarm
import org.tasks.data.AlarmDao import org.tasks.data.AlarmDaoBlocking
import org.tasks.injection.InjectingTestCase import org.tasks.injection.InjectingTestCase
import org.tasks.injection.ProductionModule import org.tasks.injection.ProductionModule
import org.tasks.jobs.AlarmEntry import org.tasks.jobs.AlarmEntry
@ -21,8 +21,8 @@ import javax.inject.Inject
@UninstallModules(ProductionModule::class) @UninstallModules(ProductionModule::class)
@HiltAndroidTest @HiltAndroidTest
class AlarmJobServiceTest : InjectingTestCase() { class AlarmJobServiceTest : InjectingTestCase() {
@Inject lateinit var alarmDao: AlarmDao @Inject lateinit var alarmDao: AlarmDaoBlocking
@Inject lateinit var taskDao: TaskDao @Inject lateinit var taskDao: TaskDaoBlocking
@Inject lateinit var jobs: NotificationQueue @Inject lateinit var jobs: NotificationQueue
@Inject lateinit var alarmService: AlarmService @Inject lateinit var alarmService: AlarmService

@ -24,7 +24,7 @@ import javax.inject.Inject
@HiltAndroidTest @HiltAndroidTest
class TaskDaoTests : InjectingTestCase() { class TaskDaoTests : InjectingTestCase() {
@Inject lateinit var taskDao: TaskDao @Inject lateinit var taskDao: TaskDaoBlocking
@Inject lateinit var taskDeleter: TaskDeleter @Inject lateinit var taskDeleter: TaskDeleter
/** Test basic task creation, fetch, and save */ /** Test basic task creation, fetch, and save */

@ -11,7 +11,7 @@ import org.junit.Before
import org.junit.Test import org.junit.Test
import org.tasks.LocalBroadcastManager import org.tasks.LocalBroadcastManager
import org.tasks.data.GoogleTaskAccount import org.tasks.data.GoogleTaskAccount
import org.tasks.data.GoogleTaskListDao import org.tasks.data.GoogleTaskListDaoBlocking
import org.tasks.injection.InjectingTestCase import org.tasks.injection.InjectingTestCase
import org.tasks.injection.ProductionModule import org.tasks.injection.ProductionModule
import org.tasks.makers.GtaskListMaker.ID import org.tasks.makers.GtaskListMaker.ID
@ -27,7 +27,7 @@ import javax.inject.Inject
class GtasksListServiceTest : InjectingTestCase() { class GtasksListServiceTest : InjectingTestCase() {
@Inject lateinit var taskDeleter: TaskDeleter @Inject lateinit var taskDeleter: TaskDeleter
@Inject lateinit var localBroadcastManager: LocalBroadcastManager @Inject lateinit var localBroadcastManager: LocalBroadcastManager
@Inject lateinit var googleTaskListDao: GoogleTaskListDao @Inject lateinit var googleTaskListDao: GoogleTaskListDaoBlocking
private lateinit var gtasksListService: GtasksListService private lateinit var gtasksListService: GtasksListService

@ -5,7 +5,7 @@
*/ */
package com.todoroo.astrid.gtasks package com.todoroo.astrid.gtasks
import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.dao.TaskDaoBlocking
import com.todoroo.astrid.data.Task import com.todoroo.astrid.data.Task
import dagger.hilt.android.testing.HiltAndroidTest import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules import dagger.hilt.android.testing.UninstallModules
@ -13,7 +13,7 @@ import org.junit.Assert.assertNotNull
import org.junit.Assert.assertNull import org.junit.Assert.assertNull
import org.junit.Test import org.junit.Test
import org.tasks.data.GoogleTask import org.tasks.data.GoogleTask
import org.tasks.data.GoogleTaskDao import org.tasks.data.GoogleTaskDaoBlocking
import org.tasks.injection.InjectingTestCase import org.tasks.injection.InjectingTestCase
import org.tasks.injection.ProductionModule import org.tasks.injection.ProductionModule
import javax.inject.Inject import javax.inject.Inject
@ -21,8 +21,8 @@ import javax.inject.Inject
@UninstallModules(ProductionModule::class) @UninstallModules(ProductionModule::class)
@HiltAndroidTest @HiltAndroidTest
class GtasksMetadataServiceTest : InjectingTestCase() { class GtasksMetadataServiceTest : InjectingTestCase() {
@Inject lateinit var taskDao: TaskDao @Inject lateinit var taskDao: TaskDaoBlocking
@Inject lateinit var googleTaskDao: GoogleTaskDao @Inject lateinit var googleTaskDao: GoogleTaskDaoBlocking
private var task: Task? = null private var task: Task? = null
private var metadata: GoogleTask? = null private var metadata: GoogleTask? = null

@ -1,6 +1,6 @@
package com.todoroo.astrid.model package com.todoroo.astrid.model
import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.dao.TaskDaoBlocking
import com.todoroo.astrid.data.Task import com.todoroo.astrid.data.Task
import dagger.hilt.android.testing.HiltAndroidTest import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules import dagger.hilt.android.testing.UninstallModules
@ -15,7 +15,7 @@ import javax.inject.Inject
@UninstallModules(ProductionModule::class) @UninstallModules(ProductionModule::class)
@HiltAndroidTest @HiltAndroidTest
class TaskTest : InjectingTestCase() { class TaskTest : InjectingTestCase() {
@Inject lateinit var taskDao: TaskDao @Inject lateinit var taskDao: TaskDaoBlocking
@Test @Test
fun testSavedTaskHasCreationDate() { fun testSavedTaskHasCreationDate() {

@ -2,7 +2,7 @@ package com.todoroo.astrid.reminders
import com.natpryce.makeiteasy.MakeItEasy.with import com.natpryce.makeiteasy.MakeItEasy.with
import com.todoroo.andlib.utility.DateUtilities import com.todoroo.andlib.utility.DateUtilities
import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.dao.TaskDaoBlocking
import com.todoroo.astrid.data.Task import com.todoroo.astrid.data.Task
import dagger.hilt.android.testing.HiltAndroidTest import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules import dagger.hilt.android.testing.UninstallModules
@ -38,7 +38,7 @@ import javax.inject.Inject
@HiltAndroidTest @HiltAndroidTest
class ReminderServiceTest : InjectingTestCase() { class ReminderServiceTest : InjectingTestCase() {
@Inject lateinit var preferences: Preferences @Inject lateinit var preferences: Preferences
@Inject lateinit var taskDao: TaskDao @Inject lateinit var taskDao: TaskDaoBlocking
@Inject lateinit var jobs: NotificationQueue @Inject lateinit var jobs: NotificationQueue
private lateinit var service: ReminderService private lateinit var service: ReminderService

@ -4,7 +4,7 @@ import android.annotation.SuppressLint
import com.google.ical.values.RRule import com.google.ical.values.RRule
import com.natpryce.makeiteasy.MakeItEasy.with import com.natpryce.makeiteasy.MakeItEasy.with
import com.todoroo.astrid.alarms.AlarmService import com.todoroo.astrid.alarms.AlarmService
import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.dao.TaskDaoBlocking
import com.todoroo.astrid.data.Task import com.todoroo.astrid.data.Task
import com.todoroo.astrid.gcal.GCalHelper import com.todoroo.astrid.gcal.GCalHelper
import dagger.hilt.android.testing.HiltAndroidTest import dagger.hilt.android.testing.HiltAndroidTest
@ -32,7 +32,7 @@ import javax.inject.Inject
@UninstallModules(ProductionModule::class) @UninstallModules(ProductionModule::class)
@HiltAndroidTest @HiltAndroidTest
class RepeatTaskHelperTest : InjectingTestCase() { class RepeatTaskHelperTest : InjectingTestCase() {
@Inject lateinit var taskDao: TaskDao @Inject lateinit var taskDao: TaskDaoBlocking
private lateinit var localBroadcastManager: LocalBroadcastManager private lateinit var localBroadcastManager: LocalBroadcastManager
private lateinit var alarmService: AlarmService private lateinit var alarmService: AlarmService
private lateinit var gCalHelper: GCalHelper private lateinit var gCalHelper: GCalHelper
@ -40,7 +40,9 @@ class RepeatTaskHelperTest : InjectingTestCase() {
private lateinit var mocks: InOrder private lateinit var mocks: InOrder
@Before @Before
fun before() { override fun setUp() {
super.setUp()
alarmService = Mockito.mock(AlarmService::class.java) alarmService = Mockito.mock(AlarmService::class.java)
gCalHelper = Mockito.mock(GCalHelper::class.java) gCalHelper = Mockito.mock(GCalHelper::class.java)
localBroadcastManager = Mockito.mock(LocalBroadcastManager::class.java) localBroadcastManager = Mockito.mock(LocalBroadcastManager::class.java)

@ -11,7 +11,7 @@ import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules import dagger.hilt.android.testing.UninstallModules
import org.junit.Assert.assertEquals import org.junit.Assert.assertEquals
import org.junit.Test import org.junit.Test
import org.tasks.data.TagDataDao import org.tasks.data.TagDataDaoBlocking
import org.tasks.injection.InjectingTestCase import org.tasks.injection.InjectingTestCase
import org.tasks.injection.ProductionModule import org.tasks.injection.ProductionModule
import java.util.* import java.util.*
@ -21,7 +21,7 @@ import javax.inject.Inject
@HiltAndroidTest @HiltAndroidTest
class QuickAddMarkupTest : InjectingTestCase() { class QuickAddMarkupTest : InjectingTestCase() {
private val tags = ArrayList<String>() private val tags = ArrayList<String>()
@Inject lateinit var tagDataDao: TagDataDao @Inject lateinit var tagDataDao: TagDataDaoBlocking
private var task: Task? = null private var task: Task? = null

@ -3,15 +3,15 @@ package com.todoroo.astrid.service
import com.natpryce.makeiteasy.MakeItEasy.with import com.natpryce.makeiteasy.MakeItEasy.with
import com.todoroo.astrid.api.CaldavFilter import com.todoroo.astrid.api.CaldavFilter
import com.todoroo.astrid.api.GtasksFilter import com.todoroo.astrid.api.GtasksFilter
import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.dao.TaskDaoBlocking
import dagger.hilt.android.testing.HiltAndroidTest import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules import dagger.hilt.android.testing.UninstallModules
import org.junit.Assert.* import org.junit.Assert.*
import org.junit.Before import org.junit.Before
import org.junit.Test import org.junit.Test
import org.tasks.data.CaldavCalendar import org.tasks.data.CaldavCalendar
import org.tasks.data.CaldavDao import org.tasks.data.CaldavDaoBlocking
import org.tasks.data.GoogleTaskDao import org.tasks.data.GoogleTaskDaoBlocking
import org.tasks.injection.InjectingTestCase import org.tasks.injection.InjectingTestCase
import org.tasks.injection.ProductionModule import org.tasks.injection.ProductionModule
import org.tasks.jobs.WorkManager import org.tasks.jobs.WorkManager
@ -34,10 +34,10 @@ import javax.inject.Inject
@UninstallModules(ProductionModule::class) @UninstallModules(ProductionModule::class)
@HiltAndroidTest @HiltAndroidTest
class TaskMoverTest : InjectingTestCase() { class TaskMoverTest : InjectingTestCase() {
@Inject lateinit var taskDao: TaskDao @Inject lateinit var taskDao: TaskDaoBlocking
@Inject lateinit var googleTaskDao: GoogleTaskDao @Inject lateinit var googleTaskDao: GoogleTaskDaoBlocking
@Inject lateinit var workManager: WorkManager @Inject lateinit var workManager: WorkManager
@Inject lateinit var caldavDao: CaldavDao @Inject lateinit var caldavDao: CaldavDaoBlocking
@Inject lateinit var taskMover: TaskMover @Inject lateinit var taskMover: TaskMover
@Before @Before

@ -15,7 +15,7 @@ import org.junit.Assert.*
import org.junit.Before import org.junit.Before
import org.junit.Test import org.junit.Test
import org.tasks.R import org.tasks.R
import org.tasks.data.TagDataDao import org.tasks.data.TagDataDaoBlocking
import org.tasks.date.DateTimeUtils import org.tasks.date.DateTimeUtils
import org.tasks.injection.InjectingTestCase import org.tasks.injection.InjectingTestCase
import org.tasks.injection.ProductionModule import org.tasks.injection.ProductionModule
@ -26,7 +26,7 @@ import javax.inject.Inject
@UninstallModules(ProductionModule::class) @UninstallModules(ProductionModule::class)
@HiltAndroidTest @HiltAndroidTest
class TitleParserTest : InjectingTestCase() { class TitleParserTest : InjectingTestCase() {
@Inject lateinit var tagDataDao: TagDataDao @Inject lateinit var tagDataDao: TagDataDaoBlocking
@Inject lateinit var preferences: Preferences @Inject lateinit var preferences: Preferences
@Inject lateinit var taskCreator: TaskCreator @Inject lateinit var taskCreator: TaskCreator

@ -3,11 +3,11 @@ package com.todoroo.astrid.subtasks
import androidx.test.InstrumentationRegistry import androidx.test.InstrumentationRegistry
import com.todoroo.astrid.api.Filter import com.todoroo.astrid.api.Filter
import com.todoroo.astrid.core.BuiltInFilterExposer import com.todoroo.astrid.core.BuiltInFilterExposer
import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.dao.TaskDaoBlocking
import com.todoroo.astrid.data.Task import com.todoroo.astrid.data.Task
import org.junit.Assert.assertEquals import org.junit.Assert.assertEquals
import org.junit.Assert.assertNotNull import org.junit.Assert.assertNotNull
import org.tasks.data.TaskListMetadataDao import org.tasks.data.TaskListMetadataDaoBlocking
import org.tasks.injection.InjectingTestCase import org.tasks.injection.InjectingTestCase
import org.tasks.preferences.Preferences import org.tasks.preferences.Preferences
import javax.inject.Inject import javax.inject.Inject
@ -15,8 +15,8 @@ import javax.inject.Inject
abstract class SubtasksTestCase : InjectingTestCase() { abstract class SubtasksTestCase : InjectingTestCase() {
lateinit var updater: SubtasksFilterUpdater lateinit var updater: SubtasksFilterUpdater
lateinit var filter: Filter lateinit var filter: Filter
@Inject lateinit var taskListMetadataDao: TaskListMetadataDao @Inject lateinit var taskListMetadataDao: TaskListMetadataDaoBlocking
@Inject lateinit var taskDao: TaskDao @Inject lateinit var taskDao: TaskDaoBlocking
@Inject lateinit var preferences: Preferences @Inject lateinit var preferences: Preferences
override fun setUp() { override fun setUp() {

@ -1,15 +1,15 @@
package com.todoroo.astrid.sync package com.todoroo.astrid.sync
import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.dao.TaskDaoBlocking
import com.todoroo.astrid.data.Task import com.todoroo.astrid.data.Task
import org.tasks.data.TagData import org.tasks.data.TagData
import org.tasks.data.TagDataDao import org.tasks.data.TagDataDaoBlocking
import org.tasks.injection.InjectingTestCase import org.tasks.injection.InjectingTestCase
import javax.inject.Inject import javax.inject.Inject
open class NewSyncTestCase : InjectingTestCase() { open class NewSyncTestCase : InjectingTestCase() {
@Inject lateinit var taskDao: TaskDao @Inject lateinit var taskDao: TaskDaoBlocking
@Inject lateinit var tagDataDao: TagDataDao @Inject lateinit var tagDataDao: TagDataDaoBlocking
fun createTask(): Task { fun createTask(): Task {
val task = Task() val task = Task()

@ -3,7 +3,7 @@ package org.tasks.data
import com.natpryce.makeiteasy.MakeItEasy.with import com.natpryce.makeiteasy.MakeItEasy.with
import com.natpryce.makeiteasy.PropertyValue import com.natpryce.makeiteasy.PropertyValue
import com.todoroo.andlib.utility.DateUtilities.now import com.todoroo.andlib.utility.DateUtilities.now
import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.dao.TaskDaoBlocking
import dagger.hilt.android.testing.HiltAndroidTest import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules import dagger.hilt.android.testing.UninstallModules
import org.junit.Assert.assertEquals import org.junit.Assert.assertEquals
@ -20,8 +20,8 @@ import javax.inject.Inject
@UninstallModules(ProductionModule::class) @UninstallModules(ProductionModule::class)
@HiltAndroidTest @HiltAndroidTest
class CaldavDaoShiftTests : InjectingTestCase() { class CaldavDaoShiftTests : InjectingTestCase() {
@Inject lateinit var taskDao: TaskDao @Inject lateinit var taskDao: TaskDaoBlocking
@Inject lateinit var caldavDao: CaldavDao @Inject lateinit var caldavDao: CaldavDaoBlocking
private val tasks = ArrayList<TaskContainer>() private val tasks = ArrayList<TaskContainer>()

@ -1,7 +1,7 @@
package org.tasks.data package org.tasks.data
import com.natpryce.makeiteasy.MakeItEasy.with import com.natpryce.makeiteasy.MakeItEasy.with
import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.dao.TaskDaoBlocking
import com.todoroo.astrid.helper.UUIDHelper import com.todoroo.astrid.helper.UUIDHelper
import dagger.hilt.android.testing.HiltAndroidTest import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules import dagger.hilt.android.testing.UninstallModules
@ -22,10 +22,10 @@ import javax.inject.Inject
@UninstallModules(ProductionModule::class) @UninstallModules(ProductionModule::class)
@HiltAndroidTest @HiltAndroidTest
class CaldavDaoTests : InjectingTestCase() { class CaldavDaoTests : InjectingTestCase() {
@Inject lateinit var taskDao: TaskDao @Inject lateinit var taskDao: TaskDaoBlocking
@Inject lateinit var tagDao: TagDao @Inject lateinit var tagDao: TagDaoBlocking
@Inject lateinit var tagDataDao: TagDataDao @Inject lateinit var tagDataDao: TagDataDaoBlocking
@Inject lateinit var caldavDao: CaldavDao @Inject lateinit var caldavDao: CaldavDaoBlocking
@Test @Test
fun insertNewTaskAtTopOfEmptyList() { fun insertNewTaskAtTopOfEmptyList() {

@ -1,7 +1,7 @@
package org.tasks.data package org.tasks.data
import com.natpryce.makeiteasy.MakeItEasy.with import com.natpryce.makeiteasy.MakeItEasy.with
import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.dao.TaskDaoBlocking
import com.todoroo.astrid.helper.UUIDHelper import com.todoroo.astrid.helper.UUIDHelper
import dagger.hilt.android.testing.HiltAndroidTest import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules import dagger.hilt.android.testing.UninstallModules
@ -21,9 +21,9 @@ import javax.inject.Inject
@UninstallModules(ProductionModule::class) @UninstallModules(ProductionModule::class)
@HiltAndroidTest @HiltAndroidTest
class DeletionDaoTests : InjectingTestCase() { class DeletionDaoTests : InjectingTestCase() {
@Inject lateinit var taskDao: TaskDao @Inject lateinit var taskDao: TaskDaoBlocking
@Inject lateinit var deletionDao: DeletionDao @Inject lateinit var deletionDao: DeletionDaoBlocking
@Inject lateinit var caldavDao: CaldavDao @Inject lateinit var caldavDao: CaldavDaoBlocking
@Test @Test
fun deleting1000DoesntCrash() { fun deleting1000DoesntCrash() {

@ -1,7 +1,7 @@
package org.tasks.data package org.tasks.data
import com.natpryce.makeiteasy.MakeItEasy.with import com.natpryce.makeiteasy.MakeItEasy.with
import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.dao.TaskDaoBlocking
import dagger.hilt.android.testing.HiltAndroidTest import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules import dagger.hilt.android.testing.UninstallModules
import org.junit.Assert.assertEquals import org.junit.Assert.assertEquals
@ -22,9 +22,9 @@ import javax.inject.Inject
@UninstallModules(ProductionModule::class) @UninstallModules(ProductionModule::class)
@HiltAndroidTest @HiltAndroidTest
class GoogleTaskDaoTests : InjectingTestCase() { class GoogleTaskDaoTests : InjectingTestCase() {
@Inject lateinit var googleTaskListDao: GoogleTaskListDao @Inject lateinit var googleTaskListDao: GoogleTaskListDaoBlocking
@Inject lateinit var googleTaskDao: GoogleTaskDao @Inject lateinit var googleTaskDao: GoogleTaskDaoBlocking
@Inject lateinit var taskDao: TaskDao @Inject lateinit var taskDao: TaskDaoBlocking
@Before @Before
override fun setUp() { override fun setUp() {

@ -15,7 +15,7 @@ import javax.inject.Inject
@UninstallModules(ProductionModule::class) @UninstallModules(ProductionModule::class)
@HiltAndroidTest @HiltAndroidTest
class GoogleTaskListDaoTest : InjectingTestCase() { class GoogleTaskListDaoTest : InjectingTestCase() {
@Inject lateinit var googleTaskListDao: GoogleTaskListDao @Inject lateinit var googleTaskListDao: GoogleTaskListDaoBlocking
@Test @Test
fun noResultsForEmptyAccount() { fun noResultsForEmptyAccount() {

@ -2,7 +2,7 @@ package org.tasks.data
import com.natpryce.makeiteasy.MakeItEasy.with import com.natpryce.makeiteasy.MakeItEasy.with
import com.todoroo.andlib.utility.DateUtilities.now import com.todoroo.andlib.utility.DateUtilities.now
import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.dao.TaskDaoBlocking
import com.todoroo.astrid.data.Task import com.todoroo.astrid.data.Task
import dagger.hilt.android.testing.HiltAndroidTest import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules import dagger.hilt.android.testing.UninstallModules
@ -33,8 +33,8 @@ import javax.inject.Inject
@UninstallModules(ProductionModule::class) @UninstallModules(ProductionModule::class)
@HiltAndroidTest @HiltAndroidTest
class LocationDaoTest : InjectingTestCase() { class LocationDaoTest : InjectingTestCase() {
@Inject lateinit var locationDao: LocationDao @Inject lateinit var locationDao: LocationDaoBlocking
@Inject lateinit var taskDao: TaskDao @Inject lateinit var taskDao: TaskDaoBlocking
@Test @Test
fun getExistingPlace() { fun getExistingPlace() {

@ -2,7 +2,7 @@ package org.tasks.data
import com.natpryce.makeiteasy.MakeItEasy.with import com.natpryce.makeiteasy.MakeItEasy.with
import com.todoroo.astrid.api.GtasksFilter import com.todoroo.astrid.api.GtasksFilter
import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.dao.TaskDaoBlocking
import com.todoroo.astrid.helper.UUIDHelper import com.todoroo.astrid.helper.UUIDHelper
import dagger.hilt.android.testing.HiltAndroidTest import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules import dagger.hilt.android.testing.UninstallModules
@ -29,8 +29,8 @@ import javax.inject.Inject
@UninstallModules(ProductionModule::class) @UninstallModules(ProductionModule::class)
@HiltAndroidTest @HiltAndroidTest
class ManualGoogleTaskQueryTest : InjectingTestCase() { class ManualGoogleTaskQueryTest : InjectingTestCase() {
@Inject lateinit var googleTaskDao: GoogleTaskDao @Inject lateinit var googleTaskDao: GoogleTaskDaoBlocking
@Inject lateinit var taskDao: TaskDao @Inject lateinit var taskDao: TaskDaoBlocking
@Inject lateinit var preferences: Preferences @Inject lateinit var preferences: Preferences
private val filter: GtasksFilter = GtasksFilter(newGoogleTaskList(with(REMOTE_ID, "1234"))) private val filter: GtasksFilter = GtasksFilter(newGoogleTaskList(with(REMOTE_ID, "1234")))

@ -1,7 +1,7 @@
package org.tasks.data package org.tasks.data
import com.natpryce.makeiteasy.MakeItEasy.with import com.natpryce.makeiteasy.MakeItEasy.with
import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.dao.TaskDaoBlocking
import dagger.hilt.android.testing.HiltAndroidTest import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules import dagger.hilt.android.testing.UninstallModules
import org.junit.Assert.assertEquals import org.junit.Assert.assertEquals
@ -22,9 +22,9 @@ import javax.inject.Inject
@UninstallModules(ProductionModule::class) @UninstallModules(ProductionModule::class)
@HiltAndroidTest @HiltAndroidTest
class TagDataDaoTest : InjectingTestCase() { class TagDataDaoTest : InjectingTestCase() {
@Inject lateinit var taskDao: TaskDao @Inject lateinit var taskDao: TaskDaoBlocking
@Inject lateinit var tagDao: TagDao @Inject lateinit var tagDao: TagDaoBlocking
@Inject lateinit var tagDataDao: TagDataDao @Inject lateinit var tagDataDao: TagDataDaoBlocking
@Test @Test
fun tagDataOrderedByNameIgnoresNullNames() { fun tagDataOrderedByNameIgnoresNullNames() {

@ -7,7 +7,7 @@ package org.tasks.jobs
import android.net.Uri import android.net.Uri
import androidx.test.InstrumentationRegistry import androidx.test.InstrumentationRegistry
import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.dao.TaskDaoBlocking
import com.todoroo.astrid.data.Task import com.todoroo.astrid.data.Task
import dagger.hilt.android.testing.HiltAndroidTest import dagger.hilt.android.testing.HiltAndroidTest
import dagger.hilt.android.testing.UninstallModules import dagger.hilt.android.testing.UninstallModules
@ -30,7 +30,7 @@ import javax.inject.Inject
@HiltAndroidTest @HiltAndroidTest
class BackupServiceTests : InjectingTestCase() { class BackupServiceTests : InjectingTestCase() {
@Inject lateinit var jsonExporter: TasksJsonExporter @Inject lateinit var jsonExporter: TasksJsonExporter
@Inject lateinit var taskDao: TaskDao @Inject lateinit var taskDao: TaskDaoBlocking
@Inject lateinit var preferences: Preferences @Inject lateinit var preferences: Preferences
private lateinit var temporaryDirectory: File private lateinit var temporaryDirectory: File

@ -7,7 +7,7 @@ import com.google.android.gms.common.ConnectionResult
import com.google.android.gms.common.GoogleApiAvailability import com.google.android.gms.common.GoogleApiAvailability
import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.android.qualifiers.ApplicationContext
import org.tasks.R import org.tasks.R
import org.tasks.data.LocationDao import org.tasks.data.LocationDaoBlocking
import org.tasks.preferences.Preferences import org.tasks.preferences.Preferences
import timber.log.Timber import timber.log.Timber
import javax.inject.Inject import javax.inject.Inject
@ -15,7 +15,7 @@ import javax.inject.Inject
class PlayServices @Inject constructor( class PlayServices @Inject constructor(
@param:ApplicationContext private val context: Context, @param:ApplicationContext private val context: Context,
private val preferences: Preferences, private val preferences: Preferences,
private val locationDao: LocationDao) { private val locationDao: LocationDaoBlocking) {
suspend fun check(activity: Activity?) { suspend fun check(activity: Activity?) {
val playServicesAvailable = locationDao.geofenceCount() == 0 || refreshAndCheck() val playServicesAvailable = locationDao.geofenceCount() == 0 || refreshAndCheck()

@ -8,7 +8,7 @@ import com.google.android.gms.location.Geofence
import com.google.android.gms.location.GeofencingRequest import com.google.android.gms.location.GeofencingRequest
import com.google.android.gms.location.LocationServices import com.google.android.gms.location.LocationServices
import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.android.qualifiers.ApplicationContext
import org.tasks.data.LocationDao import org.tasks.data.LocationDaoBlocking
import org.tasks.data.MergedGeofence import org.tasks.data.MergedGeofence
import org.tasks.data.Place import org.tasks.data.Place
import org.tasks.preferences.PermissionChecker import org.tasks.preferences.PermissionChecker
@ -18,7 +18,7 @@ import javax.inject.Inject
class GeofenceApi @Inject constructor( class GeofenceApi @Inject constructor(
@param:ApplicationContext private val context: Context, @param:ApplicationContext private val context: Context,
private val permissionChecker: PermissionChecker, private val permissionChecker: PermissionChecker,
private val locationDao: LocationDao) { private val locationDao: LocationDaoBlocking) {
fun registerAll() = locationDao.getPlacesWithGeofences().forEach(this::update) fun registerAll() = locationDao.getPlacesWithGeofences().forEach(this::update)

@ -9,7 +9,7 @@ import com.todoroo.andlib.utility.DateUtilities
import com.todoroo.astrid.reminders.ReminderService import com.todoroo.astrid.reminders.ReminderService
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import org.tasks.Notifier import org.tasks.Notifier
import org.tasks.data.LocationDao import org.tasks.data.LocationDaoBlocking
import org.tasks.data.Place import org.tasks.data.Place
import org.tasks.injection.InjectingJobIntentService import org.tasks.injection.InjectingJobIntentService
import org.tasks.notifications.Notification import org.tasks.notifications.Notification
@ -19,7 +19,7 @@ import javax.inject.Inject
@AndroidEntryPoint @AndroidEntryPoint
class GeofenceTransitionsIntentService : InjectingJobIntentService() { class GeofenceTransitionsIntentService : InjectingJobIntentService() {
@Inject lateinit var locationDao: LocationDao @Inject lateinit var locationDao: LocationDaoBlocking
@Inject lateinit var notifier: Notifier @Inject lateinit var notifier: Notifier
override fun doWork(intent: Intent) { override fun doWork(intent: Intent) {

@ -22,7 +22,7 @@ import com.todoroo.andlib.utility.AndroidUtilities
import com.todoroo.astrid.activity.TaskEditFragment.TaskEditFragmentCallbackHandler import com.todoroo.astrid.activity.TaskEditFragment.TaskEditFragmentCallbackHandler
import com.todoroo.astrid.activity.TaskListFragment.TaskListFragmentCallbackHandler import com.todoroo.astrid.activity.TaskListFragment.TaskListFragmentCallbackHandler
import com.todoroo.astrid.api.Filter import com.todoroo.astrid.api.Filter
import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.dao.TaskDaoBlocking
import com.todoroo.astrid.data.Task import com.todoroo.astrid.data.Task
import com.todoroo.astrid.service.TaskCreator import com.todoroo.astrid.service.TaskCreator
import com.todoroo.astrid.timers.TimerControlSet.TimerControlSetCallback import com.todoroo.astrid.timers.TimerControlSet.TimerControlSetCallback
@ -65,7 +65,7 @@ class MainActivity : InjectingAppCompatActivity(), TaskListFragmentCallbackHandl
@Inject lateinit var repeatConfirmationReceiver: RepeatConfirmationReceiver @Inject lateinit var repeatConfirmationReceiver: RepeatConfirmationReceiver
@Inject lateinit var defaultFilterProvider: DefaultFilterProvider @Inject lateinit var defaultFilterProvider: DefaultFilterProvider
@Inject lateinit var theme: Theme @Inject lateinit var theme: Theme
@Inject lateinit var taskDao: TaskDao @Inject lateinit var taskDao: TaskDaoBlocking
@Inject lateinit var localBroadcastManager: LocalBroadcastManager @Inject lateinit var localBroadcastManager: LocalBroadcastManager
@Inject lateinit var taskCreator: TaskCreator @Inject lateinit var taskCreator: TaskCreator
@Inject lateinit var playServices: PlayServices @Inject lateinit var playServices: PlayServices

@ -1,6 +1,6 @@
package com.todoroo.astrid.activity; package com.todoroo.astrid.activity;
import com.todoroo.astrid.dao.TaskDao; import com.todoroo.astrid.dao.TaskDaoBlocking;
import com.todoroo.astrid.service.TaskCreator; import com.todoroo.astrid.service.TaskCreator;
import dagger.hilt.android.AndroidEntryPoint; import dagger.hilt.android.AndroidEntryPoint;
import io.reactivex.Single; import io.reactivex.Single;
@ -17,7 +17,7 @@ public class TaskEditActivity extends InjectingAppCompatActivity {
private static final String TOKEN_ID = "id"; private static final String TOKEN_ID = "id";
@Inject TaskCreator taskCreator; @Inject TaskCreator taskCreator;
@Inject TaskDao taskDao; @Inject TaskDaoBlocking taskDao;
private CompositeDisposable disposables; private CompositeDisposable disposables;
@Override @Override

@ -41,7 +41,7 @@ import com.google.android.material.appbar.AppBarLayout;
import com.todoroo.andlib.utility.AndroidUtilities; import com.todoroo.andlib.utility.AndroidUtilities;
import com.todoroo.andlib.utility.DateUtilities; 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.dao.TaskDaoBlocking;
import com.todoroo.astrid.data.Task; import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.notes.CommentsController; import com.todoroo.astrid.notes.CommentsController;
import com.todoroo.astrid.repeats.RepeatControlSet; import com.todoroo.astrid.repeats.RepeatControlSet;
@ -56,7 +56,7 @@ import javax.inject.Inject;
import org.tasks.R; import org.tasks.R;
import org.tasks.analytics.Firebase; import org.tasks.analytics.Firebase;
import org.tasks.data.UserActivity; import org.tasks.data.UserActivity;
import org.tasks.data.UserActivityDao; import org.tasks.data.UserActivityDaoBlocking;
import org.tasks.databinding.FragmentTaskEditBinding; import org.tasks.databinding.FragmentTaskEditBinding;
import org.tasks.dialogs.DialogBuilder; import org.tasks.dialogs.DialogBuilder;
import org.tasks.dialogs.Linkify; import org.tasks.dialogs.Linkify;
@ -76,8 +76,8 @@ public final class TaskEditFragment extends Fragment
private static final String EXTRA_THEME = "extra_theme"; private static final String EXTRA_THEME = "extra_theme";
private static final String EXTRA_COMPLETED = "extra_completed"; private static final String EXTRA_COMPLETED = "extra_completed";
@Inject TaskDao taskDao; @Inject TaskDaoBlocking taskDao;
@Inject UserActivityDao userActivityDao; @Inject UserActivityDaoBlocking userActivityDao;
@Inject TaskDeleter taskDeleter; @Inject TaskDeleter taskDeleter;
@Inject NotificationManager notificationManager; @Inject NotificationManager notificationManager;
@Inject DialogBuilder dialogBuilder; @Inject DialogBuilder dialogBuilder;

@ -37,7 +37,7 @@ import com.todoroo.astrid.adapter.TaskAdapter
import com.todoroo.astrid.adapter.TaskAdapterProvider import com.todoroo.astrid.adapter.TaskAdapterProvider
import com.todoroo.astrid.api.* import com.todoroo.astrid.api.*
import com.todoroo.astrid.core.BuiltInFilterExposer import com.todoroo.astrid.core.BuiltInFilterExposer
import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.dao.TaskDaoBlocking
import com.todoroo.astrid.data.Task import com.todoroo.astrid.data.Task
import com.todoroo.astrid.service.TaskCreator import com.todoroo.astrid.service.TaskCreator
import com.todoroo.astrid.service.TaskDeleter import com.todoroo.astrid.service.TaskDeleter
@ -57,8 +57,8 @@ import org.tasks.R
import org.tasks.ShortcutManager import org.tasks.ShortcutManager
import org.tasks.activities.* import org.tasks.activities.*
import org.tasks.caldav.BaseCaldavCalendarSettingsActivity import org.tasks.caldav.BaseCaldavCalendarSettingsActivity
import org.tasks.data.CaldavDao import org.tasks.data.CaldavDaoBlocking
import org.tasks.data.TagDataDao import org.tasks.data.TagDataDaoBlocking
import org.tasks.data.TaskContainer import org.tasks.data.TaskContainer
import org.tasks.db.DbUtils.chunkedMap import org.tasks.db.DbUtils.chunkedMap
import org.tasks.dialogs.DateTimePicker.Companion.newDateTimePicker import org.tasks.dialogs.DateTimePicker.Companion.newDateTimePicker
@ -101,10 +101,10 @@ class TaskListFragment : Fragment(), OnRefreshListener, Toolbar.OnMenuItemClickL
@Inject lateinit var taskMover: TaskMover @Inject lateinit var taskMover: TaskMover
@Inject lateinit var toaster: Toaster @Inject lateinit var toaster: Toaster
@Inject lateinit var taskAdapterProvider: TaskAdapterProvider @Inject lateinit var taskAdapterProvider: TaskAdapterProvider
@Inject lateinit var taskDao: TaskDao @Inject lateinit var taskDao: TaskDaoBlocking
@Inject lateinit var taskDuplicator: TaskDuplicator @Inject lateinit var taskDuplicator: TaskDuplicator
@Inject lateinit var tagDataDao: TagDataDao @Inject lateinit var tagDataDao: TagDataDaoBlocking
@Inject lateinit var caldavDao: CaldavDao @Inject lateinit var caldavDao: CaldavDaoBlocking
@Inject lateinit var defaultThemeColor: ThemeColor @Inject lateinit var defaultThemeColor: ThemeColor
@Inject lateinit var colorProvider: ColorProvider @Inject lateinit var colorProvider: ColorProvider
@Inject lateinit var notificationManager: NotificationManager @Inject lateinit var notificationManager: NotificationManager

@ -2,13 +2,13 @@ package com.todoroo.astrid.adapter
import com.todoroo.andlib.utility.DateUtilities 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.dao.TaskDaoBlocking
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 org.tasks.LocalBroadcastManager import org.tasks.LocalBroadcastManager
import org.tasks.Strings.isNullOrEmpty import org.tasks.Strings.isNullOrEmpty
import org.tasks.data.CaldavDao import org.tasks.data.CaldavDaoBlocking
import org.tasks.data.GoogleTaskDao import org.tasks.data.GoogleTaskDaoBlocking
import org.tasks.data.TaskContainer import org.tasks.data.TaskContainer
import org.tasks.data.TaskListMetadata import org.tasks.data.TaskListMetadata
import timber.log.Timber import timber.log.Timber
@ -19,9 +19,9 @@ class AstridTaskAdapter internal constructor(
private val list: TaskListMetadata, private val list: TaskListMetadata,
private val filter: Filter, private val filter: Filter,
private val updater: SubtasksFilterUpdater, private val updater: SubtasksFilterUpdater,
googleTaskDao: GoogleTaskDao, googleTaskDao: GoogleTaskDaoBlocking,
caldavDao: CaldavDao, caldavDao: CaldavDaoBlocking,
private val taskDao: TaskDao, private val taskDao: TaskDaoBlocking,
private val localBroadcastManager: LocalBroadcastManager) private val localBroadcastManager: LocalBroadcastManager)
: TaskAdapter(false, googleTaskDao, caldavDao, taskDao, localBroadcastManager) { : TaskAdapter(false, googleTaskDao, caldavDao, taskDao, localBroadcastManager) {

@ -1,15 +1,15 @@
package com.todoroo.astrid.adapter package com.todoroo.astrid.adapter
import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.dao.TaskDaoBlocking
import org.tasks.LocalBroadcastManager import org.tasks.LocalBroadcastManager
import org.tasks.data.CaldavDao import org.tasks.data.CaldavDaoBlocking
import org.tasks.data.GoogleTaskDao import org.tasks.data.GoogleTaskDaoBlocking
import org.tasks.data.TaskContainer import org.tasks.data.TaskContainer
class CaldavManualSortTaskAdapter internal constructor( class CaldavManualSortTaskAdapter internal constructor(
googleTaskDao: GoogleTaskDao, googleTaskDao: GoogleTaskDaoBlocking,
private val caldavDao: CaldavDao, private val caldavDao: CaldavDaoBlocking,
private val taskDao: TaskDao, private val taskDao: TaskDaoBlocking,
private val localBroadcastManager: LocalBroadcastManager) private val localBroadcastManager: LocalBroadcastManager)
: TaskAdapter(false, googleTaskDao, caldavDao, taskDao, localBroadcastManager) { : TaskAdapter(false, googleTaskDao, caldavDao, taskDao, localBroadcastManager) {

@ -18,8 +18,8 @@ import com.todoroo.astrid.api.FilterListItem
import com.todoroo.astrid.api.FilterListItem.Type.* import com.todoroo.astrid.api.FilterListItem.Type.*
import org.tasks.LocalBroadcastManager import org.tasks.LocalBroadcastManager
import org.tasks.billing.Inventory import org.tasks.billing.Inventory
import org.tasks.data.CaldavDao import org.tasks.data.CaldavDaoBlocking
import org.tasks.data.GoogleTaskDao import org.tasks.data.GoogleTaskDaoBlocking
import org.tasks.filters.NavigationDrawerSubheader import org.tasks.filters.NavigationDrawerSubheader
import org.tasks.locale.Locale import org.tasks.locale.Locale
import org.tasks.preferences.Preferences import org.tasks.preferences.Preferences
@ -33,8 +33,8 @@ class FilterAdapter @Inject constructor(
private val inventory: Inventory, private val inventory: Inventory,
private val colorProvider: ColorProvider, private val colorProvider: ColorProvider,
private val preferences: Preferences, private val preferences: Preferences,
private val googleTaskDao: GoogleTaskDao, private val googleTaskDao: GoogleTaskDaoBlocking,
private val caldavDao: CaldavDao, private val caldavDao: CaldavDaoBlocking,
private val localBroadcastManager: LocalBroadcastManager) : BaseAdapter() { private val localBroadcastManager: LocalBroadcastManager) : BaseAdapter() {
private var selected: Filter? = null private var selected: Filter? = null
private var items: List<FilterListItem> = ArrayList() private var items: List<FilterListItem> = ArrayList()

@ -1,15 +1,15 @@
package com.todoroo.astrid.adapter package com.todoroo.astrid.adapter
import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.dao.TaskDaoBlocking
import org.tasks.BuildConfig import org.tasks.BuildConfig
import org.tasks.LocalBroadcastManager import org.tasks.LocalBroadcastManager
import org.tasks.data.CaldavDao import org.tasks.data.CaldavDaoBlocking
import org.tasks.data.GoogleTaskDao import org.tasks.data.GoogleTaskDaoBlocking
class GoogleTaskManualSortAdapter internal constructor( class GoogleTaskManualSortAdapter internal constructor(
private val googleTaskDao: GoogleTaskDao, private val googleTaskDao: GoogleTaskDaoBlocking,
caldavDao: CaldavDao, caldavDao: CaldavDaoBlocking,
private val taskDao: TaskDao, private val taskDao: TaskDaoBlocking,
private val localBroadcastManager: LocalBroadcastManager) private val localBroadcastManager: LocalBroadcastManager)
: TaskAdapter(false, googleTaskDao, caldavDao, taskDao, localBroadcastManager) { : TaskAdapter(false, googleTaskDao, caldavDao, taskDao, localBroadcastManager) {

@ -18,8 +18,8 @@ import io.reactivex.subjects.PublishSubject
import org.tasks.LocalBroadcastManager import org.tasks.LocalBroadcastManager
import org.tasks.activities.DragAndDropDiffer import org.tasks.activities.DragAndDropDiffer
import org.tasks.billing.Inventory import org.tasks.billing.Inventory
import org.tasks.data.CaldavDao import org.tasks.data.CaldavDaoBlocking
import org.tasks.data.GoogleTaskDao import org.tasks.data.GoogleTaskDaoBlocking
import org.tasks.filters.NavigationDrawerSubheader import org.tasks.filters.NavigationDrawerSubheader
import org.tasks.locale.Locale import org.tasks.locale.Locale
import org.tasks.preferences.Preferences import org.tasks.preferences.Preferences
@ -34,8 +34,8 @@ class NavigationDrawerAdapter @Inject constructor(
private val inventory: Inventory, private val inventory: Inventory,
private val colorProvider: ColorProvider, private val colorProvider: ColorProvider,
private val preferences: Preferences, private val preferences: Preferences,
private val googleTaskDao: GoogleTaskDao, private val googleTaskDao: GoogleTaskDaoBlocking,
private val caldavDao: CaldavDao, private val caldavDao: CaldavDaoBlocking,
private val localBroadcastManager: LocalBroadcastManager) private val localBroadcastManager: LocalBroadcastManager)
: RecyclerView.Adapter<RecyclerView.ViewHolder>(), DragAndDropDiffer<FilterListItem, MutableList<FilterListItem>> { : RecyclerView.Adapter<RecyclerView.ViewHolder>(), DragAndDropDiffer<FilterListItem, MutableList<FilterListItem>> {

@ -11,8 +11,8 @@ import butterknife.ButterKnife
import butterknife.OnClick import butterknife.OnClick
import org.tasks.LocalBroadcastManager import org.tasks.LocalBroadcastManager
import org.tasks.R import org.tasks.R
import org.tasks.data.CaldavDao import org.tasks.data.CaldavDaoBlocking
import org.tasks.data.GoogleTaskDao import org.tasks.data.GoogleTaskDaoBlocking
import org.tasks.filters.NavigationDrawerSubheader import org.tasks.filters.NavigationDrawerSubheader
import org.tasks.filters.NavigationDrawerSubheader.SubheaderType import org.tasks.filters.NavigationDrawerSubheader.SubheaderType
import org.tasks.preferences.Preferences import org.tasks.preferences.Preferences
@ -23,8 +23,8 @@ internal class SubheaderViewHolder(
itemView: View, itemView: View,
activity: Activity, activity: Activity,
private val preferences: Preferences, private val preferences: Preferences,
private val googleTaskDao: GoogleTaskDao, private val googleTaskDao: GoogleTaskDaoBlocking,
private val caldavDao: CaldavDao, private val caldavDao: CaldavDaoBlocking,
private val localBroadcastManager: LocalBroadcastManager) private val localBroadcastManager: LocalBroadcastManager)
: RecyclerView.ViewHolder(itemView) { : RecyclerView.ViewHolder(itemView) {

@ -7,7 +7,7 @@ package com.todoroo.astrid.adapter
import com.todoroo.astrid.core.SortHelper.SORT_DUE import com.todoroo.astrid.core.SortHelper.SORT_DUE
import com.todoroo.astrid.core.SortHelper.SORT_IMPORTANCE import com.todoroo.astrid.core.SortHelper.SORT_IMPORTANCE
import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.dao.TaskDaoBlocking
import com.todoroo.astrid.data.Task import com.todoroo.astrid.data.Task
import org.tasks.BuildConfig import org.tasks.BuildConfig
import org.tasks.LocalBroadcastManager import org.tasks.LocalBroadcastManager
@ -19,9 +19,9 @@ import kotlin.collections.HashSet
open class TaskAdapter( open class TaskAdapter(
private val newTasksOnTop: Boolean, private val newTasksOnTop: Boolean,
private val googleTaskDao: GoogleTaskDao, private val googleTaskDao: GoogleTaskDaoBlocking,
private val caldavDao: CaldavDao, private val caldavDao: CaldavDaoBlocking,
private val taskDao: TaskDao, private val taskDao: TaskDaoBlocking,
private val localBroadcastManager: LocalBroadcastManager) { private val localBroadcastManager: LocalBroadcastManager) {
private val selected = HashSet<Long>() private val selected = HashSet<Long>()

@ -6,27 +6,27 @@ import com.todoroo.astrid.api.Filter
import com.todoroo.astrid.api.GtasksFilter import com.todoroo.astrid.api.GtasksFilter
import com.todoroo.astrid.api.TagFilter import com.todoroo.astrid.api.TagFilter
import com.todoroo.astrid.core.BuiltInFilterExposer import com.todoroo.astrid.core.BuiltInFilterExposer
import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.dao.TaskDaoBlocking
import com.todoroo.astrid.data.Task.Companion.isUuidEmpty import com.todoroo.astrid.data.Task.Companion.isUuidEmpty
import com.todoroo.astrid.subtasks.SubtasksFilterUpdater import com.todoroo.astrid.subtasks.SubtasksFilterUpdater
import com.todoroo.astrid.subtasks.SubtasksHelper import com.todoroo.astrid.subtasks.SubtasksHelper
import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.android.qualifiers.ApplicationContext
import org.tasks.LocalBroadcastManager import org.tasks.LocalBroadcastManager
import org.tasks.Strings.isNullOrEmpty import org.tasks.Strings.isNullOrEmpty
import org.tasks.data.CaldavDao import org.tasks.data.CaldavDaoBlocking
import org.tasks.data.GoogleTaskDao import org.tasks.data.GoogleTaskDaoBlocking
import org.tasks.data.TaskListMetadata import org.tasks.data.TaskListMetadata
import org.tasks.data.TaskListMetadataDao import org.tasks.data.TaskListMetadataDaoBlocking
import org.tasks.preferences.Preferences import org.tasks.preferences.Preferences
import javax.inject.Inject import javax.inject.Inject
class TaskAdapterProvider @Inject constructor( class TaskAdapterProvider @Inject constructor(
@param:ApplicationContext private val context: Context, @param:ApplicationContext private val context: Context,
private val preferences: Preferences, private val preferences: Preferences,
private val taskListMetadataDao: TaskListMetadataDao, private val taskListMetadataDao: TaskListMetadataDaoBlocking,
private val taskDao: TaskDao, private val taskDao: TaskDaoBlocking,
private val googleTaskDao: GoogleTaskDao, private val googleTaskDao: GoogleTaskDaoBlocking,
private val caldavDao: CaldavDao, private val caldavDao: CaldavDaoBlocking,
private val localBroadcastManager: LocalBroadcastManager) { private val localBroadcastManager: LocalBroadcastManager) {
fun createTaskAdapter(filter: Filter): TaskAdapter { fun createTaskAdapter(filter: Filter): TaskAdapter {
if (filter.supportsAstridSorting() && preferences.isAstridSort) { if (filter.supportsAstridSorting() && preferences.isAstridSort) {

@ -6,7 +6,7 @@
package com.todoroo.astrid.alarms package com.todoroo.astrid.alarms
import org.tasks.data.Alarm import org.tasks.data.Alarm
import org.tasks.data.AlarmDao import org.tasks.data.AlarmDaoBlocking
import org.tasks.jobs.AlarmEntry import org.tasks.jobs.AlarmEntry
import org.tasks.jobs.NotificationQueue import org.tasks.jobs.NotificationQueue
import java.util.* import java.util.*
@ -20,7 +20,7 @@ import javax.inject.Singleton
*/ */
@Singleton @Singleton
class AlarmService @Inject constructor( class AlarmService @Inject constructor(
private val alarmDao: AlarmDao, private val alarmDao: AlarmDaoBlocking,
private val jobs: NotificationQueue) { private val jobs: NotificationQueue) {
fun rescheduleAlarms(taskId: Long, oldDueDate: Long, newDueDate: Long) { fun rescheduleAlarms(taskId: Long, oldDueDate: Long, newDueDate: Long) {

@ -15,7 +15,7 @@ import android.net.Uri;
import android.os.Handler; import android.os.Handler;
import android.text.TextUtils; import android.text.TextUtils;
import com.todoroo.andlib.utility.DialogUtilities; import com.todoroo.andlib.utility.DialogUtilities;
import com.todoroo.astrid.dao.TaskDao; import com.todoroo.astrid.dao.TaskDaoBlocking;
import com.todoroo.astrid.data.Task; import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.service.TaskMover; import com.todoroo.astrid.service.TaskMover;
import java.io.IOException; import java.io.IOException;
@ -27,18 +27,18 @@ import org.tasks.R;
import org.tasks.analytics.Firebase; import org.tasks.analytics.Firebase;
import org.tasks.backup.XmlReader; import org.tasks.backup.XmlReader;
import org.tasks.data.Alarm; import org.tasks.data.Alarm;
import org.tasks.data.AlarmDao; import org.tasks.data.AlarmDaoBlocking;
import org.tasks.data.Geofence; import org.tasks.data.Geofence;
import org.tasks.data.GoogleTask; import org.tasks.data.GoogleTask;
import org.tasks.data.GoogleTaskDao; import org.tasks.data.GoogleTaskDaoBlocking;
import org.tasks.data.LocationDao; import org.tasks.data.LocationDaoBlocking;
import org.tasks.data.Place; import org.tasks.data.Place;
import org.tasks.data.Tag; import org.tasks.data.Tag;
import org.tasks.data.TagDao; import org.tasks.data.TagDaoBlocking;
import org.tasks.data.TagData; import org.tasks.data.TagData;
import org.tasks.data.TagDataDao; import org.tasks.data.TagDataDaoBlocking;
import org.tasks.data.UserActivity; import org.tasks.data.UserActivity;
import org.tasks.data.UserActivityDao; import org.tasks.data.UserActivityDaoBlocking;
import org.tasks.dialogs.DialogBuilder; import org.tasks.dialogs.DialogBuilder;
import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException; import org.xmlpull.v1.XmlPullParserException;
@ -49,17 +49,17 @@ public class TasksXmlImporter {
private static final String FORMAT2 = "2"; // $NON-NLS-1$ private static final String FORMAT2 = "2"; // $NON-NLS-1$
private static final String FORMAT3 = "3"; // $NON-NLS-1$ private static final String FORMAT3 = "3"; // $NON-NLS-1$
private final TagDataDao tagDataDao; private final TagDataDaoBlocking tagDataDao;
private final UserActivityDao userActivityDao; private final UserActivityDaoBlocking userActivityDao;
private final DialogBuilder dialogBuilder; private final DialogBuilder dialogBuilder;
private final TaskDao taskDao; private final TaskDaoBlocking taskDao;
private final LocalBroadcastManager localBroadcastManager; private final LocalBroadcastManager localBroadcastManager;
private final AlarmDao alarmDao; private final AlarmDaoBlocking alarmDao;
private final TagDao tagDao; private final TagDaoBlocking tagDao;
private final GoogleTaskDao googleTaskDao; private final GoogleTaskDaoBlocking googleTaskDao;
private final TaskMover taskMover; private final TaskMover taskMover;
private final Firebase firebase; private final Firebase firebase;
private final LocationDao locationDao; private final LocationDaoBlocking locationDao;
private Activity activity; private Activity activity;
private Handler handler; private Handler handler;
private int taskCount; private int taskCount;
@ -71,15 +71,15 @@ public class TasksXmlImporter {
@Inject @Inject
public TasksXmlImporter( public TasksXmlImporter(
TagDataDao tagDataDao, TagDataDaoBlocking tagDataDao,
UserActivityDao userActivityDao, UserActivityDaoBlocking userActivityDao,
DialogBuilder dialogBuilder, DialogBuilder dialogBuilder,
TaskDao taskDao, TaskDaoBlocking taskDao,
LocationDao locationDao, LocationDaoBlocking locationDao,
LocalBroadcastManager localBroadcastManager, LocalBroadcastManager localBroadcastManager,
AlarmDao alarmDao, AlarmDaoBlocking alarmDao,
TagDao tagDao, TagDaoBlocking tagDao,
GoogleTaskDao googleTaskDao, GoogleTaskDaoBlocking googleTaskDao,
TaskMover taskMover, TaskMover taskMover,
Firebase firebase) { Firebase firebase) {
this.tagDataDao = tagDataDao; this.tagDataDao = tagDataDao;

@ -13,7 +13,7 @@ import com.todoroo.andlib.sql.QueryTemplate;
import com.todoroo.andlib.utility.AndroidUtilities; import com.todoroo.andlib.utility.AndroidUtilities;
import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.api.PermaSql; import com.todoroo.astrid.api.PermaSql;
import com.todoroo.astrid.dao.TaskDao; import com.todoroo.astrid.dao.TaskDaoBlocking;
import com.todoroo.astrid.dao.TaskDao.TaskCriteria; import com.todoroo.astrid.dao.TaskDao.TaskCriteria;
import com.todoroo.astrid.data.Task; import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.timers.TimerPlugin; import com.todoroo.astrid.timers.TimerPlugin;
@ -37,12 +37,12 @@ import org.tasks.themes.CustomIcons;
public final class BuiltInFilterExposer { public final class BuiltInFilterExposer {
private final Preferences preferences; private final Preferences preferences;
private final TaskDao taskDao; private final TaskDaoBlocking taskDao;
private final Context context; private final Context context;
@Inject @Inject
public BuiltInFilterExposer( public BuiltInFilterExposer(
@ApplicationContext Context context, Preferences preferences, TaskDao taskDao) { @ApplicationContext Context context, Preferences preferences, TaskDaoBlocking taskDao) {
this.context = context; this.context = context;
this.preferences = preferences; this.preferences = preferences;
this.taskDao = taskDao; this.taskDao = taskDao;

@ -5,7 +5,7 @@ import androidx.room.RoomDatabase
import com.todoroo.astrid.data.Task import com.todoroo.astrid.data.Task
import org.tasks.data.* import org.tasks.data.*
import org.tasks.notifications.Notification import org.tasks.notifications.Notification
import org.tasks.notifications.NotificationDao import org.tasks.notifications.NotificationDaoBlocking
@Database( @Database(
entities = [ entities = [
@ -28,21 +28,21 @@ import org.tasks.notifications.NotificationDao
GoogleTaskAccount::class], GoogleTaskAccount::class],
version = 76) version = 76)
abstract class Database : RoomDatabase() { abstract class Database : RoomDatabase() {
abstract fun notificationDao(): NotificationDao abstract fun notificationDao(): NotificationDaoBlocking
abstract val tagDataDao: TagDataDao abstract val tagDataDao: TagDataDaoBlocking
abstract val userActivityDao: UserActivityDao abstract val userActivityDao: UserActivityDaoBlocking
abstract val taskAttachmentDao: TaskAttachmentDao abstract val taskAttachmentDao: TaskAttachmentDaoBlocking
abstract val taskListMetadataDao: TaskListMetadataDao abstract val taskListMetadataDao: TaskListMetadataDaoBlocking
abstract val alarmDao: AlarmDao abstract val alarmDao: AlarmDaoBlocking
abstract val locationDao: LocationDao abstract val locationDao: LocationDaoBlocking
abstract val tagDao: TagDao abstract val tagDao: TagDaoBlocking
abstract val googleTaskDao: GoogleTaskDao abstract val googleTaskDao: GoogleTaskDaoBlocking
abstract val filterDao: FilterDao abstract val filterDao: FilterDaoBlocking
abstract val googleTaskListDao: GoogleTaskListDao abstract val googleTaskListDao: GoogleTaskListDaoBlocking
abstract val taskDao: TaskDao abstract val taskDao: TaskDaoBlocking
abstract val caldavDao: CaldavDao abstract val caldavDao: CaldavDaoBlocking
abstract val deletionDao: DeletionDao abstract val deletionDao: DeletionDaoBlocking
abstract val contentProviderDao: ContentProviderDao abstract val contentProviderDao: ContentProviderDaoBlocking
/** @return human-readable database name for debugging /** @return human-readable database name for debugging
*/ */

@ -294,7 +294,7 @@ SELECT EXISTS(SELECT 1 FROM tasks WHERE parent > 0 AND deleted = 0) AS hasSubtas
companion object { companion object {
const val TRANS_SUPPRESS_REFRESH = "suppress-refresh" const val TRANS_SUPPRESS_REFRESH = "suppress-refresh"
private fun getQuery(queryTemplate: String, vararg fields: Field): SimpleSQLiteQuery { fun getQuery(queryTemplate: String, vararg fields: Field): SimpleSQLiteQuery {
return SimpleSQLiteQuery( return SimpleSQLiteQuery(
com.todoroo.andlib.sql.Query.select(*fields) com.todoroo.andlib.sql.Query.select(*fields)
.withQueryTemplate(PermaSql.replacePlaceholdersForQuery(queryTemplate)) .withQueryTemplate(PermaSql.replacePlaceholdersForQuery(queryTemplate))

@ -0,0 +1,280 @@
/*
* Copyright (c) 2012 Todoroo Inc
*
* See the file "LICENSE" for the full license governing this code.
*/
package com.todoroo.astrid.dao
import androidx.paging.DataSource
import androidx.room.*
import androidx.sqlite.db.SimpleSQLiteQuery
import com.todoroo.andlib.sql.Field
import com.todoroo.andlib.utility.AndroidUtilities.assertNotMainThread
import com.todoroo.andlib.utility.DateUtilities
import com.todoroo.astrid.api.Filter
import com.todoroo.astrid.dao.TaskDao.Companion.getQuery
import com.todoroo.astrid.data.Task
import com.todoroo.astrid.data.Task.Companion.NO_ID
import com.todoroo.astrid.helper.UUIDHelper
import kotlinx.coroutines.runBlocking
import org.tasks.BuildConfig
import org.tasks.data.Place
import org.tasks.data.SubtaskInfo
import org.tasks.data.TaskContainer
import org.tasks.data.TaskListQuery
import org.tasks.db.DbUtils.chunkedMap
import org.tasks.db.DbUtils.eachChunk
import org.tasks.jobs.WorkManager
import org.tasks.preferences.Preferences
import org.tasks.time.DateTimeUtils.currentTimeMillis
import timber.log.Timber
@Dao
abstract class TaskDaoBlocking(private val database: Database) {
private lateinit var workManager: WorkManager
fun initialize(workManager: WorkManager) {
this.workManager = workManager
}
fun needsRefresh(): List<Task> {
return needsRefresh(DateUtilities.now())
}
@Query("SELECT * FROM tasks WHERE completed = 0 AND deleted = 0 AND (hideUntil > :now OR dueDate > :now)")
abstract fun needsRefresh(now: Long): List<Task>
fun fetchBlocking(id: Long) = runBlocking {
fetch(id)
}
@Query("SELECT * FROM tasks WHERE _id = :id LIMIT 1")
abstract suspend fun fetch(id: Long): Task?
fun fetch(ids: List<Long>): List<Task> = ids.chunkedMap(this::fetchInternal)
@Query("SELECT * FROM tasks WHERE _id IN (:ids)")
internal abstract fun fetchInternal(ids: List<Long>): List<Task>
@Query("SELECT COUNT(1) FROM tasks WHERE timerStart > 0 AND deleted = 0")
abstract fun activeTimers(): Int
@Query("SELECT tasks.* FROM tasks INNER JOIN notification ON tasks._id = notification.task")
abstract fun activeNotifications(): List<Task>
@Query("SELECT * FROM tasks WHERE remoteId = :remoteId")
abstract fun fetch(remoteId: String): Task?
@Query("SELECT * FROM tasks WHERE completed = 0 AND deleted = 0")
abstract fun getActiveTasks(): List<Task>
@Query("SELECT * FROM tasks WHERE hideUntil < (strftime('%s','now')*1000)")
abstract fun getVisibleTasks(): List<Task>
@Query("SELECT * FROM tasks WHERE remoteId IN (:remoteIds) "
+ "AND recurrence IS NOT NULL AND LENGTH(recurrence) > 0")
abstract fun getRecurringTasks(remoteIds: List<String>): List<Task>
@Query("UPDATE tasks SET completed = :completionDate " + "WHERE remoteId = :remoteId")
abstract fun setCompletionDate(remoteId: String, completionDate: Long)
@Query("UPDATE tasks SET snoozeTime = :millis WHERE _id in (:taskIds)")
abstract fun snooze(taskIds: List<Long>, millis: Long)
@Query("SELECT tasks.* FROM tasks "
+ "LEFT JOIN google_tasks ON tasks._id = google_tasks.gt_task "
+ "WHERE gt_list_id IN (SELECT gtl_remote_id FROM google_task_lists WHERE gtl_account = :account)"
+ "AND (tasks.modified > google_tasks.gt_last_sync OR google_tasks.gt_remote_id = '' OR google_tasks.gt_deleted > 0) "
+ "ORDER BY CASE WHEN gt_parent = 0 THEN 0 ELSE 1 END, gt_order ASC")
abstract fun getGoogleTasksToPush(account: String): List<Task>
@Query("""
SELECT tasks.*
FROM tasks
INNER JOIN caldav_tasks ON tasks._id = caldav_tasks.cd_task
WHERE caldav_tasks.cd_calendar = :calendar
AND (tasks.modified > caldav_tasks.cd_last_sync OR caldav_tasks.cd_last_sync = 0)""")
abstract fun getCaldavTasksToPush(calendar: String): List<Task>
@Query("SELECT * FROM TASKS "
+ "WHERE completed = 0 AND deleted = 0 AND (notificationFlags > 0 OR notifications > 0)")
abstract fun getTasksWithReminders(): List<Task>
// --- SQL clause generators
@Query("SELECT * FROM tasks")
abstract fun getAll(): List<Task>
@Query("SELECT calendarUri FROM tasks " + "WHERE calendarUri IS NOT NULL AND calendarUri != ''")
abstract fun getAllCalendarEvents(): List<String>
@Query("UPDATE tasks SET calendarUri = '' " + "WHERE calendarUri IS NOT NULL AND calendarUri != ''")
abstract fun clearAllCalendarEvents(): Int
@Query("SELECT calendarUri FROM tasks "
+ "WHERE completed > 0 AND calendarUri IS NOT NULL AND calendarUri != ''")
abstract fun getCompletedCalendarEvents(): List<String>
@Query("UPDATE tasks SET calendarUri = '' "
+ "WHERE completed > 0 AND calendarUri IS NOT NULL AND calendarUri != ''")
abstract fun clearCompletedCalendarEvents(): Int
@Transaction
open fun fetchTasks(callback: (SubtaskInfo) -> List<String>): List<TaskContainer> {
return runBlocking {
fetchTasks(callback, getSubtaskInfo())
}
}
@Transaction
open fun fetchTasks(callback: (SubtaskInfo) -> List<String>, subtasks: SubtaskInfo): List<TaskContainer> {
assertNotMainThread()
val start = if (BuildConfig.DEBUG) DateUtilities.now() else 0
val queries = callback.invoke(subtasks)
val db = database.openHelper.writableDatabase
val last = queries.size - 1
for (i in 0 until last) {
db.execSQL(queries[i])
}
val result = fetchTasks(SimpleSQLiteQuery(queries[last]))
Timber.v("%sms: %s", DateUtilities.now() - start, queries.joinToString(";\n"))
return result
}
fun fetchTasks(preferences: Preferences, filter: Filter): List<TaskContainer> {
return fetchTasks {
TaskListQuery.getQuery(preferences, filter, it)
}
}
@RawQuery
abstract fun fetchTasks(query: SimpleSQLiteQuery): List<TaskContainer>
@RawQuery
abstract fun count(query: SimpleSQLiteQuery): Int
@Query("""
SELECT EXISTS(SELECT 1 FROM tasks WHERE parent > 0 AND deleted = 0) AS hasSubtasks,
EXISTS(SELECT 1
FROM google_tasks
INNER JOIN tasks ON gt_task = _id
WHERE deleted = 0
AND gt_parent > 0
AND gt_deleted = 0) AS hasGoogleSubtasks
""")
abstract suspend fun getSubtaskInfo(): SubtaskInfo
@RawQuery(observedEntities = [Place::class])
abstract fun getTaskFactory(
query: SimpleSQLiteQuery): DataSource.Factory<Int, TaskContainer>
fun touch(id: Long) = touch(listOf(id))
fun touch(ids: List<Long>) {
ids.eachChunk { touchInternal(it) }
workManager.sync(false)
}
@Query("UPDATE tasks SET modified = :now WHERE _id in (:ids)")
abstract fun touchInternal(ids: List<Long>, now: Long = currentTimeMillis())
fun setParent(parent: Long, tasks: List<Long>) =
tasks.eachChunk { setParentInternal(parent, it) }
@Query("UPDATE tasks SET parent = :parent WHERE _id IN (:children)")
internal abstract fun setParentInternal(parent: Long, children: List<Long>)
@Transaction
open fun fetchChildren(id: Long): List<Task> {
return fetch(getChildren(id))
}
fun getChildren(id: Long): List<Long> {
return getChildren(listOf(id))
}
@Query("WITH RECURSIVE "
+ " recursive_tasks (task) AS ( "
+ " SELECT _id "
+ " FROM tasks "
+ "WHERE parent IN (:ids)"
+ "UNION ALL "
+ " SELECT _id "
+ " FROM tasks "
+ " INNER JOIN recursive_tasks "
+ " ON recursive_tasks.task = tasks.parent"
+ " WHERE tasks.deleted = 0)"
+ "SELECT task FROM recursive_tasks")
abstract fun getChildren(ids: List<Long>): List<Long>
@Query("UPDATE tasks SET collapsed = :collapsed WHERE _id = :id")
abstract fun setCollapsed(id: Long, collapsed: Boolean)
@Transaction
open fun setCollapsed(preferences: Preferences, filter: Filter, collapsed: Boolean) {
fetchTasks(preferences, filter)
.filter(TaskContainer::hasChildren)
.map(TaskContainer::getId)
.eachChunk { collapse(it, collapsed) }
}
@Query("UPDATE tasks SET collapsed = :collapsed WHERE _id IN (:ids)")
abstract fun collapse(ids: List<Long>, collapsed: Boolean)
// --- save
// TODO: get rid of this super-hack
/**
* Saves the given task to the database.getDatabase(). Task must already exist. Returns true on
* success.
*/
@JvmOverloads
fun save(task: Task, original: Task? = fetchBlocking(task.id)) {
if (!task.insignificantChange(original)) {
task.modificationDate = DateUtilities.now()
}
if (update(task) == 1) {
workManager.afterSave(task, original)
}
}
@Insert
abstract fun insert(task: Task): Long
@Update
abstract fun update(task: Task): Int
fun createNew(task: Task) {
task.id = NO_ID
if (task.creationDate == 0L) {
task.creationDate = DateUtilities.now()
}
if (Task.isUuidEmpty(task.remoteId)) {
task.remoteId = UUIDHelper.newUUID()
}
val insert = insert(task)
task.id = insert
}
fun count(filter: Filter): Int {
val query = getQuery(filter.sqlQuery, Field.COUNT)
val start = if (BuildConfig.DEBUG) DateUtilities.now() else 0
val count = count(query)
Timber.v("%sms: %s", DateUtilities.now() - start, query.sql)
return count
}
fun fetchFiltered(filter: Filter): List<Task> {
return fetchFiltered(filter.getSqlQuery())
}
fun fetchFiltered(queryTemplate: String): List<Task> {
val query = getQuery(queryTemplate, Task.FIELDS)
val start = if (BuildConfig.DEBUG) DateUtilities.now() else 0
val tasks = fetchTasks(query)
Timber.v("%sms: %s", DateUtilities.now() - start, query.sql)
return tasks.map(TaskContainer::getTask)
}
@Query("SELECT _id FROM tasks LEFT JOIN google_tasks ON _id = gt_task AND gt_deleted = 0 LEFT JOIN caldav_tasks ON _id = cd_task AND cd_deleted = 0 WHERE gt_id IS NULL AND cd_id IS NULL AND parent = 0")
abstract fun getLocalTasks(): List<Long>
}

@ -11,6 +11,7 @@ import com.todoroo.andlib.data.Table
import com.todoroo.andlib.sql.Field import com.todoroo.andlib.sql.Field
import com.todoroo.andlib.utility.DateUtilities import com.todoroo.andlib.utility.DateUtilities
import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.dao.TaskDao
import com.todoroo.astrid.dao.TaskDaoBlocking
import org.tasks.Strings import org.tasks.Strings
import org.tasks.backup.XmlReader import org.tasks.backup.XmlReader
import org.tasks.data.Tag import org.tasks.data.Tag

@ -21,7 +21,7 @@ import com.todoroo.astrid.data.Task
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import org.tasks.R import org.tasks.R
import org.tasks.data.TaskAttachment import org.tasks.data.TaskAttachment
import org.tasks.data.TaskAttachmentDao import org.tasks.data.TaskAttachmentDaoBlocking
import org.tasks.dialogs.AddAttachmentDialog import org.tasks.dialogs.AddAttachmentDialog
import org.tasks.dialogs.DialogBuilder import org.tasks.dialogs.DialogBuilder
import org.tasks.files.FileHelper import org.tasks.files.FileHelper
@ -33,7 +33,7 @@ import javax.inject.Inject
@AndroidEntryPoint @AndroidEntryPoint
class FilesControlSet : TaskEditControlFragment() { class FilesControlSet : TaskEditControlFragment() {
@Inject lateinit var activity: Activity @Inject lateinit var activity: Activity
@Inject lateinit var taskAttachmentDao: TaskAttachmentDao @Inject lateinit var taskAttachmentDao: TaskAttachmentDaoBlocking
@Inject lateinit var dialogBuilder: DialogBuilder @Inject lateinit var dialogBuilder: DialogBuilder
@Inject lateinit var preferences: Preferences @Inject lateinit var preferences: Preferences

@ -15,7 +15,7 @@ import android.net.Uri;
import android.provider.CalendarContract; import android.provider.CalendarContract;
import android.text.format.Time; import android.text.format.Time;
import com.todoroo.andlib.utility.DateUtilities; import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.astrid.dao.TaskDao; import com.todoroo.astrid.dao.TaskDaoBlocking;
import com.todoroo.astrid.data.Task; import com.todoroo.astrid.data.Task;
import dagger.hilt.android.qualifiers.ApplicationContext; import dagger.hilt.android.qualifiers.ApplicationContext;
import java.util.TimeZone; import java.util.TimeZone;
@ -32,7 +32,7 @@ public class GCalHelper {
/** If task has no estimated time, how early to set a task in calendar (seconds) */ /** If task has no estimated time, how early to set a task in calendar (seconds) */
private static final long DEFAULT_CAL_TIME = DateUtilities.ONE_HOUR; private static final long DEFAULT_CAL_TIME = DateUtilities.ONE_HOUR;
private final TaskDao taskDao; private final TaskDaoBlocking taskDao;
private final Preferences preferences; private final Preferences preferences;
private final PermissionChecker permissionChecker; private final PermissionChecker permissionChecker;
private final CalendarEventProvider calendarEventProvider; private final CalendarEventProvider calendarEventProvider;
@ -41,7 +41,7 @@ public class GCalHelper {
@Inject @Inject
public GCalHelper( public GCalHelper(
@ApplicationContext Context context, @ApplicationContext Context context,
TaskDao taskDao, TaskDaoBlocking taskDao,
Preferences preferences, Preferences preferences,
PermissionChecker permissionChecker, PermissionChecker permissionChecker,
CalendarEventProvider calendarEventProvider) { CalendarEventProvider calendarEventProvider) {

@ -15,18 +15,18 @@ import javax.inject.Inject;
import org.tasks.LocalBroadcastManager; import org.tasks.LocalBroadcastManager;
import org.tasks.data.GoogleTaskAccount; import org.tasks.data.GoogleTaskAccount;
import org.tasks.data.GoogleTaskList; import org.tasks.data.GoogleTaskList;
import org.tasks.data.GoogleTaskListDao; import org.tasks.data.GoogleTaskListDaoBlocking;
import timber.log.Timber; import timber.log.Timber;
public class GtasksListService { public class GtasksListService {
private final GoogleTaskListDao googleTaskListDao; private final GoogleTaskListDaoBlocking googleTaskListDao;
private final TaskDeleter taskDeleter; private final TaskDeleter taskDeleter;
private final LocalBroadcastManager localBroadcastManager; private final LocalBroadcastManager localBroadcastManager;
@Inject @Inject
public GtasksListService( public GtasksListService(
GoogleTaskListDao googleTaskListDao, GoogleTaskListDaoBlocking googleTaskListDao,
TaskDeleter taskDeleter, TaskDeleter taskDeleter,
LocalBroadcastManager localBroadcastManager) { LocalBroadcastManager localBroadcastManager) {
this.googleTaskListDao = googleTaskListDao; this.googleTaskListDao = googleTaskListDao;

@ -15,7 +15,7 @@ import dagger.hilt.android.AndroidEntryPoint
import org.tasks.PermissionUtil.verifyPermissions import org.tasks.PermissionUtil.verifyPermissions
import org.tasks.R import org.tasks.R
import org.tasks.data.GoogleTaskAccount import org.tasks.data.GoogleTaskAccount
import org.tasks.data.GoogleTaskListDao import org.tasks.data.GoogleTaskListDaoBlocking
import org.tasks.dialogs.DialogBuilder import org.tasks.dialogs.DialogBuilder
import org.tasks.gtasks.GoogleAccountManager import org.tasks.gtasks.GoogleAccountManager
import org.tasks.injection.InjectingAppCompatActivity import org.tasks.injection.InjectingAppCompatActivity
@ -34,7 +34,7 @@ import javax.inject.Inject
class GtasksLoginActivity : InjectingAppCompatActivity() { class GtasksLoginActivity : InjectingAppCompatActivity() {
@Inject lateinit var dialogBuilder: DialogBuilder @Inject lateinit var dialogBuilder: DialogBuilder
@Inject lateinit var googleAccountManager: GoogleAccountManager @Inject lateinit var googleAccountManager: GoogleAccountManager
@Inject lateinit var googleTaskListDao: GoogleTaskListDao @Inject lateinit var googleTaskListDao: GoogleTaskListDaoBlocking
@Inject lateinit var permissionRequestor: ActivityPermissionRequestor @Inject lateinit var permissionRequestor: ActivityPermissionRequestor
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {

@ -24,14 +24,14 @@ import java.util.ArrayList;
import javax.inject.Inject; import javax.inject.Inject;
import org.tasks.R; import org.tasks.R;
import org.tasks.data.UserActivity; import org.tasks.data.UserActivity;
import org.tasks.data.UserActivityDao; import org.tasks.data.UserActivityDaoBlocking;
import org.tasks.files.FileHelper; import org.tasks.files.FileHelper;
import org.tasks.locale.Locale; import org.tasks.locale.Locale;
import org.tasks.preferences.Preferences; import org.tasks.preferences.Preferences;
public class CommentsController { public class CommentsController {
private final UserActivityDao userActivityDao; private final UserActivityDaoBlocking userActivityDao;
private final ArrayList<UserActivity> items = new ArrayList<>(); private final ArrayList<UserActivity> items = new ArrayList<>();
private final Activity activity; private final Activity activity;
private final Preferences preferences; private final Preferences preferences;
@ -43,7 +43,7 @@ public class CommentsController {
@Inject @Inject
public CommentsController( public CommentsController(
UserActivityDao userActivityDao, Activity activity, Preferences preferences, Locale locale) { UserActivityDaoBlocking userActivityDao, Activity activity, Preferences preferences, Locale locale) {
this.userActivityDao = userActivityDao; this.userActivityDao = userActivityDao;
this.activity = activity; this.activity = activity;
this.preferences = preferences; this.preferences = preferences;

@ -20,7 +20,7 @@ import dagger.hilt.android.components.ApplicationComponent
import org.tasks.BuildConfig import org.tasks.BuildConfig
import org.tasks.R import org.tasks.R
import org.tasks.analytics.Firebase import org.tasks.analytics.Firebase
import org.tasks.data.ContentProviderDao import org.tasks.data.ContentProviderDaoBlocking
import timber.log.Timber import timber.log.Timber
import java.math.BigInteger import java.math.BigInteger
import java.security.MessageDigest import java.security.MessageDigest
@ -39,7 +39,7 @@ class Astrid2TaskProvider : ContentProvider() {
@EntryPoint @EntryPoint
@InstallIn(ApplicationComponent::class) @InstallIn(ApplicationComponent::class)
interface Astrid2TaskProviderEntryPoint { interface Astrid2TaskProviderEntryPoint {
val contentProviderDao: ContentProviderDao val contentProviderDao: ContentProviderDaoBlocking
val firebase: Firebase val firebase: Firebase
} }

@ -10,7 +10,7 @@ import static com.google.common.collect.Lists.transform;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import com.todoroo.andlib.utility.DateUtilities; import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.astrid.dao.TaskDao; import com.todoroo.astrid.dao.TaskDaoBlocking;
import com.todoroo.astrid.data.Task; import com.todoroo.astrid.data.Task;
import java.util.List; import java.util.List;
import javax.inject.Inject; import javax.inject.Inject;
@ -36,15 +36,15 @@ public final class ReminderService {
private final NotificationQueue jobs; private final NotificationQueue jobs;
private final Random random; private final Random random;
private final TaskDao taskDao; private final TaskDaoBlocking taskDao;
private final Preferences preferences; private final Preferences preferences;
@Inject @Inject
ReminderService(Preferences preferences, NotificationQueue notificationQueue, TaskDao taskDao) { ReminderService(Preferences preferences, NotificationQueue notificationQueue, TaskDaoBlocking taskDao) {
this(preferences, notificationQueue, new Random(), taskDao); this(preferences, notificationQueue, new Random(), taskDao);
} }
ReminderService(Preferences preferences, NotificationQueue jobs, Random random, TaskDao taskDao) { ReminderService(Preferences preferences, NotificationQueue jobs, Random random, TaskDaoBlocking taskDao) {
this.preferences = preferences; this.preferences = preferences;
this.jobs = jobs; this.jobs = jobs;
this.random = random; this.random = random;

@ -20,7 +20,7 @@ import com.google.ical.values.RRule;
import com.google.ical.values.WeekdayNum; import com.google.ical.values.WeekdayNum;
import com.todoroo.andlib.utility.DateUtilities; import com.todoroo.andlib.utility.DateUtilities;
import com.todoroo.astrid.alarms.AlarmService; import com.todoroo.astrid.alarms.AlarmService;
import com.todoroo.astrid.dao.TaskDao; import com.todoroo.astrid.dao.TaskDaoBlocking;
import com.todoroo.astrid.data.Task; import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.gcal.GCalHelper; import com.todoroo.astrid.gcal.GCalHelper;
import java.text.ParseException; import java.text.ParseException;
@ -38,7 +38,7 @@ public class RepeatTaskHelper {
private static final Comparator<WeekdayNum> weekdayCompare = private static final Comparator<WeekdayNum> weekdayCompare =
(object1, object2) -> object1.wday.javaDayNum - object2.wday.javaDayNum; (object1, object2) -> object1.wday.javaDayNum - object2.wday.javaDayNum;
private final GCalHelper gcalHelper; private final GCalHelper gcalHelper;
private final TaskDao taskDao; private final TaskDaoBlocking taskDao;
private final LocalBroadcastManager localBroadcastManager; private final LocalBroadcastManager localBroadcastManager;
private final AlarmService alarmService; private final AlarmService alarmService;
@ -46,7 +46,7 @@ public class RepeatTaskHelper {
public RepeatTaskHelper( public RepeatTaskHelper(
GCalHelper gcalHelper, GCalHelper gcalHelper,
AlarmService alarmService, AlarmService alarmService,
TaskDao taskDao, TaskDaoBlocking taskDao,
LocalBroadcastManager localBroadcastManager) { LocalBroadcastManager localBroadcastManager) {
this.gcalHelper = gcalHelper; this.gcalHelper = gcalHelper;
this.taskDao = taskDao; this.taskDao = taskDao;

@ -1,15 +1,15 @@
package com.todoroo.astrid.service package com.todoroo.astrid.service
import com.todoroo.andlib.utility.DateUtilities import com.todoroo.andlib.utility.DateUtilities
import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.dao.TaskDaoBlocking
import com.todoroo.astrid.data.Task import com.todoroo.astrid.data.Task
import org.tasks.data.GoogleTaskDao import org.tasks.data.GoogleTaskDaoBlocking
import timber.log.Timber import timber.log.Timber
import javax.inject.Inject import javax.inject.Inject
class TaskCompleter @Inject internal constructor( class TaskCompleter @Inject internal constructor(
private val taskDao: TaskDao, private val taskDao: TaskDaoBlocking,
private val googleTaskDao: GoogleTaskDao) { private val googleTaskDao: GoogleTaskDaoBlocking) {
fun setComplete(taskId: Long) = fun setComplete(taskId: Long) =
taskDao.fetchBlocking(taskId)?.let { setComplete(it, true) } taskDao.fetchBlocking(taskId)?.let { setComplete(it, true) }

@ -12,7 +12,7 @@ import com.todoroo.astrid.api.CaldavFilter;
import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.api.GtasksFilter; import com.todoroo.astrid.api.GtasksFilter;
import com.todoroo.astrid.api.PermaSql; import com.todoroo.astrid.api.PermaSql;
import com.todoroo.astrid.dao.TaskDao; import com.todoroo.astrid.dao.TaskDaoBlocking;
import com.todoroo.astrid.data.Task; import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.gcal.GCalHelper; import com.todoroo.astrid.gcal.GCalHelper;
import com.todoroo.astrid.utility.TitleParser; import com.todoroo.astrid.utility.TitleParser;
@ -20,17 +20,17 @@ import java.util.ArrayList;
import java.util.Map; import java.util.Map;
import javax.inject.Inject; import javax.inject.Inject;
import org.tasks.R; import org.tasks.R;
import org.tasks.data.CaldavDao; import org.tasks.data.CaldavDaoBlocking;
import org.tasks.data.CaldavTask; import org.tasks.data.CaldavTask;
import org.tasks.data.Geofence; import org.tasks.data.Geofence;
import org.tasks.data.GoogleTask; import org.tasks.data.GoogleTask;
import org.tasks.data.GoogleTaskDao; import org.tasks.data.GoogleTaskDaoBlocking;
import org.tasks.data.LocationDao; import org.tasks.data.LocationDaoBlocking;
import org.tasks.data.Place; import org.tasks.data.Place;
import org.tasks.data.Tag; import org.tasks.data.Tag;
import org.tasks.data.TagDao; import org.tasks.data.TagDaoBlocking;
import org.tasks.data.TagData; import org.tasks.data.TagData;
import org.tasks.data.TagDataDao; import org.tasks.data.TagDataDaoBlocking;
import org.tasks.preferences.DefaultFilterProvider; import org.tasks.preferences.DefaultFilterProvider;
import org.tasks.preferences.Preferences; import org.tasks.preferences.Preferences;
import timber.log.Timber; import timber.log.Timber;
@ -39,25 +39,25 @@ public class TaskCreator {
private final GCalHelper gcalHelper; private final GCalHelper gcalHelper;
private final Preferences preferences; private final Preferences preferences;
private final TagDao tagDao; private final TagDaoBlocking tagDao;
private final GoogleTaskDao googleTaskDao; private final GoogleTaskDaoBlocking googleTaskDao;
private final DefaultFilterProvider defaultFilterProvider; private final DefaultFilterProvider defaultFilterProvider;
private final CaldavDao caldavDao; private final CaldavDaoBlocking caldavDao;
private final LocationDao locationDao; private final LocationDaoBlocking locationDao;
private final TagDataDao tagDataDao; private final TagDataDaoBlocking tagDataDao;
private final TaskDao taskDao; private final TaskDaoBlocking taskDao;
@Inject @Inject
public TaskCreator( public TaskCreator(
GCalHelper gcalHelper, GCalHelper gcalHelper,
Preferences preferences, Preferences preferences,
TagDataDao tagDataDao, TagDataDaoBlocking tagDataDao,
TaskDao taskDao, TaskDaoBlocking taskDao,
TagDao tagDao, TagDaoBlocking tagDao,
GoogleTaskDao googleTaskDao, GoogleTaskDaoBlocking googleTaskDao,
DefaultFilterProvider defaultFilterProvider, DefaultFilterProvider defaultFilterProvider,
CaldavDao caldavDao, CaldavDaoBlocking caldavDao,
LocationDao locationDao) { LocationDaoBlocking locationDao) {
this.gcalHelper = gcalHelper; this.gcalHelper = gcalHelper;
this.preferences = preferences; this.preferences = preferences;
this.tagDataDao = tagDataDao; this.tagDataDao = tagDataDao;

@ -1,7 +1,7 @@
package com.todoroo.astrid.service package com.todoroo.astrid.service
import com.todoroo.astrid.api.Filter import com.todoroo.astrid.api.Filter
import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.dao.TaskDaoBlocking
import com.todoroo.astrid.data.Task import com.todoroo.astrid.data.Task
import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.persistentListOf
import org.tasks.LocalBroadcastManager import org.tasks.LocalBroadcastManager
@ -14,11 +14,11 @@ import java.util.*
import javax.inject.Inject import javax.inject.Inject
class TaskDeleter @Inject constructor( class TaskDeleter @Inject constructor(
private val deletionDao: DeletionDao, private val deletionDao: DeletionDaoBlocking,
private val workManager: WorkManager, private val workManager: WorkManager,
private val taskDao: TaskDao, private val taskDao: TaskDaoBlocking,
private val localBroadcastManager: LocalBroadcastManager, private val localBroadcastManager: LocalBroadcastManager,
private val googleTaskDao: GoogleTaskDao, private val googleTaskDao: GoogleTaskDaoBlocking,
private val preferences: Preferences) { private val preferences: Preferences) {
fun markDeleted(item: Task) = markDeleted(persistentListOf(item.id)) fun markDeleted(item: Task) = markDeleted(persistentListOf(item.id))

@ -4,7 +4,7 @@ import static com.google.common.collect.Lists.transform;
import static com.todoroo.andlib.utility.DateUtilities.now; import static com.todoroo.andlib.utility.DateUtilities.now;
import static com.todoroo.astrid.data.Task.NO_UUID; import static com.todoroo.astrid.data.Task.NO_UUID;
import com.todoroo.astrid.dao.TaskDao; import com.todoroo.astrid.dao.TaskDaoBlocking;
import com.todoroo.astrid.data.Task; import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.gcal.GCalHelper; import com.todoroo.astrid.gcal.GCalHelper;
import java.util.ArrayList; import java.util.ArrayList;
@ -12,43 +12,43 @@ import java.util.List;
import javax.inject.Inject; import javax.inject.Inject;
import org.tasks.LocalBroadcastManager; import org.tasks.LocalBroadcastManager;
import org.tasks.data.Alarm; import org.tasks.data.Alarm;
import org.tasks.data.AlarmDao; import org.tasks.data.AlarmDaoBlocking;
import org.tasks.data.CaldavDao; import org.tasks.data.CaldavDaoBlocking;
import org.tasks.data.CaldavTask; import org.tasks.data.CaldavTask;
import org.tasks.data.Geofence; import org.tasks.data.Geofence;
import org.tasks.data.GoogleTask; import org.tasks.data.GoogleTask;
import org.tasks.data.GoogleTaskDao; import org.tasks.data.GoogleTaskDaoBlocking;
import org.tasks.data.LocationDao; import org.tasks.data.LocationDaoBlocking;
import org.tasks.data.Tag; import org.tasks.data.Tag;
import org.tasks.data.TagDao; import org.tasks.data.TagDaoBlocking;
import org.tasks.data.TagData; import org.tasks.data.TagData;
import org.tasks.data.TagDataDao; import org.tasks.data.TagDataDaoBlocking;
import org.tasks.preferences.Preferences; import org.tasks.preferences.Preferences;
public class TaskDuplicator { public class TaskDuplicator {
private final GCalHelper gcalHelper; private final GCalHelper gcalHelper;
private final TaskDao taskDao; private final TaskDaoBlocking taskDao;
private final TagDao tagDao; private final TagDaoBlocking tagDao;
private final TagDataDao tagDataDao; private final TagDataDaoBlocking tagDataDao;
private final GoogleTaskDao googleTaskDao; private final GoogleTaskDaoBlocking googleTaskDao;
private final CaldavDao caldavDao; private final CaldavDaoBlocking caldavDao;
private final LocationDao locationDao; private final LocationDaoBlocking locationDao;
private final AlarmDao alarmDao; private final AlarmDaoBlocking alarmDao;
private final Preferences preferences; private final Preferences preferences;
private final LocalBroadcastManager localBroadcastManager; private final LocalBroadcastManager localBroadcastManager;
@Inject @Inject
public TaskDuplicator( public TaskDuplicator(
GCalHelper gcalHelper, GCalHelper gcalHelper,
TaskDao taskDao, TaskDaoBlocking taskDao,
LocalBroadcastManager localBroadcastManager, LocalBroadcastManager localBroadcastManager,
TagDao tagDao, TagDaoBlocking tagDao,
TagDataDao tagDataDao, TagDataDaoBlocking tagDataDao,
GoogleTaskDao googleTaskDao, GoogleTaskDaoBlocking googleTaskDao,
CaldavDao caldavDao, CaldavDaoBlocking caldavDao,
LocationDao locationDao, LocationDaoBlocking locationDao,
AlarmDao alarmDao, AlarmDaoBlocking alarmDao,
Preferences preferences) { Preferences preferences) {
this.gcalHelper = gcalHelper; this.gcalHelper = gcalHelper;
this.taskDao = taskDao; this.taskDao = taskDao;

@ -5,7 +5,7 @@ import com.todoroo.andlib.utility.DateUtilities
import com.todoroo.astrid.api.CaldavFilter import com.todoroo.astrid.api.CaldavFilter
import com.todoroo.astrid.api.Filter import com.todoroo.astrid.api.Filter
import com.todoroo.astrid.api.GtasksFilter import com.todoroo.astrid.api.GtasksFilter
import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.dao.TaskDaoBlocking
import com.todoroo.astrid.data.Task import com.todoroo.astrid.data.Task
import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.android.qualifiers.ApplicationContext
import org.tasks.BuildConfig import org.tasks.BuildConfig
@ -18,10 +18,10 @@ import javax.inject.Inject
class TaskMover @Inject constructor( class TaskMover @Inject constructor(
@param:ApplicationContext private val context: Context, @param:ApplicationContext private val context: Context,
private val taskDao: TaskDao, private val taskDao: TaskDaoBlocking,
private val caldavDao: CaldavDao, private val caldavDao: CaldavDaoBlocking,
private val googleTaskDao: GoogleTaskDao, private val googleTaskDao: GoogleTaskDaoBlocking,
private val googleTaskListDao: GoogleTaskListDao, private val googleTaskListDao: GoogleTaskListDaoBlocking,
private val preferences: Preferences, private val preferences: Preferences,
private val localBroadcastManager: LocalBroadcastManager) { private val localBroadcastManager: LocalBroadcastManager) {

@ -6,7 +6,7 @@ import com.google.common.collect.ImmutableListMultimap
import com.google.common.collect.ListMultimap import com.google.common.collect.ListMultimap
import com.google.common.collect.Multimaps import com.google.common.collect.Multimaps
import com.todoroo.astrid.api.GtasksFilter import com.todoroo.astrid.api.GtasksFilter
import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.dao.TaskDaoBlocking
import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.android.qualifiers.ApplicationContext
import org.tasks.R import org.tasks.R
import org.tasks.Strings.isNullOrEmpty import org.tasks.Strings.isNullOrEmpty
@ -26,16 +26,16 @@ import javax.inject.Inject
class Upgrader @Inject constructor( class Upgrader @Inject constructor(
@param:ApplicationContext private val context: Context, @param:ApplicationContext private val context: Context,
private val preferences: Preferences, private val preferences: Preferences,
private val tagDataDao: TagDataDao, private val tagDataDao: TagDataDaoBlocking,
private val tagDao: TagDao, private val tagDao: TagDaoBlocking,
private val filterDao: FilterDao, private val filterDao: FilterDaoBlocking,
private val defaultFilterProvider: DefaultFilterProvider, private val defaultFilterProvider: DefaultFilterProvider,
private val googleTaskListDao: GoogleTaskListDao, private val googleTaskListDao: GoogleTaskListDaoBlocking,
private val userActivityDao: UserActivityDao, private val userActivityDao: UserActivityDaoBlocking,
private val taskAttachmentDao: TaskAttachmentDao, private val taskAttachmentDao: TaskAttachmentDaoBlocking,
private val caldavDao: CaldavDao, private val caldavDao: CaldavDaoBlocking,
private val taskDao: TaskDao, private val taskDao: TaskDaoBlocking,
private val locationDao: LocationDao, private val locationDao: LocationDaoBlocking,
private val iCal: iCalendar, private val iCal: iCalendar,
private val widgetManager: AppWidgetManager, private val widgetManager: AppWidgetManager,
private val taskMover: TaskMover) { private val taskMover: TaskMover) {

@ -4,7 +4,7 @@ import static org.tasks.Strings.isNullOrEmpty;
import static org.tasks.db.QueryUtils.showHiddenAndCompleted; import static org.tasks.db.QueryUtils.showHiddenAndCompleted;
import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.dao.TaskDao; import com.todoroo.astrid.dao.TaskDaoBlocking;
import com.todoroo.astrid.data.Task; import com.todoroo.astrid.data.Task;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
@ -15,7 +15,7 @@ import javax.inject.Inject;
import org.json.JSONArray; import org.json.JSONArray;
import org.json.JSONException; import org.json.JSONException;
import org.tasks.data.TaskListMetadata; import org.tasks.data.TaskListMetadata;
import org.tasks.data.TaskListMetadataDao; import org.tasks.data.TaskListMetadataDaoBlocking;
import timber.log.Timber; import timber.log.Timber;
public class SubtasksFilterUpdater { public class SubtasksFilterUpdater {
@ -23,13 +23,13 @@ public class SubtasksFilterUpdater {
public static final String ACTIVE_TASKS_ORDER = "active_tasks_order"; // $NON-NLS-1$ public static final String ACTIVE_TASKS_ORDER = "active_tasks_order"; // $NON-NLS-1$
public static final String TODAY_TASKS_ORDER = "today_tasks_order"; // $NON-NLS-1$ public static final String TODAY_TASKS_ORDER = "today_tasks_order"; // $NON-NLS-1$
private final TaskListMetadataDao taskListMetadataDao; private final TaskListMetadataDaoBlocking taskListMetadataDao;
private final TaskDao taskDao; private final TaskDaoBlocking taskDao;
private final HashMap<String, Node> idToNode = new HashMap<>(); private final HashMap<String, Node> idToNode = new HashMap<>();
private Node treeRoot; private Node treeRoot;
@Inject @Inject
public SubtasksFilterUpdater(TaskListMetadataDao taskListMetadataDao, TaskDao taskDao) { public SubtasksFilterUpdater(TaskListMetadataDaoBlocking taskListMetadataDao, TaskDaoBlocking taskDao) {
this.taskDao = taskDao; this.taskDao = taskDao;
this.taskListMetadataDao = taskListMetadataDao; this.taskListMetadataDao = taskListMetadataDao;
} }

@ -6,7 +6,7 @@ import static org.tasks.db.QueryUtils.showHiddenAndCompleted;
import android.content.Context; import android.content.Context;
import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.core.BuiltInFilterExposer; import com.todoroo.astrid.core.BuiltInFilterExposer;
import com.todoroo.astrid.dao.TaskDao; import com.todoroo.astrid.dao.TaskDaoBlocking;
import com.todoroo.astrid.data.Task; import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.subtasks.SubtasksFilterUpdater.Node; import com.todoroo.astrid.subtasks.SubtasksFilterUpdater.Node;
import dagger.hilt.android.qualifiers.ApplicationContext; import dagger.hilt.android.qualifiers.ApplicationContext;
@ -16,9 +16,9 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import javax.inject.Inject; import javax.inject.Inject;
import org.tasks.data.TagData; import org.tasks.data.TagData;
import org.tasks.data.TagDataDao; import org.tasks.data.TagDataDaoBlocking;
import org.tasks.data.TaskListMetadata; import org.tasks.data.TaskListMetadata;
import org.tasks.data.TaskListMetadataDao; import org.tasks.data.TaskListMetadataDaoBlocking;
import org.tasks.preferences.Preferences; import org.tasks.preferences.Preferences;
import timber.log.Timber; import timber.log.Timber;
@ -26,17 +26,17 @@ public class SubtasksHelper {
private final Context context; private final Context context;
private final Preferences preferences; private final Preferences preferences;
private final TaskDao taskDao; private final TaskDaoBlocking taskDao;
private final TagDataDao tagDataDao; private final TagDataDaoBlocking tagDataDao;
private final TaskListMetadataDao taskListMetadataDao; private final TaskListMetadataDaoBlocking taskListMetadataDao;
@Inject @Inject
public SubtasksHelper( public SubtasksHelper(
@ApplicationContext Context context, @ApplicationContext Context context,
Preferences preferences, Preferences preferences,
TaskDao taskDao, TaskDaoBlocking taskDao,
TagDataDao tagDataDao, TagDataDaoBlocking tagDataDao,
TaskListMetadataDao taskListMetadataDao) { TaskListMetadataDaoBlocking taskListMetadataDao) {
this.context = context; this.context = context;
this.preferences = preferences; this.preferences = preferences;
this.taskDao = taskDao; this.taskDao = taskDao;
@ -73,7 +73,7 @@ public class SubtasksHelper {
} }
/** Takes a subtasks string containing local ids and remaps it to one containing UUIDs */ /** Takes a subtasks string containing local ids and remaps it to one containing UUIDs */
public static String convertTreeToRemoteIds(TaskDao taskDao, String localTree) { public static String convertTreeToRemoteIds(TaskDaoBlocking taskDao, String localTree) {
List<Long> localIds = getIdList(localTree); List<Long> localIds = getIdList(localTree);
Map<Long, String> idMap = getIdMap(taskDao, localIds); Map<Long, String> idMap = getIdMap(taskDao, localIds);
idMap.put(-1L, "-1"); // $NON-NLS-1$ idMap.put(-1L, "-1"); // $NON-NLS-1$
@ -115,7 +115,7 @@ public class SubtasksHelper {
}); });
} }
private static Map<Long, String> getIdMap(TaskDao taskDao, List<Long> keys) { private static Map<Long, String> getIdMap(TaskDaoBlocking taskDao, List<Long> keys) {
List<Task> tasks = taskDao.fetch(keys); List<Task> tasks = taskDao.fetch(keys);
Map<Long, String> map = new HashMap<>(); Map<Long, String> map = new HashMap<>();
for (Task task : tasks) { for (Task task : tasks) {

@ -18,9 +18,9 @@ import com.todoroo.andlib.utility.DateUtilities
import com.todoroo.astrid.data.Task import com.todoroo.astrid.data.Task
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import org.tasks.R import org.tasks.R
import org.tasks.data.TagDao import org.tasks.data.TagDaoBlocking
import org.tasks.data.TagData import org.tasks.data.TagData
import org.tasks.data.TagDataDao import org.tasks.data.TagDataDaoBlocking
import org.tasks.tags.TagPickerActivity import org.tasks.tags.TagPickerActivity
import org.tasks.ui.ChipProvider import org.tasks.ui.ChipProvider
import org.tasks.ui.TaskEditControlFragment import org.tasks.ui.TaskEditControlFragment
@ -34,8 +34,8 @@ import javax.inject.Inject
*/ */
@AndroidEntryPoint @AndroidEntryPoint
class TagsControlSet : TaskEditControlFragment() { class TagsControlSet : TaskEditControlFragment() {
@Inject lateinit var tagDao: TagDao @Inject lateinit var tagDao: TagDaoBlocking
@Inject lateinit var tagDataDao: TagDataDao @Inject lateinit var tagDataDao: TagDataDaoBlocking
@Inject lateinit var chipProvider: ChipProvider @Inject lateinit var chipProvider: ChipProvider
@BindView(R.id.no_tags) @BindView(R.id.no_tags)

@ -17,7 +17,7 @@ import com.todoroo.andlib.sql.Criterion;
import com.todoroo.andlib.sql.QueryTemplate; import com.todoroo.andlib.sql.QueryTemplate;
import com.todoroo.andlib.utility.DateUtilities; 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.dao.TaskDaoBlocking;
import com.todoroo.astrid.data.Task; import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.utility.Constants; import com.todoroo.astrid.utility.Constants;
import dagger.hilt.android.qualifiers.ApplicationContext; import dagger.hilt.android.qualifiers.ApplicationContext;
@ -32,13 +32,13 @@ public class TimerPlugin {
private final Context context; private final Context context;
private final NotificationManager notificationManager; private final NotificationManager notificationManager;
private final TaskDao taskDao; private final TaskDaoBlocking taskDao;
@Inject @Inject
public TimerPlugin( public TimerPlugin(
@ApplicationContext Context context, @ApplicationContext Context context,
NotificationManager notificationManager, NotificationManager notificationManager,
TaskDao taskDao) { TaskDaoBlocking taskDao) {
this.context = context; this.context = context;
this.notificationManager = notificationManager; this.notificationManager = notificationManager;
this.taskDao = taskDao; this.taskDao = taskDao;

@ -21,12 +21,12 @@ import java.util.HashSet;
import java.util.Set; import java.util.Set;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import org.tasks.data.TagDataDao; import org.tasks.data.TagDataDaoBlocking;
import timber.log.Timber; import timber.log.Timber;
public class TitleParser { public class TitleParser {
public static void parse(TagDataDao tagDataDao, Task task, ArrayList<String> tags) { public static void parse(TagDataDaoBlocking tagDataDao, Task task, ArrayList<String> tags) {
repeatHelper(task); repeatHelper(task);
listHelper( listHelper(
tagDataDao, tagDataDao,
@ -46,7 +46,7 @@ public class TitleParser {
return pattern; return pattern;
} }
public static void listHelper(TagDataDao tagDataDao, Task task, ArrayList<String> tags) { public static void listHelper(TagDataDaoBlocking tagDataDao, Task task, ArrayList<String> tags) {
String inputText = task.getTitle(); String inputText = task.getTitle();
Pattern tagPattern = Pattern.compile("(\\s|^)#(\\(.*\\)|[^\\s]+)"); Pattern tagPattern = Pattern.compile("(\\s|^)#(\\(.*\\)|[^\\s]+)");
Pattern contextPattern = Pattern.compile("(\\s|^)@(\\(.*\\)|[^\\s]+)"); Pattern contextPattern = Pattern.compile("(\\s|^)@(\\(.*\\)|[^\\s]+)");

@ -7,7 +7,7 @@ import androidx.core.app.NotificationCompat
import com.todoroo.andlib.utility.AndroidUtilities import com.todoroo.andlib.utility.AndroidUtilities
import com.todoroo.astrid.activity.MainActivity import com.todoroo.astrid.activity.MainActivity
import com.todoroo.astrid.api.Filter import com.todoroo.astrid.api.Filter
import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.dao.TaskDaoBlocking
import com.todoroo.astrid.reminders.ReminderService import com.todoroo.astrid.reminders.ReminderService
import com.todoroo.astrid.voice.VoiceOutputAssistant import com.todoroo.astrid.voice.VoiceOutputAssistant
import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.android.qualifiers.ApplicationContext
@ -25,7 +25,7 @@ import kotlin.math.min
class Notifier @Inject constructor( class Notifier @Inject constructor(
@param:ApplicationContext private val context: Context, @param:ApplicationContext private val context: Context,
private val taskDao: TaskDao, private val taskDao: TaskDaoBlocking,
private val notificationManager: NotificationManager, private val notificationManager: NotificationManager,
private val telephonyManager: TelephonyManager, private val telephonyManager: TelephonyManager,
private val audioManager: AudioManager, private val audioManager: AudioManager,

@ -37,7 +37,7 @@ import dagger.hilt.android.AndroidEntryPoint
import org.tasks.R import org.tasks.R
import org.tasks.Strings import org.tasks.Strings
import org.tasks.data.Filter import org.tasks.data.Filter
import org.tasks.data.FilterDao import org.tasks.data.FilterDaoBlocking
import org.tasks.filters.FilterCriteriaProvider import org.tasks.filters.FilterCriteriaProvider
import org.tasks.locale.Locale import org.tasks.locale.Locale
import java.util.* import java.util.*
@ -46,7 +46,7 @@ import kotlin.math.max
@AndroidEntryPoint @AndroidEntryPoint
class FilterSettingsActivity : BaseListSettingsActivity() { class FilterSettingsActivity : BaseListSettingsActivity() {
@Inject lateinit var filterDao: FilterDao @Inject lateinit var filterDao: FilterDaoBlocking
@Inject lateinit var locale: Locale @Inject lateinit var locale: Locale
@Inject lateinit var database: Database @Inject lateinit var database: Database
@Inject lateinit var filterCriteriaProvider: FilterCriteriaProvider @Inject lateinit var filterCriteriaProvider: FilterCriteriaProvider

@ -25,7 +25,7 @@ import javax.inject.Inject;
import org.tasks.R; import org.tasks.R;
import org.tasks.data.GoogleTaskAccount; import org.tasks.data.GoogleTaskAccount;
import org.tasks.data.GoogleTaskList; import org.tasks.data.GoogleTaskList;
import org.tasks.data.GoogleTaskListDao; import org.tasks.data.GoogleTaskListDaoBlocking;
import timber.log.Timber; import timber.log.Timber;
@AndroidEntryPoint @AndroidEntryPoint
@ -34,7 +34,7 @@ public class GoogleTaskListSettingsActivity extends BaseListSettingsActivity {
public static final String EXTRA_ACCOUNT = "extra_account"; public static final String EXTRA_ACCOUNT = "extra_account";
public static final String EXTRA_STORE_DATA = "extra_store_data"; public static final String EXTRA_STORE_DATA = "extra_store_data";
@Inject @ApplicationContext Context context; @Inject @ApplicationContext Context context;
@Inject GoogleTaskListDao googleTaskListDao; @Inject GoogleTaskListDaoBlocking googleTaskListDao;
@Inject GtasksListService gtasksListService; @Inject GtasksListService gtasksListService;
@Inject TaskDeleter taskDeleter; @Inject TaskDeleter taskDeleter;
@Inject GtasksInvoker gtasksInvoker; @Inject GtasksInvoker gtasksInvoker;

@ -42,11 +42,11 @@ class NavigationDrawerCustomization : ThemedInjectingAppCompatActivity(), Toolba
@Inject lateinit var adapter: NavigationDrawerAdapter @Inject lateinit var adapter: NavigationDrawerAdapter
@Inject lateinit var localBroadcastManager: LocalBroadcastManager @Inject lateinit var localBroadcastManager: LocalBroadcastManager
@Inject lateinit var preferences: Preferences @Inject lateinit var preferences: Preferences
@Inject lateinit var tagDataDao: TagDataDao @Inject lateinit var tagDataDao: TagDataDaoBlocking
@Inject lateinit var googleTaskListDao: GoogleTaskListDao @Inject lateinit var googleTaskListDao: GoogleTaskListDaoBlocking
@Inject lateinit var filterDao: FilterDao @Inject lateinit var filterDao: FilterDaoBlocking
@Inject lateinit var caldavDao: CaldavDao @Inject lateinit var caldavDao: CaldavDaoBlocking
@Inject lateinit var locationDao: LocationDao @Inject lateinit var locationDao: LocationDaoBlocking
private lateinit var binding: ActivityTagOrganizerBinding private lateinit var binding: ActivityTagOrganizerBinding
private lateinit var toolbar: Toolbar private lateinit var toolbar: Toolbar

@ -12,7 +12,7 @@ import com.todoroo.astrid.activity.TaskListFragment
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import org.tasks.R import org.tasks.R
import org.tasks.Strings.isNullOrEmpty import org.tasks.Strings.isNullOrEmpty
import org.tasks.data.LocationDao import org.tasks.data.LocationDaoBlocking
import org.tasks.data.Place import org.tasks.data.Place
import org.tasks.filters.PlaceFilter import org.tasks.filters.PlaceFilter
import org.tasks.location.MapFragment import org.tasks.location.MapFragment
@ -28,7 +28,7 @@ class PlaceSettingsActivity : BaseListSettingsActivity(), MapFragment.MapFragmen
@BindView(R.id.name) lateinit var name: TextInputEditText @BindView(R.id.name) lateinit var name: TextInputEditText
@BindView(R.id.name_layout) lateinit var nameLayout: TextInputLayout @BindView(R.id.name_layout) lateinit var nameLayout: TextInputLayout
@Inject lateinit var locationDao: LocationDao @Inject lateinit var locationDao: LocationDaoBlocking
@Inject lateinit var map: MapFragment @Inject lateinit var map: MapFragment
private lateinit var place: Place private lateinit var place: Place

@ -23,9 +23,9 @@ import com.todoroo.astrid.helper.UUIDHelper;
import dagger.hilt.android.AndroidEntryPoint; import dagger.hilt.android.AndroidEntryPoint;
import javax.inject.Inject; import javax.inject.Inject;
import org.tasks.R; import org.tasks.R;
import org.tasks.data.TagDao; import org.tasks.data.TagDaoBlocking;
import org.tasks.data.TagData; import org.tasks.data.TagData;
import org.tasks.data.TagDataDao; import org.tasks.data.TagDataDaoBlocking;
@AndroidEntryPoint @AndroidEntryPoint
public class TagSettingsActivity extends BaseListSettingsActivity { public class TagSettingsActivity extends BaseListSettingsActivity {
@ -33,8 +33,8 @@ public class TagSettingsActivity extends BaseListSettingsActivity {
public static final String TOKEN_AUTOPOPULATE_NAME = "autopopulateName"; // $NON-NLS-1$ public static final String TOKEN_AUTOPOPULATE_NAME = "autopopulateName"; // $NON-NLS-1$
public static final String EXTRA_TAG_DATA = "tagData"; // $NON-NLS-1$ public static final String EXTRA_TAG_DATA = "tagData"; // $NON-NLS-1$
private static final String EXTRA_TAG_UUID = "uuid"; // $NON-NLS-1$ private static final String EXTRA_TAG_UUID = "uuid"; // $NON-NLS-1$
@Inject TagDataDao tagDataDao; @Inject TagDataDaoBlocking tagDataDao;
@Inject TagDao tagDao; @Inject TagDaoBlocking tagDao;
@BindView(R.id.name) @BindView(R.id.name)
TextInputEditText name; TextInputEditText name;

@ -3,7 +3,7 @@ package org.tasks.activities
import android.net.Uri import android.net.Uri
import android.os.Bundle import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.dao.TaskDaoBlocking
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import io.reactivex.Single import io.reactivex.Single
import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.android.schedulers.AndroidSchedulers
@ -18,7 +18,7 @@ import javax.inject.Inject
@AndroidEntryPoint @AndroidEntryPoint
class UriHandler : AppCompatActivity() { class UriHandler : AppCompatActivity() {
@Inject lateinit var taskDao: TaskDao @Inject lateinit var taskDao: TaskDaoBlocking
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)

@ -12,7 +12,7 @@ import com.google.gson.Gson
import com.google.gson.GsonBuilder import com.google.gson.GsonBuilder
import com.todoroo.andlib.utility.DialogUtilities import com.todoroo.andlib.utility.DialogUtilities
import com.todoroo.astrid.backup.BackupConstants import com.todoroo.astrid.backup.BackupConstants
import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.dao.TaskDaoBlocking
import com.todoroo.astrid.data.Task import com.todoroo.astrid.data.Task
import org.tasks.BuildConfig import org.tasks.BuildConfig
import org.tasks.R import org.tasks.R
@ -32,20 +32,20 @@ import java.util.*
import javax.inject.Inject import javax.inject.Inject
class TasksJsonExporter @Inject constructor( class TasksJsonExporter @Inject constructor(
private val tagDataDao: TagDataDao, private val tagDataDao: TagDataDaoBlocking,
private val taskDao: TaskDao, private val taskDao: TaskDaoBlocking,
private val userActivityDao: UserActivityDao, private val userActivityDao: UserActivityDaoBlocking,
private val preferences: Preferences, private val preferences: Preferences,
private val alarmDao: AlarmDao, private val alarmDao: AlarmDaoBlocking,
private val locationDao: LocationDao, private val locationDao: LocationDaoBlocking,
private val tagDao: TagDao, private val tagDao: TagDaoBlocking,
private val googleTaskDao: GoogleTaskDao, private val googleTaskDao: GoogleTaskDaoBlocking,
private val filterDao: FilterDao, private val filterDao: FilterDaoBlocking,
private val googleTaskListDao: GoogleTaskListDao, private val googleTaskListDao: GoogleTaskListDaoBlocking,
private val taskAttachmentDao: TaskAttachmentDao, private val taskAttachmentDao: TaskAttachmentDaoBlocking,
private val caldavDao: CaldavDao, private val caldavDao: CaldavDaoBlocking,
private val workManager: WorkManager, private val workManager: WorkManager,
private val taskListMetadataDao: TaskListMetadataDao) { private val taskListMetadataDao: TaskListMetadataDaoBlocking) {
private var context: Context? = null private var context: Context? = null
private var exportCount = 0 private var exportCount = 0

@ -6,7 +6,7 @@ import android.net.Uri
import android.os.Handler import android.os.Handler
import com.google.gson.Gson import com.google.gson.Gson
import com.google.gson.JsonObject import com.google.gson.JsonObject
import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.dao.TaskDaoBlocking
import com.todoroo.astrid.service.TaskMover import com.todoroo.astrid.service.TaskMover
import com.todoroo.astrid.service.Upgrader import com.todoroo.astrid.service.Upgrader
import com.todoroo.astrid.service.Upgrader.Companion.getAndroidColor import com.todoroo.astrid.service.Upgrader.Companion.getAndroidColor
@ -23,21 +23,21 @@ import java.io.InputStreamReader
import javax.inject.Inject import javax.inject.Inject
class TasksJsonImporter @Inject constructor( class TasksJsonImporter @Inject constructor(
private val tagDataDao: TagDataDao, private val tagDataDao: TagDataDaoBlocking,
private val userActivityDao: UserActivityDao, private val userActivityDao: UserActivityDaoBlocking,
private val taskDao: TaskDao, private val taskDao: TaskDaoBlocking,
private val locationDao: LocationDao, private val locationDao: LocationDaoBlocking,
private val localBroadcastManager: LocalBroadcastManager, private val localBroadcastManager: LocalBroadcastManager,
private val alarmDao: AlarmDao, private val alarmDao: AlarmDaoBlocking,
private val tagDao: TagDao, private val tagDao: TagDaoBlocking,
private val googleTaskDao: GoogleTaskDao, private val googleTaskDao: GoogleTaskDaoBlocking,
private val googleTaskListDao: GoogleTaskListDao, private val googleTaskListDao: GoogleTaskListDaoBlocking,
private val filterDao: FilterDao, private val filterDao: FilterDaoBlocking,
private val taskAttachmentDao: TaskAttachmentDao, private val taskAttachmentDao: TaskAttachmentDaoBlocking,
private val caldavDao: CaldavDao, private val caldavDao: CaldavDaoBlocking,
private val preferences: Preferences, private val preferences: Preferences,
private val taskMover: TaskMover, private val taskMover: TaskMover,
private val taskListMetadataDao: TaskListMetadataDao) { private val taskListMetadataDao: TaskListMetadataDaoBlocking) {
private val result = ImportResult() private val result = ImportResult()

@ -31,7 +31,7 @@ import org.tasks.R;
import org.tasks.billing.Inventory; import org.tasks.billing.Inventory;
import org.tasks.billing.PurchaseActivity; import org.tasks.billing.PurchaseActivity;
import org.tasks.data.CaldavAccount; import org.tasks.data.CaldavAccount;
import org.tasks.data.CaldavDao; import org.tasks.data.CaldavDaoBlocking;
import org.tasks.databinding.ActivityCaldavAccountSettingsBinding; import org.tasks.databinding.ActivityCaldavAccountSettingsBinding;
import org.tasks.dialogs.DialogBuilder; import org.tasks.dialogs.DialogBuilder;
import org.tasks.injection.ThemedInjectingAppCompatActivity; import org.tasks.injection.ThemedInjectingAppCompatActivity;
@ -44,7 +44,7 @@ public abstract class BaseCaldavAccountSettingsActivity extends ThemedInjectingA
public static final String EXTRA_CALDAV_DATA = "caldavData"; // $NON-NLS-1$ public static final String EXTRA_CALDAV_DATA = "caldavData"; // $NON-NLS-1$
protected static final String PASSWORD_MASK = "\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022"; protected static final String PASSWORD_MASK = "\u2022\u2022\u2022\u2022\u2022\u2022\u2022\u2022";
@Inject protected CaldavDao caldavDao; @Inject protected CaldavDaoBlocking caldavDao;
@Inject protected KeyStoreEncryption encryption; @Inject protected KeyStoreEncryption encryption;
@Inject DialogBuilder dialogBuilder; @Inject DialogBuilder dialogBuilder;
@Inject TaskDeleter taskDeleter; @Inject TaskDeleter taskDeleter;

@ -26,7 +26,7 @@ import org.tasks.R;
import org.tasks.activities.BaseListSettingsActivity; import org.tasks.activities.BaseListSettingsActivity;
import org.tasks.data.CaldavAccount; import org.tasks.data.CaldavAccount;
import org.tasks.data.CaldavCalendar; import org.tasks.data.CaldavCalendar;
import org.tasks.data.CaldavDao; import org.tasks.data.CaldavDaoBlocking;
import org.tasks.ui.DisplayableException; import org.tasks.ui.DisplayableException;
public abstract class BaseCaldavCalendarSettingsActivity extends BaseListSettingsActivity { public abstract class BaseCaldavCalendarSettingsActivity extends BaseListSettingsActivity {
@ -34,7 +34,7 @@ public abstract class BaseCaldavCalendarSettingsActivity extends BaseListSetting
public static final String EXTRA_CALDAV_CALENDAR = "extra_caldav_calendar"; public static final String EXTRA_CALDAV_CALENDAR = "extra_caldav_calendar";
public static final String EXTRA_CALDAV_ACCOUNT = "extra_caldav_account"; public static final String EXTRA_CALDAV_ACCOUNT = "extra_caldav_account";
@Inject protected CaldavDao caldavDao; @Inject protected CaldavDaoBlocking caldavDao;
@Inject TaskDeleter taskDeleter; @Inject TaskDeleter taskDeleter;
@BindView(R.id.root_layout) @BindView(R.id.root_layout)

@ -27,7 +27,7 @@ import at.bitfire.dav4jvm.property.GetETag;
import at.bitfire.dav4jvm.property.SyncToken; import at.bitfire.dav4jvm.property.SyncToken;
import at.bitfire.ical4android.ICalendar; import at.bitfire.ical4android.ICalendar;
import com.google.common.collect.Iterables; import com.google.common.collect.Iterables;
import com.todoroo.astrid.dao.TaskDao; import com.todoroo.astrid.dao.TaskDaoBlocking;
import com.todoroo.astrid.data.Task; import com.todoroo.astrid.data.Task;
import com.todoroo.astrid.helper.UUIDHelper; import com.todoroo.astrid.helper.UUIDHelper;
import com.todoroo.astrid.service.TaskDeleter; import com.todoroo.astrid.service.TaskDeleter;
@ -54,7 +54,7 @@ import org.tasks.analytics.Firebase;
import org.tasks.billing.Inventory; import org.tasks.billing.Inventory;
import org.tasks.data.CaldavAccount; import org.tasks.data.CaldavAccount;
import org.tasks.data.CaldavCalendar; import org.tasks.data.CaldavCalendar;
import org.tasks.data.CaldavDao; import org.tasks.data.CaldavDaoBlocking;
import org.tasks.data.CaldavTask; import org.tasks.data.CaldavTask;
import timber.log.Timber; import timber.log.Timber;
@ -65,8 +65,8 @@ public class CaldavSynchronizer {
new ProdId("+//IDN tasks.org//android-" + BuildConfig.VERSION_CODE + "//EN")); new ProdId("+//IDN tasks.org//android-" + BuildConfig.VERSION_CODE + "//EN"));
} }
private final CaldavDao caldavDao; private final CaldavDaoBlocking caldavDao;
private final TaskDao taskDao; private final TaskDaoBlocking taskDao;
private final LocalBroadcastManager localBroadcastManager; private final LocalBroadcastManager localBroadcastManager;
private final TaskDeleter taskDeleter; private final TaskDeleter taskDeleter;
private final Inventory inventory; private final Inventory inventory;
@ -78,8 +78,8 @@ public class CaldavSynchronizer {
@Inject @Inject
public CaldavSynchronizer( public CaldavSynchronizer(
@ApplicationContext Context context, @ApplicationContext Context context,
CaldavDao caldavDao, CaldavDaoBlocking caldavDao,
TaskDao taskDao, TaskDaoBlocking taskDao,
LocalBroadcastManager localBroadcastManager, LocalBroadcastManager localBroadcastManager,
TaskDeleter taskDeleter, TaskDeleter taskDeleter,
Inventory inventory, Inventory inventory,

@ -3,7 +3,7 @@ package org.tasks.caldav
import at.bitfire.ical4android.Task import at.bitfire.ical4android.Task
import at.bitfire.ical4android.Task.Companion.tasksFromReader import at.bitfire.ical4android.Task.Companion.tasksFromReader
import com.todoroo.andlib.utility.DateUtilities import com.todoroo.andlib.utility.DateUtilities
import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.dao.TaskDaoBlocking
import com.todoroo.astrid.helper.UUIDHelper import com.todoroo.astrid.helper.UUIDHelper
import com.todoroo.astrid.service.TaskCreator import com.todoroo.astrid.service.TaskCreator
import net.fortuna.ical4j.model.Parameter import net.fortuna.ical4j.model.Parameter
@ -27,15 +27,15 @@ import javax.inject.Inject
@Suppress("ClassName") @Suppress("ClassName")
class iCalendar @Inject constructor( class iCalendar @Inject constructor(
private val tagDataDao: TagDataDao, private val tagDataDao: TagDataDaoBlocking,
private val preferences: Preferences, private val preferences: Preferences,
private val locationDao: LocationDao, private val locationDao: LocationDaoBlocking,
private val workManager: WorkManager, private val workManager: WorkManager,
private val geofenceApi: GeofenceApi, private val geofenceApi: GeofenceApi,
private val taskCreator: TaskCreator, private val taskCreator: TaskCreator,
private val tagDao: TagDao, private val tagDao: TagDaoBlocking,
private val taskDao: TaskDao, private val taskDao: TaskDaoBlocking,
private val caldavDao: CaldavDao) { private val caldavDao: CaldavDaoBlocking) {
companion object { companion object {
private const val APPLE_SORT_ORDER = "X-APPLE-SORT-ORDER" private const val APPLE_SORT_ORDER = "X-APPLE-SORT-ORDER"

@ -6,7 +6,7 @@ import android.content.Intent;
import com.google.android.apps.dashclock.api.ExtensionData; import com.google.android.apps.dashclock.api.ExtensionData;
import com.todoroo.astrid.activity.MainActivity; import com.todoroo.astrid.activity.MainActivity;
import com.todoroo.astrid.api.Filter; import com.todoroo.astrid.api.Filter;
import com.todoroo.astrid.dao.TaskDao; import com.todoroo.astrid.dao.TaskDaoBlocking;
import com.todoroo.astrid.data.Task; import com.todoroo.astrid.data.Task;
import dagger.hilt.android.AndroidEntryPoint; import dagger.hilt.android.AndroidEntryPoint;
import java.util.List; import java.util.List;
@ -21,7 +21,7 @@ import timber.log.Timber;
public class DashClockExtension extends com.google.android.apps.dashclock.api.DashClockExtension { public class DashClockExtension extends com.google.android.apps.dashclock.api.DashClockExtension {
@Inject DefaultFilterProvider defaultFilterProvider; @Inject DefaultFilterProvider defaultFilterProvider;
@Inject TaskDao taskDao; @Inject TaskDaoBlocking taskDao;
@Inject Preferences preferences; @Inject Preferences preferences;
@Inject LocalBroadcastManager localBroadcastManager; @Inject LocalBroadcastManager localBroadcastManager;

@ -0,0 +1,31 @@
package org.tasks.data
import androidx.room.Dao
import androidx.room.Delete
import androidx.room.Insert
import androidx.room.Query
@Dao
interface AlarmDaoBlocking {
@Query("SELECT alarms.* FROM alarms INNER JOIN tasks ON tasks._id = alarms.task "
+ "WHERE tasks.completed = 0 AND tasks.deleted = 0 AND tasks.lastNotified < alarms.time "
+ "ORDER BY time ASC")
fun getActiveAlarms(): List<Alarm>
@Query("SELECT alarms.* FROM alarms INNER JOIN tasks ON tasks._id = alarms.task "
+ "WHERE tasks._id = :taskId AND tasks.completed = 0 AND tasks.deleted = 0 AND tasks.lastNotified < alarms.time "
+ "ORDER BY time ASC")
fun getActiveAlarms(taskId: Long): List<Alarm>
@Query("SELECT * FROM alarms WHERE task = :taskId ORDER BY time ASC")
fun getAlarms(taskId: Long): List<Alarm>
@Delete
fun delete(alarm: Alarm)
@Insert
fun insert(alarm: Alarm): Long
@Insert
fun insert(alarms: Iterable<Alarm>)
}

@ -0,0 +1,275 @@
package org.tasks.data
import android.content.Context
import androidx.lifecycle.LiveData
import androidx.room.*
import com.todoroo.andlib.utility.DateUtilities.now
import com.todoroo.astrid.api.FilterListItem.NO_ORDER
import com.todoroo.astrid.core.SortHelper.APPLE_EPOCH
import com.todoroo.astrid.data.Task
import com.todoroo.astrid.helper.UUIDHelper
import org.tasks.R
import org.tasks.data.CaldavDao.Companion.LOCAL
import org.tasks.date.DateTimeUtils.toAppleEpoch
import org.tasks.db.DbUtils.chunkedMap
import org.tasks.filters.CaldavFilters
import org.tasks.time.DateTimeUtils.currentTimeMillis
@Dao
abstract class CaldavDaoBlocking {
@Query("SELECT * FROM caldav_lists")
abstract fun subscribeToCalendars(): LiveData<List<CaldavCalendar>>
@Query("SELECT * FROM caldav_lists WHERE cdl_uuid = :uuid LIMIT 1")
abstract fun getCalendarByUuid(uuid: String): CaldavCalendar?
@Query("SELECT * FROM caldav_lists WHERE cdl_account = :uuid")
abstract fun getCalendarsByAccount(uuid: String): List<CaldavCalendar>
@Query("SELECT * FROM caldav_accounts WHERE cda_uuid = :uuid LIMIT 1")
abstract fun getAccountByUuid(uuid: String): CaldavAccount?
@Query("SELECT COUNT(*) FROM caldav_accounts WHERE cda_account_type != 2")
abstract fun accountCount(): Int
@Query("SELECT * FROM caldav_accounts ORDER BY cda_account_type, UPPER(cda_name)")
abstract fun getAccounts(): List<CaldavAccount>
@Query("UPDATE caldav_accounts SET cda_collapsed = :collapsed WHERE cda_id = :id")
abstract fun setCollapsed(id: Long, collapsed: Boolean)
@Insert
abstract fun insert(caldavAccount: CaldavAccount): Long
@Update
abstract fun update(caldavAccount: CaldavAccount)
fun insert(caldavCalendar: CaldavCalendar) {
caldavCalendar.id = insertInternal(caldavCalendar)
}
@Insert
abstract fun insertInternal(caldavCalendar: CaldavCalendar): Long
@Update
abstract fun update(caldavCalendar: CaldavCalendar)
@Transaction
open fun insert(task: Task, caldavTask: CaldavTask, addToTop: Boolean): Long {
if (caldavTask.order != null) {
return insert(caldavTask)
}
if (addToTop) {
caldavTask.order = findFirstTask(caldavTask.calendar!!, task.parent)
?.takeIf { task.creationDate.toAppleEpoch() >= it }
?.minus(1)
} else {
caldavTask.order = findLastTask(caldavTask.calendar!!, task.parent)
?.takeIf { task.creationDate.toAppleEpoch() <= it }
?.plus(1)
}
return insert(caldavTask)
}
@Query("SELECT MIN(IFNULL(cd_order, (created - $APPLE_EPOCH) / 1000)) FROM caldav_tasks INNER JOIN tasks ON _id = cd_task WHERE cd_calendar = :calendar AND cd_deleted = 0 AND deleted = 0 AND parent = :parent")
internal abstract fun findFirstTask(calendar: String, parent: Long): Long?
@Query("SELECT MAX(IFNULL(cd_order, (created - $APPLE_EPOCH) / 1000)) FROM caldav_tasks INNER JOIN tasks ON _id = cd_task WHERE cd_calendar = :calendar AND cd_deleted = 0 AND deleted = 0 AND parent = :parent")
internal abstract fun findLastTask(calendar: String, parent: Long): Long?
@Insert
abstract fun insert(caldavTask: CaldavTask): Long
@Insert
abstract fun insert(tasks: Iterable<CaldavTask>)
@Update
abstract fun update(caldavTask: CaldavTask)
fun update(caldavTask: SubsetCaldav) {
update(caldavTask.cd_id, caldavTask.cd_order, caldavTask.cd_remote_parent)
}
@Query("UPDATE caldav_tasks SET cd_order = :position, cd_remote_parent = :parent WHERE cd_id = :id")
internal abstract fun update(id: Long, position: Long?, parent: String?)
@Query("UPDATE caldav_tasks SET cd_order = :position WHERE cd_id = :id")
internal abstract fun update(id: Long, position: Long?)
@Query("UPDATE caldav_tasks SET cd_remote_parent = :remoteParent WHERE cd_id = :id")
internal abstract fun update(id: Long, remoteParent: String?)
@Update
abstract fun update(tasks: Iterable<CaldavTask>)
@Delete
abstract fun delete(caldavTask: CaldavTask)
@Query("SELECT * FROM caldav_tasks WHERE cd_deleted > 0 AND cd_calendar = :calendar")
abstract fun getDeleted(calendar: String): List<CaldavTask>
@Query("UPDATE caldav_tasks SET cd_deleted = :now WHERE cd_task IN (:tasks)")
abstract fun markDeleted(tasks: List<Long>, now: Long = currentTimeMillis())
@Query("SELECT * FROM caldav_tasks WHERE cd_task = :taskId AND cd_deleted = 0 LIMIT 1")
abstract fun getTask(taskId: Long): CaldavTask?
@Query("SELECT cd_remote_id FROM caldav_tasks WHERE cd_task = :taskId AND cd_deleted = 0")
abstract fun getRemoteIdForTask(taskId: Long): String?
@Query("SELECT * FROM caldav_tasks WHERE cd_calendar = :calendar AND cd_object = :obj LIMIT 1")
abstract fun getTask(calendar: String, obj: String): CaldavTask?
@Query("SELECT * FROM caldav_tasks WHERE cd_calendar = :calendar AND cd_remote_id = :remoteId")
abstract fun getTaskByRemoteId(calendar: String, remoteId: String): CaldavTask?
@Query("SELECT * FROM caldav_tasks WHERE cd_task = :taskId")
abstract fun getTasks(taskId: Long): List<CaldavTask>
@Query("SELECT * FROM caldav_tasks WHERE cd_task in (:taskIds) AND cd_deleted = 0")
abstract fun getTasks(taskIds: List<Long>): List<CaldavTask>
@Query("SELECT task.*, caldav_task.* FROM tasks AS task "
+ "INNER JOIN caldav_tasks AS caldav_task ON _id = cd_task "
+ "WHERE cd_deleted = 0 AND cd_vtodo IS NOT NULL AND cd_vtodo != ''")
abstract fun getTasks(): List<CaldavTaskContainer>
@Query("SELECT task.*, caldav_task.* FROM tasks AS task "
+ "INNER JOIN caldav_tasks AS caldav_task ON _id = cd_task "
+ "WHERE cd_calendar = :calendar "
+ "AND modified > cd_last_sync "
+ "AND cd_deleted = 0")
abstract fun getCaldavTasksToPush(calendar: String): List<CaldavTaskContainer>
@Query("SELECT * FROM caldav_lists ORDER BY cdl_name COLLATE NOCASE")
abstract fun getCalendars(): List<CaldavCalendar>
@Query("SELECT * FROM caldav_lists WHERE cdl_uuid = :uuid LIMIT 1")
abstract fun getCalendar(uuid: String): CaldavCalendar?
@Query("SELECT cd_object FROM caldav_tasks WHERE cd_calendar = :calendar")
abstract fun getObjects(calendar: String): List<String>
fun getTasks(calendar: String, objects: List<String>): List<Long> =
objects.chunkedMap { getTasksInternal(calendar, it) }
@Query("SELECT cd_task FROM caldav_tasks WHERE cd_calendar = :calendar AND cd_object IN (:objects)")
abstract fun getTasksInternal(calendar: String, objects: List<String>): List<Long>
@Query("SELECT * FROM caldav_lists WHERE cdl_account = :account AND cdl_url NOT IN (:urls)")
abstract fun findDeletedCalendars(account: String, urls: List<String>): List<CaldavCalendar>
@Query("SELECT * FROM caldav_lists WHERE cdl_account = :account AND cdl_url = :url LIMIT 1")
abstract fun getCalendarByUrl(account: String, url: String): CaldavCalendar?
@Query("SELECT caldav_accounts.* from caldav_accounts"
+ " INNER JOIN caldav_tasks ON cd_task = :task"
+ " INNER JOIN caldav_lists ON cd_calendar = cdl_uuid"
+ " WHERE cdl_account = cda_uuid")
abstract fun getAccountForTask(task: Long): CaldavAccount?
@Query("SELECT DISTINCT cd_calendar FROM caldav_tasks WHERE cd_deleted = 0 AND cd_task IN (:tasks)")
abstract fun getCalendars(tasks: List<Long>): List<String>
@Query("SELECT caldav_lists.*, COUNT(tasks._id) AS count"
+ " FROM caldav_lists"
+ " LEFT JOIN caldav_tasks ON caldav_tasks.cd_calendar = caldav_lists.cdl_uuid"
+ " LEFT JOIN tasks ON caldav_tasks.cd_task = tasks._id AND tasks.deleted = 0 AND tasks.completed = 0 AND tasks.hideUntil < :now AND cd_deleted = 0"
+ " WHERE caldav_lists.cdl_account = :uuid"
+ " GROUP BY caldav_lists.cdl_uuid")
abstract fun getCaldavFilters(uuid: String, now: Long = currentTimeMillis()): List<CaldavFilters>
@Query("SELECT tasks._id FROM tasks "
+ "INNER JOIN tags ON tags.task = tasks._id "
+ "INNER JOIN caldav_tasks ON cd_task = tasks._id "
+ "GROUP BY tasks._id")
abstract fun getTasksWithTags(): List<Long>
@Query("UPDATE tasks SET parent = IFNULL(("
+ " SELECT p.cd_task FROM caldav_tasks AS p"
+ " INNER JOIN caldav_tasks ON caldav_tasks.cd_task = tasks._id"
+ " WHERE p.cd_remote_id = caldav_tasks.cd_remote_parent"
+ " AND p.cd_calendar = caldav_tasks.cd_calendar"
+ " AND p.cd_deleted = 0), 0)"
+ "WHERE _id IN (SELECT _id FROM tasks INNER JOIN caldav_tasks ON _id = cd_task WHERE cd_deleted = 0)")
abstract fun updateParents()
@Query("UPDATE tasks SET parent = IFNULL(("
+ " SELECT p.cd_task FROM caldav_tasks AS p"
+ " INNER JOIN caldav_tasks "
+ " ON caldav_tasks.cd_task = tasks._id"
+ " AND caldav_tasks.cd_calendar = :calendar"
+ " WHERE p.cd_remote_id = caldav_tasks.cd_remote_parent"
+ " AND p.cd_calendar = caldav_tasks.cd_calendar"
+ " AND caldav_tasks.cd_deleted = 0), 0)"
+ "WHERE _id IN (SELECT _id FROM tasks INNER JOIN caldav_tasks ON _id = cd_task WHERE cd_deleted = 0 AND cd_calendar = :calendar)")
abstract fun updateParents(calendar: String)
@Transaction
open fun move(task: TaskContainer, newParent: Long, newPosition: Long?) {
val previousParent = task.parent
val caldavTask = task.caldavTask
val previousPosition = task.caldavSortOrder
if (newPosition != null) {
if (newParent == previousParent && newPosition < previousPosition) {
shiftDown(task.caldav!!, newParent, newPosition, previousPosition)
} else {
shiftDown(task.caldav!!, newParent, newPosition)
}
}
caldavTask.cd_order = newPosition
update(caldavTask.cd_id, caldavTask.cd_order)
}
@Transaction
open fun shiftDown(calendar: String, parent: Long, from: Long, to: Long? = null) {
val updated = ArrayList<CaldavTask>()
val tasks = getTasksToShift(calendar, parent, from, to)
for (i in tasks.indices) {
val task = tasks[i]
val current = from + i
if (task.sortOrder == current) {
val caldavTask = task.caldavTask
caldavTask.order = current + 1
updated.add(caldavTask)
} else if (task.sortOrder > current) {
break
}
}
update(updated)
touchInternal(updated.map(CaldavTask::task))
}
@Query("UPDATE tasks SET modified = :modificationTime WHERE _id in (:ids)")
internal abstract fun touchInternal(ids: List<Long>, modificationTime: Long = now())
@Query("SELECT task.*, caldav_task.*, IFNULL(cd_order, (created - $APPLE_EPOCH) / 1000) AS primary_sort FROM caldav_tasks AS caldav_task INNER JOIN tasks AS task ON _id = cd_task WHERE cd_calendar = :calendar AND parent = :parent AND cd_deleted = 0 AND deleted = 0 AND primary_sort >= :from AND primary_sort < IFNULL(:to, ${Long.MAX_VALUE}) ORDER BY primary_sort")
internal abstract fun getTasksToShift(calendar: String, parent: Long, from: Long, to: Long?): List<CaldavTaskContainer>
@Query("UPDATE caldav_lists SET cdl_order = $NO_ORDER")
abstract fun resetOrders()
@Query("UPDATE caldav_lists SET cdl_order = :order WHERE cdl_id = :id")
abstract fun setOrder(id: Long, order: Int)
fun setupLocalAccount(context: Context): CaldavAccount {
val account = getLocalAccount()
getLocalList(context, account)
return account
}
fun getLocalList(context: Context) = getLocalList(context, getLocalAccount())
private fun getLocalAccount() = getAccountByUuid(LOCAL) ?: CaldavAccount().apply {
accountType = CaldavAccount.TYPE_LOCAL
uuid = LOCAL
id = insert(this)
}
private fun getLocalList(context: Context, account: CaldavAccount): CaldavCalendar =
getCalendarsByAccount(account.uuid!!).getOrNull(0)
?: CaldavCalendar(context.getString(R.string.default_list), UUIDHelper.newUUID()).apply {
this.account = account.uuid
insert(this)
}
}

@ -0,0 +1,47 @@
package org.tasks.data
import android.database.Cursor
import androidx.room.Dao
import androidx.room.Query
import androidx.room.RawQuery
import androidx.sqlite.db.SupportSQLiteQuery
import com.todoroo.astrid.data.Task
@Dao
interface ContentProviderDaoBlocking {
@Query("SELECT name FROM tags WHERE task = :taskId ORDER BY UPPER(name) ASC")
fun getTagNames(taskId: Long): List<String>
@Query("""
SELECT *
FROM tasks
WHERE completed = 0
AND deleted = 0
AND hideUntil < (strftime('%s', 'now') * 1000)
ORDER BY (CASE
WHEN (dueDate = 0) THEN
(strftime('%s', 'now') * 1000) * 2
ELSE ((CASE WHEN (dueDate / 1000) % 60 > 0 THEN dueDate ELSE (dueDate + 43140000) END)) END) +
172800000 * importance
ASC
LIMIT 100""")
fun getAstrid2TaskProviderTasks(): List<Task>
@Query("SELECT * FROM tagdata WHERE name IS NOT NULL AND name != '' ORDER BY UPPER(name) ASC")
fun tagDataOrderedByName(): List<TagData>
@Query("SELECT * FROM tasks")
fun getTasks(): Cursor
@Query("""
SELECT caldav_lists.*, caldav_accounts.cda_name
FROM caldav_lists
INNER JOIN caldav_accounts ON cdl_account = cda_uuid""")
fun getLists(): Cursor
@Query("SELECT * FROM google_task_lists")
fun getGoogleTaskLists(): Cursor
@RawQuery
fun rawQuery(query: SupportSQLiteQuery): Cursor
}

@ -0,0 +1,114 @@
package org.tasks.data
import androidx.room.Dao
import androidx.room.Delete
import androidx.room.Query
import androidx.room.Transaction
import org.tasks.data.CaldavDao.Companion.LOCAL
import org.tasks.db.DbUtils.eachChunk
import java.util.*
@Dao
abstract class DeletionDaoBlocking {
@Query("DELETE FROM caldav_tasks WHERE cd_task IN(:ids)")
abstract fun deleteCaldavTasks(ids: List<Long>)
@Query("DELETE FROM google_tasks WHERE gt_task IN(:ids)")
abstract fun deleteGoogleTasks(ids: List<Long>)
@Query("DELETE FROM tags WHERE task IN(:ids)")
abstract fun deleteTags(ids: List<Long>)
@Query("DELETE FROM geofences WHERE task IN(:ids)")
abstract fun deleteGeofences(ids: List<Long>)
@Query("DELETE FROM alarms WHERE task IN(:ids)")
abstract fun deleteAlarms(ids: List<Long>)
@Query("DELETE FROM tasks WHERE _id IN(:ids)")
abstract fun deleteTasks(ids: List<Long>)
@Transaction
open fun delete(ids: List<Long>) {
ids.eachChunk {
deleteAlarms(it)
deleteGeofences(it)
deleteTags(it)
deleteGoogleTasks(it)
deleteCaldavTasks(it)
deleteTasks(it)
}
}
@Query("UPDATE tasks "
+ "SET modified = (strftime('%s','now')*1000), deleted = (strftime('%s','now')*1000)"
+ "WHERE _id IN(:ids)")
abstract fun markDeletedInternal(ids: List<Long>)
fun markDeleted(ids: Iterable<Long>) {
ids.eachChunk(this::markDeletedInternal)
}
@Query("SELECT gt_task FROM google_tasks WHERE gt_deleted = 0 AND gt_list_id = :listId")
abstract fun getActiveGoogleTasks(listId: String): List<Long>
@Delete
abstract fun deleteGoogleTaskList(googleTaskList: GoogleTaskList)
@Transaction
open fun delete(googleTaskList: GoogleTaskList): List<Long> {
val tasks = getActiveGoogleTasks(googleTaskList.remoteId!!)
delete(tasks)
deleteGoogleTaskList(googleTaskList)
return tasks
}
@Delete
abstract fun deleteGoogleTaskAccount(googleTaskAccount: GoogleTaskAccount)
@Query("SELECT * FROM google_task_lists WHERE gtl_account = :account ORDER BY gtl_title ASC")
abstract fun getLists(account: String): List<GoogleTaskList>
@Transaction
open fun delete(googleTaskAccount: GoogleTaskAccount): List<Long> {
val deleted = ArrayList<Long>()
for (list in getLists(googleTaskAccount.account!!)) {
deleted.addAll(delete(list))
}
deleteGoogleTaskAccount(googleTaskAccount)
return deleted
}
@Query("SELECT cd_task FROM caldav_tasks WHERE cd_calendar = :calendar AND cd_deleted = 0")
abstract fun getActiveCaldavTasks(calendar: String): List<Long>
@Delete
abstract fun deleteCaldavCalendar(caldavCalendar: CaldavCalendar)
@Transaction
open fun delete(caldavCalendar: CaldavCalendar): List<Long> {
val tasks = getActiveCaldavTasks(caldavCalendar.uuid!!)
delete(tasks)
deleteCaldavCalendar(caldavCalendar)
return tasks
}
@Query("SELECT * FROM caldav_lists WHERE cdl_account = :account")
abstract fun getCalendars(account: String): List<CaldavCalendar>
@Delete
abstract fun deleteCaldavAccount(caldavAccount: CaldavAccount)
@Query("DELETE FROM tasks WHERE _id IN (SELECT _id FROM tasks INNER JOIN caldav_tasks ON _id = cd_task INNER JOIN caldav_lists ON cdl_uuid = cd_calendar WHERE cdl_account = '$LOCAL' AND deleted > 0)")
abstract fun purgeDeleted()
@Transaction
open fun delete(caldavAccount: CaldavAccount): List<Long> {
val deleted = ArrayList<Long>()
for (calendar in getCalendars(caldavAccount.uuid!!)) {
deleted.addAll(delete(calendar))
}
deleteCaldavAccount(caldavAccount)
return deleted
}
}

@ -0,0 +1,37 @@
package org.tasks.data
import androidx.room.Dao
import androidx.room.Insert
import androidx.room.Query
import androidx.room.Update
import com.todoroo.astrid.api.FilterListItem.NO_ORDER
@Dao
interface FilterDaoBlocking {
@Update
fun update(filter: Filter)
@Query("DELETE FROM filters WHERE _id = :id")
fun delete(id: Long)
@Query("SELECT * FROM filters WHERE title = :title COLLATE NOCASE LIMIT 1")
fun getByName(title: String): Filter?
@Insert
fun insert(filter: Filter): Long
@Query("SELECT * FROM filters")
fun getFilters(): List<Filter>
@Query("SELECT * FROM filters WHERE _id = :id LIMIT 1")
fun getById(id: Long): Filter?
@Query("SELECT * FROM filters")
fun getAll(): List<Filter>
@Query("UPDATE filters SET f_order = $NO_ORDER")
fun resetOrders()
@Query("UPDATE filters SET f_order = :order WHERE _id = :id")
fun setOrder(id: Long, order: Int)
}

@ -0,0 +1,179 @@
package org.tasks.data
import androidx.room.*
import com.todoroo.astrid.data.Task
import org.tasks.time.DateTimeUtils.currentTimeMillis
@Dao
abstract class GoogleTaskDaoBlocking {
@Insert
abstract fun insert(task: GoogleTask): Long
@Insert
abstract fun insert(tasks: Iterable<GoogleTask>)
@Transaction
open fun insertAndShift(task: GoogleTask, top: Boolean) {
if (top) {
task.order = 0
shiftDown(task.listId!!, task.parent, 0)
} else {
task.order = getBottom(task.listId!!, task.parent)
}
task.id = insert(task)
}
@Query("UPDATE google_tasks SET gt_order = gt_order + 1 WHERE gt_list_id = :listId AND gt_parent = :parent AND gt_order >= :position")
abstract fun shiftDown(listId: String, parent: Long, position: Long)
@Query("UPDATE google_tasks SET gt_order = gt_order - 1 WHERE gt_list_id = :listId AND gt_parent = :parent AND gt_order > :from AND gt_order <= :to")
abstract fun shiftUp(listId: String, parent: Long, from: Long, to: Long)
@Query("UPDATE google_tasks SET gt_order = gt_order + 1 WHERE gt_list_id = :listId AND gt_parent = :parent AND gt_order < :from AND gt_order >= :to")
abstract fun shiftDown(listId: String, parent: Long, from: Long, to: Long)
@Query("UPDATE google_tasks SET gt_order = gt_order - 1 WHERE gt_list_id = :listId AND gt_parent = :parent AND gt_order >= :position")
abstract fun shiftUp(listId: String, parent: Long, position: Long)
@Transaction
open fun move(task: SubsetGoogleTask, newParent: Long, newPosition: Long) {
val previousParent = task.parent
val previousPosition = task.order
if (newParent == previousParent) {
if (previousPosition < newPosition) {
shiftUp(task.listId, newParent, previousPosition, newPosition)
} else {
shiftDown(task.listId, newParent, previousPosition, newPosition)
}
} else {
shiftUp(task.listId, previousParent, previousPosition)
shiftDown(task.listId, newParent, newPosition)
}
task.parent = newParent
task.order = newPosition
update(task)
}
@Query("UPDATE google_task_accounts SET gta_collapsed = :collapsed WHERE gta_id = :id")
abstract fun setCollapsed(id: Long, collapsed: Boolean)
@Query("SELECT * FROM google_tasks WHERE gt_task = :taskId AND gt_deleted = 0 LIMIT 1")
abstract fun getByTaskId(taskId: Long): GoogleTask?
@Update
abstract fun update(googleTask: GoogleTask)
private fun update(googleTask: SubsetGoogleTask) {
update(googleTask.id, googleTask.parent, googleTask.order)
}
@Query("UPDATE google_tasks SET gt_order = :order, gt_parent = :parent, gt_moved = 1 WHERE gt_id = :id")
abstract fun update(id: Long, parent: Long, order: Long)
@Query("UPDATE google_tasks SET gt_deleted = :now WHERE gt_task = :task OR gt_parent = :task")
abstract fun markDeleted(task: Long, now: Long = currentTimeMillis())
@Delete
abstract fun delete(deleted: GoogleTask)
@Query("SELECT * FROM google_tasks WHERE gt_remote_id = :remoteId LIMIT 1")
abstract fun getByRemoteId(remoteId: String): GoogleTask?
@Query("SELECT * FROM google_tasks WHERE gt_task = :taskId AND gt_deleted > 0")
abstract fun getDeletedByTaskId(taskId: Long): List<GoogleTask>
@Query("SELECT * FROM google_tasks WHERE gt_task = :taskId")
abstract fun getAllByTaskId(taskId: Long): List<GoogleTask>
@Query("SELECT DISTINCT gt_list_id FROM google_tasks WHERE gt_deleted = 0 AND gt_task IN (:tasks)")
abstract fun getLists(tasks: List<Long>): List<String>
@Query("SELECT gt_task FROM google_tasks WHERE gt_parent IN (:ids) AND gt_deleted = 0")
abstract fun getChildren(ids: List<Long>): List<Long>
@Query("SELECT tasks.* FROM tasks JOIN google_tasks ON tasks._id = gt_task WHERE gt_parent = :taskId")
abstract fun getChildTasks(taskId: Long): List<Task>
@Query("SELECT * FROM google_tasks WHERE gt_parent = :id AND gt_deleted = 0")
abstract fun getChildren(id: Long): List<GoogleTask>
@Query("SELECT IFNULL(MAX(gt_order), -1) + 1 FROM google_tasks WHERE gt_list_id = :listId AND gt_parent = :parent")
abstract fun getBottom(listId: String, parent: Long): Long
@Query("SELECT gt_remote_id FROM google_tasks JOIN tasks ON tasks._id = gt_task WHERE deleted = 0 AND gt_list_id = :listId AND gt_parent = :parent AND gt_order < :order AND gt_remote_id IS NOT NULL AND gt_remote_id != '' ORDER BY gt_order DESC")
abstract fun getPrevious(listId: String, parent: Long, order: Long): String?
@Query("SELECT gt_remote_id FROM google_tasks WHERE gt_task = :task")
abstract fun getRemoteId(task: Long): String?
@Query("SELECT gt_task FROM google_tasks WHERE gt_remote_id = :remoteId")
abstract fun getTask(remoteId: String): Long
@SuppressWarnings(RoomWarnings.CURSOR_MISMATCH)
@Query("SELECT google_tasks.*, gt_order AS primary_sort, NULL AS secondary_sort FROM google_tasks JOIN tasks ON tasks._id = gt_task WHERE gt_parent = 0 AND gt_list_id = :listId AND tasks.deleted = 0 UNION SELECT c.*, p.gt_order AS primary_sort, c.gt_order AS secondary_sort FROM google_tasks AS c LEFT JOIN google_tasks AS p ON c.gt_parent = p.gt_task JOIN tasks ON tasks._id = c.gt_task WHERE c.gt_parent > 0 AND c.gt_list_id = :listId AND tasks.deleted = 0 ORDER BY primary_sort ASC, secondary_sort ASC")
abstract fun getByLocalOrder(listId: String): List<GoogleTask>
@SuppressWarnings(RoomWarnings.CURSOR_MISMATCH)
@Query("SELECT google_tasks.*, gt_remote_order AS primary_sort, NULL AS secondary_sort FROM google_tasks JOIN tasks ON tasks._id = gt_task WHERE gt_parent = 0 AND gt_list_id = :listId AND tasks.deleted = 0 UNION SELECT c.*, p.gt_remote_order AS primary_sort, c.gt_remote_order AS secondary_sort FROM google_tasks AS c LEFT JOIN google_tasks AS p ON c.gt_parent = p.gt_task JOIN tasks ON tasks._id = c.gt_task WHERE c.gt_parent > 0 AND c.gt_list_id = :listId AND tasks.deleted = 0 ORDER BY primary_sort ASC, secondary_sort ASC")
abstract fun getByRemoteOrder(listId: String): List<GoogleTask>
@Query("UPDATE google_tasks"
+ " SET gt_parent = IFNULL(("
+ " SELECT gt_task FROM google_tasks AS p"
+ " WHERE p.gt_remote_id = google_tasks.gt_remote_parent"
+ " AND p.gt_list_id = google_tasks.gt_list_id "
+ " AND p.gt_deleted = 0),"
+ " 0)"
+ " WHERE gt_moved = 0")
abstract fun updateParents()
@Query("UPDATE google_tasks SET gt_parent = IFNULL((SELECT gt_task FROM google_tasks AS p WHERE p.gt_remote_id = google_tasks.gt_remote_parent), 0) WHERE gt_list_id = :listId AND gt_moved = 0")
abstract fun updateParents(listId: String)
@Query("UPDATE google_tasks SET gt_remote_parent = :parent, gt_remote_order = :position WHERE gt_remote_id = :id")
abstract fun updatePosition(id: String, parent: String, position: String)
@Transaction
open fun reposition(listId: String) {
updateParents(listId)
val orderedTasks = getByRemoteOrder(listId)
var subtasks = 0L
var parent = 0L
for (task in orderedTasks) {
if (task.parent > 0) {
if (task.order != subtasks && !task.isMoved) {
task.order = subtasks
update(task)
}
subtasks++
} else {
subtasks = 0
if (task.order != parent && !task.isMoved) {
task.order = parent
update(task)
}
parent++
}
}
}
fun validateSorting(listId: String) {
val orderedTasks = getByLocalOrder(listId)
var subtasks = 0L
var parent = 0L
for (task in orderedTasks) {
if (task.parent > 0) {
if (task.order != subtasks) {
throw IllegalStateException("Subtask violation, expected $subtasks but was ${task.order}")
}
subtasks++
} else {
subtasks = 0
if (task.order != parent) {
throw IllegalStateException("Parent violation, expected $parent but was ${task.order}")
}
parent++
}
}
}
}

@ -0,0 +1,72 @@
package org.tasks.data
import androidx.lifecycle.LiveData
import androidx.room.*
import com.todoroo.astrid.api.FilterListItem.NO_ORDER
import org.tasks.filters.GoogleTaskFilters
import org.tasks.time.DateTimeUtils.currentTimeMillis
@Dao
interface GoogleTaskListDaoBlocking {
@Query("SELECT COUNT(*) FROM google_task_accounts")
fun accountCount(): Int
@Query("SELECT * FROM google_task_accounts")
fun getAccounts(): List<GoogleTaskAccount>
@Query("SELECT * FROM google_task_accounts WHERE gta_account = :account COLLATE NOCASE LIMIT 1")
fun getAccount(account: String): GoogleTaskAccount?
@Query("SELECT * FROM google_task_lists WHERE gtl_id = :id")
fun getById(id: Long): GoogleTaskList?
@Query("SELECT * FROM google_task_lists WHERE gtl_account = :account ORDER BY gtl_title ASC")
fun getLists(account: String): List<GoogleTaskList>
@Query("SELECT * FROM google_task_lists WHERE gtl_remote_id = :remoteId LIMIT 1")
fun getByRemoteId(remoteId: String): GoogleTaskList?
@Query("SELECT * FROM google_task_lists WHERE gtl_remote_id IN (:remoteIds)")
fun getByRemoteId(remoteIds: List<String>): List<GoogleTaskList>
@Query("SELECT * FROM google_task_lists")
fun subscribeToLists(): LiveData<List<GoogleTaskList>>
@Query("SELECT * FROM google_task_lists WHERE gtl_remote_id = :remoteId AND IFNULL(gtl_account, '') = ''")
fun findExistingList(remoteId: String): GoogleTaskList?
@Query("SELECT * FROM google_task_lists")
fun getAllLists(): List<GoogleTaskList>
@Query("UPDATE google_task_lists SET gtl_last_sync = 0 WHERE gtl_account = :account")
fun resetLastSync(account: String)
@Insert(onConflict = OnConflictStrategy.REPLACE)
fun insertOrReplace(googleTaskList: GoogleTaskList): Long
@Insert
fun insert(googleTaskList: GoogleTaskList): Long
@Insert
fun insert(googleTaskAccount: GoogleTaskAccount)
@Update
fun update(account: GoogleTaskAccount)
@Update
fun update(list: GoogleTaskList)
@Query("SELECT google_task_lists.*, COUNT(tasks._id) AS count"
+ " FROM google_task_lists "
+ " LEFT JOIN google_tasks ON google_tasks.gt_list_id = google_task_lists.gtl_remote_id"
+ " LEFT JOIN tasks ON google_tasks.gt_task = tasks._id AND tasks.deleted = 0 AND tasks.completed = 0 AND tasks.hideUntil < :now AND gt_deleted = 0"
+ " WHERE google_task_lists.gtl_account = :account"
+ " GROUP BY google_task_lists.gtl_remote_id")
fun getGoogleTaskFilters(account: String, now: Long = currentTimeMillis()): List<GoogleTaskFilters>
@Query("UPDATE google_task_lists SET gtl_remote_order = $NO_ORDER")
fun resetOrders()
@Query("UPDATE google_task_lists SET gtl_remote_order = :order WHERE gtl_id = :id")
fun setOrder(id: Long, order: Int)
}

@ -0,0 +1,118 @@
package org.tasks.data
import androidx.lifecycle.LiveData
import androidx.room.*
import com.todoroo.astrid.api.FilterListItem.NO_ORDER
import org.tasks.filters.LocationFilters
import org.tasks.time.DateTimeUtils.currentTimeMillis
@Dao
interface LocationDaoBlocking {
@Query("SELECT places.*"
+ " FROM places"
+ " INNER JOIN geofences ON geofences.place = places.uid"
+ " INNER JOIN tasks ON geofences.task = tasks._id"
+ " WHERE tasks.completed = 0 AND tasks.deleted = 0"
+ " AND (geofences.arrival > 0 OR geofences.departure > 0)"
+ " GROUP BY places.uid")
fun getPlacesWithGeofences(): List<Place>
@Query("SELECT places.*,"
+ " max(geofences.arrival) as arrival,"
+ " max(geofences.departure) as departure,"
+ " min(geofences.radius) as radius"
+ " FROM places"
+ " INNER JOIN geofences ON geofences.place = places.uid"
+ " INNER JOIN tasks ON tasks._id = geofences.task"
+ " WHERE place = :uid AND tasks.completed = 0 AND tasks.deleted = 0"
+ " AND (geofences.arrival > 0 OR geofences.departure > 0)"
+ " GROUP BY places.uid")
fun getGeofencesByPlace(uid: String): MergedGeofence?
@Query("DELETE FROM geofences WHERE place = :place")
fun deleteGeofencesByPlace(place: String)
@Query("SELECT geofences.* FROM geofences"
+ " INNER JOIN tasks ON tasks._id = geofences.task"
+ " WHERE place = :place AND arrival = 1 AND tasks.completed = 0"
+ " AND tasks.deleted = 0 AND tasks.snoozeTime < :now AND tasks.hideUntil < :now")
fun getArrivalGeofences(place: String, now: Long): List<Geofence>
@Query("SELECT geofences.* FROM geofences"
+ " INNER JOIN tasks ON tasks._id = geofences.task"
+ " WHERE place = :place AND departure = 1 AND tasks.completed = 0"
+ " AND tasks.deleted = 0 AND tasks.snoozeTime < :now AND tasks.hideUntil < :now")
fun getDepartureGeofences(place: String, now: Long): List<Geofence>
@Query("SELECT * FROM geofences"
+ " INNER JOIN places ON geofences.place = places.uid"
+ " WHERE task = :taskId ORDER BY name ASC LIMIT 1")
fun getGeofences(taskId: Long): Location?
@Query("SELECT geofences.*, places.* FROM geofences INNER JOIN places ON geofences.place = places.uid INNER JOIN tasks ON tasks._id = geofences.task WHERE tasks._id = :taskId AND tasks.deleted = 0 AND tasks.completed = 0")
fun getActiveGeofences(taskId: Long): List<Location>
@Query("SELECT places.*"
+ " FROM places"
+ " INNER JOIN geofences ON geofences.place = places.uid"
+ " WHERE geofences.task = :taskId")
fun getPlaceForTask(taskId: Long): Place?
@Query("SELECT geofences.*, places.* FROM geofences INNER JOIN places ON geofences.place = places.uid INNER JOIN tasks ON tasks._id = geofences.task WHERE tasks.deleted = 0 AND tasks.completed = 0")
fun getActiveGeofences(): List<Location>
@Query("SELECT COUNT(*) FROM geofences")
suspend fun geofenceCount(): Int
@Delete
fun delete(location: Geofence)
@Delete
fun delete(place: Place)
@Insert
fun insert(location: Geofence): Long
@Insert(onConflict = OnConflictStrategy.IGNORE)
fun insert(place: Place): Long
@Update
fun update(place: Place)
@Update
fun update(geofence: Geofence)
@Query("SELECT * FROM places WHERE uid = :uid LIMIT 1")
fun getByUid(uid: String): Place?
@Query("SELECT * FROM geofences WHERE task = :taskId")
fun getGeofencesForTask(taskId: Long): List<Geofence>
@Query("SELECT * FROM places")
fun getPlaces(): List<Place>
@Query("SELECT * FROM places WHERE place_id = :id")
fun getPlace(id: Long): Place?
@Query("SELECT * FROM places WHERE uid = :uid")
fun getPlace(uid: String): Place?
@Query("SELECT places.*, IFNULL(COUNT(geofence_id),0) AS count FROM places LEFT OUTER JOIN geofences ON geofences.place = places.uid GROUP BY uid ORDER BY COUNT(geofence_id) DESC")
fun getPlaceUsage(): LiveData<List<PlaceUsage>>
@Query("SELECT * FROM places WHERE latitude LIKE :latitude AND longitude LIKE :longitude")
fun findPlace(latitude: String, longitude: String): Place?
@Query("SELECT places.*, COUNT(tasks._id) AS count FROM places "
+ " LEFT JOIN geofences ON geofences.place = places.uid "
+ " LEFT JOIN tasks ON geofences.task = tasks._id AND tasks.completed = 0 AND tasks.deleted = 0 AND tasks.hideUntil < :now"
+ " GROUP BY places.uid"
+ " ORDER BY name COLLATE NOCASE ASC")
fun getPlaceFilters(now: Long = currentTimeMillis()): List<LocationFilters>
@Query("UPDATE places SET place_order = $NO_ORDER")
fun resetOrders()
@Query("UPDATE places SET place_order = :order WHERE place_id = :id")
fun setOrder(id: Long, order: Int)
}

@ -30,7 +30,7 @@ abstract class TagDao {
abstract fun delete(tags: List<Tag>) abstract fun delete(tags: List<Tag>)
@Transaction @Transaction
open fun applyTags(task: Task, tagDataDao: TagDataDao, current: List<TagData>): Boolean { open fun applyTags(task: Task, tagDataDao: TagDataDaoBlocking, current: List<TagData>): Boolean {
val taskId = task.id val taskId = task.id
val existing = HashSet(tagDataDao.getTagDataForTask(taskId)) val existing = HashSet(tagDataDao.getTagDataForTask(taskId))
val selected = HashSet<TagData>(current) val selected = HashSet<TagData>(current)

@ -0,0 +1,49 @@
package org.tasks.data
import androidx.room.*
import com.todoroo.astrid.data.Task
@Dao
abstract class TagDaoBlocking {
@Query("UPDATE tags SET name = :name WHERE tag_uid = :tagUid")
abstract fun rename(tagUid: String, name: String)
@Insert
abstract fun insert(tag: Tag)
@Insert
abstract fun insert(tags: Iterable<Tag>)
@Query("DELETE FROM tags WHERE task = :taskId AND tag_uid in (:tagUids)")
abstract fun deleteTags(taskId: Long, tagUids: List<String>)
@Query("SELECT * FROM tags WHERE tag_uid = :tagUid")
abstract fun getByTagUid(tagUid: String): List<Tag>
@Query("SELECT * FROM tags WHERE task = :taskId")
abstract fun getTagsForTask(taskId: Long): List<Tag>
@Query("SELECT * FROM tags WHERE task = :taskId AND tag_uid = :tagUid")
abstract fun getTagByTaskAndTagUid(taskId: Long, tagUid: String): Tag?
@Delete
abstract fun delete(tags: List<Tag>)
@Transaction
open fun applyTags(task: Task, tagDataDao: TagDataDaoBlocking, current: List<TagData>): Boolean {
val taskId = task.id
val existing = HashSet(tagDataDao.getTagDataForTask(taskId))
val selected = HashSet<TagData>(current)
val added = selected subtract existing
val removed = existing subtract selected
deleteTags(taskId, removed.map { td -> td.remoteId!! })
insert(task, added)
return removed.isNotEmpty() || added.isNotEmpty()
}
fun insert(task: Task, tags: Collection<TagData>) {
if (!tags.isEmpty()) {
insert(tags.map { Tag(task, it) })
}
}
}

@ -0,0 +1,158 @@
package org.tasks.data
import androidx.core.util.Pair
import androidx.lifecycle.LiveData
import androidx.room.*
import com.todoroo.astrid.api.FilterListItem.NO_ORDER
import com.todoroo.astrid.data.Task
import com.todoroo.astrid.helper.UUIDHelper
import org.tasks.db.DbUtils
import org.tasks.filters.AlphanumComparator
import org.tasks.filters.TagFilters
import org.tasks.time.DateTimeUtils.currentTimeMillis
import java.util.*
import kotlin.collections.HashSet
@Dao
abstract class TagDataDaoBlocking {
@Query("SELECT * FROM tagdata")
abstract fun subscribeToTags(): LiveData<List<TagData>>
@Query("SELECT * FROM tagdata WHERE name = :name COLLATE NOCASE LIMIT 1")
abstract fun getTagByName(name: String): TagData?
/**
* If a tag already exists in the database that case insensitively matches the given tag, return
* that. Otherwise, return the argument
*/
fun getTagWithCase(tag: String): String? {
return getTagByName(tag)?.name ?: tag
}
fun searchTags(query: String): List<TagData> {
return searchTagsInternal("%$query%")
.sortedWith(AlphanumComparator(TagData::name))
.toMutableList()
}
@Query("SELECT * FROM tagdata WHERE name LIKE :query AND name NOT NULL AND name != ''")
protected abstract fun searchTagsInternal(query: String): List<TagData>
@Query("SELECT * FROM tagdata")
abstract fun getAll(): List<TagData>
@Query("SELECT * FROM tagdata WHERE remoteId = :uuid LIMIT 1")
abstract fun getByUuid(uuid: String): TagData?
@Query("SELECT * FROM tagdata WHERE remoteId IN (:uuids)")
abstract fun getByUuid(uuids: Collection<String>): List<TagData>
@Query("SELECT * FROM tagdata WHERE name IS NOT NULL AND name != '' ORDER BY UPPER(name) ASC")
abstract fun tagDataOrderedByName(): List<TagData>
@Delete
abstract fun deleteTagData(tagData: TagData)
@Query("DELETE FROM tags WHERE tag_uid = :tagUid")
abstract fun deleteTags(tagUid: String)
@Query("SELECT * FROM tags WHERE task IN (:tasks) AND tag_uid NOT IN (:tagsToKeep)")
abstract fun tagsToDelete(tasks: List<Long>, tagsToKeep: List<String>): List<Tag>
fun getTagSelections(tasks: List<Long>): Pair<Set<String>, Set<String>> {
val allTags = getAllTags(tasks)
val tags = allTags.map { t: String? -> HashSet<String>(t?.split(",") ?: emptySet()) }
val partialTags = tags.flatten().toMutableSet()
var commonTags: MutableSet<String>? = null
if (tags.isEmpty()) {
commonTags = HashSet()
} else {
for (s in tags) {
if (commonTags == null) {
commonTags = s.toMutableSet()
} else {
commonTags.retainAll(s)
}
}
}
partialTags.removeAll(commonTags!!)
return Pair(partialTags, commonTags)
}
@Query("SELECT GROUP_CONCAT(DISTINCT(tag_uid)) FROM tasks"
+ " LEFT JOIN tags ON tags.task = tasks._id"
+ " WHERE tasks._id IN (:tasks)"
+ " GROUP BY tasks._id")
abstract fun getAllTags(tasks: List<Long>): List<String>
@Transaction
open fun applyTags(
tasks: List<Task>, partiallySelected: List<TagData>, selected: List<TagData>): List<Long> {
val modified = HashSet<Long>()
val keep = partiallySelected.plus(selected).map { it.remoteId!! }
for (sublist in tasks.chunked(DbUtils.MAX_SQLITE_ARGS - keep.size)) {
val tags = tagsToDelete(sublist.map(Task::id), keep)
deleteTags(tags)
modified.addAll(tags.map(Tag::task))
}
for (task in tasks) {
val added = selected subtract getTagDataForTask(task.id)
if (added.isNotEmpty()) {
modified.add(task.id)
insert(added.map { Tag(task, it) })
}
}
return ArrayList(modified)
}
@Transaction
open fun delete(tagData: TagData) {
deleteTags(tagData.remoteId!!)
deleteTagData(tagData)
}
@Delete
abstract fun delete(tagData: List<TagData>)
@Delete
abstract fun deleteTags(tags: List<Tag>)
@Query("SELECT tagdata.* FROM tagdata "
+ "INNER JOIN tags ON tags.tag_uid = tagdata.remoteId "
+ "WHERE tags.task = :id "
+ "ORDER BY UPPER(tagdata.name) ASC")
abstract fun getTagDataForTask(id: Long): List<TagData>
@Query("SELECT * FROM tagdata WHERE name IN (:names)")
abstract fun getTags(names: List<String>): List<TagData>
@Update
abstract fun update(tagData: TagData)
@Insert
abstract fun insert(tag: TagData): Long
@Insert
abstract fun insert(tags: Iterable<Tag>)
fun createNew(tag: TagData) {
if (Task.isUuidEmpty(tag.remoteId)) {
tag.remoteId = UUIDHelper.newUUID()
}
tag.id = insert(tag)
}
@Query("SELECT tagdata.*, COUNT(tasks._id) AS count"
+ " FROM tagdata"
+ " LEFT JOIN tags ON tags.tag_uid = tagdata.remoteId"
+ " LEFT JOIN tasks ON tags.task = tasks._id AND tasks.deleted = 0 AND tasks.completed = 0 AND tasks.hideUntil < :now"
+ " WHERE tagdata.name IS NOT NULL AND tagdata.name != ''"
+ " GROUP BY tagdata.remoteId")
abstract fun getTagFilters(now: Long = currentTimeMillis()): List<TagFilters>
@Query("UPDATE tagdata SET td_order = $NO_ORDER")
abstract fun resetOrders()
@Query("UPDATE tagdata SET td_order = :order WHERE _id = :id")
abstract fun setOrder(id: Long, order: Int)
}

@ -0,0 +1,33 @@
package org.tasks.data
import androidx.room.*
import com.todoroo.astrid.data.Task
import com.todoroo.astrid.helper.UUIDHelper
@Dao
abstract class TaskAttachmentDaoBlocking {
@Query("SELECT * FROM task_attachments WHERE task_id = :taskUuid")
abstract fun getAttachments(taskUuid: String): List<TaskAttachment>
@Query("SELECT task_attachments.* FROM task_attachments INNER JOIN tasks ON tasks._id = :task WHERE task_id = tasks.remoteId")
abstract fun getAttachments(task: Long): List<TaskAttachment>
@Query("SELECT * FROM task_attachments")
abstract fun getAttachments(): List<TaskAttachment>
@Delete
abstract fun delete(taskAttachment: TaskAttachment)
@Insert(onConflict = OnConflictStrategy.REPLACE)
abstract fun insert(attachment: TaskAttachment)
@Update
abstract fun update(attachment: TaskAttachment)
fun createNew(attachment: TaskAttachment) {
if (Task.isUuidEmpty(attachment.remoteId)) {
attachment.remoteId = UUIDHelper.newUUID()
}
insert(attachment)
}
}

@ -0,0 +1,25 @@
package org.tasks.data
import androidx.room.Dao
import androidx.room.Insert
import androidx.room.Query
import androidx.room.Update
@Dao
abstract class TaskListMetadataDaoBlocking {
@Query("SELECT * from task_list_metadata where tag_uuid = :tagUuid OR filter = :tagUuid LIMIT 1")
abstract fun fetchByTagOrFilter(tagUuid: String): TaskListMetadata?
@Query("SELECT * FROM task_list_metadata")
abstract fun getAll(): List<TaskListMetadata>
@Update
abstract fun update(taskListMetadata: TaskListMetadata)
@Insert
abstract fun insert(taskListMetadata: TaskListMetadata): Long
fun createNew(taskListMetadata: TaskListMetadata) {
taskListMetadata.id = insert(taskListMetadata)
}
}

@ -0,0 +1,37 @@
package org.tasks.data
import androidx.room.*
import com.todoroo.andlib.utility.DateUtilities
import com.todoroo.astrid.data.Task
import com.todoroo.astrid.helper.UUIDHelper
@Dao
abstract class UserActivityDaoBlocking {
@Insert
abstract fun insert(userActivity: UserActivity)
@Update
abstract fun update(userActivity: UserActivity)
@Delete
abstract fun delete(userActivity: UserActivity)
@Query("SELECT * FROM userActivity WHERE target_id = :taskUuid ORDER BY created_at DESC ")
abstract fun getCommentsForTask(taskUuid: String): List<UserActivity>
@Query("SELECT userActivity.* FROM userActivity INNER JOIN tasks ON tasks._id = :task WHERE target_id = tasks.remoteId")
abstract fun getComments(task: Long): List<UserActivity>
@Query("SELECT * FROM userActivity")
abstract fun getComments(): List<UserActivity>
fun createNew(item: UserActivity) {
if (item.created == null || item.created == 0L) {
item.created = DateUtilities.now()
}
if (Task.isUuidEmpty(item.remoteId)) {
item.remoteId = UUIDHelper.newUUID()
}
insert(item)
}
}

@ -20,7 +20,7 @@ import com.google.android.material.bottomsheet.BottomSheetBehavior
import com.google.android.material.bottomsheet.BottomSheetDialog import com.google.android.material.bottomsheet.BottomSheetDialog
import com.google.android.material.bottomsheet.BottomSheetDialogFragment import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import com.todoroo.andlib.utility.DateUtilities import com.todoroo.andlib.utility.DateUtilities
import com.todoroo.astrid.dao.TaskDao import com.todoroo.astrid.dao.TaskDaoBlocking
import com.todoroo.astrid.data.Task import com.todoroo.astrid.data.Task
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import org.tasks.R import org.tasks.R
@ -41,7 +41,7 @@ class DateTimePicker : BottomSheetDialogFragment() {
@Inject lateinit var activity: Activity @Inject lateinit var activity: Activity
@Inject lateinit var preferences: Preferences @Inject lateinit var preferences: Preferences
@Inject lateinit var locale: Locale @Inject lateinit var locale: Locale
@Inject lateinit var taskDao: TaskDao @Inject lateinit var taskDao: TaskDaoBlocking
@Inject lateinit var notificationManager: NotificationManager @Inject lateinit var notificationManager: NotificationManager
@Inject lateinit var theme: Theme @Inject lateinit var theme: Theme

@ -40,7 +40,7 @@ import org.tasks.billing.Inventory;
import org.tasks.caldav.iCalendar; import org.tasks.caldav.iCalendar;
import org.tasks.data.CaldavAccount; import org.tasks.data.CaldavAccount;
import org.tasks.data.CaldavCalendar; import org.tasks.data.CaldavCalendar;
import org.tasks.data.CaldavDao; import org.tasks.data.CaldavDaoBlocking;
import org.tasks.data.CaldavTask; import org.tasks.data.CaldavTask;
import org.tasks.data.CaldavTaskContainer; import org.tasks.data.CaldavTaskContainer;
import timber.log.Timber; import timber.log.Timber;
@ -52,7 +52,7 @@ public class EteSynchronizer {
new ProdId("+//IDN tasks.org//android-" + BuildConfig.VERSION_CODE + "//EN")); new ProdId("+//IDN tasks.org//android-" + BuildConfig.VERSION_CODE + "//EN"));
} }
private final CaldavDao caldavDao; private final CaldavDaoBlocking caldavDao;
private final LocalBroadcastManager localBroadcastManager; private final LocalBroadcastManager localBroadcastManager;
private final TaskDeleter taskDeleter; private final TaskDeleter taskDeleter;
private final Inventory inventory; private final Inventory inventory;
@ -63,7 +63,7 @@ public class EteSynchronizer {
@Inject @Inject
public EteSynchronizer( public EteSynchronizer(
@ApplicationContext Context context, @ApplicationContext Context context,
CaldavDao caldavDao, CaldavDaoBlocking caldavDao,
LocalBroadcastManager localBroadcastManager, LocalBroadcastManager localBroadcastManager,
TaskDeleter taskDeleter, TaskDeleter taskDeleter,
Inventory inventory, Inventory inventory,

@ -24,14 +24,14 @@ import java.util.Map;
import javax.inject.Inject; import javax.inject.Inject;
import org.tasks.R; import org.tasks.R;
import org.tasks.data.CaldavCalendar; import org.tasks.data.CaldavCalendar;
import org.tasks.data.CaldavDao; import org.tasks.data.CaldavDaoBlocking;
import org.tasks.data.CaldavTask; import org.tasks.data.CaldavTask;
import org.tasks.data.GoogleTask; import org.tasks.data.GoogleTask;
import org.tasks.data.GoogleTaskList; import org.tasks.data.GoogleTaskList;
import org.tasks.data.GoogleTaskListDao; import org.tasks.data.GoogleTaskListDaoBlocking;
import org.tasks.data.Tag; import org.tasks.data.Tag;
import org.tasks.data.TagData; import org.tasks.data.TagData;
import org.tasks.data.TagDataDao; import org.tasks.data.TagDataDaoBlocking;
public class FilterCriteriaProvider { public class FilterCriteriaProvider {
@ -45,17 +45,17 @@ public class FilterCriteriaProvider {
private static final String IDENTIFIER_TAG_CONTAINS = "tag_contains"; private static final String IDENTIFIER_TAG_CONTAINS = "tag_contains";
private final Context context; private final Context context;
private final TagDataDao tagDataDao; private final TagDataDaoBlocking tagDataDao;
private final Resources r; private final Resources r;
private final GoogleTaskListDao googleTaskListDao; private final GoogleTaskListDaoBlocking googleTaskListDao;
private final CaldavDao caldavDao; private final CaldavDaoBlocking caldavDao;
@Inject @Inject
public FilterCriteriaProvider( public FilterCriteriaProvider(
@ApplicationContext Context context, @ApplicationContext Context context,
TagDataDao tagDataDao, TagDataDaoBlocking tagDataDao,
GoogleTaskListDao googleTaskListDao, GoogleTaskListDaoBlocking googleTaskListDao,
CaldavDao caldavDao) { CaldavDaoBlocking caldavDao) {
this.context = context; this.context = context;
this.tagDataDao = tagDataDao; this.tagDataDao = tagDataDao;

@ -30,12 +30,12 @@ class FilterProvider @Inject constructor(
@param:ApplicationContext private val context: Context, @param:ApplicationContext private val context: Context,
private val inventory: Inventory, private val inventory: Inventory,
private val builtInFilterExposer: BuiltInFilterExposer, private val builtInFilterExposer: BuiltInFilterExposer,
private val filterDao: FilterDao, private val filterDao: FilterDaoBlocking,
private val tagDataDao: TagDataDao, private val tagDataDao: TagDataDaoBlocking,
private val googleTaskListDao: GoogleTaskListDao, private val googleTaskListDao: GoogleTaskListDaoBlocking,
private val caldavDao: CaldavDao, private val caldavDao: CaldavDaoBlocking,
private val preferences: Preferences, private val preferences: Preferences,
private val locationDao: LocationDao) { private val locationDao: LocationDaoBlocking) {
val listPickerItems: List<FilterListItem> val listPickerItems: List<FilterListItem>
get() = googleTaskFilters(false).plus(caldavFilters(false)) get() = googleTaskFilters(false).plus(caldavFilters(false))

@ -4,7 +4,6 @@ import android.content.Context;
import android.os.Parcel; import android.os.Parcel;
import android.os.Parcelable; import android.os.Parcelable;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import com.todoroo.andlib.data.Table; import com.todoroo.andlib.data.Table;
import com.todoroo.andlib.sql.Criterion; import com.todoroo.andlib.sql.Criterion;
import com.todoroo.andlib.sql.Field; import com.todoroo.andlib.sql.Field;

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save