Always reload rules

This commit is contained in:
M66B 2016-02-17 13:08:57 +01:00
parent 2ea05570da
commit 37d44af65a
7 changed files with 52 additions and 62 deletions

View File

@ -99,7 +99,7 @@ am start -a eu.faircode.netguard.STOP_PORT_FORWARD \
DatabaseHelper.getInstance(ActivityForwardApproval.this).deleteForward(protocol, dport);
}
SinkholeService.reload(null, "forwarding", ActivityForwardApproval.this);
SinkholeService.reload("forwarding", ActivityForwardApproval.this);
finish();
}

View File

@ -98,7 +98,7 @@ public class ActivityForwarding extends AppCompatActivity {
public boolean onMenuItemClick(MenuItem menuItem) {
if (menuItem.getItemId() == R.id.menu_delete) {
DatabaseHelper.getInstance(ActivityForwarding.this).deleteForward(protocol, dport);
SinkholeService.reload(null, "forwarding", ActivityForwarding.this);
SinkholeService.reload("forwarding", ActivityForwarding.this);
adapter = new AdapterForwarding(ActivityForwarding.this,
DatabaseHelper.getInstance(ActivityForwarding.this).getForwarding());
lvForwarding.setAdapter(adapter);
@ -211,7 +211,7 @@ public class ActivityForwarding extends AppCompatActivity {
protected void onPostExecute(Throwable ex) {
if (running)
if (ex == null) {
SinkholeService.reload(null, "forwarding", ActivityForwarding.this);
SinkholeService.reload("forwarding", ActivityForwarding.this);
adapter = new AdapterForwarding(ActivityForwarding.this,
DatabaseHelper.getInstance(ActivityForwarding.this).getForwarding());
lvForwarding.setAdapter(adapter);

View File

@ -253,7 +253,7 @@ public class ActivityLog extends AppCompatActivity implements SharedPreferences.
if (swEnabled.isChecked() != log)
swEnabled.setChecked(log);
SinkholeService.reload(null, "changed " + name, ActivityLog.this);
SinkholeService.reload("changed " + name, ActivityLog.this);
}
}

View File

@ -200,7 +200,7 @@ public class ActivityMain extends AppCompatActivity implements SharedPreferences
swipeRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
SinkholeService.reload(null, "pull", ActivityMain.this);
SinkholeService.reload("pull", ActivityMain.this);
updateApplicationList(null);
}
});
@ -406,7 +406,7 @@ public class ActivityMain extends AppCompatActivity implements SharedPreferences
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if (requestCode == REQUEST_ROAMING)
if (grantResults[0] == PackageManager.PERMISSION_GRANTED)
SinkholeService.reload("other", "permission granted", this);
SinkholeService.reload("permission granted", this);
}
@Override

View File

