Don't require network for OpenTasks sync

pull/2589/head
Alex Baker 8 months ago
parent 7ae77a81e1
commit ad1198aace

@ -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
}
}
}

@ -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

@ -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)
}

Loading…
Cancel
Save