X-Git-Url: https://gitweb.stoutner.com/?p=PrivacyBrowserAndroid.git;a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fcom%2Fstoutner%2Fprivacybrowser%2Ffragments%2FSettingsFragment.java;h=643051abb970995d2dc5d3e4d5ab93e46ecf8afc;hp=7dab898e383cb203bd84609b33cd6943cffc22ba;hb=ba4a1c032dbffde044b70c804f9d3c1f1ba7b939;hpb=b692dfc0bae740891c806bb2ea1c18041bf6b66f diff --git a/app/src/main/java/com/stoutner/privacybrowser/fragments/SettingsFragment.java b/app/src/main/java/com/stoutner/privacybrowser/fragments/SettingsFragment.java index 7dab898e..643051ab 100644 --- a/app/src/main/java/com/stoutner/privacybrowser/fragments/SettingsFragment.java +++ b/app/src/main/java/com/stoutner/privacybrowser/fragments/SettingsFragment.java @@ -1,5 +1,5 @@ /* - * Copyright © 2016-2019 Soren Stoutner . + * Copyright © 2016-2020 Soren Stoutner . * * This file is part of Privacy Browser . * @@ -20,37 +20,46 @@ package com.stoutner.privacybrowser.fragments; import android.annotation.SuppressLint; +import android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; +import android.content.res.Resources; import android.os.Build; import android.os.Bundle; import android.os.Handler; -import android.preference.Preference; -import android.preference.PreferenceCategory; -import android.preference.PreferenceFragment; import android.view.LayoutInflater; import android.view.View; import android.webkit.WebView; import android.widget.ArrayAdapter; +import androidx.preference.Preference; +import androidx.preference.PreferenceCategory; +import androidx.preference.PreferenceFragmentCompat; + import com.stoutner.privacybrowser.R; import com.stoutner.privacybrowser.activities.MainWebViewActivity; +import com.stoutner.privacybrowser.helpers.DownloadLocationHelper; +import com.stoutner.privacybrowser.helpers.ProxyHelper; -public class SettingsFragment extends PreferenceFragment { +public class SettingsFragment extends PreferenceFragmentCompat { + // Define the class variables. private SharedPreferences.OnSharedPreferenceChangeListener preferencesListener; private SharedPreferences savedPreferences; @Override - public void onCreate(Bundle savedInstanceState) { - // Run the default commands. - super.onCreate(savedInstanceState); - + public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { // Load the preferences from the XML file. - addPreferencesFromResource(R.xml.preferences); + setPreferencesFromResource(R.xml.preferences, rootKey); + + // Get a handle for the activity. + Activity activity = getActivity(); + + // Remove the lint warning below that `getApplicationContext()` might produce a null pointer exception. + assert activity != null; // Get a handle for the context. - Context context = getActivity().getApplicationContext(); + Context context = activity.getApplicationContext(); // Initialize savedPreferences. savedPreferences = getPreferenceScreen().getSharedPreferences(); @@ -70,17 +79,16 @@ public class SettingsFragment extends PreferenceFragment { Preference easyPrivacyPreference = findPreference("easyprivacy"); Preference fanboyAnnoyanceListPreference = findPreference("fanboys_annoyance_list"); Preference fanboySocialBlockingListPreference = findPreference("fanboys_social_blocking_list"); + Preference ultraListPreference = findPreference("ultralist"); Preference ultraPrivacyPreference = findPreference("ultraprivacy"); Preference blockAllThirdPartyRequestsPreference = findPreference("block_all_third_party_requests"); Preference googleAnalyticsPreference = findPreference("google_analytics"); Preference facebookClickIdsPreference = findPreference("facebook_click_ids"); Preference twitterAmpRedirectsPreference = findPreference("twitter_amp_redirects"); - Preference proxyThroughOrbotPreference = findPreference("proxy_through_orbot"); - Preference torHomepagePreference = findPreference("tor_homepage"); - Preference torSearchPreference = findPreference("tor_search"); - Preference torSearchCustomURLPreference = findPreference("tor_search_custom_url"); Preference searchPreference = findPreference("search"); Preference searchCustomURLPreference = findPreference("search_custom_url"); + Preference proxyPreference = findPreference("proxy"); + Preference proxyCustomUrlPreference = findPreference("proxy_custom_url"); Preference fullScreenBrowsingModePreference = findPreference("full_screen_browsing_mode"); Preference hideAppBarPreference = findPreference("hide_app_bar"); Preference clearEverythingPreference = findPreference("clear_everything"); @@ -89,25 +97,71 @@ public class SettingsFragment extends PreferenceFragment { Preference clearFormDataPreference = findPreference("clear_form_data"); // The clear form data preference can be removed once the minimum API >= 26. Preference clearCachePreference = findPreference("clear_cache"); Preference homepagePreference = findPreference("homepage"); + Preference downloadLocationPreference = findPreference("download_location"); + Preference downloadCustomLocationPreference = findPreference("download_custom_location"); Preference fontSizePreference = findPreference("font_size"); Preference openIntentsInNewTabPreference = findPreference("open_intents_in_new_tab"); Preference swipeToRefreshPreference = findPreference("swipe_to_refresh"); Preference scrollAppBarPreference = findPreference("scroll_app_bar"); Preference displayAdditionalAppBarIconsPreference = findPreference("display_additional_app_bar_icons"); - Preference downloadWithExternalAppPreference = findPreference("download_with_external_app"); Preference darkThemePreference = findPreference("dark_theme"); Preference nightModePreference = findPreference("night_mode"); Preference wideViewportPreference = findPreference("wide_viewport"); Preference displayWebpageImagesPreference = findPreference("display_webpage_images"); - // Set dependencies. - torHomepagePreference.setDependency("proxy_through_orbot"); - torSearchPreference.setDependency("proxy_through_orbot"); + // Remove the lint warnings below that the preferences might be null. + assert javaScriptPreference != null; + assert firstPartyCookiesPreference != null; + assert thirdPartyCookiesPreference != null; + assert domStoragePreference != null; + assert formDataPreference != null; + assert userAgentPreference != null; + assert customUserAgentPreference != null; + assert incognitoModePreference != null; + assert doNotTrackPreference != null; + assert allowScreenshotsPreference != null; + assert easyListPreference != null; + assert easyPrivacyPreference != null; + assert fanboyAnnoyanceListPreference != null; + assert fanboySocialBlockingListPreference != null; + assert ultraListPreference != null; + assert ultraPrivacyPreference != null; + assert blockAllThirdPartyRequestsPreference != null; + assert googleAnalyticsPreference != null; + assert facebookClickIdsPreference != null; + assert twitterAmpRedirectsPreference != null; + assert searchPreference != null; + assert searchCustomURLPreference != null; + assert proxyPreference != null; + assert proxyCustomUrlPreference != null; + assert fullScreenBrowsingModePreference != null; + assert hideAppBarPreference != null; + assert clearEverythingPreference != null; + assert clearCookiesPreference != null; + assert clearDomStoragePreference != null; + assert clearFormDataPreference != null; + assert clearCachePreference != null; + assert homepagePreference != null; + assert downloadLocationPreference != null; + assert downloadCustomLocationPreference != null; + assert fontSizePreference != null; + assert openIntentsInNewTabPreference != null; + assert swipeToRefreshPreference != null; + assert scrollAppBarPreference != null; + assert displayAdditionalAppBarIconsPreference != null; + assert darkThemePreference != null; + assert nightModePreference != null; + assert wideViewportPreference != null; + assert displayWebpageImagesPreference != null; + + // Set the hide app bar preference dependency. hideAppBarPreference.setDependency("full_screen_browsing_mode"); // Get strings from the preferences. - String torSearchString = savedPreferences.getString("tor_search", getString(R.string.tor_search_default_value)); + String userAgentName = savedPreferences.getString("user_agent", getString(R.string.user_agent_default_value)); String searchString = savedPreferences.getString("search", getString(R.string.search_default_value)); + String proxyString = savedPreferences.getString("proxy", getString(R.string.proxy_default_value)); + String downloadLocationString = savedPreferences.getString("download_location", getString(R.string.download_location_default_value)); // Get booleans that are used in multiple places from the preferences. boolean javaScriptEnabled = savedPreferences.getBoolean("javascript", false); @@ -115,7 +169,6 @@ public class SettingsFragment extends PreferenceFragment { boolean thirdPartyCookiesEnabled = savedPreferences.getBoolean("third_party_cookies", false); boolean fanboyAnnoyanceListEnabled = savedPreferences.getBoolean("fanboys_annoyance_list", true); boolean fanboySocialBlockingEnabled = savedPreferences.getBoolean("fanboys_social_blocking_list", true); - boolean proxyThroughOrbot = savedPreferences.getBoolean("proxy_through_orbot", false); boolean fullScreenBrowsingMode = savedPreferences.getBoolean("full_screen_browsing_mode", false); boolean clearEverything = savedPreferences.getBoolean("clear_everything", true); boolean darkTheme = savedPreferences.getBoolean("dark_theme", false); @@ -130,8 +183,12 @@ public class SettingsFragment extends PreferenceFragment { // 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"); + PreferenceCategory privacyCategory = findPreference("privacy"); + PreferenceCategory clearAndExitCategory = findPreference("clear_and_exit"); + + // Remove the lint warnings below that the preference categories might be null. + assert privacyCategory != null; + assert clearAndExitCategory != null; // Remove the form data preferences. privacyCategory.removePreference(formDataPreference); @@ -141,10 +198,14 @@ public class SettingsFragment extends PreferenceFragment { // Only enable Fanboy's social blocking list preference if Fanboy's annoyance list is disabled. fanboySocialBlockingListPreference.setEnabled(!fanboyAnnoyanceListEnabled); + // 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 the `bare_webview` will not be displayed. @SuppressLint("InflateParams") View bareWebViewLayout = inflater.inflate(R.layout.bare_webview, null, false); + + // Get a handle for a bare WebView. WebView bareWebView = bareWebViewLayout.findViewById(R.id.bare_webview); // Get the user agent arrays. @@ -152,9 +213,6 @@ public class SettingsFragment extends PreferenceFragment { String[] translatedUserAgentNamesArray = getResources().getStringArray(R.array.translated_user_agent_names); String[] userAgentDataArray = getResources().getStringArray(R.array.user_agent_data); - // Get the current user agent name from the preference. - String userAgentName = savedPreferences.getString("user_agent", getString(R.string.user_agent_default_value)); - // Get the array position of the user agent name. int userAgentArrayPosition = userAgentNamesArray.getPosition(userAgentName); @@ -180,29 +238,11 @@ public class SettingsFragment extends PreferenceFragment { userAgentPreference.setSummary(translatedUserAgentNamesArray[userAgentArrayPosition] + ":\n" + userAgentDataArray[userAgentArrayPosition]); } - // Set the summary text for the custom user agent preference and enable it if user agent preference is set to custom. + // Set the summary text for the custom user agent preference. customUserAgentPreference.setSummary(savedPreferences.getString("custom_user_agent", getString(R.string.custom_user_agent_default_value))); - customUserAgentPreference.setEnabled(userAgentPreference.getSummary().equals(getString(R.string.custom_user_agent))); - - // Set the Tor homepage URL as the summary text for the `tor_homepage` preference when the preference screen is loaded. The default is Searx: `http://ulrn6sryqaifefld.onion/`. - torHomepagePreference.setSummary(savedPreferences.getString("tor_homepage", getString(R.string.tor_homepage_default_value))); - - - // Set the Tor search URL as the summary text for the Tor preference when the preference screen is loaded. - if (torSearchString.equals("Custom URL")) { - // Use R.string.custom_url, which will be translated, instead of the array value, which will not. - torSearchPreference.setSummary(R.string.custom_url); - } else { - // Set the array value as the summary text. - torSearchPreference.setSummary(torSearchString); - } - - // Set the summary text for `tor_search_custom_url`. The default is `""`. - torSearchCustomURLPreference.setSummary(savedPreferences.getString("tor_search_custom_url", getString(R.string.tor_search_custom_url_default_value))); - - // Enable the Tor custom URL search options only if proxying through Orbot and the search is set to `Custom URL`. - torSearchCustomURLPreference.setEnabled(proxyThroughOrbot && torSearchString.equals("Custom URL")); + // Only enable the custom user agent preference if the user agent is set to `Custom`. + customUserAgentPreference.setEnabled(userAgentPreference.getSummary().equals(getString(R.string.custom_user_agent))); // Set the search URL as the summary text for the search preference when the preference screen is loaded. @@ -214,21 +254,73 @@ public class SettingsFragment extends PreferenceFragment { searchPreference.setSummary(searchString); } - // Set the summary text for `search_custom_url` (the default is `""`) and enable it if `search` is set to `Custom URL`. + // Set the summary text for the search custom URL (the default is `""`). searchCustomURLPreference.setSummary(savedPreferences.getString("search_custom_url", getString(R.string.search_custom_url_default_value))); + + // Only enable the search custom URL preference if the search is set to `Custom URL`. searchCustomURLPreference.setEnabled(searchString.equals("Custom URL")); + + // Set the summary text for the proxy preference when the preference screen is loaded. + switch (proxyString) { + case ProxyHelper.NONE: + proxyPreference.setSummary(getString(R.string.no_proxy_enabled)); + break; + + case ProxyHelper.TOR: + if (Build.VERSION.SDK_INT == 19) { // Proxying through SOCKS doesn't work on Android KitKat. + proxyPreference.setSummary(getString(R.string.tor_enabled_kitkat)); + } else { + proxyPreference.setSummary(getString(R.string.tor_enabled)); + } + break; + + case ProxyHelper.I2P: + proxyPreference.setSummary(getString(R.string.i2p_enabled)); + break; + + case ProxyHelper.CUSTOM: + proxyPreference.setSummary(getString(R.string.custom_proxy)); + break; + } + + // Set the summary text for the custom proxy URL. + proxyCustomUrlPreference.setSummary(savedPreferences.getString("proxy_custom_url", getString(R.string.proxy_custom_url_default_value))); + + // Only enable the custom proxy URL if a custom proxy is selected. + proxyCustomUrlPreference.setEnabled(proxyString.equals("Custom")); + + // Set the status of the Clear and Exit preferences. clearCookiesPreference.setEnabled(!clearEverything); clearDomStoragePreference.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. homepagePreference.setSummary(savedPreferences.getString("homepage", getString(R.string.homepage_default_value))); + + // Instantiate the download location helper. + DownloadLocationHelper downloadLocationHelper = new DownloadLocationHelper(); + + // Set the download location summary text. + downloadLocationPreference.setSummary(downloadLocationHelper.getDownloadLocation(context)); + + // Set the summary text for the download custom location (the default is `"`). + downloadCustomLocationPreference.setSummary(savedPreferences.getString("download_custom_location", getString(R.string.download_custom_location_default_value))); + + // Get the download location entry values string array. + String[] downloadLocationEntryValuesStringArray = context.getResources().getStringArray(R.array.download_location_entry_values); + + // Only enable the download custom location preference if the download location is set to `Custom`. + downloadCustomLocationPreference.setEnabled(downloadLocationString.equals(downloadLocationEntryValuesStringArray[3])); + + // Set the font size as the summary text for the preference. - fontSizePreference.setSummary(savedPreferences.getString("font_size", getString(R.string.font_size_default_value)) + "%%"); + fontSizePreference.setSummary(savedPreferences.getString("font_size", getString(R.string.font_size_default_value)) + "%"); + // Disable the JavaScript preference if Night Mode is enabled. JavaScript will be enabled for all web pages. javaScriptPreference.setEnabled(!nightMode); @@ -431,6 +523,21 @@ public class SettingsFragment extends PreferenceFragment { } } + // Set the UltraList icon. + if (savedPreferences.getBoolean("ultralist", true)){ + if (darkTheme) { + ultraListPreference.setIcon(R.drawable.block_ads_enabled_dark); + } else { + ultraListPreference.setIcon(R.drawable.block_ads_enabled_light); + } + } else { + if (darkTheme) { + ultraListPreference.setIcon(R.drawable.block_ads_disabled_dark); + } else { + ultraListPreference.setIcon(R.drawable.block_ads_disabled_light); + } + } + // Set the UltraPrivacy icon. if (savedPreferences.getBoolean("ultraprivacy", true)) { if (darkTheme) { @@ -506,45 +613,6 @@ public class SettingsFragment extends PreferenceFragment { } } - // Set the Tor icons according to the theme. - if (proxyThroughOrbot) { // Proxying is enabled. - if (darkTheme) { - proxyThroughOrbotPreference.setIcon(R.drawable.orbot_enabled_dark); - torHomepagePreference.setIcon(R.drawable.home_enabled_dark); - torSearchPreference.setIcon(R.drawable.search_enabled_dark); - - // Set the custom search icon. - if (torSearchCustomURLPreference.isEnabled()) { - torSearchCustomURLPreference.setIcon(R.drawable.search_custom_url_enabled_dark); - } else { - torSearchCustomURLPreference.setIcon(R.drawable.search_custom_url_ghosted_dark); - } - } else { - proxyThroughOrbotPreference.setIcon(R.drawable.orbot_enabled_light); - torHomepagePreference.setIcon(R.drawable.home_enabled_light); - torSearchPreference.setIcon(R.drawable.search_enabled_light); - - // Set the custom search icon. - if (torSearchCustomURLPreference.isEnabled()) { - torSearchCustomURLPreference.setIcon(R.drawable.search_custom_url_enabled_light); - } else { - torSearchCustomURLPreference.setIcon(R.drawable.search_custom_url_ghosted_light); - } - } - } else { // Proxying is disabled. - if (darkTheme) { - proxyThroughOrbotPreference.setIcon(R.drawable.orbot_disabled_dark); - torHomepagePreference.setIcon(R.drawable.home_ghosted_dark); - torSearchPreference.setIcon(R.drawable.search_ghosted_dark); - torSearchCustomURLPreference.setIcon(R.drawable.search_custom_url_ghosted_dark); - } else { - proxyThroughOrbotPreference.setIcon(R.drawable.orbot_disabled_light); - torHomepagePreference.setIcon(R.drawable.home_ghosted_light); - torSearchPreference.setIcon(R.drawable.search_ghosted_light); - torSearchCustomURLPreference.setIcon(R.drawable.search_custom_url_ghosted_light); - } - } - // Set the search custom URL icon. if (searchCustomURLPreference.isEnabled()) { if (darkTheme) { @@ -560,6 +628,45 @@ public class SettingsFragment extends PreferenceFragment { } } + // Set the Proxy icons according to the theme and status. + if (proxyString.equals("None")) { // Proxying is disabled. + if (darkTheme) { // Dark theme. + // Set the main proxy icon to be disabled. + proxyPreference.setIcon(R.drawable.proxy_disabled_dark); + + // Set the custom proxy URL icon to be ghosted. + proxyCustomUrlPreference.setIcon(R.drawable.proxy_ghosted_dark); + } else { // Light theme. + // Set the main proxy icon to be disabled. + proxyPreference.setIcon(R.drawable.proxy_disabled_light); + + // Set the custom proxy URL icon to be ghosted. + proxyCustomUrlPreference.setIcon(R.drawable.proxy_ghosted_light); + } + } else { // Proxying is enabled. + if (darkTheme) { // Dark theme. + // Set the main proxy icon to be enabled. + proxyPreference.setIcon(R.drawable.proxy_enabled_dark); + + // Set the custom proxy URL icon according to its status. + if (proxyCustomUrlPreference.isEnabled()) { // Custom proxy is enabled. + proxyCustomUrlPreference.setIcon(R.drawable.proxy_enabled_dark); + } else { // Custom proxy is disabled. + proxyCustomUrlPreference.setIcon(R.drawable.proxy_ghosted_dark); + } + } else { // Light theme. + // Set the main proxy icon to be enabled. + proxyPreference.setIcon(R.drawable.proxy_enabled_light); + + // Set the custom proxy URL icon according to its status. + if (proxyCustomUrlPreference.isEnabled()) { // Custom proxy is enabled. + proxyCustomUrlPreference.setIcon(R.drawable.proxy_enabled_light); + } else { // Custom proxy is disabled. + proxyCustomUrlPreference.setIcon(R.drawable.proxy_ghosted_light); + } + } + } + // Set the full screen browsing mode icons. if (fullScreenBrowsingMode) { // Full screen browsing mode is enabled. // Set the `fullScreenBrowsingModePreference` icon according to the theme. @@ -653,6 +760,21 @@ public class SettingsFragment extends PreferenceFragment { clearCachePreference.setIcon(R.drawable.cache_warning); } + // Set the download custom location icon. + if (downloadCustomLocationPreference.isEnabled()) { + if (darkTheme) { + downloadCustomLocationPreference.setIcon(R.drawable.downloads_enabled_dark); + } else { + downloadCustomLocationPreference.setIcon(R.drawable.downloads_enabled_light); + } + } else { + if (darkTheme) { + downloadCustomLocationPreference.setIcon(R.drawable.downloads_ghosted_dark); + } else { + downloadCustomLocationPreference.setIcon(R.drawable.downloads_ghosted_light); + } + } + // Set the open intents in new tab preference icon. if (savedPreferences.getBoolean("open_intents_in_new_tab", true)) { if (darkTheme) { @@ -713,21 +835,6 @@ public class SettingsFragment extends PreferenceFragment { } } - // Set the download with external app preference icon. - if (savedPreferences.getBoolean("download_with_external_app", false)) { - if (darkTheme) { - downloadWithExternalAppPreference.setIcon(R.drawable.open_with_external_app_enabled_dark); - } else { - downloadWithExternalAppPreference.setIcon(R.drawable.open_with_external_app_enabled_light); - } - } else { - if (darkTheme) { - downloadWithExternalAppPreference.setIcon(R.drawable.open_with_external_app_disabled_dark); - } else { - downloadWithExternalAppPreference.setIcon(R.drawable.open_with_external_app_disabled_light); - } - } - // Set the dark theme preference icon. if (savedPreferences.getBoolean("dark_theme", false)) { darkThemePreference.setIcon(R.drawable.theme_dark); @@ -1140,6 +1247,23 @@ public class SettingsFragment extends PreferenceFragment { } break; + case "ultralist": + // Update the icon. + if (sharedPreferences.getBoolean("ultralist", true)) { + if (darkTheme) { + ultraListPreference.setIcon(R.drawable.block_ads_enabled_dark); + } else { + ultraListPreference.setIcon(R.drawable.block_ads_enabled_light); + } + } else { + if (darkTheme) { + ultraListPreference.setIcon(R.drawable.block_ads_disabled_dark); + } else { + ultraListPreference.setIcon(R.drawable.block_ads_disabled_light); + } + } + break; + case "ultraprivacy": // Update the icon. if (sharedPreferences.getBoolean("ultraprivacy", true)) { @@ -1225,104 +1349,11 @@ public class SettingsFragment extends PreferenceFragment { } break; - case "proxy_through_orbot": - // Get current settings. - boolean currentProxyThroughOrbot = sharedPreferences.getBoolean("proxy_through_orbot", false); - String currentTorSearchString = sharedPreferences.getString("tor_search", getString(R.string.tor_search_default_value)); - - // Enable the Tor custom URL search option only if `currentProxyThroughOrbot` is true and the search is set to `Custom URL`. - torSearchCustomURLPreference.setEnabled(currentProxyThroughOrbot && currentTorSearchString.equals("Custom URL")); - - // Update the icons. - if (currentProxyThroughOrbot) { - // Set the Tor icons according to the theme. - if (darkTheme) { - proxyThroughOrbotPreference.setIcon(R.drawable.orbot_enabled_dark); - torHomepagePreference.setIcon(R.drawable.home_enabled_dark); - torSearchPreference.setIcon(R.drawable.search_enabled_dark); - - // Set the `torSearchCustomURLPreference` icon. - if (torSearchCustomURLPreference.isEnabled()) { - torSearchCustomURLPreference.setIcon(R.drawable.search_custom_url_enabled_dark); - } else { - torSearchCustomURLPreference.setIcon(R.drawable.search_custom_url_ghosted_dark); - } - } else { - proxyThroughOrbotPreference.setIcon(R.drawable.orbot_enabled_light); - torHomepagePreference.setIcon(R.drawable.home_enabled_light); - torSearchPreference.setIcon(R.drawable.search_enabled_light); - - // Set the `torSearchCustomURLPreference` icon. - if (torSearchCustomURLPreference.isEnabled()) { - torSearchCustomURLPreference.setIcon(R.drawable.search_custom_url_enabled_light); - } else { - torSearchCustomURLPreference.setIcon(R.drawable.search_custom_url_ghosted_light); - } - } - } else { // Proxy through Orbot is disabled. - if (darkTheme) { - proxyThroughOrbotPreference.setIcon(R.drawable.orbot_disabled_dark); - torHomepagePreference.setIcon(R.drawable.home_ghosted_dark); - torSearchPreference.setIcon(R.drawable.search_ghosted_dark); - torSearchCustomURLPreference.setIcon(R.drawable.search_custom_url_ghosted_dark); - } else { - proxyThroughOrbotPreference.setIcon(R.drawable.orbot_disabled_light); - torHomepagePreference.setIcon(R.drawable.home_ghosted_light); - torSearchPreference.setIcon(R.drawable.search_ghosted_light); - torSearchCustomURLPreference.setIcon(R.drawable.search_custom_url_ghosted_light); - } - } - break; - - case "tor_homepage": - // Set the new tor homepage URL as the summary text for the `tor_homepage` preference. The default is Searx: `http://ulrn6sryqaifefld.onion/`. - torHomepagePreference.setSummary(sharedPreferences.getString("tor_homepage", getString(R.string.tor_homepage_default_value))); - break; - - case "tor_search": - // Get the present search string. - String presentTorSearchString = sharedPreferences.getString("tor_search", getString(R.string.tor_search_default_value)); - - // Update the preferences. - if (presentTorSearchString.equals("Custom URL")) { - // Use `R.string.custom_url`, which is translated, as the summary instead of the array value, which isn't. - torSearchPreference.setSummary(R.string.custom_url); - - // Enable `torSearchCustomURLPreference`. - torSearchCustomURLPreference.setEnabled(true); - - // Update the `torSearchCustomURLPreference` icon. - if (darkTheme) { - torSearchCustomURLPreference.setIcon(R.drawable.search_custom_url_enabled_dark); - } else { - torSearchCustomURLPreference.setIcon(R.drawable.search_custom_url_enabled_light); - } - } else { - // Set the array value as the summary text. - torSearchPreference.setSummary(presentTorSearchString); - - // Disable `torSearchCustomURLPreference`. - torSearchCustomURLPreference.setEnabled(false); - - // Update the `torSearchCustomURLPreference` icon. - if (darkTheme) { - torSearchCustomURLPreference.setIcon(R.drawable.search_custom_url_ghosted_dark); - } else { - torSearchCustomURLPreference.setIcon(R.drawable.search_custom_url_ghosted_light); - } - } - break; - - case "tor_search_custom_url": - // Set the summary text for `tor_search_custom_url`. - torSearchCustomURLPreference.setSummary(sharedPreferences.getString("tor_search_custom_url", getString(R.string.tor_search_custom_url_default_value))); - break; - case "search": // Store the new search string. String newSearchString = sharedPreferences.getString("search", getString(R.string.search_default_value)); - // Update `searchPreference` and `searchCustomURLPreference`. + // Update the search and search custom URL preferences. if (newSearchString.equals("Custom URL")) { // `Custom URL` is selected. // Set the summary text to `R.string.custom_url`, which is translated. searchPreference.setSummary(R.string.custom_url); @@ -1353,10 +1384,85 @@ public class SettingsFragment extends PreferenceFragment { break; case "search_custom_url": - // Set the new custom search URL as the summary text for `search_custom_url`. The default is `""`. + // Set the new search custom URL as the summary text for the preference. searchCustomURLPreference.setSummary(sharedPreferences.getString("search_custom_url", getString(R.string.search_custom_url_default_value))); break; + case "proxy": + // Get current proxy string. + String currentProxyString = sharedPreferences.getString("proxy", getString(R.string.proxy_default_value)); + + // Update the summary text for the proxy preference. + switch (currentProxyString) { + case ProxyHelper.NONE: + proxyPreference.setSummary(getString(R.string.no_proxy_enabled)); + break; + + case ProxyHelper.TOR: + if (Build.VERSION.SDK_INT == 19) { // Proxying through SOCKS doesn't work on Android KitKat. + proxyPreference.setSummary(getString(R.string.tor_enabled_kitkat)); + } else { + proxyPreference.setSummary(getString(R.string.tor_enabled)); + } + break; + + case ProxyHelper.I2P: + proxyPreference.setSummary(getString(R.string.i2p_enabled)); + break; + + case ProxyHelper.CUSTOM: + proxyPreference.setSummary(getString(R.string.custom_proxy)); + break; + } + + // Update the status of the custom URL preference. + proxyCustomUrlPreference.setEnabled(currentProxyString.equals("Custom")); + + // Update the icons. + if (currentProxyString.equals("None")) { // Proxying is disabled. + if (darkTheme) { // Dark theme. + // Set the main proxy icon to be disabled + proxyPreference.setIcon(R.drawable.proxy_disabled_dark); + + // Set the custom proxy URL icon to be ghosted. + proxyCustomUrlPreference.setIcon(R.drawable.proxy_ghosted_dark); + } else { // Light theme. + // Set the main proxy icon to be disabled. + proxyPreference.setIcon(R.drawable.proxy_disabled_light); + + // Set the custom proxy URL icon to be ghosted. + proxyCustomUrlPreference.setIcon(R.drawable.proxy_ghosted_light); + } + } else { // Proxying is enabled. + if (darkTheme) { // Dark theme. + // Set the main proxy icon to be enabled. + proxyPreference.setIcon(R.drawable.proxy_enabled_dark); + + /// Set the custom proxy URL icon according to its status. + if (proxyCustomUrlPreference.isEnabled()) { // Custom proxy is enabled. + proxyCustomUrlPreference.setIcon(R.drawable.proxy_enabled_dark); + } else { // Custom proxy is disabled. + proxyCustomUrlPreference.setIcon(R.drawable.proxy_ghosted_dark); + } + } else { // Light theme. + // Set the main proxy icon to be enabled. + proxyPreference.setIcon(R.drawable.proxy_enabled_light); + + // Set the custom proxy URL icon according to its status. + if (proxyCustomUrlPreference.isEnabled()) { // Custom proxy is enabled. + proxyCustomUrlPreference.setIcon(R.drawable.proxy_enabled_light); + } else { // Custom proxy is disabled. + proxyCustomUrlPreference.setIcon(R.drawable.proxy_ghosted_light); + } + } + } + break; + + case "proxy_custom_url": + // Set the summary text for the proxy custom URL. + proxyCustomUrlPreference.setSummary(sharedPreferences.getString("proxy_custom_url", getString(R.string.proxy_custom_url_default_value))); + break; + case "full_screen_browsing_mode": if (sharedPreferences.getBoolean("full_screen_browsing_mode", false)) { // Full screen browsing is enabled. // Set the full screen browsing mode preference icon according to the theme. @@ -1539,9 +1645,40 @@ public class SettingsFragment extends PreferenceFragment { homepagePreference.setSummary(sharedPreferences.getString("homepage", getString(R.string.homepage_default_value))); break; + case "download_location": + // Get the new download location. + String newDownloadLocationString = sharedPreferences.getString("download_location", getString(R.string.download_location_default_value)); + + // Update the download location summary text. + downloadLocationPreference.setSummary(downloadLocationHelper.getDownloadLocation(context)); + + // Update the status of the download custom location preference. + downloadCustomLocationPreference.setEnabled(newDownloadLocationString.equals(downloadLocationEntryValuesStringArray[3])); + + // Update the download custom location icon. + if (downloadCustomLocationPreference.isEnabled()) { + if (darkTheme) { + downloadCustomLocationPreference.setIcon(R.drawable.downloads_enabled_dark); + } else { + downloadCustomLocationPreference.setIcon(R.drawable.downloads_enabled_light); + } + } else { + if (darkTheme) { + downloadCustomLocationPreference.setIcon(R.drawable.downloads_ghosted_dark); + } else { + downloadCustomLocationPreference.setIcon(R.drawable.downloads_ghosted_light); + } + } + break; + + case "download_custom_location": + // Set the new download custom location as the summary text for the preference. + downloadCustomLocationPreference.setSummary(sharedPreferences.getString("download_custom_location", getString(R.string.download_custom_location_default_value))); + break; + case "font_size": // Update the font size summary text. - fontSizePreference.setSummary(sharedPreferences.getString("font_size", getString(R.string.font_size_default_value)) + "%%"); + fontSizePreference.setSummary(sharedPreferences.getString("font_size", getString(R.string.font_size_default_value)) + "%"); break; case "open_intents_in_new_tab": @@ -1612,23 +1749,6 @@ public class SettingsFragment extends PreferenceFragment { } break; - case "download_with_external_app": - // Update the icon. - if (sharedPreferences.getBoolean("download_with_external_app", false)) { - if (darkTheme) { - downloadWithExternalAppPreference.setIcon(R.drawable.open_with_external_app_enabled_dark); - } else { - downloadWithExternalAppPreference.setIcon(R.drawable.open_with_external_app_enabled_light); - } - } else { - if (darkTheme) { - downloadWithExternalAppPreference.setIcon(R.drawable.open_with_external_app_disabled_dark); - } else { - downloadWithExternalAppPreference.setIcon(R.drawable.open_with_external_app_disabled_light); - } - } - break; - case "dark_theme": // Update the icon. if (sharedPreferences.getBoolean("dark_theme", false)) {