@ -309,7 +309,7 @@ public class ActivitySettings extends AppCompatActivity implements SharedPrefere
Toast.makeText(ActivitySettings.this, R.string.msg_downloaded, Toast.LENGTH_LONG).show();
}
SinkholeService.reload(null, "hosts file download", ActivitySettings.this);
SinkholeService.reload("hosts file download", ActivitySettings.this);
}
@Override
@ -467,20 +467,20 @@ public class ActivitySettings extends AppCompatActivity implements SharedPrefere
// Dependencies
if ("whitelist_wifi".equals(name) ||
"screen_wifi".equals(name))
SinkholeService.reload("wifi", "changed " + name, this);
SinkholeService.reload("changed " + name, this);
else if ("whitelist_other".equals(name) ||
"screen_other".equals(name))
SinkholeService.reload("other", "changed " + name, this);
SinkholeService.reload("changed " + name, this);
else if ("whitelist_roaming".equals(name)) {
if (prefs.getBoolean(name, false)) {
if (Util.hasPhoneStatePermission(this))
SinkholeService.reload("other", "changed " + name, this);
SinkholeService.reload("changed " + name, this);
else
requestPermissions(new String[]{Manifest.permission.READ_PHONE_STATE}, REQUEST_ROAMING_INTERNATIONAL);
} else
SinkholeService.reload("other", "changed " + name, this);
SinkholeService.reload("changed " + name, this);
} else if ("auto_enable".equals(name))
getPreferenceScreen().findPreference(name).setTitle(getString(R.string.setting_auto, prefs.getString(name, "0")));
@ -492,7 +492,7 @@ public class ActivitySettings extends AppCompatActivity implements SharedPrefere
recreate();
else if ("tethering".equals(name))
SinkholeService.reload(null, "changed " + name, this);
SinkholeService.reload("changed " + name, this);
else if ("wifi_homes".equals(name)) {
MultiSelectListPreference pref_wifi_homes = (MultiSelectListPreference) getPreferenceScreen().findPreference(name);
@ -501,17 +501,17 @@ public class ActivitySettings extends AppCompatActivity implements SharedPrefere
pref_wifi_homes.setTitle(getString(R.string.setting_wifi_home, TextUtils.join(", ", ssid)));
else
pref_wifi_homes.setTitle(getString(R.string.setting_wifi_home, "-"));
SinkholeService.reload(null, "changed " + name, this);
SinkholeService.reload("changed " + name, this);
} else if ("use_metered".equals(name))
SinkholeService.reload(null, "changed " + name, this);
SinkholeService.reload("changed " + name, this);
else if ("unmetered_2g".equals(name) ||
"unmetered_3g".equals(name) ||
"unmetered_4g".equals(name)) {
if (prefs.getBoolean(name, false)) {
if (Util.hasPhoneStatePermission(this))
SinkholeService.reload("other", "changed " + name, this);
SinkholeService.reload("changed " + name, this);
else {
if ("unmetered_2g".equals(name))
requestPermissions(new String[]{Manifest.permission.READ_PHONE_STATE}, REQUEST_METERED2);
@ -521,16 +521,16 @@ public class ActivitySettings extends AppCompatActivity implements SharedPrefere
requestPermissions(new String[]{Manifest.permission.READ_PHONE_STATE}, REQUEST_METERED4);
}
} else
SinkholeService.reload("other", "changed " + name, this);
SinkholeService.reload("changed " + name, this);
} else if ("national_roaming".equals(name)) {
if (prefs.getBoolean(name, false)) {
if (Util.hasPhoneStatePermission(this))
SinkholeService.reload("other", "changed " + name, this);
SinkholeService.reload("changed " + name, this);
else
requestPermissions(new String[]{Manifest.permission.READ_PHONE_STATE}, REQUEST_ROAMING_NATIONAL);
} else
SinkholeService.reload("other", "changed " + name, this);
SinkholeService.reload("changed " + name, this);
} else if ("manage_system".equals(name)) {
@ -538,14 +538,14 @@ public class ActivitySettings extends AppCompatActivity implements SharedPrefere
if (!manage)
prefs.edit().putBoolean("show_user", true).apply();
prefs.edit().putBoolean("show_system", manage).apply();
SinkholeService.reload(null, "changed " + name, this);
SinkholeService.reload("changed " + name, this);
} else if ("log_app".equals(name)) {
Intent ruleset = new Intent(ActivityMain.ACTION_RULES_CHANGED);
LocalBroadcastManager.getInstance(this).sendBroadcast(ruleset);
} else if ("filter".equals(name)) {
SinkholeService.reload(null, "changed " + name, this);
SinkholeService.reload("changed " + name, this);
// Show dialog
if (prefs.getBoolean(name, false)) {
@ -571,10 +571,10 @@ public class ActivitySettings extends AppCompatActivity implements SharedPrefere
}
} else if ("filter_allowed".equals(name))
SinkholeService.reload(null, "changed " + name, this);
SinkholeService.reload("changed " + name, this);
else if ("use_hosts".equals(name))
SinkholeService.reload(null, "changed " + name, this);
SinkholeService.reload("changed " + name, this);
else if ("vpn4".equals(name)) {
String vpn4 = prefs.getString("vpn4", null);
@ -583,7 +583,7 @@ public class ActivitySettings extends AppCompatActivity implements SharedPrefere
} catch (Throwable ex) {
prefs.edit().remove("vpn4").apply();
}
SinkholeService.reload(null, "changed " + name, this);
SinkholeService.reload("changed " + name, this);
getPreferenceScreen().findPreference(name).setTitle(getString(R.string.setting_vpn4, prefs.getString("vpn4", "10.1.10.1")));
} else if ("vpn6".equals(name)) {
@ -593,7 +593,7 @@ public class ActivitySettings extends AppCompatActivity implements SharedPrefere
} catch (Throwable ex) {
prefs.edit().remove("vpn6").apply();
}
SinkholeService.reload(null, "changed " + name, this);
SinkholeService.reload("changed " + name, this);
getPreferenceScreen().findPreference(name).setTitle(getString(R.string.setting_vpn6, prefs.getString("vpn6", "fd00:1:fd00:1:fd00:1:fd00:1")));
} else if ("dns".equals(name)) {
@ -603,7 +603,7 @@ public class ActivitySettings extends AppCompatActivity implements SharedPrefere
} catch (Throwable ex) {
prefs.edit().remove("dns").apply();
}
SinkholeService.reload(null, "changed " + name, this);
SinkholeService.reload("changed " + name, this);
getPreferenceScreen().findPreference(name).setTitle(getString(R.string.setting_dns, prefs.getString("dns", Util.getDefaultDNS(this))));
} else if ("pcap_record_size".equals(name) || "pcap_file_size".equals(name)) {
if ("pcap_record_size".equals(name))
@ -636,7 +636,7 @@ public class ActivitySettings extends AppCompatActivity implements SharedPrefere
getPreferenceScreen().findPreference(name).setSummary(prefs.getString(name, "http://www.netguard.me/hosts"));
else if ("loglevel".equals(name))
SinkholeService.reload(null, "changed " + name, this);
SinkholeService.reload("changed " + name, this);
}
private void checkAddress(String address) throws IllegalArgumentException, UnknownHostException {
@ -725,7 +725,7 @@ public class ActivitySettings extends AppCompatActivity implements SharedPrefere
}
if (granted)
SinkholeService.reload("other", "permission granted", this);
SinkholeService.reload("permission granted", this);
}
private BroadcastReceiver interactiveStateReceiver = new BroadcastReceiver() {
@ -926,7 +926,7 @@ public class ActivitySettings extends AppCompatActivity implements SharedPrefere
Toast.makeText(ActivitySettings.this, R.string.msg_completed, Toast.LENGTH_LONG).show();
}
SinkholeService.reload(null, "hosts import", ActivitySettings.this);
SinkholeService.reload("hosts import", ActivitySettings.this);
} else
Toast.makeText(ActivitySettings.this, ex.toString(), Toast.LENGTH_LONG).show();
}

