Add support for Managed DAVx5

pull/2937/head
Alex Baker 1 year ago
parent 01a788bdb6
commit 285b0a9486

@ -4,15 +4,15 @@ import android.content.ContentProviderResult
import android.content.Context import android.content.Context
import at.bitfire.ical4android.BatchOperation import at.bitfire.ical4android.BatchOperation
import at.bitfire.ical4android.Task import at.bitfire.ical4android.Task
import org.tasks.data.UUIDHelper
import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.android.qualifiers.ApplicationContext
import org.dmfs.tasks.contract.TaskContract import org.dmfs.tasks.contract.TaskContract
import org.dmfs.tasks.contract.TaskContract.TaskListColumns.ACCESS_LEVEL_OWNER import org.dmfs.tasks.contract.TaskContract.TaskListColumns.ACCESS_LEVEL_OWNER
import org.tasks.caldav.iCalendar 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.MyAndroidTask
import org.tasks.data.OpenTaskDao 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 import javax.inject.Inject
class TestOpenTaskDao @Inject constructor( class TestOpenTaskDao @Inject constructor(
@ -92,7 +92,7 @@ class TestOpenTaskDao @Inject constructor(
companion object { companion object {
const val DEFAULT_ACCOUNT = "test_account" 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" const val DEFAULT_LIST = "default_list"
} }
} }

@ -3,6 +3,7 @@ package org.tasks.analytics
object Constants { object Constants {
const val SYNC_TYPE_CALDAV = "caldav" const val SYNC_TYPE_CALDAV = "caldav"
const val SYNC_TYPE_DAVX5 = "davx5" 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_GOOGLE_TASKS = "google_tasks"
const val SYNC_TYPE_ETESYNC_OT = "etesync_ot" const val SYNC_TYPE_ETESYNC_OT = "etesync_ot"
const val SYNC_TYPE_ETEBASE = "etebase" const val SYNC_TYPE_ETEBASE = "etebase"

@ -8,6 +8,7 @@ import org.tasks.caldav.CaldavAccountSettingsActivity
import org.tasks.caldav.CaldavCalendarSettingsActivity import org.tasks.caldav.CaldavCalendarSettingsActivity
import org.tasks.caldav.LocalListSettingsActivity import org.tasks.caldav.LocalListSettingsActivity
import org.tasks.data.OpenTaskDao.Companion.isDavx5 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.isDecSync
import org.tasks.data.OpenTaskDao.Companion.isEteSync import org.tasks.data.OpenTaskDao.Companion.isEteSync
import org.tasks.data.entity.CaldavAccount import org.tasks.data.entity.CaldavAccount
@ -25,7 +26,7 @@ val CaldavAccount.prefTitle: Int
isCaldavAccount -> R.string.caldav isCaldavAccount -> R.string.caldav
isEtebaseAccount || uuid.isEteSync() -> R.string.etesync isEtebaseAccount || uuid.isEteSync() -> R.string.etesync
isEteSyncAccount -> R.string.etesync_v1 isEteSyncAccount -> R.string.etesync_v1
uuid.isDavx5() -> R.string.davx5 uuid.isDavx5() || uuid.isDavx5Managed() -> R.string.davx5
uuid.isDecSync() -> R.string.decsync uuid.isDecSync() -> R.string.decsync
isMicrosoft -> R.string.microsoft isMicrosoft -> R.string.microsoft
isGoogleTasks -> R.string.gtasks_GPr_header isGoogleTasks -> R.string.gtasks_GPr_header
@ -37,7 +38,7 @@ val CaldavAccount.prefIcon: Int
isTasksOrg -> R.drawable.ic_round_icon isTasksOrg -> R.drawable.ic_round_icon
isCaldavAccount -> R.drawable.ic_webdav_logo isCaldavAccount -> R.drawable.ic_webdav_logo
isEtebaseAccount || isEteSyncAccount || uuid.isEteSync() -> R.drawable.ic_etesync 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 uuid.isDecSync() -> R.drawable.ic_decsync
isMicrosoft -> R.drawable.ic_microsoft_tasks isMicrosoft -> R.drawable.ic_microsoft_tasks
isGoogleTasks -> R.drawable.ic_google isGoogleTasks -> R.drawable.ic_google

@ -9,16 +9,20 @@ import android.net.Uri
import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.android.qualifiers.ApplicationContext
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext 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.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.json.JSONObject
import org.tasks.R 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.TYPE_OPENTASKS
import org.tasks.data.entity.CaldavAccount.Companion.openTaskType import org.tasks.data.entity.CaldavAccount.Companion.openTaskType
import org.tasks.data.dao.CaldavDao
import org.tasks.data.entity.CaldavCalendar import org.tasks.data.entity.CaldavCalendar
import timber.log.Timber import timber.log.Timber
import java.util.* import java.util.UUID
import javax.inject.Inject import javax.inject.Inject
open class OpenTaskDao @Inject constructor( open class OpenTaskDao @Inject constructor(
@ -144,11 +148,13 @@ open class OpenTaskDao @Inject constructor(
companion object { companion object {
private const val OPENTASK_BATCH_LIMIT = 499 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_ETESYNC = "com.etesync.syncadapter"
private const val ACCOUNT_TYPE_DECSYNC = "org.decsync.tasks" private const val ACCOUNT_TYPE_DECSYNC = "org.decsync.tasks"
val SUPPORTED_TYPES = setOf( val SUPPORTED_TYPES = setOf(
ACCOUNT_TYPE_DAVx5, ACCOUNT_TYPE_DAVX5,
ACCOUNT_TYPE_DAVX5_MANAGED,
ACCOUNT_TYPE_ETESYNC, ACCOUNT_TYPE_ETESYNC,
ACCOUNT_TYPE_DECSYNC ACCOUNT_TYPE_DECSYNC
) )
@ -157,7 +163,9 @@ open class OpenTaskDao @Inject constructor(
suspend fun Map<String, List<CaldavCalendar>>.filterActive(caldavDao: CaldavDao) = suspend fun Map<String, List<CaldavCalendar>>.filterActive(caldavDao: CaldavDao) =
filterNot { (_, lists) -> caldavDao.anyExist(lists.map { it.url!! }) } 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 fun String?.isEteSync(): Boolean = this?.startsWith(ACCOUNT_TYPE_ETESYNC) == true

@ -3,8 +3,6 @@ package org.tasks.opentasks
import android.content.Context import android.content.Context
import at.bitfire.ical4android.BatchOperation import at.bitfire.ical4android.BatchOperation
import com.todoroo.astrid.dao.TaskDao 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 com.todoroo.astrid.service.TaskDeleter
import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.android.qualifiers.ApplicationContext
import org.dmfs.tasks.contract.TaskContract import org.dmfs.tasks.contract.TaskContract
@ -15,17 +13,20 @@ import org.tasks.analytics.Constants
import org.tasks.analytics.Firebase import org.tasks.analytics.Firebase
import org.tasks.billing.Inventory import org.tasks.billing.Inventory
import org.tasks.caldav.iCalendar 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.MyAndroidTask
import org.tasks.data.OpenTaskDao import org.tasks.data.OpenTaskDao
import org.tasks.data.OpenTaskDao.Companion.filterActive import org.tasks.data.OpenTaskDao.Companion.filterActive
import org.tasks.data.OpenTaskDao.Companion.isDavx5 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.isDecSync
import org.tasks.data.OpenTaskDao.Companion.isEteSync import org.tasks.data.OpenTaskDao.Companion.isEteSync
import org.tasks.data.OpenTaskDao.Companion.toLocalCalendar 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 timber.log.Timber
import javax.inject.Inject import javax.inject.Inject
import javax.inject.Singleton import javax.inject.Singleton
@ -59,6 +60,7 @@ class OpenTasksSynchronizer @Inject constructor(
R.string.event_sync_add_account, R.string.event_sync_add_account,
R.string.param_type to when { R.string.param_type to when {
it.uuid.isDavx5() -> Constants.SYNC_TYPE_DAVX5 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.isEteSync() -> Constants.SYNC_TYPE_ETESYNC_OT
it.uuid.isDecSync() -> Constants.SYNC_TYPE_DECSYNC it.uuid.isDecSync() -> Constants.SYNC_TYPE_DECSYNC
else -> throw IllegalArgumentException() else -> throw IllegalArgumentException()

Loading…
Cancel
Save