1
0
mirror of https://github.com/etesync/android synced 2025-02-08 21:52:47 +00:00

Fix issue with OpenTasks causing a lot of syncs in some rare cases.

We weren't setting a default sync interval which meant that in some
cases it was just syncing every 10 seconds.

This fix also fixes #66.
This commit is contained in:
Tom Hacohen 2019-03-06 17:31:05 +00:00
parent c6472fe220
commit db8667e84a
3 changed files with 36 additions and 7 deletions

View File

@ -12,10 +12,7 @@ import android.accounts.AccountManager
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.annotation.TargetApi import android.annotation.TargetApi
import android.app.Application import android.app.Application
import android.content.BroadcastReceiver import android.content.*
import android.content.ContentValues
import android.content.Context
import android.content.Intent
import android.database.DatabaseUtils import android.database.DatabaseUtils
import android.database.sqlite.SQLiteDatabase import android.database.sqlite.SQLiteDatabase
import android.graphics.Bitmap import android.graphics.Bitmap
@ -48,6 +45,7 @@ import io.requery.sql.EntityDataStore
import okhttp3.internal.tls.OkHostnameVerifier import okhttp3.internal.tls.OkHostnameVerifier
import org.acra.ACRA import org.acra.ACRA
import org.apache.commons.lang3.time.DateFormatUtils import org.apache.commons.lang3.time.DateFormatUtils
import org.jetbrains.anko.doAsync
import java.io.File import java.io.File
import java.io.IOException import java.io.IOException
import java.util.* import java.util.*
@ -93,6 +91,19 @@ class App : Application() {
addressBooksAuthority = getString(R.string.address_books_authority) addressBooksAuthority = getString(R.string.address_books_authority)
loadLanguage() loadLanguage()
// don't block UI for some background checks
doAsync {
// watch installed/removed apps
val tasksFilter = IntentFilter()
tasksFilter.addAction(Intent.ACTION_PACKAGE_ADDED)
tasksFilter.addAction(Intent.ACTION_PACKAGE_FULLY_REMOVED)
tasksFilter.addDataScheme("package")
registerReceiver(PackageChangedReceiver(), tasksFilter)
// check whether a tasks app is currently installed
PackageChangedReceiver.updateTaskSync(this@App)
}
} }
override fun attachBaseContext(base: Context) { override fun attachBaseContext(base: Context) {

View File

@ -8,11 +8,14 @@
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 com.etesync.syncadapter.resource.LocalTaskList import com.etesync.syncadapter.resource.LocalTaskList
class PackageChangedReceiver : BroadcastReceiver() { class PackageChangedReceiver : BroadcastReceiver() {
@ -29,8 +32,21 @@ class PackageChangedReceiver : BroadcastReceiver() {
val tasksInstalled = LocalTaskList.tasksProviderAvailable(context) val tasksInstalled = LocalTaskList.tasksProviderAvailable(context)
App.log.info("Package (un)installed; OpenTasks provider now available = $tasksInstalled") App.log.info("Package (un)installed; OpenTasks provider now available = $tasksInstalled")
// check all accounts and (de)activate OpenTasks if a CalDAV service is defined for (account in AccountManager.get(context).getAccountsByType(App.accountType)) {
// FIXME: Do something if we ever bring back tasks. val settings = AccountSettings(context, account)
val calendarSyncInterval = settings.getSyncInterval(CalendarContract.AUTHORITY)
if (tasksInstalled) {
if (calendarSyncInterval == null) {
// do nothing atm
} else if (ContentResolver.getIsSyncable(account, TaskProvider.ProviderName.OpenTasks.authority) <= 0) {
ContentResolver.setIsSyncable(account, TaskProvider.ProviderName.OpenTasks.authority, 1)
settings.setSyncInterval(TaskProvider.ProviderName.OpenTasks.authority, calendarSyncInterval)
}
} else {
ContentResolver.setIsSyncable(account, TaskProvider.ProviderName.OpenTasks.authority, 0)
}
}
} }
} }

View File

@ -16,6 +16,7 @@ import android.content.SyncResult
import android.database.sqlite.SQLiteException import android.database.sqlite.SQLiteException
import android.os.Build import android.os.Build
import android.os.Bundle import android.os.Bundle
import android.provider.CalendarContract
import at.bitfire.ical4android.AndroidTaskList import at.bitfire.ical4android.AndroidTaskList
import at.bitfire.ical4android.TaskProvider import at.bitfire.ical4android.TaskProvider
import com.etesync.syncadapter.* import com.etesync.syncadapter.*
@ -63,6 +64,7 @@ class TasksSyncAdapterService: SyncAdapterService() {
if (!extras.containsKey(ContentResolver.SYNC_EXTRAS_MANUAL) && !checkSyncConditions(accountSettings)) if (!extras.containsKey(ContentResolver.SYNC_EXTRAS_MANUAL) && !checkSyncConditions(accountSettings))
return return
RefreshCollections(account, CollectionInfo.Type.TASKS).run() RefreshCollections(account, CollectionInfo.Type.TASKS).run()
updateLocalTaskLists(taskProvider, account, accountSettings) updateLocalTaskLists(taskProvider, account, accountSettings)