From 73e614e2b8f8f3b251b6191ce8b1a93741e3fc45 Mon Sep 17 00:00:00 2001 From: Claude Date: Sat, 4 Apr 2026 08:58:26 +0000 Subject: [PATCH] Add bulk exclude/include all apps from tracker monitoring Adds two actions in Advanced Settings to disable or re-enable tracker monitoring for all installed apps at once. This addresses the pain point in #522 where users with many apps must configure each one individually. Both actions show a confirmation dialog before proceeding. The options are hidden in minimal blocking mode where per-app tracker toggles are not applicable. https://claude.ai/code/session_01Su29k626TdMqFnnNX8iAGK --- .../faircode/netguard/ActivitySettings.java | 43 ++++++++++++++++++- app/src/main/res/values/strings.xml | 4 ++ app/src/main/res/xml/preferences.xml | 8 ++++ 3 files changed, 54 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/eu/faircode/netguard/ActivitySettings.java b/app/src/main/java/eu/faircode/netguard/ActivitySettings.java index 439deae6..ab1f85e0 100644 --- a/app/src/main/java/eu/faircode/netguard/ActivitySettings.java +++ b/app/src/main/java/eu/faircode/netguard/ActivitySettings.java @@ -357,6 +357,32 @@ public boolean onPreferenceClick(Preference preference) { }); } + Preference pref_exclude_all = screen.findPreference("exclude_all_tracking"); + if (pref_exclude_all != null) { + pref_exclude_all.setOnPreferenceClickListener(preference -> { + Util.areYouSure(ActivitySettings.this, R.string.summary_exclude_all_tracking, new Util.DoubtListener() { + @Override + public void onSure() { + setTrackerProtectionForAll(false); + } + }); + return true; + }); + } + + Preference pref_include_all = screen.findPreference("include_all_tracking"); + if (pref_include_all != null) { + pref_include_all.setOnPreferenceClickListener(preference -> { + Util.areYouSure(ActivitySettings.this, R.string.summary_include_all_tracking, new Util.DoubtListener() { + @Override + public void onSure() { + setTrackerProtectionForAll(true); + } + }); + return true; + }); + } + if (pref_rcode != null && cat_advanced != null) { pref_rcode.setTitle(getString(R.string.setting_rcode, prefs.getString("rcode", "3"))); cat_advanced.removePreference(pref_rcode); @@ -393,8 +419,12 @@ public boolean onPreferenceClick(Preference preference) { if (p != null) p.setEnabled(false); } - // In minimal mode, hide hosts/blocklist management (not used) and strict_blocking + // In minimal mode, hide hosts/blocklist management (not used) and per-app tracker options if (BlockingMode.isMinimalMode(this) && cat_advanced != null) { + Preference excludeAll = cat_advanced.findPreference("exclude_all_tracking"); + if (excludeAll != null) cat_advanced.removePreference(excludeAll); + Preference includeAll = cat_advanced.findPreference("include_all_tracking"); + if (includeAll != null) cat_advanced.removePreference(includeAll); Preference manageBlocklists = cat_advanced.findPreference("manage_blocklists"); if (manageBlocklists != null) cat_advanced.removePreference(manageBlocklists); Preference hostsDownload = cat_advanced.findPreference("hosts_download"); @@ -849,6 +879,17 @@ else if (BlockingMode.MODE_STRICT.equals(mode)) pref.setSummary(R.string.summary_blocking_mode_standard); } + private void setTrackerProtectionForAll(boolean enabled) { + SharedPreferences tracker_protect = getSharedPreferences("tracker_protect", Context.MODE_PRIVATE); + SharedPreferences.Editor editor = tracker_protect.edit(); + + for (android.content.pm.PackageInfo pkg : Rule.getPackages(this)) + editor.putBoolean(pkg.packageName, enabled); + + editor.apply(); + ServiceSinkhole.reload("bulk tracker protect changed", this, false); + } + @TargetApi(Build.VERSION_CODES.M) private boolean checkPermissions(String name) { PreferenceScreen screen = getPreferenceScreen(); diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 153d0389..679bb05e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -101,6 +101,10 @@ Track network usage Reset network usage Show resolved domain names + Exclude all apps from tracking + Disable tracker monitoring for all apps. You can then re-enable it for individual apps. + Include all apps in tracking + Re-enable tracker monitoring for all apps. Enable hosts file Hosts blocking response: %s VPN IPv4: %s diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index b5d1dfb6..799d698b 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -112,6 +112,14 @@ android:key="manage_system" android:summary="@string/summary_system" android:title="@string/setting_system" /> + +