Author: Adam Evyčędo <git@apiote.xyz>
use new methods to check network info
app/src/main/java/xyz/apiote/bimba/czwek/api/Api.kt | 23 +++++++++++++-
diff --git a/app/src/main/java/xyz/apiote/bimba/czwek/api/Api.kt b/app/src/main/java/xyz/apiote/bimba/czwek/api/Api.kt index 636f8584c92045afa348235cdcbff875bd403eec..3ebf1676b286d06d1505a26a162af9843274a88a 100644 --- a/app/src/main/java/xyz/apiote/bimba/czwek/api/Api.kt +++ b/app/src/main/java/xyz/apiote/bimba/czwek/api/Api.kt @@ -7,6 +7,7 @@ import android.content.Context import android.content.Context.MODE_PRIVATE import android.net.ConnectivityManager +import android.net.NetworkCapabilities import android.os.Build import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext @@ -176,9 +177,7 @@ suspend fun rawRequest( url: URL, server: Server, context: Context, responseVersion: Array<UInt> ): Result { - val cm = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager - @Suppress("DEPRECATION") // fixme later(API_29, API_23) https://developer.android.com/reference/android/net/ConnectivityManager#getActiveNetwork() - if (cm.activeNetworkInfo == null) { + if (!isNetworkAvailable(context)) { return Result(null, Error(0, R.string.error_offline, R.drawable.error_net)) } return withContext(Dispatchers.IO) { @@ -200,6 +199,24 @@ } } catch (e: IOException) { Result(null, Error(0, R.string.error_connecting, R.drawable.error_server)) } + } +} + +private fun isNetworkAvailable(context: Context): Boolean { + val connectivityManager = + context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager + + return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { + connectivityManager.activeNetwork?.let {network -> + connectivityManager.getNetworkCapabilities(network)?.let {capabilities -> + capabilities.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) || capabilities.hasTransport( + NetworkCapabilities.TRANSPORT_CELLULAR + ) || capabilities.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET) + } + }?: false + } else { + @Suppress("DEPRECATION") + connectivityManager.activeNetworkInfo?.isConnected ?: false } }