Loading app/src/main/kotlin/at/bitfire/davdroid/sync/SyncManager.kt +19 −10 Original line number Diff line number Diff line Loading @@ -40,6 +40,7 @@ import at.bitfire.davdroid.resource.SyncState import at.bitfire.davdroid.sync.account.InvalidAccountException import at.bitfire.synctools.storage.LocalStorageException import dagger.hilt.android.qualifiers.ApplicationContext import foundation.e.accountmanager.utils.SystemUtils import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.launch Loading Loading @@ -733,10 +734,14 @@ abstract class SyncManager<ResourceType: LocalResource<*>, out CollectionType: L */ private fun handleException(e: Throwable, local: LocalResource<*>?, remote: HttpUrl?) { var message: String var isNetworkAvailable = true when (e) { is IOException -> { logger.log(Level.WARNING, "I/O error", e) isNetworkAvailable = SystemUtils.isNetworkAvailable(context) if (isNetworkAvailable) { syncResult.numIoExceptions++ } message = context.getString(R.string.sync_error_io, e.localizedMessage) } Loading Loading @@ -765,6 +770,7 @@ abstract class SyncManager<ResourceType: LocalResource<*>, out CollectionType: L } } if (isNetworkAvailable) { syncNotificationManager.notifyException( dataType, localCollection.tag, Loading @@ -774,6 +780,9 @@ abstract class SyncManager<ResourceType: LocalResource<*>, out CollectionType: L local, remote ) } else { logger.log(Level.WARNING, "No network available, no notification shown", e) } } protected fun notifyInvalidResource(e: Throwable, fileName: String) = Loading app/src/main/kotlin/foundation/e/accountmanager/utils/SystemUtils.kt 0 → 100644 +33 −0 Original line number Diff line number Diff line /* * Copyright © All Contributors. See LICENSE and AUTHORS in the root directory for details. */ package foundation.e.accountmanager.utils import android.content.Context import android.net.ConnectivityManager import android.net.Network import android.net.NetworkCapabilities import android.os.Build import androidx.annotation.RequiresApi object SystemUtils { fun isNetworkAvailable(context: Context): Boolean { val cm: ConnectivityManager = context.getSystemService(ConnectivityManager::class.java) val activeNetwork: Network? = cm.activeNetwork val networkCapabilities = cm.getNetworkCapabilities(activeNetwork) if (networkCapabilities != null && networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) && networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED) ) { return networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) || networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET) || networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_USB) || networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_VPN) || networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) } return false } } No newline at end of file Loading
app/src/main/kotlin/at/bitfire/davdroid/sync/SyncManager.kt +19 −10 Original line number Diff line number Diff line Loading @@ -40,6 +40,7 @@ import at.bitfire.davdroid.resource.SyncState import at.bitfire.davdroid.sync.account.InvalidAccountException import at.bitfire.synctools.storage.LocalStorageException import dagger.hilt.android.qualifiers.ApplicationContext import foundation.e.accountmanager.utils.SystemUtils import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.launch Loading Loading @@ -733,10 +734,14 @@ abstract class SyncManager<ResourceType: LocalResource<*>, out CollectionType: L */ private fun handleException(e: Throwable, local: LocalResource<*>?, remote: HttpUrl?) { var message: String var isNetworkAvailable = true when (e) { is IOException -> { logger.log(Level.WARNING, "I/O error", e) isNetworkAvailable = SystemUtils.isNetworkAvailable(context) if (isNetworkAvailable) { syncResult.numIoExceptions++ } message = context.getString(R.string.sync_error_io, e.localizedMessage) } Loading Loading @@ -765,6 +770,7 @@ abstract class SyncManager<ResourceType: LocalResource<*>, out CollectionType: L } } if (isNetworkAvailable) { syncNotificationManager.notifyException( dataType, localCollection.tag, Loading @@ -774,6 +780,9 @@ abstract class SyncManager<ResourceType: LocalResource<*>, out CollectionType: L local, remote ) } else { logger.log(Level.WARNING, "No network available, no notification shown", e) } } protected fun notifyInvalidResource(e: Throwable, fileName: String) = Loading
app/src/main/kotlin/foundation/e/accountmanager/utils/SystemUtils.kt 0 → 100644 +33 −0 Original line number Diff line number Diff line /* * Copyright © All Contributors. See LICENSE and AUTHORS in the root directory for details. */ package foundation.e.accountmanager.utils import android.content.Context import android.net.ConnectivityManager import android.net.Network import android.net.NetworkCapabilities import android.os.Build import androidx.annotation.RequiresApi object SystemUtils { fun isNetworkAvailable(context: Context): Boolean { val cm: ConnectivityManager = context.getSystemService(ConnectivityManager::class.java) val activeNetwork: Network? = cm.activeNetwork val networkCapabilities = cm.getNetworkCapabilities(activeNetwork) if (networkCapabilities != null && networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) && networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED) ) { return networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) || networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET) || networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_USB) || networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_VPN) || networkCapabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) } return false } } No newline at end of file