diff --git a/app/src/main/java/com/emanuelef/remote_capture/fragments/ConnectionsFragment.java b/app/src/main/java/com/emanuelef/remote_capture/fragments/ConnectionsFragment.java
index 1c23b495..306cfc07 100644
--- a/app/src/main/java/com/emanuelef/remote_capture/fragments/ConnectionsFragment.java
+++ b/app/src/main/java/com/emanuelef/remote_capture/fragments/ConnectionsFragment.java
@@ -20,6 +20,7 @@
package com.emanuelef.remote_capture.fragments;
import android.app.Activity;
+import android.app.AlertDialog;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
@@ -293,7 +294,10 @@ public class ConnectionsFragment extends Fragment implements ConnectionsListener
Context ctx = requireContext();
MenuItem item;
- boolean firewallAvailable = Billing.newInstance(ctx).isFirewallVisible();
+ Billing billing = Billing.newInstance(ctx);
+
+ boolean firewallVisible = billing.isFirewallVisible();
+ boolean showPurchaseFirewall = (!billing.isPurchased(Billing.FIREWALL_SKU) && billing.isAvailable(Billing.FIREWALL_SKU)) && !CaptureService.isCapturingAsRoot();
boolean blockVisible = false;
boolean unblockVisible = false;
Blocklist blocklist = PCAPdroid.getInstance().getBlocklist();
@@ -426,8 +430,8 @@ public class ConnectionsFragment extends Fragment implements ConnectionsListener
menu.findItem(R.id.hide_proto).setTitle(label);
menu.findItem(R.id.search_proto).setTitle(label);
- menu.findItem(R.id.block_menu).setVisible(firewallAvailable && blockVisible);
- menu.findItem(R.id.unblock_menu).setVisible(firewallAvailable && unblockVisible);
+ menu.findItem(R.id.block_menu).setVisible((firewallVisible || showPurchaseFirewall) && blockVisible);
+ menu.findItem(R.id.unblock_menu).setVisible(firewallVisible && unblockVisible);
if(!conn.isBlacklisted())
menu.findItem(R.id.whitelist_menu).setVisible(false);
@@ -439,6 +443,7 @@ public class ConnectionsFragment extends Fragment implements ConnectionsListener
ConnectionDescriptor conn = mAdapter.getSelectedItem();
MatchList whitelist = PCAPdroid.getInstance().getMalwareWhitelist();
Blocklist blocklist = PCAPdroid.getInstance().getBlocklist();
+ boolean firewallPurchased = Billing.newInstance(ctx).isPurchased(Billing.FIREWALL_SKU);
boolean mask_changed = false;
boolean whitelist_changed = false;
boolean blocklist_changed = false;
@@ -485,17 +490,29 @@ public class ConnectionsFragment extends Fragment implements ConnectionsListener
whitelist.addHost(conn.info);
whitelist_changed = true;
} else if(id == R.id.block_app) {
- blocklist.addApp(conn.uid);
- blocklist_changed = true;
+ if(firewallPurchased) {
+ blocklist.addApp(conn.uid);
+ blocklist_changed = true;
+ } else
+ showFirewallPurchaseDialog();
} else if(id == R.id.block_ip) {
- blocklist.addIp(conn.dst_ip);
- blocklist_changed = true;
+ if(firewallPurchased) {
+ blocklist.addIp(conn.dst_ip);
+ blocklist_changed = true;
+ } else
+ showFirewallPurchaseDialog();
} else if(id == R.id.block_host) {
- blocklist.addHost(conn.info);
- blocklist_changed = true;
+ if(firewallPurchased) {
+ blocklist.addHost(conn.info);
+ blocklist_changed = true;
+ } else
+ showFirewallPurchaseDialog();
} else if(id == R.id.block_domain) {
- blocklist.addHost(Utils.getSecondLevelDomain(conn.info));
- blocklist_changed = true;
+ if(firewallPurchased) {
+ blocklist.addHost(Utils.getSecondLevelDomain(conn.info));
+ blocklist_changed = true;
+ } else
+ showFirewallPurchaseDialog();
} else if(id == R.id.unblock_app_permanently) {
blocklist.removeApp(conn.uid);
blocklist_changed = true;
@@ -544,6 +561,17 @@ public class ConnectionsFragment extends Fragment implements ConnectionsListener
return true;
}
+ private void showFirewallPurchaseDialog() {
+ new AlertDialog.Builder(requireContext())
+ .setTitle(R.string.paid_feature)
+ .setMessage(Utils.getText(requireContext(), R.string.firewall_purchase_msg, getString(R.string.no_root_firewall)))
+ .setPositiveButton(R.string.show_me, (dialogInterface, i) -> {
+ // Billing code here
+ })
+ .setNegativeButton(R.string.cancel_action, (dialogInterface, i) -> {})
+ .show();
+ }
+
private void setQuery(String query) {
Utils.setSearchQuery(mSearchView, mMenuItemSearch, query);
}
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index fbec78f5..8bcf046a 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -408,4 +408,6 @@
Requesting an unlock token, please wait
Show
This is your unlock token. Note it down as you will need it to generate your license codes
+ Paid feature
+ Buy the %1$s feature to start blocking connections