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=04e0d2d5ed20ccab3fc221b71399a114a9a7740a;hb=ba4a1c032dbffde044b70c804f9d3c1f1ba7b939;hpb=81179d84ced6b43360d42a4b44eb8fb329532ff4 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 04e0d2d5..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 . * @@ -24,6 +24,7 @@ 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; @@ -38,6 +39,7 @@ 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 PreferenceFragmentCompat { @@ -86,8 +88,7 @@ public class SettingsFragment extends PreferenceFragmentCompat { Preference searchPreference = findPreference("search"); Preference searchCustomURLPreference = findPreference("search_custom_url"); Preference proxyPreference = findPreference("proxy"); - Preference proxyCustomHostPreference = findPreference("proxy_custom_host"); - Preference proxyCustomPortPreference = findPreference("proxy_custom_port"); + Preference proxyCustomUrlPreference = findPreference("proxy_custom_url"); Preference fullScreenBrowsingModePreference = findPreference("full_screen_browsing_mode"); Preference hideAppBarPreference = findPreference("hide_app_bar"); Preference clearEverythingPreference = findPreference("clear_everything"); @@ -96,12 +97,13 @@ public class SettingsFragment extends PreferenceFragmentCompat { 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"); @@ -131,8 +133,7 @@ public class SettingsFragment extends PreferenceFragmentCompat { assert searchPreference != null; assert searchCustomURLPreference != null; assert proxyPreference != null; - assert proxyCustomHostPreference != null; - assert proxyCustomPortPreference != null; + assert proxyCustomUrlPreference != null; assert fullScreenBrowsingModePreference != null; assert hideAppBarPreference != null; assert clearEverythingPreference != null; @@ -141,12 +142,13 @@ public class SettingsFragment extends PreferenceFragmentCompat { 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 downloadWithExternalAppPreference != null; assert darkThemePreference != null; assert nightModePreference != null; assert wideViewportPreference != null; @@ -156,8 +158,10 @@ public class SettingsFragment extends PreferenceFragmentCompat { hideAppBarPreference.setDependency("full_screen_browsing_mode"); // Get strings from the preferences. + 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); @@ -194,10 +198,14 @@ public class SettingsFragment extends PreferenceFragmentCompat { // 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. @@ -205,9 +213,6 @@ public class SettingsFragment extends PreferenceFragmentCompat { 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); @@ -233,10 +238,13 @@ public class SettingsFragment extends PreferenceFragmentCompat { 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))); + + // 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. if (searchString.equals("Custom URL")) { // Use R.string.custom_url, which will be translated, instead of the array value, which will not. @@ -246,10 +254,13 @@ public class SettingsFragment extends PreferenceFragmentCompat { 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: @@ -257,7 +268,11 @@ public class SettingsFragment extends PreferenceFragmentCompat { break; case ProxyHelper.TOR: - proxyPreference.setSummary(getString(R.string.tor_enabled)); + 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: @@ -269,13 +284,12 @@ public class SettingsFragment extends PreferenceFragmentCompat { break; } - // Only enable the custom proxy options if a custom proxy is selected. - proxyCustomHostPreference.setEnabled(proxyString.equals("Custom")); - proxyCustomPortPreference.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))); + + // 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 options. - proxyCustomHostPreference.setSummary(savedPreferences.getString("proxy_custom_host", getString(R.string.proxy_custom_host_default_value))); - proxyCustomPortPreference.setSummary(savedPreferences.getString("proxy_custom_port", getString(R.string.proxy_custom_port_default_value))); // Set the status of the Clear and Exit preferences. clearCookiesPreference.setEnabled(!clearEverything); @@ -283,12 +297,31 @@ public class SettingsFragment extends PreferenceFragmentCompat { 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)) + "%"); + // Disable the JavaScript preference if Night Mode is enabled. JavaScript will be enabled for all web pages. javaScriptPreference.setEnabled(!nightMode); @@ -601,41 +634,35 @@ public class SettingsFragment extends PreferenceFragmentCompat { // Set the main proxy icon to be disabled. proxyPreference.setIcon(R.drawable.proxy_disabled_dark); - // Set the custom proxy icons to be ghosted. - proxyCustomHostPreference.setIcon(R.drawable.proxy_ghosted_dark); - proxyCustomPortPreference.setIcon(R.drawable.proxy_ghosted_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 icons to be ghosted. - proxyCustomHostPreference.setIcon(R.drawable.proxy_ghosted_light); - proxyCustomPortPreference.setIcon(R.drawable.proxy_ghosted_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 icons according to their status. - if (proxyCustomHostPreference.isEnabled()) { // Custom proxy is enabled. - proxyCustomHostPreference.setIcon(R.drawable.proxy_enabled_dark); - proxyCustomPortPreference.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. - proxyCustomHostPreference.setIcon(R.drawable.proxy_ghosted_dark); - proxyCustomPortPreference.setIcon(R.drawable.proxy_ghosted_dark); + 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 icons according to their status. - if (proxyCustomHostPreference.isEnabled()) { // Custom proxy is enabled. - proxyCustomHostPreference.setIcon(R.drawable.proxy_enabled_light); - proxyCustomPortPreference.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. - proxyCustomHostPreference.setIcon(R.drawable.proxy_ghosted_light); - proxyCustomPortPreference.setIcon(R.drawable.proxy_ghosted_light); + proxyCustomUrlPreference.setIcon(R.drawable.proxy_ghosted_light); } } } @@ -733,6 +760,21 @@ public class SettingsFragment extends PreferenceFragmentCompat { 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) { @@ -793,21 +835,6 @@ public class SettingsFragment extends PreferenceFragmentCompat { } } - // 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); @@ -1326,7 +1353,7 @@ public class SettingsFragment extends PreferenceFragmentCompat { // 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); @@ -1357,7 +1384,7 @@ public class SettingsFragment extends PreferenceFragmentCompat { 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; @@ -1372,7 +1399,11 @@ public class SettingsFragment extends PreferenceFragmentCompat { break; case ProxyHelper.TOR: - proxyPreference.setSummary(getString(R.string.tor_enabled)); + 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: @@ -1384,9 +1415,8 @@ public class SettingsFragment extends PreferenceFragmentCompat { break; } - // Update the status of the custom proxy options. - proxyCustomHostPreference.setEnabled(currentProxyString.equals("Custom")); - proxyCustomPortPreference.setEnabled(currentProxyString.equals("Custom")); + // Update the status of the custom URL preference. + proxyCustomUrlPreference.setEnabled(currentProxyString.equals("Custom")); // Update the icons. if (currentProxyString.equals("None")) { // Proxying is disabled. @@ -1394,55 +1424,45 @@ public class SettingsFragment extends PreferenceFragmentCompat { // Set the main proxy icon to be disabled proxyPreference.setIcon(R.drawable.proxy_disabled_dark); - // Set the custom proxy icons to be ghosted. - proxyCustomHostPreference.setIcon(R.drawable.proxy_ghosted_dark); - proxyCustomPortPreference.setIcon(R.drawable.proxy_ghosted_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 icons to be ghosted. - proxyCustomHostPreference.setIcon(R.drawable.proxy_ghosted_light); - proxyCustomPortPreference.setIcon(R.drawable.proxy_ghosted_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 icons according to their status. - if (proxyCustomHostPreference.isEnabled()) { // Custom proxy is enabled. - proxyCustomHostPreference.setIcon(R.drawable.proxy_enabled_dark); - proxyCustomPortPreference.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. - proxyCustomHostPreference.setIcon(R.drawable.proxy_ghosted_dark); - proxyCustomPortPreference.setIcon(R.drawable.proxy_ghosted_dark); + 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 icons according to their status. - if (proxyCustomHostPreference.isEnabled()) { // Custom proxy is enabled. - proxyCustomHostPreference.setIcon(R.drawable.proxy_enabled_light); - proxyCustomPortPreference.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. - proxyCustomHostPreference.setIcon(R.drawable.proxy_ghosted_light); - proxyCustomPortPreference.setIcon(R.drawable.proxy_ghosted_light); + proxyCustomUrlPreference.setIcon(R.drawable.proxy_ghosted_light); } } } break; - case "proxy_custom_host": - // Set the summary text for the proxy custom host. - proxyCustomHostPreference.setSummary(sharedPreferences.getString("proxy_custom_host", getString(R.string.proxy_custom_host_default_value))); + 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 "proxy_custom_port": - // Set the summary text for the proxy custom port. - proxyCustomPortPreference.setSummary(sharedPreferences.getString("proxy_custom_port", getString(R.string.proxy_custom_port_default_value))); - 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. @@ -1625,6 +1645,37 @@ public class SettingsFragment extends PreferenceFragmentCompat { 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)) + "%"); @@ -1698,23 +1749,6 @@ public class SettingsFragment extends PreferenceFragmentCompat { } 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)) {