From e94ae90d678e73886d4776f168918d0888e1efb3 Mon Sep 17 00:00:00 2001 From: Subhajit Mallick <153619690+subhajitxyz@users.noreply.github.com> Date: Fri, 4 Oct 2024 11:42:13 +0530 Subject: [PATCH] Changes in logic --- .../networking/NetworkConnectionTestUtil.kt | 20 +++++++++---------- utility/src/main/AndroidManifest.xml | 1 + .../NetworkConnectionUtilProdImpl.kt | 15 ++++++-------- 3 files changed, 16 insertions(+), 20 deletions(-) diff --git a/testing/src/main/java/org/oppia/android/testing/networking/NetworkConnectionTestUtil.kt b/testing/src/main/java/org/oppia/android/testing/networking/NetworkConnectionTestUtil.kt index 22001d0d5aa..f473b0a9cd9 100644 --- a/testing/src/main/java/org/oppia/android/testing/networking/NetworkConnectionTestUtil.kt +++ b/testing/src/main/java/org/oppia/android/testing/networking/NetworkConnectionTestUtil.kt @@ -13,6 +13,7 @@ import org.mockito.Mockito.mock import org.robolectric.Shadows.shadowOf import org.robolectric.shadows.ShadowNetworkInfo import javax.inject.Inject +import org.robolectric.shadows.ShadowNetworkCapabilities /** Test utility to modify [ShadowNetworkInfo] in tests. */ class NetworkConnectionTestUtil @Inject constructor(private val context: Context) { @@ -20,6 +21,8 @@ class NetworkConnectionTestUtil @Inject constructor(private val context: Context private val connectivityManager by lazy { context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager } + private val networkCapabilities = ShadowNetworkCapabilities.newInstance() + /** * Sets the [ShadowNetworkInfo] during the test. @@ -53,17 +56,12 @@ class NetworkConnectionTestUtil @Inject constructor(private val context: Context * @param transportType the type of transport being used (e.g., WiFi, Cellular) */ private fun setNetworkCapabilities(isConnected: Boolean, transportType: Int) { - val networkCapabilities = mock(NetworkCapabilities::class.java) - - `when`(networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)) - .thenReturn(isConnected) - - `when`(networkCapabilities.hasTransport(transportType)).thenReturn(isConnected) - - shadowOf(connectivityManager).setNetworkCapabilities( - mock(Network::class.java), - networkCapabilities - ) + shadowOf(networkCapabilities).addCapability(transportType) + if (isConnected) { + shadowOf(networkCapabilities).addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) + } else { + shadowOf(networkCapabilities).removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) + } } private fun getTransportTypeFromStatus(status: Int): Int { diff --git a/utility/src/main/AndroidManifest.xml b/utility/src/main/AndroidManifest.xml index d06626d50ac..fc02d055219 100644 --- a/utility/src/main/AndroidManifest.xml +++ b/utility/src/main/AndroidManifest.xml @@ -1,4 +1,5 @@ + diff --git a/utility/src/main/java/org/oppia/android/util/networking/NetworkConnectionUtilProdImpl.kt b/utility/src/main/java/org/oppia/android/util/networking/NetworkConnectionUtilProdImpl.kt index 0632de6f203..db0cd666d8b 100644 --- a/utility/src/main/java/org/oppia/android/util/networking/NetworkConnectionUtilProdImpl.kt +++ b/utility/src/main/java/org/oppia/android/util/networking/NetworkConnectionUtilProdImpl.kt @@ -4,7 +4,6 @@ import android.content.Context import android.net.ConnectivityManager import android.net.NetworkCapabilities import android.os.Build -import androidx.annotation.RequiresApi import org.oppia.android.util.networking.NetworkConnectionUtil.ProdConnectionStatus.CELLULAR import org.oppia.android.util.networking.NetworkConnectionUtil.ProdConnectionStatus.LOCAL import org.oppia.android.util.networking.NetworkConnectionUtil.ProdConnectionStatus.NONE @@ -33,11 +32,9 @@ class NetworkConnectionUtilProdImpl @Inject constructor( } /** Uses NetworkCapabilities for SDK versions >= 23. */ - @RequiresApi(Build.VERSION_CODES.M) private fun getConnectionStatusForNewerDevices( connectivityManager: ConnectivityManager ): ConnectionStatus { - val network = connectivityManager.activeNetwork val capabilities = connectivityManager.getNetworkCapabilities(network) return capabilities?.let { @@ -56,15 +53,15 @@ class NetworkConnectionUtilProdImpl @Inject constructor( private fun getConnectionStatusForOlderDevices( connectivityManager: ConnectivityManager ): ConnectionStatus { - - val activeNetworkInfo = connectivityManager.activeNetworkInfo - return activeNetworkInfo?.let { activeNetwork -> + return connectivityManager.activeNetworkInfo?.let { activeNetwork -> val isConnected = activeNetwork.isConnected - val isLocal = activeNetwork.type == ConnectivityManager.TYPE_WIFI || + val isLocal = activeNetwork.type == + ConnectivityManager.TYPE_WIFI || activeNetwork.type == ConnectivityManager.TYPE_ETHERNET - val isCellular = activeNetwork.type == ConnectivityManager.TYPE_MOBILE || + val isCellular = activeNetwork.type == + ConnectivityManager.TYPE_MOBILE || activeNetwork.type == ConnectivityManager.TYPE_WIMAX - when { + return@let when { isConnected && isLocal -> LOCAL isConnected && isCellular -> CELLULAR else -> NONE