1
0
Fork 0
mirror of https://github.com/M66B/NetGuard.git synced 2025-02-23 23:00:56 +00:00

Changed when hosts

This commit is contained in:
M66B 2017-03-26 13:59:43 +02:00
parent 90edb3ab74
commit 72f5d6b8cc
4 changed files with 60 additions and 40 deletions

View file

@ -72,14 +72,6 @@
<sourceFolder url="file://$MODULE_DIR$/src/all/java" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/all/renderscript" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/all/shaders" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/testAll/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/testAll/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/testAll/assets" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/testAll/aidl" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/testAll/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/testAll/jni" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/testAll/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/testAll/shaders" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestAll/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestAll/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestAll/assets" type="java-test-resource" />
@ -88,6 +80,14 @@
<sourceFolder url="file://$MODULE_DIR$/src/androidTestAll/jni" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestAll/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/androidTestAll/shaders" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/testAll/res" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/testAll/resources" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/testAll/assets" type="java-test-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/testAll/aidl" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/testAll/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/testAll/jni" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/testAll/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/testAll/shaders" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/res" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/debug/assets" type="java-resource" />

View file

@ -23,7 +23,6 @@ import android.Manifest;
import android.annotation.TargetApi;
import android.app.Activity;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
@ -346,26 +345,8 @@ public class AdapterRule extends RecyclerView.Adapter<AdapterRule.ViewHolder> im
color = Color.argb(128, Color.red(color), Color.green(color), Color.blue(color));
holder.tvName.setTextColor(color);
// Show rule count
new AsyncTask<Object, Object, Long>() {
@Override
protected void onPreExecute() {
holder.tvHosts.setVisibility(View.GONE);
}
@Override
protected Long doInBackground(Object... objects) {
return DatabaseHelper.getInstance(context).getRuleCount(rule.info.applicationInfo.uid);
}
@Override
protected void onPostExecute(Long rules) {
if (rules > 0) {
holder.tvHosts.setVisibility(View.VISIBLE);
holder.tvHosts.setText(Long.toString(rules));
}
}
}.execute();
holder.tvHosts.setVisibility(rule.hosts > 0 ? View.VISIBLE : View.GONE);
holder.tvHosts.setText(Long.toString(rule.hosts));
// Lockdown settings
boolean lockdown = prefs.getBoolean("lockdown", false);
@ -716,14 +697,18 @@ public class AdapterRule extends RecyclerView.Adapter<AdapterRule.ViewHolder> im
popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem menuItem) {
switch (menuItem.getItemId()) {
int menu = menuItem.getItemId();
boolean result = false;
switch (menu) {
case R.id.menu_whois:
context.startActivity(lookupIP);
return true;
result = true;
break;
case R.id.menu_port:
context.startActivity(lookupPort);
return true;
result = true;
break;
case R.id.menu_allow:
if (IAB.isPurchased(ActivityPro.SKU_FILTER, context)) {
@ -731,7 +716,8 @@ public class AdapterRule extends RecyclerView.Adapter<AdapterRule.ViewHolder> im
ServiceSinkhole.reload("allow host", context);
} else
context.startActivity(new Intent(context, ActivityPro.class));
return true;
result = true;
break;
case R.id.menu_block:
if (IAB.isPurchased(ActivityPro.SKU_FILTER, context)) {
@ -739,14 +725,31 @@ public class AdapterRule extends RecyclerView.Adapter<AdapterRule.ViewHolder> im
ServiceSinkhole.reload("block host", context);
} else
context.startActivity(new Intent(context, ActivityPro.class));
return true;
result = true;
break;
case R.id.menu_reset:
DatabaseHelper.getInstance(context).setAccess(id, -1);
ServiceSinkhole.reload("reset host", context);
return true;
result = true;
break;
}
return false;
if (menu == R.id.menu_allow || menu == R.id.menu_block || menu == R.id.menu_reset)
new AsyncTask<Object, Object, Long>() {
@Override
protected Long doInBackground(Object... objects) {
return DatabaseHelper.getInstance(context).getHostCount(rule.info.applicationInfo.uid, false);
}
@Override
protected void onPostExecute(Long hosts) {
rule.hosts = hosts;
notifyDataSetChanged();
}
}.execute();
return result;
}
});

View file

@ -36,7 +36,9 @@ import java.io.File;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.locks.ReentrantReadWriteLock;
public class DatabaseHelper extends SQLiteOpenHelper {
@ -726,13 +728,25 @@ public class DatabaseHelper extends SQLiteOpenHelper {
}
}
public long getRuleCount(int uid) {
private static Map<Integer, Long> mapUidHosts = new HashMap<>();
public long getHostCount(int uid, boolean usecache) {
if (usecache)
synchronized (mapUidHosts) {
if (mapUidHosts.containsKey(uid))
return mapUidHosts.get(uid);
}
lock.readLock().lock();
try {
SQLiteDatabase db = this.getReadableDatabase();
// There is a segmented index on uid
// There is an index on block
return db.compileStatement("SELECT COUNT(*) FROM access WHERE block >= 0 AND uid =" + uid).simpleQueryForLong();
long hosts = db.compileStatement("SELECT COUNT(*) FROM access WHERE block >= 0 AND uid =" + uid).simpleQueryForLong();
synchronized (mapUidHosts) {
mapUidHosts.put(uid, hosts);
}
return hosts;
} finally {
lock.readLock().unlock();
}

View file

@ -29,7 +29,6 @@ import android.content.res.XmlResourceParser;
import android.net.Uri;
import android.os.Build;
import android.os.Process;
import android.os.SystemClock;
import android.preference.PreferenceManager;
import android.provider.Settings;
import android.util.Log;
@ -79,6 +78,7 @@ public class Rule {
public boolean relateduids = false;
public String[] related = null;
public long hosts;
public boolean changed;
public boolean expanded = false;
@ -358,6 +358,7 @@ public class Rule {
nobody.applicationInfo.icon = 0;
listPI.add(nobody);
DatabaseHelper dh = DatabaseHelper.getInstance(context);
for (PackageInfo info : listPI)
try {
Rule rule = new Rule(info, context);
@ -400,6 +401,8 @@ public class Rule {
}
rule.related = listPkg.toArray(new String[0]);
rule.hosts = dh.getHostCount(rule.info.applicationInfo.uid, true);
rule.updateChanged(default_wifi, default_other, default_roaming);
listRules.add(rule);
@ -448,7 +451,7 @@ public class Rule {
(wifi_blocked && screen_wifi != screen_wifi_default) ||
(other_blocked && screen_other != screen_other_default) ||
((!other_blocked || screen_other) && roaming != default_roaming) ||
lockdown || !apply);
hosts > 0 || lockdown || !apply);
}
public void updateChanged(Context context) {