Show disconnected state

This commit is contained in:
M66B 2015-11-25 21:09:00 +01:00
parent a516cc0007
commit 2f42e18b2e
4 changed files with 37 additions and 13 deletions

View File

@ -324,10 +324,13 @@ public class ActivityMain extends AppCompatActivity implements SharedPreferences
Util.logExtras(intent);
if (adapter != null)
if (intent.getBooleanExtra("metered", false))
adapter.setMobileActive();
if (intent.getBooleanExtra("connected", false))
if (intent.getBooleanExtra("metered", false))
adapter.setMobileActive();
else
adapter.setWifiActive();
else
adapter.setWifiActive();
adapter.setDisconnected();
}
};

View File

@ -182,6 +182,12 @@ public class RuleAdapter extends RecyclerView.Adapter<RuleAdapter.ViewHolder> im
notifyDataSetChanged();
}
public void setDisconnected() {
wifiActive = false;
otherActive = false;
notifyDataSetChanged();
}
@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
// Get rule

View File

@ -54,6 +54,7 @@ import java.nio.ByteOrder;
public class SinkholeService extends VpnService {
private static final String TAG = "NetGuard.Service";
private boolean last_connected;
private boolean last_metered;
private boolean last_roaming;
private ParcelFileDescriptor vpn = null;
@ -125,6 +126,7 @@ public class SinkholeService extends VpnService {
} else {
Intent ruleset = new Intent(ActivityMain.ACTION_RULES_CHANGED);
ruleset.putExtra("connected", last_connected);
ruleset.putExtra("metered", last_metered);
LocalBroadcastManager.getInstance(SinkholeService.this).sendBroadcast(ruleset);
}
@ -152,6 +154,7 @@ public class SinkholeService extends VpnService {
case stop:
if (vpn == null) {
Intent ruleset = new Intent(ActivityMain.ACTION_RULES_CHANGED);
ruleset.putExtra("connected", last_connected);
ruleset.putExtra("metered", last_metered);
LocalBroadcastManager.getInstance(SinkholeService.this).sendBroadcast(ruleset);
} else {
@ -186,22 +189,26 @@ public class SinkholeService extends VpnService {
boolean interactive = Util.isInteractive(this);
boolean useMetered = prefs.getBoolean("use_metered", false);
// Update connected state
last_connected = Util.isConnected(SinkholeService.this);
// Update metered state
if (wifi && !useMetered)
metered = false;
last_metered = metered;
// Update roaming state
if (last_roaming != Util.isRoaming(SinkholeService.this)) {
last_roaming = !last_roaming;
Log.i(TAG, "New state roaming=" + last_roaming);
}
Log.i(TAG, "Starting wifi=" + wifi +
" metered=" + metered + "/" + useMetered +
Log.i(TAG, "Starting connected=" + last_connected +
" wifi=" + wifi +
" metered=" + metered +
" roaming=" + last_roaming +
" interactive=" + interactive);
// Update metered state
if (wifi && !useMetered)
metered = false;
last_metered = metered;
// Build VPN service
final Builder builder = new Builder();
builder.setSession(getString(R.string.app_name) + " session");
@ -246,6 +253,7 @@ public class SinkholeService extends VpnService {
builder.setBlocking(true);
Intent ruleset = new Intent(ActivityMain.ACTION_RULES_CHANGED);
ruleset.putExtra("connected", last_connected);
ruleset.putExtra("metered", metered);
LocalBroadcastManager.getInstance(this).sendBroadcast(ruleset);
@ -401,6 +409,7 @@ public class SinkholeService extends VpnService {
mServiceLooper = thread.getLooper();
mServiceHandler = new ServiceHandler(mServiceLooper);
last_connected = Util.isConnected(this);
last_metered = Util.isMeteredNetwork(this);
last_roaming = Util.isRoaming(this);

View File

@ -70,9 +70,10 @@ public class Util {
}
}
public static boolean isRoaming(Context context) {
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
return tm.isNetworkRoaming();
public static boolean isConnected(Context context) {
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo ni = cm.getActiveNetworkInfo();
return (ni != null && ni.isConnected());
}
public static boolean isWifiActive(Context context) {
@ -86,6 +87,11 @@ public class Util {
return cm.isActiveNetworkMetered();
}
public static boolean isRoaming(Context context) {
TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
return tm.isNetworkRoaming();
}
public static boolean isInteractive(Context context) {
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
return pm.isInteractive();