diff --git a/app/src/main/java/eu/faircode/netguard/ServiceSinkhole.java b/app/src/main/java/eu/faircode/netguard/ServiceSinkhole.java index ca06d7f0..f765159a 100644 --- a/app/src/main/java/eu/faircode/netguard/ServiceSinkhole.java +++ b/app/src/main/java/eu/faircode/netguard/ServiceSinkhole.java @@ -2464,6 +2464,7 @@ public class ServiceSinkhole extends VpnService implements SharedPreferences.OnS builder.addCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED); ConnectivityManager.NetworkCallback nc = new ConnectivityManager.NetworkCallback() { + private Boolean last_connected = null; private Boolean last_unmetered = null; private String last_generation = null; private List last_dns = null; @@ -2471,6 +2472,7 @@ public class ServiceSinkhole extends VpnService implements SharedPreferences.OnS @Override public void onAvailable(Network network) { Log.i(TAG, "Available network=" + network); + last_connected = Util.isConnected(ServiceSinkhole.this); reload("network available", ServiceSinkhole.this, false); } @@ -2494,6 +2496,12 @@ public class ServiceSinkhole extends VpnService implements SharedPreferences.OnS public void onCapabilitiesChanged(Network network, NetworkCapabilities networkCapabilities) { Log.i(TAG, "Changed capabilities=" + network); + boolean connected = Util.isConnected(ServiceSinkhole.this); + if (connected && (last_connected == null || !last_connected)) { + last_connected = connected; + reload("Connected state changed", ServiceSinkhole.this, false); + } + boolean unmetered = networkCapabilities.hasCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED); String generation = Util.getNetworkGeneration(ServiceSinkhole.this); Log.i(TAG, "Generation=" + generation + " unmetered=" + unmetered); @@ -2523,6 +2531,7 @@ public class ServiceSinkhole extends VpnService implements SharedPreferences.OnS @Override public void onLost(Network network) { Log.i(TAG, "Lost network=" + network); + last_connected = Util.isConnected(ServiceSinkhole.this); reload("network lost", ServiceSinkhole.this, false); }