mirror of
https://github.com/M66B/NetGuard.git
synced 2024-12-22 07:43:15 +00:00
Reduced number of reloads
This commit is contained in:
parent
1d2a5c8958
commit
1b9aa547d8
1 changed files with 45 additions and 2 deletions
|
@ -2275,7 +2275,8 @@ public class ServiceSinkhole extends VpnService implements SharedPreferences.OnS
|
|||
}
|
||||
|
||||
private void checkConnectivity(Network network, NetworkInfo ni, NetworkCapabilities capabilities) {
|
||||
if (ni != null && capabilities != null &&
|
||||
if (isActiveNetwork(network) &&
|
||||
ni != null && capabilities != null &&
|
||||
ni.getDetailedState() != NetworkInfo.DetailedState.SUSPENDED &&
|
||||
ni.getDetailedState() != NetworkInfo.DetailedState.BLOCKED &&
|
||||
ni.getDetailedState() != NetworkInfo.DetailedState.DISCONNECTED &&
|
||||
|
@ -2619,6 +2620,7 @@ public class ServiceSinkhole extends VpnService implements SharedPreferences.OnS
|
|||
builder.addCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED);
|
||||
|
||||
ConnectivityManager.NetworkCallback nc = new ConnectivityManager.NetworkCallback() {
|
||||
private Network last_active = null;
|
||||
private Network last_network = null;
|
||||
private Boolean last_connected = null;
|
||||
private Boolean last_metered = null;
|
||||
|
@ -2628,6 +2630,10 @@ public class ServiceSinkhole extends VpnService implements SharedPreferences.OnS
|
|||
@Override
|
||||
public void onAvailable(Network network) {
|
||||
Log.i(TAG, "Available network=" + network);
|
||||
if (!isActiveNetwork(network))
|
||||
return;
|
||||
|
||||
last_active = network;
|
||||
last_connected = Util.isConnected(ServiceSinkhole.this);
|
||||
last_metered = Util.isMeteredNetwork(ServiceSinkhole.this);
|
||||
reload("network available", ServiceSinkhole.this, false);
|
||||
|
@ -2636,6 +2642,8 @@ public class ServiceSinkhole extends VpnService implements SharedPreferences.OnS
|
|||
@Override
|
||||
public void onLinkPropertiesChanged(Network network, LinkProperties linkProperties) {
|
||||
Log.i(TAG, "Changed properties=" + network + " props=" + linkProperties);
|
||||
if (!isActiveNetwork(network))
|
||||
return;
|
||||
|
||||
// Make sure the right DNS servers are being used
|
||||
List<InetAddress> dns = linkProperties.getDnsServers();
|
||||
|
@ -2654,6 +2662,8 @@ public class ServiceSinkhole extends VpnService implements SharedPreferences.OnS
|
|||
@Override
|
||||
public void onCapabilitiesChanged(Network network, NetworkCapabilities networkCapabilities) {
|
||||
Log.i(TAG, "Changed capabilities=" + network + " caps=" + networkCapabilities);
|
||||
if (!isActiveNetwork(network))
|
||||
return;
|
||||
|
||||
boolean connected = Util.isConnected(ServiceSinkhole.this);
|
||||
boolean metered = Util.isMeteredNetwork(ServiceSinkhole.this);
|
||||
|
@ -2692,7 +2702,11 @@ public class ServiceSinkhole extends VpnService implements SharedPreferences.OnS
|
|||
|
||||
@Override
|
||||
public void onLost(Network network) {
|
||||
Log.i(TAG, "Lost network=" + network);
|
||||
Log.i(TAG, "Lost network=" + network + " active=" + isActiveNetwork(network));
|
||||
if (last_active == null || !last_active.equals(network))
|
||||
return;
|
||||
|
||||
last_active = null;
|
||||
last_connected = Util.isConnected(ServiceSinkhole.this);
|
||||
reload("network lost", ServiceSinkhole.this, false);
|
||||
}
|
||||
|
@ -2731,6 +2745,35 @@ public class ServiceSinkhole extends VpnService implements SharedPreferences.OnS
|
|||
}
|
||||
}
|
||||
|
||||
private Network getActiveNetwork() {
|
||||
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
|
||||
if (cm == null)
|
||||
return null;
|
||||
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
|
||||
return cm.getActiveNetwork();
|
||||
|
||||
NetworkInfo ani = cm.getActiveNetworkInfo();
|
||||
if (ani == null)
|
||||
return null;
|
||||
|
||||
Network[] networks = cm.getAllNetworks();
|
||||
for (Network network : networks) {
|
||||
NetworkInfo ni = cm.getNetworkInfo(network);
|
||||
if (ni == null)
|
||||
continue;
|
||||
if (ni.getType() == ani.getType() &&
|
||||
ni.getSubtype() == ani.getSubtype())
|
||||
return network;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private boolean isActiveNetwork(Network network) {
|
||||
return (network != null && network.equals(getActiveNetwork()));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSharedPreferenceChanged(SharedPreferences prefs, String name) {
|
||||
if ("theme".equals(name)) {
|
||||
|
|
Loading…
Reference in a new issue