From 7883988ed06cf2c320cc0a822ff716dced11f91d Mon Sep 17 00:00:00 2001 From: M66B Date: Sat, 8 Apr 2017 08:30:42 +0200 Subject: [PATCH] Check if filtering mode can be used --- README.md | 2 ++ .../java/eu/faircode/netguard/ActivityPro.java | 10 ++++++---- .../eu/faircode/netguard/ActivitySettings.java | 6 ++++++ .../java/eu/faircode/netguard/AdapterRule.java | 1 + .../eu/faircode/netguard/ServiceTileFilter.java | 3 ++- .../main/java/eu/faircode/netguard/Util.java | 17 ++++++++++++++++- 6 files changed, 33 insertions(+), 6 deletions(-) diff --git a/README.md b/README.md index faf95f5b..da6866a8 100644 --- a/README.md +++ b/README.md @@ -84,6 +84,8 @@ like when there is no internet conncectivity yet (when starting up your device) or when incorrectly requiring manual approval of the VPN service again (when starting up your device). Unfortunately these Android bugs cannot be worked around by NetGuard. +Filtering mode cannot be used on [CopperheadOS](https://copperhead.co/android/). + NetGuard will not work or crash when the package *com.android.vpndialogs* has been removed or otherwise is unavailable. Removing this package is possible with root permissions only. diff --git a/app/src/main/java/eu/faircode/netguard/ActivityPro.java b/app/src/main/java/eu/faircode/netguard/ActivityPro.java index 2ebe7838..34372dcc 100644 --- a/app/src/main/java/eu/faircode/netguard/ActivityPro.java +++ b/app/src/main/java/eu/faircode/netguard/ActivityPro.java @@ -304,12 +304,14 @@ public class ActivityPro extends AppCompatActivity { TextView tvDev2 = (TextView) findViewById(R.id.tvDev2); LinearLayout llChallenge = (LinearLayout) findViewById(R.id.llChallenge); - btnLog.setVisibility(IAB.isPurchased(SKU_LOG, this) ? View.GONE : View.VISIBLE); - btnFilter.setVisibility(IAB.isPurchased(SKU_FILTER, this) ? View.GONE : View.VISIBLE); + boolean can = Util.canFilter(this); + + btnLog.setVisibility(IAB.isPurchased(SKU_LOG, this) ? View.GONE : (can ? View.VISIBLE : View.INVISIBLE)); + btnFilter.setVisibility(IAB.isPurchased(SKU_FILTER, this) ? View.GONE : (can ? View.VISIBLE : View.INVISIBLE)); btnNotify.setVisibility(IAB.isPurchased(SKU_NOTIFY, this) ? View.GONE : View.VISIBLE); btnSpeed.setVisibility(IAB.isPurchased(SKU_SPEED, this) ? View.GONE : View.VISIBLE); btnTheme.setVisibility(IAB.isPurchased(SKU_THEME, this) ? View.GONE : View.VISIBLE); - btnAll.setVisibility(IAB.isPurchased(SKU_PRO1, this) ? View.GONE : View.VISIBLE); + btnAll.setVisibility(IAB.isPurchased(SKU_PRO1, this) ? View.GONE : (can ? View.VISIBLE : View.INVISIBLE)); btnDev1.setVisibility(IAB.isPurchased(SKU_SUPPORT1, this) ? View.GONE : View.VISIBLE); btnDev2.setVisibility(IAB.isPurchased(SKU_SUPPORT2, this) ? View.GONE : View.VISIBLE); @@ -324,6 +326,6 @@ public class ActivityPro extends AppCompatActivity { llChallenge.setVisibility( IAB.isPurchased(SKU_DONATION, this) || Util.isPlayStoreInstall(this) - ? View.GONE : View.VISIBLE); + ? View.GONE : (can ? View.VISIBLE : View.GONE)); } } diff --git a/app/src/main/java/eu/faircode/netguard/ActivitySettings.java b/app/src/main/java/eu/faircode/netguard/ActivitySettings.java index af1626b9..d95dfdd9 100644 --- a/app/src/main/java/eu/faircode/netguard/ActivitySettings.java +++ b/app/src/main/java/eu/faircode/netguard/ActivitySettings.java @@ -217,6 +217,12 @@ public class ActivitySettings extends AppCompatActivity implements SharedPrefere } }); + boolean can = Util.canFilter(this); + TwoStatePreference pref_filter = (TwoStatePreference) screen.findPreference("filter"); + pref_filter.setEnabled(can); + if (!can) + pref_filter.setChecked(false); + // VPN parameters screen.findPreference("vpn4").setTitle(getString(R.string.setting_vpn4, prefs.getString("vpn4", "10.1.10.1"))); screen.findPreference("vpn6").setTitle(getString(R.string.setting_vpn6, prefs.getString("vpn6", "fd00:1:fd00:1:fd00:1:fd00:1"))); diff --git a/app/src/main/java/eu/faircode/netguard/AdapterRule.java b/app/src/main/java/eu/faircode/netguard/AdapterRule.java index 44771db0..fd1113f9 100644 --- a/app/src/main/java/eu/faircode/netguard/AdapterRule.java +++ b/app/src/main/java/eu/faircode/netguard/AdapterRule.java @@ -615,6 +615,7 @@ public class AdapterRule extends RecyclerView.Adapter im } }); + cbFiltering.setEnabled(Util.canFilter(context)); cbFiltering.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton compoundButton, boolean checked) { diff --git a/app/src/main/java/eu/faircode/netguard/ServiceTileFilter.java b/app/src/main/java/eu/faircode/netguard/ServiceTileFilter.java index 4138f643..aa2a4125 100644 --- a/app/src/main/java/eu/faircode/netguard/ServiceTileFilter.java +++ b/app/src/main/java/eu/faircode/netguard/ServiceTileFilter.java @@ -67,7 +67,8 @@ public class ServiceTileFilter extends TileService implements SharedPreferences. if (IAB.isPurchased(ActivityPro.SKU_FILTER, this)) { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this); - prefs.edit().putBoolean("filter", !prefs.getBoolean("filter", false)).apply(); + if (Util.canFilter(this)) + prefs.edit().putBoolean("filter", !prefs.getBoolean("filter", false)).apply(); ServiceSinkhole.reload("tile", this); } else startActivity(new Intent(this, ActivityPro.class)); diff --git a/app/src/main/java/eu/faircode/netguard/Util.java b/app/src/main/java/eu/faircode/netguard/Util.java index 54f2a059..5405574f 100644 --- a/app/src/main/java/eu/faircode/netguard/Util.java +++ b/app/src/main/java/eu/faircode/netguard/Util.java @@ -44,7 +44,6 @@ import android.os.Build; import android.os.Bundle; import android.os.PowerManager; import android.preference.PreferenceManager; -import android.support.v4.content.ContextCompat; import android.support.v4.net.ConnectivityManagerCompat; import android.support.v7.app.AlertDialog; import android.telephony.SubscriptionInfo; @@ -61,6 +60,7 @@ import com.google.android.gms.common.ConnectionResult; import com.google.android.gms.common.GoogleApiAvailability; import java.io.BufferedReader; +import java.io.File; import java.io.FileReader; import java.io.IOException; import java.io.InputStreamReader; @@ -401,6 +401,21 @@ public class Util { return listResult; } + public static boolean canFilter(Context context) { + File tcp = new File("/proc/net/tcp"); + File tcp6 = new File("/proc/net/tcp6"); + try { + if (tcp.exists() && tcp.canRead()) + return true; + } catch (SecurityException ignored) { + } + try { + return (tcp6.exists() && tcp6.canRead()); + } catch (SecurityException ignored) { + return false; + } + } + public static boolean isDebuggable(Context context) { return ((context.getApplicationContext().getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0); }