]> gitweb.stoutner.com Git - PrivacyBrowserAndroid.git/blobdiff - app/src/main/java/com/stoutner/privacybrowser/fragments/SettingsFragment.java
Add a download location preference. https://redmine.stoutner.com/issues/32
[PrivacyBrowserAndroid.git] / app / src / main / java / com / stoutner / privacybrowser / fragments / SettingsFragment.java
index 04e0d2d5ed20ccab3fc221b71399a114a9a7740a..643051abb970995d2dc5d3e4d5ab93e46ecf8afc 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * 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>.
  *
@@ -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)) {