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 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"
}
}

@ -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"

@ -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

@ -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<String, List<CaldavCalendar>>.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

@ -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()

Loading…
Cancel
Save