Add utilities to update and get the wanted tasks provider.

pull/127/head
Tom Hacohen 4 years ago
parent 5fca068845
commit 52bf0b615c

@ -34,6 +34,7 @@ import com.etesync.syncadapter.ui.AccountsActivity
import com.etesync.syncadapter.utils.HintManager
import com.etesync.syncadapter.utils.LanguageUtils
import com.etesync.syncadapter.utils.NotificationUtils
import com.etesync.syncadapter.utils.TaskProviderHandling
import io.requery.Persistable
import io.requery.android.sqlite.DatabaseSource
import io.requery.meta.EntityModel
@ -88,7 +89,7 @@ class App : Application() {
OPENTASK_PROVIDERS.forEach {
// check whether a tasks app is currently installed
PackageChangedReceiver.updateTaskSync(this@App, it)
TaskProviderHandling.updateTaskSync(this@App, it)
}
}
}

@ -8,17 +8,12 @@
package com.etesync.syncadapter
import android.accounts.AccountManager
import android.annotation.SuppressLint
import android.content.BroadcastReceiver
import android.content.ContentResolver
import android.content.Context
import android.content.Intent
import android.provider.CalendarContract
import at.bitfire.ical4android.TaskProvider
import at.bitfire.ical4android.TaskProvider.ProviderName
import com.etesync.syncadapter.log.Logger
import com.etesync.syncadapter.resource.LocalTaskList
import com.etesync.syncadapter.utils.TaskProviderHandling.Companion.updateTaskSync
class PackageChangedReceiver : BroadcastReceiver() {
@ -30,29 +25,4 @@ class PackageChangedReceiver : BroadcastReceiver() {
}
}
}
companion object {
internal fun updateTaskSync(context: Context, provider: ProviderName) {
val tasksInstalled = LocalTaskList.tasksProviderAvailable(context, provider)
Logger.log.info("Package (un)installed; ${provider.name} provider now available = $tasksInstalled")
for (account in AccountManager.get(context).getAccountsByType(App.accountType)) {
val settings = AccountSettings(context, account)
val calendarSyncInterval = settings.getSyncInterval(CalendarContract.AUTHORITY)
if (tasksInstalled) {
if (calendarSyncInterval == null) {
// do nothing atm
} else if (ContentResolver.getIsSyncable(account, provider.authority) <= 0) {
ContentResolver.setIsSyncable(account, provider.authority, 1)
settings.setSyncInterval(provider.authority, calendarSyncInterval)
}
} else {
ContentResolver.setIsSyncable(account, provider.authority, 0)
}
}
}
}
}

@ -33,6 +33,7 @@ import com.etesync.syncadapter.model.ServiceEntity
import com.etesync.syncadapter.resource.LocalTaskList
import com.etesync.syncadapter.ui.setup.BaseConfigurationFinder.Configuration
import com.etesync.syncadapter.utils.AndroidCompat
import com.etesync.syncadapter.utils.TaskProviderHandling
import okhttp3.HttpUrl
import java.util.logging.Level
@ -157,10 +158,7 @@ class SetupEncryptionFragment : DialogFragment() {
OPENTASK_PROVIDERS.forEach {
// enable task sync if OpenTasks is installed
// further changes will be handled by PackageChangedReceiver
if (LocalTaskList.tasksProviderAvailable(context!!, it)) {
ContentResolver.setIsSyncable(account, it.authority, 1)
settings.setSyncInterval(it.authority, Constants.DEFAULT_SYNC_INTERVAL.toLong())
}
TaskProviderHandling.updateTaskSync(context!!, it)
}
} else {
ContentResolver.setIsSyncable(account, CalendarContract.AUTHORITY, 0)

@ -0,0 +1,56 @@
package com.etesync.syncadapter.utils
import android.accounts.AccountManager
import android.content.ContentResolver
import android.content.Context
import android.provider.CalendarContract
import at.bitfire.ical4android.TaskProvider
import com.etesync.syncadapter.AccountSettings
import com.etesync.syncadapter.App
import com.etesync.syncadapter.log.Logger
import com.etesync.syncadapter.resource.LocalTaskList
import org.jetbrains.anko.defaultSharedPreferences
class TaskProviderHandling {
companion object {
fun getWantedTaskSyncProvider(context: Context): TaskProvider.ProviderName? {
val openTasksAvailable = LocalTaskList.tasksProviderAvailable(context, TaskProvider.ProviderName.OpenTasks)
val tasksOrgAvailable = LocalTaskList.tasksProviderAvailable(context, TaskProvider.ProviderName.TasksOrg)
if (openTasksAvailable && tasksOrgAvailable) {
if (context.defaultSharedPreferences.getBoolean(App.PREFER_TASKSORG, false))
return TaskProvider.ProviderName.TasksOrg
else
return TaskProvider.ProviderName.OpenTasks
} else {
if (openTasksAvailable)
return TaskProvider.ProviderName.OpenTasks
else if (tasksOrgAvailable)
return TaskProvider.ProviderName.TasksOrg
else
return null
}
}
fun updateTaskSync(context: Context, provider: TaskProvider.ProviderName) {
for (account in AccountManager.get(context).getAccountsByType(App.accountType)) {
val settings = AccountSettings(context, account)
val calendarSyncInterval = settings.getSyncInterval(CalendarContract.AUTHORITY)
val wantedProvider = getWantedTaskSyncProvider(context)
val shouldSync = wantedProvider == provider
Logger.log.info("Package (un)installed; Syncing (${shouldSync}) for ${provider.name}")
if (shouldSync) {
if (calendarSyncInterval == null) {
// do nothing atm
} else if (ContentResolver.getIsSyncable(account, provider.authority) <= 0) {
ContentResolver.setIsSyncable(account, provider.authority, 1)
settings.setSyncInterval(provider.authority, calendarSyncInterval)
}
} else {
ContentResolver.setIsSyncable(account, provider.authority, 0)
}
}
}
}
}
Loading…
Cancel
Save