Check if filtering mode can be used

This commit is contained in:
M66B 2017-04-08 08:30:42 +02:00
parent 6f11f5c93a
commit 7883988ed0
6 changed files with 33 additions and 6 deletions

View File

@ -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.

View File

@ -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));
}
}

View File

@ -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")));

View File

@ -615,6 +615,7 @@ public class AdapterRule extends RecyclerView.Adapter<AdapterRule.ViewHolder> im
}
});
cbFiltering.setEnabled(Util.canFilter(context));
cbFiltering.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean checked) {

View File

@ -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));

View File

@ -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);
}