Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 921b28b7 authored by Mohammed Althaf T's avatar Mohammed Althaf T 😊
Browse files

AM: Prevent false network-related notifications

parent 0376fe1b
Loading
Loading
Loading
Loading
+19 −10
Original line number Diff line number Diff line
@@ -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
@@ -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)
            }

@@ -765,6 +770,7 @@ abstract class SyncManager<ResourceType: LocalResource<*>, out CollectionType: L
            }
        }

        if (isNetworkAvailable) {
            syncNotificationManager.notifyException(
                dataType,
                localCollection.tag,
@@ -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) =
+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