]> gitweb.stoutner.com Git - PrivacyBrowserAndroid.git/blobdiff - app/src/main/java/com/stoutner/privacybrowser/fragments/SettingsFragment.java
Add UltraPrivacy. https://redmine.stoutner.com/issues/310
[PrivacyBrowserAndroid.git] / app / src / main / java / com / stoutner / privacybrowser / fragments / SettingsFragment.java
index cb0ca13e4883f6c0ad6ce26fe55c60ceb2527a5e..c8481c0b2548e0d31390fa45104e2c055055e44e 100644 (file)
@@ -26,6 +26,7 @@ import android.content.SharedPreferences;
 import android.os.Build;
 import android.os.Bundle;
 import android.preference.Preference;
+import android.preference.PreferenceCategory;
 import android.preference.PreferenceFragment;
 import android.view.LayoutInflater;
 import android.view.View;
@@ -50,12 +51,12 @@ public class SettingsFragment extends PreferenceFragment {
         // Initialize savedPreferences.
         savedPreferences = getPreferenceScreen().getSharedPreferences();
 
-        // Get handles for the preferences we need to modify.
+        // Get handles for the preferences.
         final Preference javaScriptPreference = findPreference("javascript_enabled");
         final Preference firstPartyCookiesPreference = findPreference("first_party_cookies_enabled");
         final Preference thirdPartyCookiesPreference = findPreference("third_party_cookies_enabled");
         final Preference domStoragePreference = findPreference("dom_storage_enabled");
-        final Preference saveFormDataPreference = findPreference("save_form_data_enabled");
+        final Preference saveFormDataPreference = findPreference("save_form_data_enabled");  // The form data preference can be removed once the minimum API >= 26.
         final Preference userAgentPreference = findPreference("user_agent");
         final Preference customUserAgentPreference = findPreference("custom_user_agent");
         final Preference incognitoModePreference = findPreference("incognito_mode");
@@ -65,6 +66,8 @@ public class SettingsFragment extends PreferenceFragment {
         final Preference easyPrivacyPreference = findPreference("easyprivacy");
         final Preference fanboyAnnoyanceListPreference = findPreference("fanboy_annoyance_list");
         final Preference fanboySocialBlockingListPreference = findPreference("fanboy_social_blocking_list");
+        final Preference ultraPrivacyPreference = findPreference("ultraprivacy");
+        final Preference blockAllThirdPartyRequestsPreference = findPreference("block_all_third_party_requests");
         final Preference proxyThroughOrbotPreference = findPreference("proxy_through_orbot");
         final Preference torHomepagePreference = findPreference("tor_homepage");
         final Preference torSearchPreference = findPreference("tor_search");
@@ -77,7 +80,7 @@ public class SettingsFragment extends PreferenceFragment {
         final Preference clearEverythingPreference = findPreference("clear_everything");
         final Preference clearCookiesPreference = findPreference("clear_cookies");
         final Preference clearDomStoragePreference = findPreference("clear_dom_storage");
-        final Preference clearFormDataPreference = findPreference("clear_form_data");
+        final Preference clearFormDataPreference = findPreference("clear_form_data");  // The clear form data preference can be removed once the minimum API >= 26.
         final Preference clearCachePreference = findPreference("clear_cache");
         final Preference homepagePreference = findPreference("homepage");
         final Preference defaultFontSizePreference = findPreference("default_font_size");
@@ -96,7 +99,7 @@ public class SettingsFragment extends PreferenceFragment {
         String torSearchString = savedPreferences.getString("tor_search", "https://3g2upl4pq6kufc4m.onion/html/?q=");
         String searchString = savedPreferences.getString("search", "https://duckduckgo.com/html/?q=");
 
-        // Get booleans from the preferences.
+        // Get booleans that are used in multiple places from the preferences.
         final boolean javaScriptEnabled = savedPreferences.getBoolean("javascript_enabled", false);
         boolean firstPartyCookiesEnabled = savedPreferences.getBoolean("first_party_cookies_enabled", false);
         boolean thirdPartyCookiesEnabled = savedPreferences.getBoolean("third_party_cookies_enabled", false);
@@ -108,18 +111,29 @@ public class SettingsFragment extends PreferenceFragment {
         boolean clearEverything = savedPreferences.getBoolean("clear_everything", true);
         final boolean nightMode = savedPreferences.getBoolean("night_mode", false);
 
-        // Only enable the third-party preference if first-party cookies are enabled and API >= 21.
+        // Only enable the third-party cookies preference if first-party cookies are enabled and API >= 21.
         thirdPartyCookiesPreference.setEnabled(firstPartyCookiesEnabled && (Build.VERSION.SDK_INT >= 21));
 
         // Only enable the DOM storage preference if either JavaScript or Night Mode is enabled.
         domStoragePreference.setEnabled(javaScriptEnabled || nightMode);
 
+        // Remove the form data preferences if the API is >= 26 as they no longer do anything.
+        if (Build.VERSION.SDK_INT >= 26) {
+            // Get the categories.
+            PreferenceCategory privacyCategory = (PreferenceCategory) findPreference("privacy");
+            PreferenceCategory clearAndExitCategory = (PreferenceCategory) findPreference("clear_and_exit");
+
+            // Remove the form data preferences.
+            privacyCategory.removePreference(saveFormDataPreference);
+            clearAndExitCategory.removePreference(clearFormDataPreference);
+        }
+
         // Only enable Fanboy's social blocking list preference if Fanboy's annoyance list is disabled.
         fanboySocialBlockingListPreference.setEnabled(!fanboyAnnoyanceListEnabled);
 
-        // We need to inflated a `WebView` to get the default user agent.
+        // Inflate a WebView to get the default user agent.
         LayoutInflater inflater = getActivity().getLayoutInflater();
-        // `@SuppressLint("InflateParams")` removes the warning about using `null` as the `ViewGroup`, which in this case makes sense because we don't want to display `bare_webview` on the screen.
+        // `@SuppressLint("InflateParams")` removes the warning about using `null` as the `ViewGroup`, which in this case makes sense because the `bare_webview` will not be displayed.
         @SuppressLint("InflateParams") View bareWebViewLayout = inflater.inflate(R.layout.bare_webview, null, false);
         final WebView bareWebView = bareWebViewLayout.findViewById(R.id.bare_webview);
 
@@ -201,7 +215,7 @@ public class SettingsFragment extends PreferenceFragment {
         // Set the status of the `Clear and Exit` preferences.
         clearCookiesPreference.setEnabled(!clearEverything);
         clearDomStoragePreference.setEnabled(!clearEverything);
-        clearFormDataPreference.setEnabled(!clearEverything);
+        clearFormDataPreference.setEnabled(!clearEverything);  // The form data line can be removed once the minimum API is >= 26.
         clearCachePreference.setEnabled(!clearEverything);
 
         // Set the homepage URL as the summary text for the homepage preference.
@@ -269,14 +283,16 @@ public class SettingsFragment extends PreferenceFragment {
             }
         }
 
-        // Set the save form data icon.
-        if (savedPreferences.getBoolean("save_form_data_enabled", false)) {
-            saveFormDataPreference.setIcon(R.drawable.form_data_enabled);
-        } else {
-            if (MainWebViewActivity.darkTheme) {
-                saveFormDataPreference.setIcon(R.drawable.form_data_disabled_dark);
+        // Set the save form data icon if API < 26.  Save form data has no effect on API >= 26.
+        if (Build.VERSION.SDK_INT < 26) {
+            if (savedPreferences.getBoolean("save_form_data_enabled", false)) {
+                saveFormDataPreference.setIcon(R.drawable.form_data_enabled);
             } else {
-                saveFormDataPreference.setIcon(R.drawable.form_data_disabled_light);
+                if (MainWebViewActivity.darkTheme) {
+                    saveFormDataPreference.setIcon(R.drawable.form_data_disabled_dark);
+                } else {
+                    saveFormDataPreference.setIcon(R.drawable.form_data_disabled_light);
+                }
             }
         }
 
@@ -409,6 +425,36 @@ public class SettingsFragment extends PreferenceFragment {
             }
         }
 
+        // Set the UltraPrivacy icon.
+        if (savedPreferences.getBoolean("ultraprivacy", true)) {
+            if (MainWebViewActivity.darkTheme) {
+                ultraPrivacyPreference.setIcon(R.drawable.block_tracking_enabled_dark);
+            } else {
+                ultraPrivacyPreference.setIcon(R.drawable.block_tracking_enabled_light);
+            }
+        } else {
+            if (MainWebViewActivity.darkTheme) {
+                ultraPrivacyPreference.setIcon(R.drawable.block_tracking_disabled_dark);
+            } else {
+                ultraPrivacyPreference.setIcon(R.drawable.block_tracking_disabled_light);
+            }
+        }
+
+        // Set the block all third-party requests icon.
+        if (savedPreferences.getBoolean("block_all_third_party_requests", false)) {
+            if (MainWebViewActivity.darkTheme) {
+                blockAllThirdPartyRequestsPreference.setIcon(R.drawable.block_all_third_party_requests_enabled_dark);
+            } else {
+                blockAllThirdPartyRequestsPreference.setIcon(R.drawable.block_all_third_party_requests_enabled_light);
+            }
+        } else {
+            if (MainWebViewActivity.darkTheme) {
+                blockAllThirdPartyRequestsPreference.setIcon(R.drawable.block_all_third_party_requests_disabled_dark);
+            } else {
+                blockAllThirdPartyRequestsPreference.setIcon(R.drawable.block_all_third_party_requests_disabled_light);
+            }
+        }
+
         // Set the Tor icons according to the theme.
         if (proxyThroughOrbot) {  // Proxying is enabled.
             if (MainWebViewActivity.darkTheme) {
@@ -551,15 +597,17 @@ public class SettingsFragment extends PreferenceFragment {
             clearDomStoragePreference.setIcon(R.drawable.dom_storage_warning);
         }
 
-        // Set the clear form data preference icon.
-        if (clearEverything || savedPreferences.getBoolean("clear_form_data", true)) {
-            if (MainWebViewActivity.darkTheme) {
-                clearFormDataPreference.setIcon(R.drawable.form_data_cleared_dark);
+        // Set the clear form data preference icon if the API < 26.  It has no effect on newer versions of Android.
+        if (Build.VERSION.SDK_INT < 26) {
+            if (clearEverything || savedPreferences.getBoolean("clear_form_data", true)) {
+                if (MainWebViewActivity.darkTheme) {
+                    clearFormDataPreference.setIcon(R.drawable.form_data_cleared_dark);
+                } else {
+                    clearFormDataPreference.setIcon(R.drawable.form_data_cleared_light);
+                }
             } else {
-                clearFormDataPreference.setIcon(R.drawable.form_data_cleared_light);
+                clearFormDataPreference.setIcon(R.drawable.form_data_warning);
             }
-        } else {
-            clearFormDataPreference.setIcon(R.drawable.form_data_warning);
         }
 
         // Set the clear cache preference icon.
@@ -749,6 +797,7 @@ public class SettingsFragment extends PreferenceFragment {
                     }
                     break;
 
+                // Save form data can be removed once the minimum API >= 26.
                 case "save_form_data_enabled":
                     // Update the icon.
                     if (sharedPreferences.getBoolean("save_form_data_enabled", false)) {
@@ -927,7 +976,7 @@ public class SettingsFragment extends PreferenceFragment {
                     boolean currentFanboySocialBlockingList = sharedPreferences.getBoolean("fanboy_social_blocking_list", true);
 
                     // Update the Fanboy icons.
-                    if (sharedPreferences.getBoolean("fanboy_annoyance_list", true)) {
+                    if (currentFanboyAnnoyanceList) {  // Fanboy's annoyance list is enabled.
                         if (MainWebViewActivity.darkTheme) {
                             // Update the Fanboy's annoyance list icon.
                             fanboyAnnoyanceListPreference.setIcon(R.drawable.social_media_enabled_dark);
@@ -941,16 +990,16 @@ public class SettingsFragment extends PreferenceFragment {
                             // Update the Fanboy's social blocking list icon.
                             fanboySocialBlockingListPreference.setIcon(R.drawable.social_media_ghosted_light);
                         }
-                    } else {
+                    } else {  // Fanboy's annoyance list is disabled.
                         if (MainWebViewActivity.darkTheme) {
                             // Update the Fanboy's annoyance list icon.
                             fanboyAnnoyanceListPreference.setIcon(R.drawable.social_media_disabled_dark);
 
                             // Update the Fanboy's social blocking list icon.
                             if (currentFanboySocialBlockingList) {
-                                fanboyAnnoyanceListPreference.setIcon(R.drawable.social_media_enabled_dark);
+                                fanboySocialBlockingListPreference.setIcon(R.drawable.social_media_enabled_dark);
                             } else {
-                                fanboyAnnoyanceListPreference.setIcon(R.drawable.social_media_disabled_dark);
+                                fanboySocialBlockingListPreference.setIcon(R.drawable.social_media_disabled_dark);
                             }
                         } else {
                             // Update the Fanboy's annoyance list icon.
@@ -958,9 +1007,9 @@ public class SettingsFragment extends PreferenceFragment {
 
                             // Update the Fanboy's social blocking list icon.
                             if (currentFanboySocialBlockingList) {
-                                fanboyAnnoyanceListPreference.setIcon(R.drawable.social_media_enabled_light);
+                                fanboySocialBlockingListPreference.setIcon(R.drawable.social_media_enabled_light);
                             } else {
-                                fanboyAnnoyanceListPreference.setIcon(R.drawable.social_media_disabled_light);
+                                fanboySocialBlockingListPreference.setIcon(R.drawable.social_media_disabled_light);
                             }
                         }
                     }
@@ -986,6 +1035,40 @@ public class SettingsFragment extends PreferenceFragment {
                     }
                     break;
 
+                case "ultraprivacy":
+                    // Update the icon.
+                    if (sharedPreferences.getBoolean("ultraprivacy", true)) {
+                        if (MainWebViewActivity.darkTheme) {
+                            ultraPrivacyPreference.setIcon(R.drawable.block_tracking_enabled_dark);
+                        } else {
+                            ultraPrivacyPreference.setIcon(R.drawable.block_tracking_enabled_light);
+                        }
+                    } else {
+                        if (MainWebViewActivity.darkTheme) {
+                            ultraPrivacyPreference.setIcon(R.drawable.block_tracking_disabled_dark);
+                        } else {
+                            ultraPrivacyPreference.setIcon(R.drawable.block_tracking_disabled_light);
+                        }
+                    }
+                    break;
+
+                case "block_all_third_party_requests":
+                    // Update the icon.
+                    if (sharedPreferences.getBoolean("block_all_third_party_requests", false)) {
+                        if (MainWebViewActivity.darkTheme) {
+                            blockAllThirdPartyRequestsPreference.setIcon(R.drawable.block_all_third_party_requests_enabled_dark);
+                        } else {
+                            blockAllThirdPartyRequestsPreference.setIcon(R.drawable.block_all_third_party_requests_enabled_light);
+                        }
+                    } else {
+                        if (MainWebViewActivity.darkTheme) {
+                            blockAllThirdPartyRequestsPreference.setIcon(R.drawable.block_all_third_party_requests_disabled_dark);
+                        } else {
+                            blockAllThirdPartyRequestsPreference.setIcon(R.drawable.block_all_third_party_requests_disabled_light);
+                        }
+                    }
+                    break;
+
                 case "proxy_through_orbot":
                     // Get current settings.
                     boolean currentProxyThroughOrbot = sharedPreferences.getBoolean("proxy_through_orbot", false);
@@ -1249,7 +1332,7 @@ public class SettingsFragment extends PreferenceFragment {
                     // Update the status of the `Clear and Exit` preferences.
                     clearCookiesPreference.setEnabled(!newClearEverythingBoolean);
                     clearDomStoragePreference.setEnabled(!newClearEverythingBoolean);
-                    clearFormDataPreference.setEnabled(!newClearEverythingBoolean);
+                    clearFormDataPreference.setEnabled(!newClearEverythingBoolean);  // This line can be removed once the minimum API >= 26.
                     clearCachePreference.setEnabled(!newClearEverythingBoolean);
 
                     // Update the `clearEverythingPreference` icon.
@@ -1285,15 +1368,17 @@ public class SettingsFragment extends PreferenceFragment {
                         clearDomStoragePreference.setIcon(R.drawable.dom_storage_warning);
                     }
 
-                    // Update the `clearFormDataPreference` icon.
-                    if (newClearEverythingBoolean || sharedPreferences.getBoolean("clear_form_data", true)) {
-                        if (MainWebViewActivity.darkTheme) {
-                            clearFormDataPreference.setIcon(R.drawable.form_data_cleared_dark);
+                    // Update the clear form data preference icon if the API < 26.
+                    if (Build.VERSION.SDK_INT < 26) {
+                        if (newClearEverythingBoolean || sharedPreferences.getBoolean("clear_form_data", true)) {
+                            if (MainWebViewActivity.darkTheme) {
+                                clearFormDataPreference.setIcon(R.drawable.form_data_cleared_dark);
+                            } else {
+                                clearFormDataPreference.setIcon(R.drawable.form_data_cleared_light);
+                            }
                         } else {
-                            clearFormDataPreference.setIcon(R.drawable.form_data_cleared_light);
+                            clearFormDataPreference.setIcon(R.drawable.form_data_warning);
                         }
-                    } else {
-                        clearFormDataPreference.setIcon(R.drawable.form_data_warning);
                     }
 
                     // Update the `clearCachePreference` icon.
@@ -1334,6 +1419,7 @@ public class SettingsFragment extends PreferenceFragment {
                     }
                     break;
 
+                // This section can be removed once the minimum API >= 26.
                 case "clear_form_data":
                     // Update the icon.
                     if (sharedPreferences.getBoolean("clear_form_data", true)) {