1
0
mirror of https://github.com/etesync/android synced 2025-02-22 20:42:04 +00:00

Add utilities to update and get the wanted tasks provider.

This commit is contained in:
Tom Hacohen 2020-08-06 16:31:17 +03:00
parent 5fca068845
commit 52bf0b615c
4 changed files with 61 additions and 36 deletions

View File

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

View File

@ -8,17 +8,12 @@
package com.etesync.syncadapter package com.etesync.syncadapter
import android.accounts.AccountManager
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.content.BroadcastReceiver import android.content.BroadcastReceiver
import android.content.ContentResolver
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.provider.CalendarContract
import at.bitfire.ical4android.TaskProvider import at.bitfire.ical4android.TaskProvider
import at.bitfire.ical4android.TaskProvider.ProviderName import com.etesync.syncadapter.utils.TaskProviderHandling.Companion.updateTaskSync
import com.etesync.syncadapter.log.Logger
import com.etesync.syncadapter.resource.LocalTaskList
class PackageChangedReceiver : BroadcastReceiver() { 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)
}
}
}
}
} }

View File

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

View File

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