diff --git a/src/frontends/android/app/build.gradle b/src/frontends/android/app/build.gradle index 28dc34afe..094cc4178 100644 --- a/src/frontends/android/app/build.gradle +++ b/src/frontends/android/app/build.gradle @@ -46,8 +46,8 @@ android { minSdkVersion 23 targetSdkVersion 36 - versionCode 154 - versionName "2.14.1" + versionCode 155 + versionName "2.14.2" /* Base URL of the update storage, trailing slash included */ buildConfigField "String", "UPDATE_BASE_URL", "\"${updateBaseUrl}\"" diff --git a/src/frontends/android/app/src/main/java/org/strongswan/android/ui/compose/HomeViewModel.kt b/src/frontends/android/app/src/main/java/org/strongswan/android/ui/compose/HomeViewModel.kt index b6d89239a..acb075338 100644 --- a/src/frontends/android/app/src/main/java/org/strongswan/android/ui/compose/HomeViewModel.kt +++ b/src/frontends/android/app/src/main/java/org/strongswan/android/ui/compose/HomeViewModel.kt @@ -544,6 +544,11 @@ class HomeViewModel(app: Application) : AndroidViewModel(app), VpnStateService.V { val cm = ctx.getSystemService(Context.CONNECTIVITY_SERVICE) as? ConnectivityManager ?: return null to null + /* Android keeps the cellular network agent alive in parallel with + * Wi-Fi (allNetworks order is unspecified), so Wi-Fi wins if present - + * the same precedence NetworkMonitor uses for the trust decision */ + var wifiCaps: NetworkCapabilities? = null + var cellular = false for (network in cm.allNetworks) { val caps = try @@ -558,14 +563,22 @@ class HomeViewModel(app: Application) : AndroidViewModel(app), VpnStateService.V { continue } - if (caps.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) - { - return ctx.getString(R.string.network_cellular) to null - } if (caps.hasTransport(NetworkCapabilities.TRANSPORT_WIFI)) { - return ctx.getString(R.string.network_wifi) to SsidReader.from(ctx, caps) + wifiCaps = caps } + else if (caps.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR)) + { + cellular = true + } + } + if (wifiCaps != null) + { + return ctx.getString(R.string.network_wifi) to SsidReader.from(ctx, wifiCaps) + } + if (cellular) + { + return ctx.getString(R.string.network_cellular) to null } return null to null }