From 7807dee049796ffd3bee5572b9f71c1456f4b486 Mon Sep 17 00:00:00 2001 From: emanuele-f Date: Mon, 23 May 2022 12:26:15 +0200 Subject: [PATCH] Fix firewall visibility --- .../java/com/emanuelef/remote_capture/Billing.java | 12 ++++++++++-- .../com/emanuelef/remote_capture/CaptureService.java | 9 +-------- .../activities/EditFilterActivity.java | 2 +- .../remote_capture/activities/MainActivity.java | 6 +++--- .../remote_capture/adapters/AppsStatsAdapter.java | 2 +- .../fragments/ConnectionsFragment.java | 2 +- .../remote_capture/fragments/FirewallStatus.java | 4 ++-- .../com/emanuelef/remote_capture/model/Prefs.java | 2 +- 8 files changed, 20 insertions(+), 19 deletions(-) diff --git a/app/src/main/java/com/emanuelef/remote_capture/Billing.java b/app/src/main/java/com/emanuelef/remote_capture/Billing.java index ed2a987e..bc734ef2 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/Billing.java +++ b/app/src/main/java/com/emanuelef/remote_capture/Billing.java @@ -27,6 +27,8 @@ import android.util.Log; import androidx.preference.PreferenceManager; +import com.emanuelef.remote_capture.model.Prefs; + import java.nio.charset.StandardCharsets; import java.security.InvalidKeyException; import java.security.KeyFactory; @@ -176,7 +178,13 @@ public class Billing { return rv; } - public boolean canUseFirewall() { - return isPurchased(Billing.FIREWALL_SKU) && !CaptureService.isCapturingAsRoot(); + public boolean isFirewallVisible() { + if(!isPurchased(Billing.FIREWALL_SKU)) + return false; + + if(CaptureService.isServiceActive()) + return !CaptureService.isCapturingAsRoot(); + else + return !Prefs.isRootCaptureEnabled(mPrefs); } } diff --git a/app/src/main/java/com/emanuelef/remote_capture/CaptureService.java b/app/src/main/java/com/emanuelef/remote_capture/CaptureService.java index fea8d310..926b39b8 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/CaptureService.java +++ b/app/src/main/java/com/emanuelef/remote_capture/CaptureService.java @@ -936,13 +936,6 @@ public class CaptureService extends VpnService implements Runnable { } } - public static boolean isFirewallEnabled(Context ctx, SharedPreferences prefs) { - if(INSTANCE != null) - return INSTANCE.mFirewallEnabled; - - return Prefs.isFirewallEnabled(ctx, prefs); - } - /* The following methods are called from native code */ public String getVpnIPv4() { @@ -1140,7 +1133,7 @@ public class CaptureService extends VpnService implements Runnable { } public void reloadBlocklist() { - if(!mBilling.canUseFirewall()) + if(!mBilling.isFirewallVisible()) return; Log.d(TAG, "reloading firewall blocklist"); diff --git a/app/src/main/java/com/emanuelef/remote_capture/activities/EditFilterActivity.java b/app/src/main/java/com/emanuelef/remote_capture/activities/EditFilterActivity.java index 4b9c630c..da3065c2 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/activities/EditFilterActivity.java +++ b/app/src/main/java/com/emanuelef/remote_capture/activities/EditFilterActivity.java @@ -116,7 +116,7 @@ public class EditFilterActivity extends BaseActivity { if(!Prefs.isMalwareDetectionEnabled(this, prefs)) mOnlyBlacklisted.setVisibility(View.GONE); - if(!billing.canUseFirewall()) + if(!billing.isFirewallVisible()) mOnlyBlocked.setVisibility(View.GONE); ConnectionsRegister reg = CaptureService.getConnsRegister(); diff --git a/app/src/main/java/com/emanuelef/remote_capture/activities/MainActivity.java b/app/src/main/java/com/emanuelef/remote_capture/activities/MainActivity.java index dc130c0d..d67005e8 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/activities/MainActivity.java +++ b/app/src/main/java/com/emanuelef/remote_capture/activities/MainActivity.java @@ -108,8 +108,8 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig public static final String GITHUB_PROJECT_URL = "https://github.com/emanuele-f/PCAPdroid"; public static final String DOCS_URL = "https://emanuele-f.github.io/PCAPdroid"; public static final String DONATE_URL = "https://emanuele-f.github.io/PCAPdroid/donate"; - public static final String MALWARE_DETECTION_DOCS_URL = DOCS_URL + "/paid_features#51-malware-detection"; - public static final String FIREWALL_DOCS_URL = DOCS_URL + "/paid_features#52-firewall"; + public static final String FIREWALL_DOCS_URL = DOCS_URL + "/paid_features#51-firewall"; + public static final String MALWARE_DETECTION_DOCS_URL = DOCS_URL + "/paid_features#52-malware-detection"; private final ActivityResultLauncher pcapFileLauncher = registerForActivityResult(new StartActivityForResult(), this::pcapFileResult); @@ -211,7 +211,7 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavig Menu navMenu = mNavView.getMenu(); navMenu.findItem(R.id.open_root_log).setVisible(Prefs.isRootCaptureEnabled(mPrefs)); navMenu.findItem(R.id.malware_detection).setVisible(Prefs.isMalwareDetectionEnabled(this, mPrefs)); - navMenu.findItem(R.id.firewall).setVisible(mIab.canUseFirewall()); + navMenu.findItem(R.id.firewall).setVisible(mIab.isFirewallVisible()); } private void setupNavigationDrawer() { diff --git a/app/src/main/java/com/emanuelef/remote_capture/adapters/AppsStatsAdapter.java b/app/src/main/java/com/emanuelef/remote_capture/adapters/AppsStatsAdapter.java index f9eb992e..7852a835 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/adapters/AppsStatsAdapter.java +++ b/app/src/main/java/com/emanuelef/remote_capture/adapters/AppsStatsAdapter.java @@ -100,7 +100,7 @@ public class AppsStatsAdapter extends RecyclerView.Adapter(); - mFirewallAvailable = Billing.newInstance(context).canUseFirewall(); + mFirewallAvailable = Billing.newInstance(context).isFirewallVisible(); setHasStableIds(true); } 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 172a2352..a7e63612 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 @@ -307,7 +307,7 @@ public class ConnectionsFragment extends Fragment implements ConnectionsListener Context ctx = requireContext(); MenuItem item; - boolean firewallAvailable = Billing.newInstance(ctx).canUseFirewall(); + boolean firewallAvailable = Billing.newInstance(ctx).isFirewallVisible(); boolean blockVisible = false; boolean unblockVisible = false; MatchList blocklist = PCAPdroid.getInstance().getBlocklist(); diff --git a/app/src/main/java/com/emanuelef/remote_capture/fragments/FirewallStatus.java b/app/src/main/java/com/emanuelef/remote_capture/fragments/FirewallStatus.java index f943371a..a4528fa3 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/fragments/FirewallStatus.java +++ b/app/src/main/java/com/emanuelef/remote_capture/fragments/FirewallStatus.java @@ -121,7 +121,7 @@ public class FirewallStatus extends Fragment { mToggle = (SwitchCompat) menu.findItem(R.id.toggle_btn).getActionView(); mToggle.setOnCheckedChangeListener((buttonView, isChecked) -> { - if(isChecked == CaptureService.isFirewallEnabled(requireContext(), mPrefs)) + if(isChecked == Prefs.isFirewallEnabled(requireContext(), mPrefs)) return; // not changed Log.d(TAG, "Firwall is now " + (isChecked ? "enabled" : "disabled")); @@ -152,7 +152,7 @@ public class FirewallStatus extends Fragment { Context ctx = requireContext(); ConnectionsRegister reg = CaptureService.getConnsRegister(); boolean is_running = CaptureService.isServiceActive(); - boolean is_enabled = CaptureService.isFirewallEnabled(ctx, mPrefs); + boolean is_enabled = Prefs.isFirewallEnabled(ctx, mPrefs); if(!is_running) { mStatusIcon.setImageResource(R.drawable.ic_shield); diff --git a/app/src/main/java/com/emanuelef/remote_capture/model/Prefs.java b/app/src/main/java/com/emanuelef/remote_capture/model/Prefs.java index ac5cbba7..15966969 100644 --- a/app/src/main/java/com/emanuelef/remote_capture/model/Prefs.java +++ b/app/src/main/java/com/emanuelef/remote_capture/model/Prefs.java @@ -116,7 +116,7 @@ public class Prefs { } public static boolean isFirewallEnabled(Context ctx, SharedPreferences p) { // NOTE: firewall can be disabled at runtime - return(Billing.newInstance(ctx).canUseFirewall() + return(Billing.newInstance(ctx).isFirewallVisible() && p.getBoolean(PREF_FIREWALL, true)); } public static boolean startAtBoot(SharedPreferences p) { return(p.getBoolean(PREF_START_AT_BOOT, false)); }