Don't require network for OpenTasks sync

pull/2589/head
Alex Baker 2 years ago
parent 7ae77a81e1
commit ad1198aace

@ -7,6 +7,8 @@ import android.content.Context.MODE_PRIVATE
import android.content.Intent import android.content.Intent
import android.content.Intent.ACTION_VIEW import android.content.Intent.ACTION_VIEW
import android.content.res.Configuration import android.content.res.Configuration
import android.net.ConnectivityManager
import android.net.NetworkCapabilities.NET_CAPABILITY_INTERNET
import android.net.Uri import android.net.Uri
import android.view.View import android.view.View
import android.view.inputmethod.InputMethodManager import android.view.inputmethod.InputMethodManager
@ -80,4 +82,14 @@ object Context {
MODE_PRIVATE MODE_PRIVATE
) )
) )
fun Context.hasNetworkConnectivity(): Boolean {
return try {
with(getSystemService(ConnectivityManager::class.java)) {
getNetworkCapabilities(activeNetwork)?.hasCapability(NET_CAPABILITY_INTERNET) == true
}
} catch (e: Exception) {
false
}
}
} }

@ -29,6 +29,7 @@ import org.tasks.data.CaldavDao
import org.tasks.data.GoogleTaskListDao import org.tasks.data.GoogleTaskListDao
import org.tasks.data.OpenTaskDao import org.tasks.data.OpenTaskDao
import org.tasks.etebase.EtebaseSynchronizer import org.tasks.etebase.EtebaseSynchronizer
import org.tasks.extensions.Context.hasNetworkConnectivity
import org.tasks.gtasks.GoogleTaskSynchronizer import org.tasks.gtasks.GoogleTaskSynchronizer
import org.tasks.injection.BaseWorker import org.tasks.injection.BaseWorker
import org.tasks.opentasks.OpenTasksSynchronizer import org.tasks.opentasks.OpenTasksSynchronizer
@ -91,12 +92,15 @@ class SyncWork @AssistedInject constructor(
if (preferences.isManualSort) { if (preferences.isManualSort) {
preferences.isPositionHackEnabled = true preferences.isPositionHackEnabled = true
} }
googleTaskJobs().plus(caldavJobs()).awaitAll() val hasNetworkConnectivity = context.hasNetworkConnectivity()
if (hasNetworkConnectivity) {
googleTaskJobs().plus(caldavJobs()).awaitAll()
}
inventory.updateTasksAccount() inventory.updateTasksAccount()
if (openTaskDao.shouldSync()) { if (openTaskDao.shouldSync()) {
openTasksSynchronizer.get().sync() openTasksSynchronizer.get().sync()
if (isImmediate) { if (isImmediate && hasNetworkConnectivity) {
AccountManager AccountManager
.get(context) .get(context)
.accounts .accounts

@ -97,10 +97,13 @@ class WorkManagerImpl(
} }
} }
@SuppressLint("EnqueueWork")
override suspend fun sync(immediate: Boolean) { override suspend fun sync(immediate: Boolean) {
val builder = OneTimeWorkRequest.Builder(SyncWork::class.java) val builder = OneTimeWorkRequest.Builder(SyncWork::class.java)
.setInputData(EXTRA_IMMEDIATE to immediate) .setInputData(EXTRA_IMMEDIATE to immediate)
.setConstraints(networkConstraints) if (!openTaskDao.shouldSync()) {
builder.setConstraints(networkConstraints)
}
if (!immediate) { if (!immediate) {
builder.setInitialDelay(1, TimeUnit.MINUTES) builder.setInitialDelay(1, TimeUnit.MINUTES)
} }

Loading…
Cancel
Save