Bimba.git

commit 5aa108b0f9f145f2a19d31741c811ae36b52afad

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