From 6df8613004dfdb9772b9417c06b5e83fa42b8687 Mon Sep 17 00:00:00 2001 From: M66B Date: Tue, 5 Sep 2023 09:45:13 +0200 Subject: [PATCH] Check if VPN network has internet --- .../java/eu/faircode/email/ConnectionHelper.java | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/ConnectionHelper.java b/app/src/main/java/eu/faircode/email/ConnectionHelper.java index ba83851598..0e95740e60 100644 --- a/app/src/main/java/eu/faircode/email/ConnectionHelper.java +++ b/app/src/main/java/eu/faircode/email/ConnectionHelper.java @@ -300,9 +300,10 @@ public class ConnectionHelper { if (caps.hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_VPN)) { if (!caps.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)) { - Log.i("isMetered: no internet"); + Log.i("isMetered: active no internet"); return null; } + boolean captive = caps.hasCapability(NetworkCapabilities.NET_CAPABILITY_CAPTIVE_PORTAL); if ((require_validated || (require_validated_captive && captive)) && Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && @@ -330,17 +331,23 @@ public class ConnectionHelper { return null; } - if (standalone_vpn || - caps.hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_VPN)) { + if (caps.hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_VPN)) { // NET_CAPABILITY_NOT_METERED is unreliable on older Android versions boolean metered = cm.isActiveNetworkMetered(); Log.i("isMetered: active not VPN metered=" + metered); return metered; } + // Active network is VPN network + Network[] networks = cm.getAllNetworks(); - if (networks != null && networks.length == 1) { + if (standalone_vpn || (networks != null && networks.length == 1)) { // Standalone VPN + if (!caps.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)) { + Log.i("isMetered: VPN no internet"); + return null; + } + boolean metered = cm.isActiveNetworkMetered(); Log.i("isMetered: active VPN metered=" + metered); return metered;