From 954f6ed1a17f9193dd000534e404f9bbf2946264 Mon Sep 17 00:00:00 2001 From: M66B Date: Fri, 2 Jun 2023 12:28:15 +0200 Subject: [PATCH] Special case for VPN kill switch --- .../java/eu/faircode/email/ConnectionHelper.java | 13 +++++++++++++ app/src/main/java/eu/faircode/email/Helper.java | 4 ++++ 2 files changed, 17 insertions(+) diff --git a/app/src/main/java/eu/faircode/email/ConnectionHelper.java b/app/src/main/java/eu/faircode/email/ConnectionHelper.java index bcf104ab68..0a86675981 100644 --- a/app/src/main/java/eu/faircode/email/ConnectionHelper.java +++ b/app/src/main/java/eu/faircode/email/ConnectionHelper.java @@ -274,6 +274,19 @@ public class ConnectionHelper { Network active = cm.getActiveNetwork(); if (active == null) { + // Special case: + // - getActiveNetworkInfo: DISCONNECTED/BLOCKED (data saver / kill switch?) + // - getActiveNetwork: null + // - OS: GrapheneOS / IVPN + if (standalone_vpn) + for (Network network : cm.getAllNetworks()) { + NetworkCapabilities caps = cm.getNetworkCapabilities(network); + if (caps.hasTransport(NetworkCapabilities.TRANSPORT_VPN) && + caps.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) && + caps.hasCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED)) + return !caps.hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED); + } + Log.i("isMetered: no active network"); return null; } diff --git a/app/src/main/java/eu/faircode/email/Helper.java b/app/src/main/java/eu/faircode/email/Helper.java index ba5f10ea0d..7cceb60db0 100644 --- a/app/src/main/java/eu/faircode/email/Helper.java +++ b/app/src/main/java/eu/faircode/email/Helper.java @@ -1494,6 +1494,10 @@ public class Helper { return ("Microsoft".equalsIgnoreCase(Build.MANUFACTURER) && "Surface Duo 2".equals(Build.MODEL)); } + static boolean isGrapheneOS() { + return "grapheneos".equalsIgnoreCase(Build.HOST); + } + static boolean isArc() { // https://github.com/google/talkback/blob/master/utils/src/main/java/com/google/android/accessibility/utils/FeatureSupport.java return (Build.DEVICE != null) && Build.DEVICE.matches(".+_cheets|cheets_.+");