diff --git a/app/src/main/java/org/tasks/jobs/SyncOpenTasksWork.kt b/app/src/main/java/org/tasks/jobs/SyncOpenTasksWork.kt index 126a797ff..15a08ed84 100644 --- a/app/src/main/java/org/tasks/jobs/SyncOpenTasksWork.kt +++ b/app/src/main/java/org/tasks/jobs/SyncOpenTasksWork.kt @@ -1,6 +1,9 @@ package org.tasks.jobs +import android.accounts.AccountManager +import android.content.ContentResolver import android.content.Context +import android.os.Bundle import androidx.hilt.Assisted import androidx.hilt.work.WorkerInject import androidx.work.WorkerParameters @@ -10,6 +13,8 @@ import org.tasks.analytics.Firebase import org.tasks.data.CaldavAccount.Companion.TYPE_OPENTASKS import org.tasks.data.CaldavDao import org.tasks.data.OpenTaskDao +import org.tasks.data.OpenTaskDao.Companion.ACCOUNT_TYPE_DAVx5 +import org.tasks.data.OpenTaskDao.Companion.ACCOUNT_TYPE_ETESYNC import org.tasks.opentasks.OpenTasksSynchronizer import org.tasks.preferences.Preferences @@ -31,5 +36,22 @@ class SyncOpenTasksWork @WorkerInject constructor( override suspend fun doSync() { openTasksSynchronizer.sync() + + if (inputData.getBoolean(EXTRA_IMMEDIATE, false)) { + AccountManager + .get(context) + .accounts + .filter { it.type == ACCOUNT_TYPE_DAVx5 || it.type == ACCOUNT_TYPE_ETESYNC } + .forEach { + ContentResolver.requestSync( + it, + openTaskDao.authority, + Bundle().apply { + putBoolean(ContentResolver.SYNC_EXTRAS_MANUAL, true) + putBoolean(ContentResolver.SYNC_EXTRAS_EXPEDITED, true) + } + ) + } + } } } \ No newline at end of file diff --git a/app/src/main/java/org/tasks/jobs/SyncWork.kt b/app/src/main/java/org/tasks/jobs/SyncWork.kt index dcbcc89d9..983244d63 100644 --- a/app/src/main/java/org/tasks/jobs/SyncWork.kt +++ b/app/src/main/java/org/tasks/jobs/SyncWork.kt @@ -46,5 +46,7 @@ abstract class SyncWork constructor( companion object { private val LOCK = Any() + + const val EXTRA_IMMEDIATE = "extra_immediate" } } \ No newline at end of file diff --git a/app/src/main/java/org/tasks/jobs/WorkManagerImpl.kt b/app/src/main/java/org/tasks/jobs/WorkManagerImpl.kt index 4945e1c3c..c74b62b3b 100644 --- a/app/src/main/java/org/tasks/jobs/WorkManagerImpl.kt +++ b/app/src/main/java/org/tasks/jobs/WorkManagerImpl.kt @@ -21,6 +21,7 @@ import org.tasks.data.OpenTaskDao import org.tasks.data.Place import org.tasks.date.DateTimeUtils.midnight import org.tasks.date.DateTimeUtils.newDateTime +import org.tasks.jobs.SyncWork.Companion.EXTRA_IMMEDIATE import org.tasks.jobs.WorkManager.Companion.MAX_CLEANUP_LENGTH import org.tasks.jobs.WorkManager.Companion.REMOTE_CONFIG_INTERVAL_HOURS import org.tasks.jobs.WorkManager.Companion.TAG_BACKGROUND_SYNC_CALDAV @@ -89,6 +90,7 @@ class WorkManagerImpl constructor( private fun sync(immediate: Boolean, tag: String, c: Class, requireNetwork: Boolean = true) { Timber.d("sync(immediate = $immediate, $tag, $c, requireNetwork = $requireNetwork)") val builder = OneTimeWorkRequest.Builder(c) + .setInputData(Data.Builder().putBoolean(EXTRA_IMMEDIATE, immediate).build()) if (requireNetwork) { builder.setConstraints(Constraints.Builder() .setRequiredNetworkType(