diff --git a/app/src/androidTest/java/org/tasks/opentasks/TestOpenTaskDao.kt b/app/src/androidTest/java/org/tasks/opentasks/TestOpenTaskDao.kt index a3d5f6695..60a765ef9 100644 --- a/app/src/androidTest/java/org/tasks/opentasks/TestOpenTaskDao.kt +++ b/app/src/androidTest/java/org/tasks/opentasks/TestOpenTaskDao.kt @@ -4,15 +4,15 @@ import android.content.ContentProviderResult import android.content.Context import at.bitfire.ical4android.BatchOperation import at.bitfire.ical4android.Task -import org.tasks.data.UUIDHelper import dagger.hilt.android.qualifiers.ApplicationContext import org.dmfs.tasks.contract.TaskContract import org.dmfs.tasks.contract.TaskContract.TaskListColumns.ACCESS_LEVEL_OWNER import org.tasks.caldav.iCalendar -import org.tasks.data.entity.CaldavCalendar -import org.tasks.data.dao.CaldavDao import org.tasks.data.MyAndroidTask import org.tasks.data.OpenTaskDao +import org.tasks.data.UUIDHelper +import org.tasks.data.dao.CaldavDao +import org.tasks.data.entity.CaldavCalendar import javax.inject.Inject class TestOpenTaskDao @Inject constructor( @@ -92,7 +92,7 @@ class TestOpenTaskDao @Inject constructor( companion object { const val DEFAULT_ACCOUNT = "test_account" - const val DEFAULT_TYPE = ACCOUNT_TYPE_DAVx5 + const val DEFAULT_TYPE = ACCOUNT_TYPE_DAVX5 const val DEFAULT_LIST = "default_list" } } \ No newline at end of file diff --git a/app/src/main/java/org/tasks/analytics/Constants.kt b/app/src/main/java/org/tasks/analytics/Constants.kt index 50e9e17ed..39a7843ac 100644 --- a/app/src/main/java/org/tasks/analytics/Constants.kt +++ b/app/src/main/java/org/tasks/analytics/Constants.kt @@ -3,6 +3,7 @@ package org.tasks.analytics object Constants { const val SYNC_TYPE_CALDAV = "caldav" const val SYNC_TYPE_DAVX5 = "davx5" + const val SYNC_TYPE_DAVX5_MANAGED = "davx5_managed" const val SYNC_TYPE_GOOGLE_TASKS = "google_tasks" const val SYNC_TYPE_ETESYNC_OT = "etesync_ot" const val SYNC_TYPE_ETEBASE = "etebase" diff --git a/app/src/main/java/org/tasks/data/CaldavAccountExtensions.kt b/app/src/main/java/org/tasks/data/CaldavAccountExtensions.kt index d55112f91..cc24e135a 100644 --- a/app/src/main/java/org/tasks/data/CaldavAccountExtensions.kt +++ b/app/src/main/java/org/tasks/data/CaldavAccountExtensions.kt @@ -8,6 +8,7 @@ import org.tasks.caldav.CaldavAccountSettingsActivity import org.tasks.caldav.CaldavCalendarSettingsActivity import org.tasks.caldav.LocalListSettingsActivity import org.tasks.data.OpenTaskDao.Companion.isDavx5 +import org.tasks.data.OpenTaskDao.Companion.isDavx5Managed import org.tasks.data.OpenTaskDao.Companion.isDecSync import org.tasks.data.OpenTaskDao.Companion.isEteSync import org.tasks.data.entity.CaldavAccount @@ -25,7 +26,7 @@ val CaldavAccount.prefTitle: Int isCaldavAccount -> R.string.caldav isEtebaseAccount || uuid.isEteSync() -> R.string.etesync isEteSyncAccount -> R.string.etesync_v1 - uuid.isDavx5() -> R.string.davx5 + uuid.isDavx5() || uuid.isDavx5Managed() -> R.string.davx5 uuid.isDecSync() -> R.string.decsync isMicrosoft -> R.string.microsoft isGoogleTasks -> R.string.gtasks_GPr_header @@ -37,7 +38,7 @@ val CaldavAccount.prefIcon: Int isTasksOrg -> R.drawable.ic_round_icon isCaldavAccount -> R.drawable.ic_webdav_logo isEtebaseAccount || isEteSyncAccount || uuid.isEteSync() -> R.drawable.ic_etesync - uuid.isDavx5() -> R.drawable.ic_davx5_icon_green_bg + uuid.isDavx5() || uuid.isDavx5Managed() -> R.drawable.ic_davx5_icon_green_bg uuid.isDecSync() -> R.drawable.ic_decsync isMicrosoft -> R.drawable.ic_microsoft_tasks isGoogleTasks -> R.drawable.ic_google diff --git a/app/src/main/java/org/tasks/data/OpenTaskDao.kt b/app/src/main/java/org/tasks/data/OpenTaskDao.kt index 260499bb3..efa6c7dd0 100644 --- a/app/src/main/java/org/tasks/data/OpenTaskDao.kt +++ b/app/src/main/java/org/tasks/data/OpenTaskDao.kt @@ -9,16 +9,20 @@ import android.net.Uri import dagger.hilt.android.qualifiers.ApplicationContext import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext -import org.dmfs.tasks.contract.TaskContract.* +import org.dmfs.tasks.contract.TaskContract.CommonSyncColumns +import org.dmfs.tasks.contract.TaskContract.LOAD_PROPERTIES import org.dmfs.tasks.contract.TaskContract.Properties +import org.dmfs.tasks.contract.TaskContract.TaskListColumns +import org.dmfs.tasks.contract.TaskContract.TaskLists +import org.dmfs.tasks.contract.TaskContract.Tasks import org.json.JSONObject import org.tasks.R +import org.tasks.data.dao.CaldavDao import org.tasks.data.entity.CaldavAccount.Companion.TYPE_OPENTASKS import org.tasks.data.entity.CaldavAccount.Companion.openTaskType -import org.tasks.data.dao.CaldavDao import org.tasks.data.entity.CaldavCalendar import timber.log.Timber -import java.util.* +import java.util.UUID import javax.inject.Inject open class OpenTaskDao @Inject constructor( @@ -144,11 +148,13 @@ open class OpenTaskDao @Inject constructor( companion object { private const val OPENTASK_BATCH_LIMIT = 499 - const val ACCOUNT_TYPE_DAVx5 = "bitfire.at.davdroid" + const val ACCOUNT_TYPE_DAVX5 = "bitfire.at.davdroid" + const val ACCOUNT_TYPE_DAVX5_MANAGED = "com.davdroid.managed" private const val ACCOUNT_TYPE_ETESYNC = "com.etesync.syncadapter" private const val ACCOUNT_TYPE_DECSYNC = "org.decsync.tasks" val SUPPORTED_TYPES = setOf( - ACCOUNT_TYPE_DAVx5, + ACCOUNT_TYPE_DAVX5, + ACCOUNT_TYPE_DAVX5_MANAGED, ACCOUNT_TYPE_ETESYNC, ACCOUNT_TYPE_DECSYNC ) @@ -157,7 +163,9 @@ open class OpenTaskDao @Inject constructor( suspend fun Map>.filterActive(caldavDao: CaldavDao) = filterNot { (_, lists) -> caldavDao.anyExist(lists.map { it.url!! }) } - fun String?.isDavx5(): Boolean = this?.startsWith(ACCOUNT_TYPE_DAVx5) == true + fun String?.isDavx5(): Boolean = this?.startsWith(ACCOUNT_TYPE_DAVX5) == true + + fun String?.isDavx5Managed(): Boolean = this?.startsWith(ACCOUNT_TYPE_DAVX5_MANAGED) == true fun String?.isEteSync(): Boolean = this?.startsWith(ACCOUNT_TYPE_ETESYNC) == true diff --git a/app/src/main/java/org/tasks/opentasks/OpenTasksSynchronizer.kt b/app/src/main/java/org/tasks/opentasks/OpenTasksSynchronizer.kt index 07dff9a58..149c9ca41 100644 --- a/app/src/main/java/org/tasks/opentasks/OpenTasksSynchronizer.kt +++ b/app/src/main/java/org/tasks/opentasks/OpenTasksSynchronizer.kt @@ -3,8 +3,6 @@ package org.tasks.opentasks import android.content.Context import at.bitfire.ical4android.BatchOperation import com.todoroo.astrid.dao.TaskDao -import org.tasks.data.entity.Task -import org.tasks.data.entity.Task.Companion.NO_ID import com.todoroo.astrid.service.TaskDeleter import dagger.hilt.android.qualifiers.ApplicationContext import org.dmfs.tasks.contract.TaskContract @@ -15,17 +13,20 @@ import org.tasks.analytics.Constants import org.tasks.analytics.Firebase import org.tasks.billing.Inventory import org.tasks.caldav.iCalendar -import org.tasks.data.entity.CaldavAccount -import org.tasks.data.entity.CaldavCalendar -import org.tasks.data.dao.CaldavDao -import org.tasks.data.entity.CaldavTask import org.tasks.data.MyAndroidTask import org.tasks.data.OpenTaskDao import org.tasks.data.OpenTaskDao.Companion.filterActive import org.tasks.data.OpenTaskDao.Companion.isDavx5 +import org.tasks.data.OpenTaskDao.Companion.isDavx5Managed import org.tasks.data.OpenTaskDao.Companion.isDecSync import org.tasks.data.OpenTaskDao.Companion.isEteSync import org.tasks.data.OpenTaskDao.Companion.toLocalCalendar +import org.tasks.data.dao.CaldavDao +import org.tasks.data.entity.CaldavAccount +import org.tasks.data.entity.CaldavCalendar +import org.tasks.data.entity.CaldavTask +import org.tasks.data.entity.Task +import org.tasks.data.entity.Task.Companion.NO_ID import timber.log.Timber import javax.inject.Inject import javax.inject.Singleton @@ -59,6 +60,7 @@ class OpenTasksSynchronizer @Inject constructor( R.string.event_sync_add_account, R.string.param_type to when { it.uuid.isDavx5() -> Constants.SYNC_TYPE_DAVX5 + it.uuid.isDavx5Managed() -> Constants.SYNC_TYPE_DAVX5_MANAGED it.uuid.isEteSync() -> Constants.SYNC_TYPE_ETESYNC_OT it.uuid.isDecSync() -> Constants.SYNC_TYPE_DECSYNC else -> throw IllegalArgumentException()