Less verbose network status / live update

This commit is contained in:
M66B 2015-11-14 10:49:15 +01:00
parent f8ef70d5a6
commit 84617b9b00
2 changed files with 59 additions and 14 deletions

View File

@ -19,11 +19,14 @@ package eu.faircode.netguard;
Copyright 2015 by Marcel Bokhorst (M66B) Copyright 2015 by Marcel Bokhorst (M66B)
*/ */
import android.content.BroadcastReceiver;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences; import android.content.SharedPreferences;
import android.net.ConnectivityManager; import android.net.ConnectivityManager;
import android.net.Network; import android.net.Network;
import android.net.NetworkInfo;
import android.os.AsyncTask; import android.os.AsyncTask;
import android.os.Bundle; import android.os.Bundle;
import android.preference.Preference; import android.preference.Preference;
@ -53,6 +56,8 @@ import javax.xml.parsers.SAXParserFactory;
public class ActivitySettings extends AppCompatActivity implements SharedPreferences.OnSharedPreferenceChangeListener { public class ActivitySettings extends AppCompatActivity implements SharedPreferences.OnSharedPreferenceChangeListener {
private static final String TAG = "NetGuard.Settings"; private static final String TAG = "NetGuard.Settings";
private Preference pref_vpn = null;
private static final int REQUEST_EXPORT = 1; private static final int REQUEST_EXPORT = 1;
private static final int REQUEST_IMPORT = 2; private static final int REQUEST_IMPORT = 2;
private static final Intent INTENT_VPN_SETTINGS = new Intent("android.net.vpn.SETTINGS"); private static final Intent INTENT_VPN_SETTINGS = new Intent("android.net.vpn.SETTINGS");
@ -68,10 +73,27 @@ public class ActivitySettings extends AppCompatActivity implements SharedPrefere
} }
@Override @Override
public void onDestroy() { protected void onResume() {
super.onResume();
// Listen for preference changes
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
prefs.registerOnSharedPreferenceChangeListener(this);
// Listen for connectivity updates
IntentFilter ifConnectivity = new IntentFilter();
ifConnectivity.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
registerReceiver(connectivityChangedReceiver, ifConnectivity);
}
@Override
protected void onPause() {
super.onPause();
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
prefs.unregisterOnSharedPreferenceChangeListener(this); prefs.unregisterOnSharedPreferenceChangeListener(this);
super.onDestroy();
unregisterReceiver(connectivityChangedReceiver);
} }
public void setup(PreferenceScreen screen) { public void setup(PreferenceScreen screen) {
@ -95,21 +117,13 @@ public class ActivitySettings extends AppCompatActivity implements SharedPrefere
} }
}); });
Preference pref_vpn = screen.findPreference("vpn"); pref_vpn = screen.findPreference("vpn");
if (Util.isDebuggable(this)) { if (Util.isDebuggable(this)) {
pref_vpn.setEnabled(INTENT_VPN_SETTINGS.resolveActivity(this.getPackageManager()) != null); pref_vpn.setEnabled(INTENT_VPN_SETTINGS.resolveActivity(this.getPackageManager()) != null);
pref_vpn.setIntent(INTENT_VPN_SETTINGS); pref_vpn.setIntent(INTENT_VPN_SETTINGS);
updateNetworkSummary();
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
StringBuilder sb = new StringBuilder();
for (Network network : cm.getAllNetworks())
sb.append(cm.getNetworkInfo(network)).append("\n");
pref_vpn.setSummary(sb.toString());
} else } else
screen.removePreference(pref_vpn); screen.removePreference(pref_vpn);
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
prefs.registerOnSharedPreferenceChangeListener(this);
} }
@Override @Override
@ -131,6 +145,29 @@ public class ActivitySettings extends AppCompatActivity implements SharedPrefere
recreate(); recreate();
} }
private BroadcastReceiver connectivityChangedReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
updateNetworkSummary();
}
};
private void updateNetworkSummary() {
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
StringBuilder sb = new StringBuilder();
for (Network network : cm.getAllNetworks()) {
NetworkInfo ni = cm.getNetworkInfo(network);
sb.append("Network: ")
.append(ni.getTypeName())
.append("/")
.append(ni.getSubtypeName())
.append("=")
.append(ni.getDetailedState())
.append("\r\n");
}
pref_vpn.setSummary(sb.toString());
}
@Override @Override
protected void onActivityResult(int requestCode, int resultCode, final Intent data) { protected void onActivityResult(int requestCode, int resultCode, final Intent data) {
Log.i(TAG, "onActivityResult request=" + requestCode + " result=" + requestCode + " ok=" + (resultCode == RESULT_OK)); Log.i(TAG, "onActivityResult request=" + requestCode + " result=" + requestCode + " ok=" + (resultCode == RESULT_OK));

View File

@ -168,8 +168,16 @@ public class Util {
sb.append(String.format("VPN dialogs: %b\r\n", isPackageInstalled("com.android.vpndialogs", context))); sb.append(String.format("VPN dialogs: %b\r\n", isPackageInstalled("com.android.vpndialogs", context)));
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
for (Network network : cm.getAllNetworks()) for (Network network : cm.getAllNetworks()) {
sb.append("Network: ").append(cm.getNetworkInfo(network)).append("\r\n"); NetworkInfo ni = cm.getNetworkInfo(network);
sb.append("Network: ")
.append(ni.getTypeName())
.append("/")
.append(ni.getSubtypeName())
.append("=")
.append(ni.getDetailedState())
.append("\r\n");
}
sb.append("\r\n"); sb.append("\r\n");
sb.append("Please describe your problem:\r\n"); sb.append("Please describe your problem:\r\n");