/*
- * Copyright © 2016-2019 Soren Stoutner <soren@stoutner.com>.
+ * Copyright © 2016-2020 Soren Stoutner <soren@stoutner.com>.
*
* This file is part of Privacy Browser <https://www.stoutner.com/privacy-browser>.
*
import com.stoutner.privacybrowser.R;
import com.stoutner.privacybrowser.activities.MainWebViewActivity;
+import com.stoutner.privacybrowser.helpers.ProxyHelper;
public class SettingsFragment extends PreferenceFragmentCompat {
// Define the class variables.
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");
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");
assert googleAnalyticsPreference != null;
assert facebookClickIdsPreference != null;
assert twitterAmpRedirectsPreference != null;
- assert proxyThroughOrbotPreference != null;
- assert torHomepagePreference != null;
- assert torSearchPreference != null;
- assert torSearchCustomURLPreference != null;
assert searchPreference != null;
assert searchCustomURLPreference != null;
+ assert proxyPreference != null;
+ assert proxyCustomUrlPreference != null;
assert fullScreenBrowsingModePreference != null;
assert hideAppBarPreference != null;
assert clearEverythingPreference != null;
assert swipeToRefreshPreference != null;
assert scrollAppBarPreference != null;
assert displayAdditionalAppBarIconsPreference != null;
- assert downloadWithExternalAppPreference != null;
assert darkThemePreference != null;
assert nightModePreference != null;
assert wideViewportPreference != null;
assert displayWebpageImagesPreference != null;
- // Set dependencies.
- torHomepagePreference.setDependency("proxy_through_orbot");
- torSearchPreference.setDependency("proxy_through_orbot");
+ // 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 searchString = savedPreferences.getString("search", getString(R.string.search_default_value));
+ String proxyString = savedPreferences.getString("proxy", getString(R.string.proxy_default_value));
// Get booleans that are used in multiple places from the preferences.
boolean javaScriptEnabled = savedPreferences.getBoolean("javascript", false);
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);
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"));
-
-
// Set the search URL as the summary text for the search preference when the preference screen is loaded.
if (searchString.equals("Custom URL")) {
// Use R.string.custom_url, which will be translated, instead of the array value, which will not.
searchCustomURLPreference.setSummary(savedPreferences.getString("search_custom_url", getString(R.string.search_custom_url_default_value)));
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;
+ }
+
+ // Only enable the custom proxy URL if a custom proxy is selected.
+ proxyCustomUrlPreference.setEnabled(proxyString.equals("Custom"));
+
+ // Set the summary text for the custom proxy URL.
+ proxyCustomUrlPreference.setSummary(savedPreferences.getString("proxy_custom_url", getString(R.string.proxy_custom_url_default_value)));
+
// Set the status of the Clear and Exit preferences.
clearCookiesPreference.setEnabled(!clearEverything);
clearDomStoragePreference.setEnabled(!clearEverything);
}
}
- // 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) {
}
}
+ // 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.
}
}
- // 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);
}
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));
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.
}
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)) {