+ break;
+ }
+
+ // Set the wide viewport preference icon.
+ if (savedPreferences.getBoolean("wide_viewport", true)) {
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
+ wideViewportPreference.setIcon(R.drawable.wide_viewport_enabled_night);
+ } else {
+ wideViewportPreference.setIcon(R.drawable.wide_viewport_enabled_day);
+ }
+ } else {
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
+ wideViewportPreference.setIcon(R.drawable.wide_viewport_disabled_night);
+ } else {
+ wideViewportPreference.setIcon(R.drawable.wide_viewport_disabled_day);
+ }
+ }
+
+ // Set the display webpage images preference icon.
+ if (savedPreferences.getBoolean("display_webpage_images", true)) {
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
+ displayWebpageImagesPreference.setIcon(R.drawable.images_enabled_night);
+ } else {
+ displayWebpageImagesPreference.setIcon(R.drawable.images_enabled_day);
+ }
+ } else {
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
+ displayWebpageImagesPreference.setIcon(R.drawable.images_disabled_night);
+ } else {
+ displayWebpageImagesPreference.setIcon(R.drawable.images_disabled_day);
+ }
+ }
+
+
+ // Listen for preference changes.
+ preferencesListener = (SharedPreferences sharedPreferences, String key) -> {
+ switch (key) {
+ case "javascript":
+ // Update the icons and the DOM storage preference status.
+ if (sharedPreferences.getBoolean("javascript", false)) { // The JavaScript preference is enabled.
+ // Update the icon for the JavaScript preference.
+ javaScriptPreference.setIcon(R.drawable.javascript_enabled);
+
+ // Update the status of the DOM storage preference.
+ domStoragePreference.setEnabled(true);
+
+ // Update the icon for the DOM storage preference.
+ if (sharedPreferences.getBoolean("dom_storage", false)) {
+ domStoragePreference.setIcon(R.drawable.dom_storage_enabled);
+ } else {
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
+ domStoragePreference.setIcon(R.drawable.dom_storage_disabled_night);
+ } else {
+ domStoragePreference.setIcon(R.drawable.dom_storage_disabled_day);
+ }
+ }
+ } else { // The JavaScript preference is disabled.
+ // Update the icon for the JavaScript preference.
+ javaScriptPreference.setIcon(R.drawable.privacy_mode);
+
+ // Update the status of the DOM storage preference.
+ domStoragePreference.setEnabled(false);
+
+ // Set the icon for DOM storage preference to be ghosted.
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
+ domStoragePreference.setIcon(R.drawable.dom_storage_ghosted_night);
+ } else {
+ domStoragePreference.setIcon(R.drawable.dom_storage_ghosted_day);
+ }
+ }
+ break;
+
+ case "first_party_cookies":
+ // Update the icons for `first_party_cookies` and `third_party_cookies`.
+ if (sharedPreferences.getBoolean("first_party_cookies", false)) {
+ // Set the icon for `first_party_cookies`.
+ firstPartyCookiesPreference.setIcon(R.drawable.cookies_enabled);
+
+ // Update the icon for `third_party_cookies`.
+ if (Build.VERSION.SDK_INT >= 21) {
+ if (sharedPreferences.getBoolean("third_party_cookies", false)) {
+ thirdPartyCookiesPreference.setIcon(R.drawable.cookies_warning);
+ } else {
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
+ thirdPartyCookiesPreference.setIcon(R.drawable.cookies_disabled_night);
+ } else {
+ thirdPartyCookiesPreference.setIcon(R.drawable.cookies_disabled_day);
+ }
+ }
+ } else {
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
+ thirdPartyCookiesPreference.setIcon(R.drawable.cookies_ghosted_night);
+ } else {
+ thirdPartyCookiesPreference.setIcon(R.drawable.cookies_ghosted_day);
+ }
+ }
+ } else { // `first_party_cookies` is `false`.
+ // Update the icon for `first_party_cookies`.
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
+ firstPartyCookiesPreference.setIcon(R.drawable.cookies_disabled_night);
+ } else {
+ firstPartyCookiesPreference.setIcon(R.drawable.cookies_disabled_day);
+ }
+
+ // Set the icon for `third_party_cookies` to be ghosted.
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
+ thirdPartyCookiesPreference.setIcon(R.drawable.cookies_ghosted_night);
+ } else {
+ thirdPartyCookiesPreference.setIcon(R.drawable.cookies_ghosted_day);
+ }
+ }
+
+ // Enable `third_party_cookies` if `first_party_cookies` is `true` and API >= 21.
+ thirdPartyCookiesPreference.setEnabled(sharedPreferences.getBoolean("first_party_cookies", false) && (Build.VERSION.SDK_INT >= 21));
+ break;
+
+ case "third_party_cookies":
+ // Update the icon.
+ if (sharedPreferences.getBoolean("third_party_cookies", false)) {
+ thirdPartyCookiesPreference.setIcon(R.drawable.cookies_warning);
+ } else {
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
+ thirdPartyCookiesPreference.setIcon(R.drawable.cookies_disabled_night);
+ } else {
+ thirdPartyCookiesPreference.setIcon(R.drawable.cookies_disabled_day);
+ }
+ }
+ break;
+
+ case "dom_storage":
+ // Update the icon.
+ if (sharedPreferences.getBoolean("dom_storage", false)) {
+ domStoragePreference.setIcon(R.drawable.dom_storage_enabled);
+ } else {
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
+ domStoragePreference.setIcon(R.drawable.dom_storage_disabled_night);
+ } else {
+ domStoragePreference.setIcon(R.drawable.dom_storage_disabled_day);
+ }
+ }
+ break;
+
+ // Save form data can be removed once the minimum API >= 26.
+ case "save_form_data":
+ // Update the icon.
+ if (sharedPreferences.getBoolean("save_form_data", false)) {
+ formDataPreference.setIcon(R.drawable.form_data_enabled);
+ } else {
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
+ formDataPreference.setIcon(R.drawable.form_data_disabled_night);
+ } else {
+ formDataPreference.setIcon(R.drawable.form_data_disabled_day);
+ }
+ }
+ break;
+
+ case "user_agent":
+ // Get the new user agent name.
+ String newUserAgentName = sharedPreferences.getString("user_agent", getString(R.string.user_agent_default_value));
+
+ // Get the array position for the new user agent name.
+ int newUserAgentArrayPosition = userAgentNamesArray.getPosition(newUserAgentName);
+
+ // Get the translated new user agent name.
+ String translatedNewUserAgentName = translatedUserAgentNamesArray[newUserAgentArrayPosition];
+
+ // Populate the user agent summary.
+ switch (newUserAgentArrayPosition) {
+ case MainWebViewActivity.SETTINGS_WEBVIEW_DEFAULT_USER_AGENT:
+ // Get the user agent text from the webview (which changes based on the version of Android and WebView installed).
+ userAgentPreference.setSummary(translatedNewUserAgentName + ":\n" + bareWebView.getSettings().getUserAgentString());
+
+ // Disable the custom user agent preference.
+ customUserAgentPreference.setEnabled(false);
+
+ // Set the custom user agent preference icon according to the theme.
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
+ customUserAgentPreference.setIcon(R.drawable.custom_user_agent_ghosted_night);
+ } else {
+ customUserAgentPreference.setIcon(R.drawable.custom_user_agent_ghosted_day);
+ }
+ break;
+
+ case MainWebViewActivity.SETTINGS_CUSTOM_USER_AGENT:
+ // Set the summary text.
+ userAgentPreference.setSummary(R.string.custom_user_agent);
+
+ // Enable the custom user agent preference.
+ customUserAgentPreference.setEnabled(true);
+
+ // Set the custom user agent preference icon according to the theme.
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
+ customUserAgentPreference.setIcon(R.drawable.custom_user_agent_enabled_night);
+ } else {
+ customUserAgentPreference.setIcon(R.drawable.custom_user_agent_enabled_day);
+ }
+ break;
+
+ default:
+ // Get the user agent summary from the user agent data array.
+ userAgentPreference.setSummary(translatedNewUserAgentName + ":\n" + userAgentDataArray[newUserAgentArrayPosition]);
+
+ // Disable the custom user agent preference.
+ customUserAgentPreference.setEnabled(false);
+
+ // Set the custom user agent preference icon according to the theme.
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
+ customUserAgentPreference.setIcon(R.drawable.custom_user_agent_ghosted_night);
+ } else {
+ customUserAgentPreference.setIcon(R.drawable.custom_user_agent_ghosted_day);
+ }
+ }
+ break;
+
+ case "custom_user_agent":
+ // Set the new custom user agent as the summary text for the preference.
+ customUserAgentPreference.setSummary(sharedPreferences.getString("custom_user_agent", getString(R.string.custom_user_agent_default_value)));
+ break;
+
+ case "incognito_mode":
+ // Update the icon.
+ if (sharedPreferences.getBoolean("incognito_mode", false)) {
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
+ incognitoModePreference.setIcon(R.drawable.incognito_mode_enabled_night);
+ } else {
+ incognitoModePreference.setIcon(R.drawable.incognito_mode_enabled_day);
+ }
+ } else {
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
+ incognitoModePreference.setIcon(R.drawable.incognito_mode_disabled_night);
+ } else {
+ incognitoModePreference.setIcon(R.drawable.incognito_mode_disabled_day);
+ }
+ }
+ break;
+
+ case "do_not_track":
+ // Update the icon.
+ if (sharedPreferences.getBoolean("do_not_track", false)) {
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
+ doNotTrackPreference.setIcon(R.drawable.block_tracking_enabled_night);
+ } else {
+ doNotTrackPreference.setIcon(R.drawable.block_tracking_enabled_day);
+ }
+ } else {
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
+ doNotTrackPreference.setIcon(R.drawable.block_tracking_disabled_night);
+ } else {
+ doNotTrackPreference.setIcon(R.drawable.block_tracking_disabled_day);
+ }
+ }
+
+ break;
+
+ case "allow_screenshots":
+ // Update the icon.
+ if (sharedPreferences.getBoolean(getString(R.string.allow_screenshots_key), false)) {
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_NO) {
+ allowScreenshotsPreference.setIcon(R.drawable.allow_screenshots_enabled_day);
+ } else {
+ allowScreenshotsPreference.setIcon(R.drawable.allow_screenshots_enabled_night);
+ }
+ } else {
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_NO) {
+ allowScreenshotsPreference.setIcon(R.drawable.allow_screenshots_disabled_day);
+ } else {
+ allowScreenshotsPreference.setIcon(R.drawable.allow_screenshots_disabled_night);
+ }
+ }
+
+ // Create an intent to restart Privacy Browser.
+ Intent allowScreenshotsRestartIntent = getActivity().getParentActivityIntent();
+
+ // Assert that the intent is not null to remove the lint error below.
+ assert allowScreenshotsRestartIntent != null;
+
+ // `Intent.FLAG_ACTIVITY_CLEAR_TASK` removes all activities from the stack. It requires `Intent.FLAG_ACTIVITY_NEW_TASK`.
+ allowScreenshotsRestartIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
+
+ // Create a handler to restart the activity.
+ Handler allowScreenshotsRestartHandler = new Handler(Looper.getMainLooper());
+
+ // Create a runnable to restart the activity.
+ Runnable allowScreenshotsRestartRunnable = () -> {
+ // Restart the activity.
+ startActivity(allowScreenshotsRestartIntent);
+
+ // Kill this instance of Privacy Browser. Otherwise, the app exhibits sporadic behavior after the restart.
+ System.exit(0);
+ };
+
+ // Restart the activity after 150 milliseconds, so that the app has enough time to save the change to the preference.
+ allowScreenshotsRestartHandler.postDelayed(allowScreenshotsRestartRunnable, 150);
+ break;
+
+ case "easylist":
+ // Update the icon.
+ if (sharedPreferences.getBoolean("easylist", true)) {
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
+ easyListPreference.setIcon(R.drawable.block_ads_enabled_night);
+ } else {
+ easyListPreference.setIcon(R.drawable.block_ads_enabled_day);
+ }
+ } else {
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
+ easyListPreference.setIcon(R.drawable.block_ads_disabled_night);
+ } else {
+ easyListPreference.setIcon(R.drawable.block_ads_disabled_day);
+ }
+ }
+ break;
+
+ case "easyprivacy":
+ // Update the icon.
+ if (sharedPreferences.getBoolean("easyprivacy", true)) {
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
+ easyPrivacyPreference.setIcon(R.drawable.block_tracking_enabled_night);
+ } else {
+ easyPrivacyPreference.setIcon(R.drawable.block_tracking_enabled_day);
+ }
+ } else {
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
+ easyPrivacyPreference.setIcon(R.drawable.block_tracking_disabled_night);
+ } else {
+ easyPrivacyPreference.setIcon(R.drawable.block_tracking_disabled_day);
+ }
+ }
+ break;
+
+ case "fanboys_annoyance_list":
+ boolean currentFanboyAnnoyanceList = sharedPreferences.getBoolean("fanboys_annoyance_list", true);
+ boolean currentFanboySocialBlockingList = sharedPreferences.getBoolean("fanboys_social_blocking_list", true);
+
+ // Update the Fanboy icons.
+ if (currentFanboyAnnoyanceList) { // Fanboy's annoyance list is enabled.
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
+ // Update the Fanboy's annoyance list icon.
+ fanboyAnnoyanceListPreference.setIcon(R.drawable.social_media_enabled_night);
+
+ // Update the Fanboy's social blocking list icon.
+ fanboySocialBlockingListPreference.setIcon(R.drawable.social_media_ghosted_night);
+ } else {
+ // Update the Fanboy's annoyance list icon.
+ fanboyAnnoyanceListPreference.setIcon(R.drawable.social_media_enabled_day);
+
+ // Update the Fanboy's social blocking list icon.
+ fanboySocialBlockingListPreference.setIcon(R.drawable.social_media_ghosted_day);
+ }
+ } else { // Fanboy's annoyance list is disabled.
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
+ // Update the Fanboy's annoyance list icon.
+ fanboyAnnoyanceListPreference.setIcon(R.drawable.social_media_disabled_night);
+
+ // Update the Fanboy's social blocking list icon.
+ if (currentFanboySocialBlockingList) {
+ fanboySocialBlockingListPreference.setIcon(R.drawable.social_media_enabled_night);
+ } else {
+ fanboySocialBlockingListPreference.setIcon(R.drawable.social_media_disabled_night);
+ }
+ } else {
+ // Update the Fanboy's annoyance list icon.
+ fanboyAnnoyanceListPreference.setIcon(R.drawable.social_media_disabled_day);
+
+ // Update the Fanboy's social blocking list icon.
+ if (currentFanboySocialBlockingList) {
+ fanboySocialBlockingListPreference.setIcon(R.drawable.social_media_enabled_day);
+ } else {
+ fanboySocialBlockingListPreference.setIcon(R.drawable.social_media_disabled_day);
+ }
+ }
+ }
+
+ // Only enable Fanboy's social blocking list preference if Fanboy's annoyance list preference is disabled.
+ fanboySocialBlockingListPreference.setEnabled(!currentFanboyAnnoyanceList);
+ break;
+
+ case "fanboys_social_blocking_list":
+ // Update the icon.
+ if (sharedPreferences.getBoolean("fanboys_social_blocking_list", true)) {
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
+ fanboySocialBlockingListPreference.setIcon(R.drawable.social_media_enabled_night);
+ } else {
+ fanboySocialBlockingListPreference.setIcon(R.drawable.social_media_enabled_day);
+ }
+ } else {
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
+ fanboySocialBlockingListPreference.setIcon(R.drawable.social_media_disabled_night);
+ } else {
+ fanboySocialBlockingListPreference.setIcon(R.drawable.social_media_disabled_day);
+ }
+ }
+ break;
+
+ case "ultralist":
+ // Update the icon.
+ if (sharedPreferences.getBoolean("ultralist", true)) {
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
+ ultraListPreference.setIcon(R.drawable.block_ads_enabled_night);
+ } else {
+ ultraListPreference.setIcon(R.drawable.block_ads_enabled_day);
+ }
+ } else {
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
+ ultraListPreference.setIcon(R.drawable.block_ads_disabled_night);
+ } else {
+ ultraListPreference.setIcon(R.drawable.block_ads_disabled_day);
+ }
+ }
+ break;
+
+ case "ultraprivacy":
+ // Update the icon.
+ if (sharedPreferences.getBoolean("ultraprivacy", true)) {
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
+ ultraPrivacyPreference.setIcon(R.drawable.block_tracking_enabled_night);
+ } else {
+ ultraPrivacyPreference.setIcon(R.drawable.block_tracking_enabled_day);
+ }
+ } else {
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
+ ultraPrivacyPreference.setIcon(R.drawable.block_tracking_disabled_night);
+ } else {
+ ultraPrivacyPreference.setIcon(R.drawable.block_tracking_disabled_day);
+ }
+ }
+ break;
+
+ case "block_all_third_party_requests":
+ // Update the icon.
+ if (sharedPreferences.getBoolean("block_all_third_party_requests", false)) {
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
+ blockAllThirdPartyRequestsPreference.setIcon(R.drawable.block_all_third_party_requests_enabled_night);
+ } else {
+ blockAllThirdPartyRequestsPreference.setIcon(R.drawable.block_all_third_party_requests_enabled_day);
+ }
+ } else {
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
+ blockAllThirdPartyRequestsPreference.setIcon(R.drawable.block_all_third_party_requests_disabled_night);
+ } else {
+ blockAllThirdPartyRequestsPreference.setIcon(R.drawable.block_all_third_party_requests_disabled_day);
+ }
+ }
+ break;
+
+ case "google_analytics":
+ // Update the icon.
+ if (sharedPreferences.getBoolean("google_analytics", true)) {
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
+ googleAnalyticsPreference.setIcon(R.drawable.modify_url_enabled_night);
+ } else {
+ googleAnalyticsPreference.setIcon(R.drawable.modify_url_enabled_day);
+ }
+ } else {
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
+ googleAnalyticsPreference.setIcon(R.drawable.modify_url_disabled_night);
+ } else {
+ googleAnalyticsPreference.setIcon(R.drawable.modify_url_disabled_day);
+ }
+ }
+ break;
+
+ case "facebook_click_ids":
+ // Update the icon.
+ if (sharedPreferences.getBoolean("facebook_click_ids", true)) {
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
+ facebookClickIdsPreference.setIcon(R.drawable.modify_url_enabled_night);
+ } else {
+ facebookClickIdsPreference.setIcon(R.drawable.modify_url_enabled_day);
+ }
+ } else {
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
+ facebookClickIdsPreference.setIcon(R.drawable.modify_url_disabled_night);
+ } else {
+ facebookClickIdsPreference.setIcon(R.drawable.modify_url_disabled_day);
+ }
+ }
+ break;
+
+ case "twitter_amp_redirects":
+ // Update the icon.
+ if (sharedPreferences.getBoolean("twitter_amp_redirects", true)) {
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
+ twitterAmpRedirectsPreference.setIcon(R.drawable.modify_url_enabled_night);
+ } else {
+ twitterAmpRedirectsPreference.setIcon(R.drawable.modify_url_enabled_day);
+ }
+ } else {
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
+ twitterAmpRedirectsPreference.setIcon(R.drawable.modify_url_disabled_night);
+ } else {
+ twitterAmpRedirectsPreference.setIcon(R.drawable.modify_url_disabled_day);
+ }
+ }
+ break;
+
+ case "search":
+ // Store the new search string.
+ String newSearchString = sharedPreferences.getString("search", getString(R.string.search_default_value));
+
+ // 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);
+
+ // Enable `searchCustomURLPreference`.
+ searchCustomURLPreference.setEnabled(true);
+
+ // Set the `searchCustomURLPreference` according to the theme.
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
+ searchCustomURLPreference.setIcon(R.drawable.search_custom_url_enabled_night);
+ } else {
+ searchCustomURLPreference.setIcon(R.drawable.search_custom_url_enabled_day);
+ }
+ } else { // `Custom URL` is not selected.
+ // Set the summary text to `newSearchString`.
+ searchPreference.setSummary(newSearchString);
+
+ // Disable `searchCustomURLPreference`.
+ searchCustomURLPreference.setEnabled(false);
+
+ // Set the `searchCustomURLPreference` according to the theme.
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
+ searchCustomURLPreference.setIcon(R.drawable.search_custom_url_ghosted_night);
+ } else {
+ searchCustomURLPreference.setIcon(R.drawable.search_custom_url_ghosted_day);
+ }
+ }
+ break;
+
+ case "search_custom_url":
+ // 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 (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) { // Dark theme.
+ // Set the main proxy icon to be disabled
+ proxyPreference.setIcon(R.drawable.proxy_disabled_night);
+
+ // Set the custom proxy URL icon to be ghosted.
+ proxyCustomUrlPreference.setIcon(R.drawable.proxy_ghosted_night);
+ } else { // Light theme.
+ // Set the main proxy icon to be disabled.
+ proxyPreference.setIcon(R.drawable.proxy_disabled_day);
+
+ // Set the custom proxy URL icon to be ghosted.
+ proxyCustomUrlPreference.setIcon(R.drawable.proxy_ghosted_day);
+ }
+ } else { // Proxying is enabled.
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) { // Dark theme.
+ // Set the main proxy icon to be enabled.
+ proxyPreference.setIcon(R.drawable.proxy_enabled_night);
+
+ /// Set the custom proxy URL icon according to its status.
+ if (proxyCustomUrlPreference.isEnabled()) { // Custom proxy is enabled.
+ proxyCustomUrlPreference.setIcon(R.drawable.proxy_enabled_night);
+ } else { // Custom proxy is disabled.
+ proxyCustomUrlPreference.setIcon(R.drawable.proxy_ghosted_night);
+ }
+ } else { // Light theme.
+ // Set the main proxy icon to be enabled.
+ proxyPreference.setIcon(R.drawable.proxy_enabled_day);
+
+ // Set the custom proxy URL icon according to its status.
+ if (proxyCustomUrlPreference.isEnabled()) { // Custom proxy is enabled.
+ proxyCustomUrlPreference.setIcon(R.drawable.proxy_enabled_day);
+ } else { // Custom proxy is disabled.
+ proxyCustomUrlPreference.setIcon(R.drawable.proxy_ghosted_day);
+ }
+ }
+ }
+ 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.
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
+ fullScreenBrowsingModePreference.setIcon(R.drawable.full_screen_enabled_night);
+ } else {
+ fullScreenBrowsingModePreference.setIcon(R.drawable.full_screen_enabled_day);
+ }
+
+ // Set the hide app bar preference icon.
+ if (sharedPreferences.getBoolean("hide_app_bar", true)) { // Hide app bar is enabled.
+ // Set the icon according to the theme.
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
+ hideAppBarPreference.setIcon(R.drawable.app_bar_enabled_night);
+ } else {
+ hideAppBarPreference.setIcon(R.drawable.app_bar_enabled_day);
+ }
+ } else { // Hide app bar is disabled.
+ // Set the icon according to the theme.
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
+ hideAppBarPreference.setIcon(R.drawable.app_bar_disabled_night);
+ } else {
+ hideAppBarPreference.setIcon(R.drawable.app_bar_disabled_day);
+ }
+ }
+ } else { // Full screen browsing is disabled.
+ // Update the icons according to the theme.
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
+ fullScreenBrowsingModePreference.setIcon(R.drawable.full_screen_disabled_night);
+ hideAppBarPreference.setIcon(R.drawable.app_bar_ghosted_night);
+ } else {
+ fullScreenBrowsingModePreference.setIcon(R.drawable.full_screen_disabled_day);
+ hideAppBarPreference.setIcon(R.drawable.app_bar_ghosted_day);
+ }
+ }
+ break;
+
+ case "hide_app_bar":
+ // Update the icon.
+ if (sharedPreferences.getBoolean("hide_app_bar", true)) { // Hide app bar is enabled.
+ // Set the icon according to the theme.
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
+ hideAppBarPreference.setIcon(R.drawable.app_bar_enabled_night);
+ } else {
+ hideAppBarPreference.setIcon(R.drawable.app_bar_enabled_day);
+ }
+ } else { // Hide app bar is disabled.
+ // Set the icon according to the theme.
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
+ hideAppBarPreference.setIcon(R.drawable.app_bar_disabled_night);
+ } else {
+ hideAppBarPreference.setIcon(R.drawable.app_bar_disabled_day);
+ }
+ }
+ break;
+
+ case "clear_everything":
+ // Store the new clear everything status
+ boolean newClearEverythingBoolean = sharedPreferences.getBoolean("clear_everything", true);
+
+ // Update the status of the clear and exit preferences.
+ clearCookiesPreference.setEnabled(!newClearEverythingBoolean);
+ clearDomStoragePreference.setEnabled(!newClearEverythingBoolean);
+ clearFormDataPreference.setEnabled(!newClearEverythingBoolean); // This line can be removed once the minimum API >= 26.
+ clearLogcatPreference.setEnabled(!newClearEverythingBoolean);
+ clearCachePreference.setEnabled(!newClearEverythingBoolean);
+
+ // Update the clear everything preference icon.
+ if (newClearEverythingBoolean) {
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
+ clearEverythingPreference.setIcon(R.drawable.clear_everything_enabled_night);
+ } else {
+ clearEverythingPreference.setIcon(R.drawable.clear_everything_enabled_day);
+ }
+ } else {
+ clearEverythingPreference.setIcon(R.drawable.clear_everything_disabled);
+ }
+
+ // Update the clear cookies preference icon.
+ if (newClearEverythingBoolean || sharedPreferences.getBoolean("clear_cookies", true)) {
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
+ clearCookiesPreference.setIcon(R.drawable.cookies_cleared_night);
+ } else {
+ clearCookiesPreference.setIcon(R.drawable.cookies_cleared_day);
+ }
+ } else {
+ clearCookiesPreference.setIcon(R.drawable.cookies_warning);
+ }
+
+ // Update the clear dom storage preference icon.
+ if (newClearEverythingBoolean || sharedPreferences.getBoolean("clear_dom_storage", true)) {
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
+ clearDomStoragePreference.setIcon(R.drawable.dom_storage_cleared_night);
+ } else {
+ clearDomStoragePreference.setIcon(R.drawable.dom_storage_cleared_day);
+ }
+ } else {
+ clearDomStoragePreference.setIcon(R.drawable.dom_storage_warning);
+ }
+
+ // 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 (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
+ clearFormDataPreference.setIcon(R.drawable.form_data_cleared_night);
+ } else {
+ clearFormDataPreference.setIcon(R.drawable.form_data_cleared_day);
+ }
+ } else {
+ clearFormDataPreference.setIcon(R.drawable.form_data_warning);
+ }
+ }
+
+ // Update the clear logcat preference icon.
+ if (newClearEverythingBoolean || sharedPreferences.getBoolean(getString(R.string.clear_logcat_key), true)) {
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_NO) {
+ clearLogcatPreference.setIcon(R.drawable.bug_cleared_day);
+ } else {
+ clearLogcatPreference.setIcon(R.drawable.bug_cleared_night);
+ }
+ } else {
+ clearLogcatPreference.setIcon(R.drawable.cache_warning);
+ }
+
+ // Update the clear cache preference icon.
+ if (newClearEverythingBoolean || sharedPreferences.getBoolean("clear_cache", true)) {
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
+ clearCachePreference.setIcon(R.drawable.cache_cleared_night);
+ } else {
+ clearCachePreference.setIcon(R.drawable.cache_cleared_day);
+ }
+ } else {
+ clearCachePreference.setIcon(R.drawable.cache_warning);
+ }
+ break;
+
+ case "clear_cookies":
+ // Update the icon.
+ if (sharedPreferences.getBoolean("clear_cookies", true)) {
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
+ clearCookiesPreference.setIcon(R.drawable.cookies_cleared_night);
+ } else {
+ clearCookiesPreference.setIcon(R.drawable.cookies_cleared_day);
+ }
+ } else {
+ clearCookiesPreference.setIcon(R.drawable.cookies_warning);
+ }
+ break;
+
+ case "clear_dom_storage":
+ // Update the icon.
+ if (sharedPreferences.getBoolean("clear_dom_storage", true)) {
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
+ clearDomStoragePreference.setIcon(R.drawable.dom_storage_cleared_night);
+ } else {
+ clearDomStoragePreference.setIcon(R.drawable.dom_storage_cleared_day);
+ }
+ } else {
+ clearDomStoragePreference.setIcon(R.drawable.dom_storage_warning);
+ }
+ 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)) {
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
+ clearFormDataPreference.setIcon(R.drawable.form_data_cleared_night);
+ } else {
+ clearFormDataPreference.setIcon(R.drawable.form_data_cleared_day);
+ }
+ } else {
+ clearFormDataPreference.setIcon(R.drawable.form_data_warning);
+ }
+ break;
+
+ case "clear_logcat":
+ // Update the icon.
+ if (sharedPreferences.getBoolean(getString(R.string.clear_logcat_key), true)) {
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_NO) {
+ clearLogcatPreference.setIcon(R.drawable.bug_cleared_day);
+ } else {
+ clearLogcatPreference.setIcon(R.drawable.bug_cleared_night);
+ }
+ } else {
+ clearLogcatPreference.setIcon(R.drawable.bug_warning);
+ }
+ break;
+
+ case "clear_cache":
+ // Update the icon.
+ if (sharedPreferences.getBoolean("clear_cache", true)) {
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
+ clearCachePreference.setIcon(R.drawable.cache_cleared_night);
+ } else {
+ clearCachePreference.setIcon(R.drawable.cache_cleared_day);
+ }
+ } else {
+ clearCachePreference.setIcon(R.drawable.cache_warning);
+ }
+ break;
+
+ case "homepage":
+ // Set the new homepage URL as the summary text for the Homepage preference.
+ homepagePreference.setSummary(sharedPreferences.getString("homepage", getString(R.string.homepage_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)) + "%");
+ break;
+
+ case "open_intents_in_new_tab":
+ // Update the icon.
+ if (sharedPreferences.getBoolean("open_intents_in_new_tab", true)) {
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
+ openIntentsInNewTabPreference.setIcon(R.drawable.tab_enabled_night);
+ } else {
+ openIntentsInNewTabPreference.setIcon(R.drawable.tab_enabled_day);
+ }
+ } else {
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
+ openIntentsInNewTabPreference.setIcon(R.drawable.tab_disabled_night);
+ } else {
+ openIntentsInNewTabPreference.setIcon(R.drawable.tab_disabled_day);
+ }
+ }
+ break;
+
+ case "swipe_to_refresh":
+ // Update the icon.
+ if (sharedPreferences.getBoolean("swipe_to_refresh", true)) {
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
+ swipeToRefreshPreference.setIcon(R.drawable.refresh_enabled_night);
+ } else {
+ swipeToRefreshPreference.setIcon(R.drawable.refresh_enabled_day);
+ }
+ } else {
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
+ swipeToRefreshPreference.setIcon(R.drawable.refresh_disabled_night);
+ } else {
+ swipeToRefreshPreference.setIcon(R.drawable.refresh_disabled_day);
+ }
+ }
+ break;
+
+ case "scroll_app_bar":
+ // Update the icon.
+ if (sharedPreferences.getBoolean("scroll_app_bar", true)) {
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
+ scrollAppBarPreference.setIcon(R.drawable.app_bar_enabled_night);
+ } else {
+ scrollAppBarPreference.setIcon(R.drawable.app_bar_enabled_day);
+ }
+ } else {
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
+ scrollAppBarPreference.setIcon(R.drawable.app_bar_disabled_night);
+ } else {
+ scrollAppBarPreference.setIcon(R.drawable.app_bar_disabled_day);
+ }
+ }
+ break;
+
+ case "display_additional_app_bar_icons":
+ // Update the icon.
+ if (sharedPreferences.getBoolean("display_additional_app_bar_icons", false)) {
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
+ displayAdditionalAppBarIconsPreference.setIcon(R.drawable.more_enabled_night);
+ } else {
+ displayAdditionalAppBarIconsPreference.setIcon(R.drawable.more_enabled_day);
+ }
+ } else {
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
+ displayAdditionalAppBarIconsPreference.setIcon(R.drawable.more_disabled_night);
+ } else {
+ displayAdditionalAppBarIconsPreference.setIcon(R.drawable.more_disabled_day);
+ }
+ }
+ break;
+
+ case "app_theme":
+ // Get the new theme.
+ String newAppTheme = sharedPreferences.getString("app_theme", getString(R.string.app_theme_default_value));
+
+ // Update the system according to the new theme. A switch statement cannot be used because the theme entry values string array is not a compile time constant.
+ if (newAppTheme.equals(appThemeEntryValuesStringArray[1])) { // The light theme is selected.
+ // Update the theme preference summary text.
+ appThemePreference.setSummary(appThemeEntriesStringArray[1]);
+
+ // Apply the new theme.
+ AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
+ } else if (newAppTheme.equals(appThemeEntryValuesStringArray[2])) { // The dark theme is selected.
+ // Update the theme preference summary text.
+ appThemePreference.setSummary(appThemeEntriesStringArray[2]);
+
+ // Apply the new theme.
+ AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
+ } else { // The system default theme is selected.
+ // Update the theme preference summary text.
+ appThemePreference.setSummary(appThemeEntriesStringArray[0]);
+
+ // Apply the new theme.
+ if (Build.VERSION.SDK_INT >= 28) { // The system default theme is supported.
+ // Follow the system default theme.
+ AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM);
+ } else {// The system default theme is not supported.
+ // Follow the battery saver mode.
+ AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_AUTO_BATTERY);
+ }
+ }
+
+ // Update the current theme status.
+ currentThemeStatus = getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;
+ break;
+
+ case "webview_theme":
+ // Get the new WebView theme.
+ String newWebViewTheme = sharedPreferences.getString("webview_theme", getString(R.string.webview_theme_default_value));
+
+ // Define a new WebView theme entry number.
+ int newWebViewThemeEntryNumber;
+
+ // Get the webView theme entry number that matches the new WebView theme. A switch statement cannot be used because the theme entry values string array is not a compile time constant.
+ if (newWebViewTheme.equals(webViewThemeEntriesStringArray[1])) { // The light theme is selected.
+ // Store the new WebView theme entry number.
+ newWebViewThemeEntryNumber = 1;
+ } else if (newWebViewTheme.equals(webViewThemeEntryValuesStringArray[2])) { // The dark theme is selected.
+ // Store the WebView theme entry number.
+ newWebViewThemeEntryNumber = 2;
+ } else { // The system default theme is selected.
+ // Store the WebView theme entry number.
+ newWebViewThemeEntryNumber = 0;
+ }
+
+ // Update the icon.
+ switch (newWebViewThemeEntryNumber) {
+ case 0: // The system default WebView theme is selected.
+ // Set the icon according to the app theme.
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_NO) {
+ webViewThemePreference.setIcon(R.drawable.webview_light_theme_day);
+ } else {
+ webViewThemePreference.setIcon(R.drawable.webview_dark_theme_night);
+ }
+ break;
+
+ case 1: // The system default WebView theme is selected.
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_NO) {
+ webViewThemePreference.setIcon(R.drawable.webview_light_theme_day);
+ } else {
+ webViewThemePreference.setIcon(R.drawable.webview_light_theme_night);
+ }
+ break;
+
+ case 2: // The system default WebView theme is selected.
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_NO) {
+ webViewThemePreference.setIcon(R.drawable.webview_dark_theme_day);
+ } else {
+ webViewThemePreference.setIcon(R.drawable.webview_dark_theme_night);
+ }
+ break;
+ }
+
+ // Set the current theme as the summary text for the preference.
+ webViewThemePreference.setSummary(webViewThemeEntriesStringArray[newWebViewThemeEntryNumber]);
+ break;
+
+ case "wide_viewport":
+ // Update the icon.
+ if (sharedPreferences.getBoolean("wide_viewport", true)) {
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
+ wideViewportPreference.setIcon(R.drawable.wide_viewport_enabled_night);
+ } else {
+ wideViewportPreference.setIcon(R.drawable.wide_viewport_enabled_day);
+ }
+ } else {
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
+ wideViewportPreference.setIcon(R.drawable.wide_viewport_disabled_night);
+ } else {
+ wideViewportPreference.setIcon(R.drawable.wide_viewport_disabled_day);
+ }
+ }
+ break;
+
+ case "display_webpage_images":
+ // Update the icon.
+ if (sharedPreferences.getBoolean("display_webpage_images", true)) {
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
+ displayWebpageImagesPreference.setIcon(R.drawable.images_enabled_night);
+ } else {
+ displayWebpageImagesPreference.setIcon(R.drawable.images_enabled_day);
+ }
+ } else {
+ if (currentThemeStatus == Configuration.UI_MODE_NIGHT_YES) {
+ displayWebpageImagesPreference.setIcon(R.drawable.images_disabled_night);
+ } else {
+ displayWebpageImagesPreference.setIcon(R.drawable.images_disabled_day);
+ }
+ }
+ break;