View File

@ -514,20 +514,20 @@ public class AdapterRule extends RecyclerView.Adapter<AdapterRule.ViewHolder> im
case R.id.menu_allow:
if (IAB.isPurchased(ActivityPro.SKU_FILTER, context)) {
DatabaseHelper.getInstance(context).setAccess(id, 0);
SinkholeService.reload(null, "allow host", context);
SinkholeService.reload("allow host", context);
} else
context.startActivity(new Intent(context, ActivityPro.class));
return true;
case R.id.menu_block:
if (IAB.isPurchased(ActivityPro.SKU_FILTER, context)) {
DatabaseHelper.getInstance(context).setAccess(id, 1);
SinkholeService.reload(null, "block host", context);
SinkholeService.reload("block host", context);
} else
context.startActivity(new Intent(context, ActivityPro.class));
return true;
case R.id.menu_reset:
DatabaseHelper.getInstance(context).setAccess(id, -1);
SinkholeService.reload(null, "reset host", context);
SinkholeService.reload("reset host", context);
return true;
}
return false;
@ -652,7 +652,7 @@ public class AdapterRule extends RecyclerView.Adapter<AdapterRule.ViewHolder> im
if (root) {
notifyDataSetChanged();
NotificationManagerCompat.from(context).cancel(rule.info.applicationInfo.uid);
SinkholeService.reload(null, "rule changed", context);
SinkholeService.reload("rule changed", context);
}
}

View File

