diff --git a/app/src/main/java/org/tasks/extensions/Context.kt b/app/src/main/java/org/tasks/extensions/Context.kt index 8aecd8485..dab0c4d86 100644 --- a/app/src/main/java/org/tasks/extensions/Context.kt +++ b/app/src/main/java/org/tasks/extensions/Context.kt @@ -7,6 +7,8 @@ import android.content.Context.MODE_PRIVATE import android.content.Intent import android.content.Intent.ACTION_VIEW import android.content.res.Configuration +import android.net.ConnectivityManager +import android.net.NetworkCapabilities.NET_CAPABILITY_INTERNET import android.net.Uri import android.view.View import android.view.inputmethod.InputMethodManager @@ -80,4 +82,14 @@ object Context { MODE_PRIVATE ) ) + + fun Context.hasNetworkConnectivity(): Boolean { + return try { + with(getSystemService(ConnectivityManager::class.java)) { + getNetworkCapabilities(activeNetwork)?.hasCapability(NET_CAPABILITY_INTERNET) == true + } + } catch (e: Exception) { + false + } + } } diff --git a/app/src/main/java/org/tasks/jobs/SyncWork.kt b/app/src/main/java/org/tasks/jobs/SyncWork.kt index f06f57b92..13900deed 100644 --- a/app/src/main/java/org/tasks/jobs/SyncWork.kt +++ b/app/src/main/java/org/tasks/jobs/SyncWork.kt @@ -29,6 +29,7 @@ import org.tasks.data.CaldavDao import org.tasks.data.GoogleTaskListDao import org.tasks.data.OpenTaskDao import org.tasks.etebase.EtebaseSynchronizer +import org.tasks.extensions.Context.hasNetworkConnectivity import org.tasks.gtasks.GoogleTaskSynchronizer import org.tasks.injection.BaseWorker import org.tasks.opentasks.OpenTasksSynchronizer @@ -91,12 +92,15 @@ class SyncWork @AssistedInject constructor( if (preferences.isManualSort) { preferences.isPositionHackEnabled = true } - googleTaskJobs().plus(caldavJobs()).awaitAll() + val hasNetworkConnectivity = context.hasNetworkConnectivity() + if (hasNetworkConnectivity) { + googleTaskJobs().plus(caldavJobs()).awaitAll() + } inventory.updateTasksAccount() if (openTaskDao.shouldSync()) { openTasksSynchronizer.get().sync() - if (isImmediate) { + if (isImmediate && hasNetworkConnectivity) { AccountManager .get(context) .accounts diff --git a/app/src/main/java/org/tasks/jobs/WorkManagerImpl.kt b/app/src/main/java/org/tasks/jobs/WorkManagerImpl.kt index 77725e14a..f17a3a67d 100644 --- a/app/src/main/java/org/tasks/jobs/WorkManagerImpl.kt +++ b/app/src/main/java/org/tasks/jobs/WorkManagerImpl.kt @@ -97,10 +97,13 @@ class WorkManagerImpl( } } + @SuppressLint("EnqueueWork") override suspend fun sync(immediate: Boolean) { val builder = OneTimeWorkRequest.Builder(SyncWork::class.java) .setInputData(EXTRA_IMMEDIATE to immediate) - .setConstraints(networkConstraints) + if (!openTaskDao.shouldSync()) { + builder.setConstraints(networkConstraints) + } if (!immediate) { builder.setInitialDelay(1, TimeUnit.MINUTES) }