From d01297aa2115ad48e87aa264001e90e255e2cb0b Mon Sep 17 00:00:00 2001 From: M66B Date: Sun, 31 Jan 2016 09:30:06 +0100 Subject: [PATCH] Make filtering a pro feature --- .../eu/faircode/netguard/ActivityPro.java | 16 +++++ .../eu/faircode/netguard/RuleAdapter.java | 67 ++++++++++--------- app/src/main/res/layout/pro.xml | 37 ++++++++++ app/src/main/res/values/strings.xml | 1 + 4 files changed, 89 insertions(+), 32 deletions(-) diff --git a/app/src/main/java/eu/faircode/netguard/ActivityPro.java b/app/src/main/java/eu/faircode/netguard/ActivityPro.java index d0cc1a48..1167b1cd 100644 --- a/app/src/main/java/eu/faircode/netguard/ActivityPro.java +++ b/app/src/main/java/eu/faircode/netguard/ActivityPro.java @@ -46,6 +46,7 @@ public class ActivityPro extends AppCompatActivity { // adb shell pm clear com.android.vending // android.test.purchased public static final String SKU_LOG = "log"; + public static final String SKU_FILTER = "filter"; public static final String SKU_NOTIFY = "notify"; public static final String SKU_SPEED = "speed"; public static final String SKU_THEME = "theme"; @@ -68,6 +69,7 @@ public class ActivityPro extends AppCompatActivity { updateState(); TextView tvLogTitle = (TextView) findViewById(R.id.tvLogTitle); + TextView tvFilterTitle = (TextView) findViewById(R.id.tvFilterTitle); TextView tvNotifyTitle = (TextView) findViewById(R.id.tvNotifyTitle); TextView tvSpeedTitle = (TextView) findViewById(R.id.tvSpeedTitle); TextView tvThemeTitle = (TextView) findViewById(R.id.tvThemeTitle); @@ -81,6 +83,7 @@ public class ActivityPro extends AppCompatActivity { }; Linkify.addLinks(tvLogTitle, Pattern.compile(".*"), "http://www.netguard.me/#log", null, filter); + Linkify.addLinks(tvFilterTitle, Pattern.compile(".*"), "http://www.netguard.me/#filter", null, filter); Linkify.addLinks(tvNotifyTitle, Pattern.compile(".*"), "http://www.netguard.me/#notify", null, filter); Linkify.addLinks(tvSpeedTitle, Pattern.compile(".*"), "http://www.netguard.me/#speed", null, filter); Linkify.addLinks(tvThemeTitle, Pattern.compile(".*"), "http://www.netguard.me/#theme", null, filter); @@ -127,6 +130,7 @@ public class ActivityPro extends AppCompatActivity { updateState(); final Button btnLog = (Button) findViewById(R.id.btnLog); + final Button btnFilter = (Button) findViewById(R.id.btnFilter); final Button btnNotify = (Button) findViewById(R.id.btnNotify); final Button btnSpeed = (Button) findViewById(R.id.btnSpeed); final Button btnTheme = (Button) findViewById(R.id.btnTheme); @@ -138,6 +142,8 @@ public class ActivityPro extends AppCompatActivity { try { if (view == btnLog) startIntentSenderForResult(iab.getBuyIntent(SKU_LOG).getIntentSender(), view.getId(), new Intent(), 0, 0, 0); + else if (view == btnFilter) + startIntentSenderForResult(iab.getBuyIntent(SKU_FILTER).getIntentSender(), view.getId(), new Intent(), 0, 0, 0); else if (view == btnNotify) startIntentSenderForResult(iab.getBuyIntent(SKU_NOTIFY).getIntentSender(), view.getId(), new Intent(), 0, 0, 0); else if (view == btnSpeed) @@ -154,12 +160,14 @@ public class ActivityPro extends AppCompatActivity { }; btnLog.setOnClickListener(listener); + btnFilter.setOnClickListener(listener); btnNotify.setOnClickListener(listener); btnSpeed.setOnClickListener(listener); btnTheme.setOnClickListener(listener); btnMulti.setOnClickListener(listener); btnLog.setEnabled(true); + btnFilter.setEnabled(true); btnNotify.setEnabled(true); btnSpeed.setEnabled(true); btnTheme.setEnabled(true); @@ -200,6 +208,10 @@ public class ActivityPro extends AppCompatActivity { IAB.setBought(SKU_LOG, this); updateState(); break; + case R.id.btnFilter: + IAB.setBought(SKU_FILTER, this); + updateState(); + break; case R.id.btnNotify: IAB.setBought(SKU_NOTIFY, this); updateState(); @@ -222,11 +234,13 @@ public class ActivityPro extends AppCompatActivity { private void updateState() { Button btnLog = (Button) findViewById(R.id.btnLog); + Button btnFilter = (Button) findViewById(R.id.btnFilter); Button btnNotify = (Button) findViewById(R.id.btnNotify); Button btnSpeed = (Button) findViewById(R.id.btnSpeed); Button btnTheme = (Button) findViewById(R.id.btnTheme); Button btnMulti = (Button) findViewById(R.id.btnMulti); TextView tvLog = (TextView) findViewById(R.id.tvLog); + TextView tvFilter = (TextView) findViewById(R.id.tvFilter); TextView tvNotify = (TextView) findViewById(R.id.tvNotify); TextView tvSpeed = (TextView) findViewById(R.id.tvSpeed); TextView tvTheme = (TextView) findViewById(R.id.tvTheme); @@ -234,12 +248,14 @@ public class ActivityPro extends AppCompatActivity { 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); 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); btnMulti.setVisibility(IAB.isPurchased(SKU_MULTI, this) ? View.GONE : View.VISIBLE); tvLog.setVisibility(IAB.isPurchased(SKU_LOG, this) ? View.VISIBLE : View.GONE); + tvFilter.setVisibility(IAB.isPurchased(SKU_FILTER, this) ? View.VISIBLE : View.GONE); tvNotify.setVisibility(IAB.isPurchased(SKU_NOTIFY, this) ? View.VISIBLE : View.GONE); tvSpeed.setVisibility(IAB.isPurchased(SKU_SPEED, this) ? View.VISIBLE : View.GONE); tvTheme.setVisibility(IAB.isPurchased(SKU_THEME, this) ? View.VISIBLE : View.GONE); diff --git a/app/src/main/java/eu/faircode/netguard/RuleAdapter.java b/app/src/main/java/eu/faircode/netguard/RuleAdapter.java index 85732889..32cb23c9 100644 --- a/app/src/main/java/eu/faircode/netguard/RuleAdapter.java +++ b/app/src/main/java/eu/faircode/netguard/RuleAdapter.java @@ -475,43 +475,46 @@ public class RuleAdapter extends RecyclerView.Adapter im holder.lvAccess.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, final int bposition, long bid) { - Cursor cursor = (Cursor) badapter.getItem(bposition); - final long id = cursor.getLong(cursor.getColumnIndex("ID")); - String daddr = cursor.getString(cursor.getColumnIndex("daddr")); - int dport = (cursor.isNull(cursor.getColumnIndex("dport")) ? -1 : cursor.getInt(cursor.getColumnIndex("dport"))); - int block = cursor.getInt(cursor.getColumnIndex("block")); + if (IAB.isPurchased(ActivityPro.SKU_FILTER, context)) { + Cursor cursor = (Cursor) badapter.getItem(bposition); + final long id = cursor.getLong(cursor.getColumnIndex("ID")); + String daddr = cursor.getString(cursor.getColumnIndex("daddr")); + int dport = (cursor.isNull(cursor.getColumnIndex("dport")) ? -1 : cursor.getInt(cursor.getColumnIndex("dport"))); + int block = cursor.getInt(cursor.getColumnIndex("block")); - PopupMenu popup = new PopupMenu(context, view); - popup.inflate(R.menu.access); - popup.getMenu().findItem(R.id.menu_host).setTitle(daddr + (dport > 0 ? ":" + dport : "")); + PopupMenu popup = new PopupMenu(context, view); + popup.inflate(R.menu.access); + popup.getMenu().findItem(R.id.menu_host).setTitle(daddr + (dport > 0 ? ":" + dport : "")); - popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { - @Override - public boolean onMenuItemClick(MenuItem menuItem) { - switch (menuItem.getItemId()) { - case R.id.menu_allow: - dh.setAccess(id, rule.info.applicationInfo.uid, 0); - SinkholeService.reload(null, "allow host", context); - return true; - case R.id.menu_block: - dh.setAccess(id, rule.info.applicationInfo.uid, 1); - SinkholeService.reload(null, "block host", context); - return true; - case R.id.menu_clear: - dh.setAccess(id, rule.info.applicationInfo.uid, -1); - SinkholeService.reload(null, "clear host", context); - return true; + popup.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() { + @Override + public boolean onMenuItemClick(MenuItem menuItem) { + switch (menuItem.getItemId()) { + case R.id.menu_allow: + dh.setAccess(id, rule.info.applicationInfo.uid, 0); + SinkholeService.reload(null, "allow host", context); + return true; + case R.id.menu_block: + dh.setAccess(id, rule.info.applicationInfo.uid, 1); + SinkholeService.reload(null, "block host", context); + return true; + case R.id.menu_clear: + dh.setAccess(id, rule.info.applicationInfo.uid, -1); + SinkholeService.reload(null, "clear host", context); + return true; + } + return false; } - return false; - } - }); + }); - if (block == 0) - popup.getMenu().removeItem(R.id.menu_allow); - else if (block == 1) - popup.getMenu().removeItem(R.id.menu_block); + if (block == 0) + popup.getMenu().removeItem(R.id.menu_allow); + else if (block == 1) + popup.getMenu().removeItem(R.id.menu_block); - popup.show(); + popup.show(); + } else + context.startActivity(new Intent(context, ActivityPro.class)); } }); diff --git a/app/src/main/res/layout/pro.xml b/app/src/main/res/layout/pro.xml index 2da645b8..47668e3f 100644 --- a/app/src/main/res/layout/pro.xml +++ b/app/src/main/res/layout/pro.xml @@ -60,6 +60,43 @@ android:visibility="gone" /> + + + + +