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:
parent
90edb3ab74
commit
72f5d6b8cc
4 changed files with 60 additions and 40 deletions
16
app/app.iml
16
app/app.iml
|
@ -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" />
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
@ -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();
|
||||
}
|
||||
|
|
|
@ -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) {
|
||||
|
|
Loading…
Reference in a new issue