Refactoring, comments, cleanup

This commit is contained in:
M66B 2015-10-25 16:28:41 +01:00
parent f9b1f1f309
commit 918a633336
4 changed files with 41 additions and 14 deletions

View File

@ -75,11 +75,11 @@ public class ActivityMain extends AppCompatActivity implements SharedPreferences
});
swEnabled.setChecked(prefs.getBoolean("enabled", false));
// Listen for external enabled changes
// Listen for preference changes
prefs.registerOnSharedPreferenceChangeListener(this);
// Fill application list
getApplicationList();
fillApplicationList();
// Listen for added/removed applications
IntentFilter intentFilter = new IntentFilter();
@ -102,16 +102,17 @@ public class ActivityMain extends AppCompatActivity implements SharedPreferences
@Override
public void onReceive(Context context, Intent intent) {
Log.i(TAG, "Received " + intent);
getApplicationList();
fillApplicationList();
}
};
private void getApplicationList() {
// Package list
private void fillApplicationList() {
// Get recycler view
final RecyclerView rvApplication = (RecyclerView) findViewById(R.id.rvApplication);
rvApplication.setHasFixedSize(true);
rvApplication.setLayoutManager(new LinearLayoutManager(this));
// Get/set application list
new AsyncTask<Object, Object, List<Rule>>() {
@Override
protected List<Rule> doInBackground(Object... arg) {
@ -132,7 +133,10 @@ public class ActivityMain extends AppCompatActivity implements SharedPreferences
public void onSharedPreferenceChanged(SharedPreferences prefs, String name) {
Log.i(TAG, "Changed pref=" + name);
if ("enabled".equals(name)) {
// Get enabled
boolean enabled = prefs.getBoolean(name, false);
// Check switch state
Switch swEnabled = (Switch) getSupportActionBar().getCustomView().findViewById(R.id.swEnabled);
if (swEnabled.isChecked() != enabled)
swEnabled.setChecked(enabled);
@ -144,6 +148,7 @@ public class ActivityMain extends AppCompatActivity implements SharedPreferences
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main, menu);
// Search
MenuItem searchItem = menu.findItem(R.id.menu_search);
SearchView searchView = (SearchView) MenuItemCompat.getActionView(searchItem);
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@ -178,18 +183,19 @@ public class ActivityMain extends AppCompatActivity implements SharedPreferences
// Handle item selection
switch (item.getItemId()) {
case R.id.menu_wifi:
// Toggle Wi-Fi
if (adapter != null)
adapter.toggle("wifi", this);
invalidateOptionsMenu();
return true;
case R.id.menu_other:
// Toggle other
if (adapter != null)
adapter.toggle("other", this);
invalidateOptionsMenu();
return true;
case R.id.menu_vpn_settings:
// Open VPN settings
Intent intent = new Intent("android.net.vpn.SETTINGS");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
if (intent.resolveActivity(getPackageManager()) != null)
@ -199,6 +205,7 @@ public class ActivityMain extends AppCompatActivity implements SharedPreferences
return true;
case R.id.menu_about:
// Show about
LayoutInflater inflater = LayoutInflater.from(this);
View view = inflater.inflate(R.layout.about, null);
TextView tvVersion = (TextView) view.findViewById(R.id.tvVersion);
@ -217,9 +224,11 @@ public class ActivityMain extends AppCompatActivity implements SharedPreferences
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_VPN) {
// Update enabled state
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
prefs.edit().putBoolean("enabled", resultCode == RESULT_OK).apply();
// Start service
if (resultCode == RESULT_OK) {
Intent intent = new Intent(ActivityMain.this, BlackHoleService.class);
intent.putExtra(BlackHoleService.EXTRA_COMMAND, BlackHoleService.Command.start);

View File

@ -26,19 +26,21 @@ public class BlackHoleService extends VpnService {
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// Get enabled
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
boolean enabled = prefs.getBoolean("enabled", false);
// Get command
Command cmd = (intent == null ? Command.start : (Command) intent.getSerializableExtra(EXTRA_COMMAND));
Log.i(TAG, "Start intent=" + intent + " command=" + cmd + " enabled=" + enabled + " vpn=" + (vpn != null));
// Process command
if (cmd == Command.reload || cmd == Command.stop) {
if (vpn != null)
vpnStop();
if (cmd == Command.stop)
stopSelf();
}
if (cmd == Command.start || cmd == Command.reload) {
if (enabled && vpn == null) {
Log.i(TAG, "Starting");
@ -52,7 +54,7 @@ public class BlackHoleService extends VpnService {
private void vpnStart() {
Log.i(TAG, "Starting");
// Check if Wi-Fi connection
// Check if Wi-Fi
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo ni = cm.getActiveNetworkInfo();
boolean wifi = (ni != null && ni.getType() == ConnectivityManager.TYPE_WIFI);
@ -60,7 +62,7 @@ public class BlackHoleService extends VpnService {
// Build VPN service
final Builder builder = new Builder();
builder.setSession("BlackHoleService");
builder.setSession(getString(R.string.app_name));
builder.addAddress("10.1.10.1", 32);
builder.addRoute("0.0.0.0", 0);
builder.setBlocking(false);
@ -75,6 +77,7 @@ public class BlackHoleService extends VpnService {
}
}
// Build configure intent
Intent configure = new Intent(this, ActivityMain.class);
PendingIntent pi = PendingIntent.getActivity(this, 0, configure, PendingIntent.FLAG_UPDATE_CURRENT);
builder.setConfigureIntent(pi);
@ -110,6 +113,8 @@ public class BlackHoleService extends VpnService {
public void onCreate() {
super.onCreate();
Log.i(TAG, "Create");
// Request connectivity updates
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
registerReceiver(connectivityChangedReceiver, intentFilter);
@ -118,19 +123,26 @@ public class BlackHoleService extends VpnService {
@Override
public void onDestroy() {
Log.i(TAG, "Destroy");
if (vpn != null)
vpnStop();
unregisterReceiver(connectivityChangedReceiver);
super.onDestroy();
}
@Override
public void onRevoke() {
Log.i(TAG, "Revoke");
if (vpn != null)
vpnStop();
// Disable firewall
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
prefs.edit().putBoolean("enabled", false).apply();
super.onRevoke();
}
}

View File

@ -13,6 +13,7 @@ public class Receiver extends BroadcastReceiver {
public void onReceive(final Context context, Intent intent) {
Log.i(TAG, "Received " + intent);
// Start service
if (VpnService.prepare(context) == null) {
Intent service = new Intent(context, BlackHoleService.class);
service.putExtra(BlackHoleService.EXTRA_COMMAND, BlackHoleService.Command.start);

View File

@ -51,12 +51,10 @@ public class RuleAdapter extends RecyclerView.Adapter<RuleAdapter.ViewHolder> im
@Override
public void onBindViewHolder(final ViewHolder holder, int position) {
// Get rule
final Rule rule = listSelected.get(position);
holder.ivIcon.setImageDrawable(rule.getIcon(holder.view.getContext()));
holder.tvName.setText(rule.name);
holder.tvPackage.setText(rule.info.packageName);
// Rule change listener
CompoundButton.OnCheckedChangeListener cbListener = new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
@ -81,6 +79,10 @@ public class RuleAdapter extends RecyclerView.Adapter<RuleAdapter.ViewHolder> im
}
};
holder.ivIcon.setImageDrawable(rule.getIcon(holder.view.getContext()));
holder.tvName.setText(rule.name);
holder.tvPackage.setText(rule.info.packageName);
holder.cbWifi.setOnCheckedChangeListener(null);
holder.cbWifi.setChecked(rule.wifi_blocked);
holder.cbWifi.setOnCheckedChangeListener(cbListener);
@ -125,6 +127,7 @@ public class RuleAdapter extends RecyclerView.Adapter<RuleAdapter.ViewHolder> im
}
public void toggle(String name, Context context) {
// Toggle rule set
SharedPreferences.Editor editor = context.getSharedPreferences(name, Context.MODE_PRIVATE).edit();
for (Rule rule : listSelected) {
if ("wifi".equals(name)) {
@ -137,10 +140,12 @@ public class RuleAdapter extends RecyclerView.Adapter<RuleAdapter.ViewHolder> im
}
editor.apply();
// Reload rules
Intent intent = new Intent(context, BlackHoleService.class);
intent.putExtra(BlackHoleService.EXTRA_COMMAND, BlackHoleService.Command.reload);
context.startService(intent);
// Update UI
notifyDataSetChanged();
}