From 03865a0c4d699cb22db2c5fb0a09b244f36c1618 Mon Sep 17 00:00:00 2001 From: emanuele-f Date: Wed, 15 Jun 2022 16:22:34 +0200 Subject: [PATCH] Fix possible SecurityException in Android 11 --- .../remote_capture/CaptureService.java | 17 +++++++++++++---- .../com/emanuelef/remote_capture/Utils.java | 17 +++++++++++------ 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/com/emanuelef/remote_capture/CaptureService.java b/app/src/main/java/com/emanuelef/remote_capture/CaptureService.java index b3da8996..9929078f 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/CaptureService.java +++ b/app/src/main/java/com/emanuelef/remote_capture/CaptureService.java @@ -599,10 +599,19 @@ public class CaptureService extends VpnService implements Runnable { } }; - cm.registerNetworkCallback( - new NetworkRequest.Builder() - .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET).build(), - mNetworkCallback); + try { + cm.registerNetworkCallback( + new NetworkRequest.Builder() + .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET).build(), + mNetworkCallback); + } catch (SecurityException e) { + // this is a bug in Android 11 - https://issuetracker.google.com/issues/175055271?pli=1 + e.printStackTrace(); + + Log.w(TAG, "registerNetworkCallback failed, DNS server detection disabled"); + dns_server = FALLBACK_DNS_SERVER; + mNetworkCallback = null; + } } private void unregisterNetworkCallbacks() { diff --git a/app/src/main/java/com/emanuelef/remote_capture/Utils.java b/app/src/main/java/com/emanuelef/remote_capture/Utils.java index 47c724fd..180334dc 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/Utils.java +++ b/app/src/main/java/com/emanuelef/remote_capture/Utils.java @@ -490,15 +490,20 @@ public class Utils { public static boolean hasVPNRunning(Context context) { ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); if(cm != null) { - Network[] networks = cm.getAllNetworks(); + try { + Network[] networks = cm.getAllNetworks(); - for(Network net : networks) { - NetworkCapabilities cap = cm.getNetworkCapabilities(net); + for(Network net : networks) { + NetworkCapabilities cap = cm.getNetworkCapabilities(net); - if ((cap != null) && cap.hasTransport(NetworkCapabilities.TRANSPORT_VPN)) { - Log.d("hasVPNRunning", "detected VPN connection: " + net.toString()); - return true; + if ((cap != null) && cap.hasTransport(NetworkCapabilities.TRANSPORT_VPN)) { + Log.d("hasVPNRunning", "detected VPN connection: " + net.toString()); + return true; + } } + } catch (SecurityException e) { + // this is a bug in Android 11 - https://issuetracker.google.com/issues/175055271?pli=1 + e.printStackTrace(); } }