@ -254,7 +254,7 @@ public class SinkholeService extends VpnService implements SharedPreferences.OnS
public void onSubscriptionsChanged() {
Log.i(TAG, "Subscriptions changed");
if (prefs.getBoolean("national_roaming", false))
SinkholeService.reload(null, "Subscriptions changed", SinkholeService.this);
SinkholeService.reload("Subscriptions changed", SinkholeService.this);
}
};
sm.addOnSubscriptionsChangedListener((SubscriptionManager.OnSubscriptionsChangedListener) subscriptionsChangedListener);
@ -457,7 +457,7 @@ public class SinkholeService extends VpnService implements SharedPreferences.OnS
prefs.edit().putBoolean(pkg, blocked).apply();
// Apply rules
SinkholeService.reload(null, "notification", SinkholeService.this);
SinkholeService.reload("notification", SinkholeService.this);
// Update notification
Receiver.notifyNewApplication(uid, SinkholeService.this);
@ -1030,7 +1030,7 @@ public class SinkholeService extends VpnService implements SharedPreferences.OnS
}
private void prepareUidIPFilters() {
Map<Long, Map<InetAddress, Boolean>> map = new HashMap<>();
mapUidIPFilters.clear();
Cursor cursor = DatabaseHelper.getInstance(SinkholeService.this).getAccessDns();
int colUid = cursor.getColumnIndex("uid");
@ -1058,17 +1058,17 @@ public class SinkholeService extends VpnService implements SharedPreferences.OnS
dport = 0;
long key = (version << 40) | (protocol << 32) | (dport << 16) | uid;
if (!map.containsKey(key))
map.put(key, new HashMap());
if (!mapUidIPFilters.containsKey(key))
mapUidIPFilters.put(key, new HashMap());
try {
Log.i(TAG, "Set filter uid=" + uid + " " + daddr + " " + dresource + "/" + dport + "=" + block);
//Log.i(TAG, "Set filter uid=" + uid + " " + daddr + " " + dresource + "/" + dport + "=" + block);
if (dresource == null) {
if (Util.isNumericAddress(daddr))
map.get(key).put(InetAddress.getByName(daddr), block);
mapUidIPFilters.get(key).put(InetAddress.getByName(daddr), block);
} else {
if (Util.isNumericAddress(dresource))
map.get(key).put(InetAddress.getByName(dresource), block);
mapUidIPFilters.get(key).put(InetAddress.getByName(dresource), block);
else
Log.w(TAG, "Address not numeric " + daddr);
}
@ -1077,10 +1077,6 @@ public class SinkholeService extends VpnService implements SharedPreferences.OnS
}
}
cursor.close();
synchronized (mapUidIPFilters) {
mapUidIPFilters = map;
}
}
private void updateUidIPFilters() {
@ -1340,11 +1336,11 @@ public class SinkholeService extends VpnService implements SharedPreferences.OnS
if (interactive || delay == 0) {
last_interactive = interactive;
reload(null, "interactive state changed", SinkholeService.this);
reload("interactive state changed", SinkholeService.this);
} else {
if (ACTION_SCREEN_OFF_DELAYED.equals(intent.getAction())) {
last_interactive = interactive;
reload(null, "interactive state changed", SinkholeService.this);
reload("interactive state changed", SinkholeService.this);
} else {
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M)
am.set(AlarmManager.RTC_WAKEUP, new Date().getTime() + delay * 60 * 1000L, pi);
@ -1396,7 +1392,7 @@ public class SinkholeService extends VpnService implements SharedPreferences.OnS
// Reload rules when coming from idle mode
if (!pm.isDeviceIdleMode())
reload(null, "idle state changed", SinkholeService.this);
reload("idle state changed", SinkholeService.this);
}
};
@ -1413,7 +1409,7 @@ public class SinkholeService extends VpnService implements SharedPreferences.OnS
// Reload rules
Log.i(TAG, "Received " + intent);
Util.logExtras(intent);
reload(null, "connectivity changed", SinkholeService.this);
reload("connectivity changed", SinkholeService.this);
}
};
@ -1435,7 +1431,7 @@ public class SinkholeService extends VpnService implements SharedPreferences.OnS
if (prefs.getBoolean("unmetered_2g", false) ||
prefs.getBoolean("unmetered_3g", false) ||
prefs.getBoolean("unmetered_4g", false))
reload("other", "data connection state changed", SinkholeService.this);
reload("data connection state changed", SinkholeService.this);
}
}
}
@ -1452,7 +1448,7 @@ public class SinkholeService extends VpnService implements SharedPreferences.OnS
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(SinkholeService.this);
if (prefs.getBoolean("national_roaming", false))
reload(null, "service state changed", SinkholeService.this);
reload("service state changed", SinkholeService.this);
}
}
}
@ -1463,7 +1459,7 @@ public class SinkholeService extends VpnService implements SharedPreferences.OnS
public void onReceive(Context context, Intent intent) {
Log.i(TAG, "Received " + intent);
Util.logExtras(intent);
reload(null, "package added", SinkholeService.this);
reload("package added", SinkholeService.this);
}
};
@ -1905,19 +1901,13 @@ public class SinkholeService extends VpnService implements SharedPreferences.OnS
context.startService(intent);
}
public static void reload(String network, String reason, Context context) {
public static void reload(String reason, Context context) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
if (prefs.getBoolean("enabled", false)) {
boolean wifi = Util.isWifiActive(context);
boolean metered = Util.isMeteredNetwork(context);
if (wifi && !prefs.getBoolean("use_metered", false))
metered = false;
if (network == null || ("wifi".equals(network) ? !metered : metered)) {
Intent intent = new Intent(context, SinkholeService.class);
intent.putExtra(EXTRA_COMMAND, Command.reload);
intent.putExtra(EXTRA_REASON, reason);
context.startService(intent);
}
Intent intent = new Intent(context, SinkholeService.class);
intent.putExtra(EXTRA_COMMAND, Command.reload);
intent.putExtra(EXTRA_REASON, reason);
context.startService(intent);
}
}