mirror of
https://github.com/etesync/android
synced 2025-02-22 04:22:11 +00:00
Add utilities to update and get the wanted tasks provider.
This commit is contained in:
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…
Reference in New Issue
Block a user