From 52bf0b615c9cbc18c48b24a6b65cad029f0b9367 Mon Sep 17 00:00:00 2001 From: Tom Hacohen Date: Thu, 6 Aug 2020 16:31:17 +0300 Subject: [PATCH] Add utilities to update and get the wanted tasks provider. --- .../main/java/com/etesync/syncadapter/App.kt | 3 +- .../syncadapter/PackageChangedReceiver.kt | 32 +---------- .../ui/setup/SetupEncryptionFragment.kt | 6 +- .../syncadapter/utils/TaskProviderHandling.kt | 56 +++++++++++++++++++ 4 files changed, 61 insertions(+), 36 deletions(-) create mode 100644 app/src/main/java/com/etesync/syncadapter/utils/TaskProviderHandling.kt diff --git a/app/src/main/java/com/etesync/syncadapter/App.kt b/app/src/main/java/com/etesync/syncadapter/App.kt index f8c1384e..c5e15239 100644 --- a/app/src/main/java/com/etesync/syncadapter/App.kt +++ b/app/src/main/java/com/etesync/syncadapter/App.kt @@ -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) } } } diff --git a/app/src/main/java/com/etesync/syncadapter/PackageChangedReceiver.kt b/app/src/main/java/com/etesync/syncadapter/PackageChangedReceiver.kt index 1101d8e6..7bcd393b 100644 --- a/app/src/main/java/com/etesync/syncadapter/PackageChangedReceiver.kt +++ b/app/src/main/java/com/etesync/syncadapter/PackageChangedReceiver.kt @@ -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) - } - } - } - } - } diff --git a/app/src/main/java/com/etesync/syncadapter/ui/setup/SetupEncryptionFragment.kt b/app/src/main/java/com/etesync/syncadapter/ui/setup/SetupEncryptionFragment.kt index 82f88cec..276556dd 100644 --- a/app/src/main/java/com/etesync/syncadapter/ui/setup/SetupEncryptionFragment.kt +++ b/app/src/main/java/com/etesync/syncadapter/ui/setup/SetupEncryptionFragment.kt @@ -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) diff --git a/app/src/main/java/com/etesync/syncadapter/utils/TaskProviderHandling.kt b/app/src/main/java/com/etesync/syncadapter/utils/TaskProviderHandling.kt new file mode 100644 index 00000000..2ace487c --- /dev/null +++ b/app/src/main/java/com/etesync/syncadapter/utils/TaskProviderHandling.kt @@ -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) + } + } + } + } +} \ No newline at end of file