]> gitweb.stoutner.com Git - PrivacyBrowserAndroid.git/blobdiff - app/src/main/java/com/stoutner/privacybrowser/fragments/SettingsFragment.java
Fix crash when adding domain settings with null domain. https://redmine.stoutner...
[PrivacyBrowserAndroid.git] / app / src / main / java / com / stoutner / privacybrowser / fragments / SettingsFragment.java
index e79e399e026e649b042911a6909132ed9b0e1491..d7aecd301dacd9657e5892dadccc49439792be6e 100644 (file)
@@ -48,7 +48,6 @@ import java.util.Objects;
 
 public class SettingsFragment extends PreferenceFragmentCompat {
     // Declare the class variables.
-    private int currentThemeStatus;
     private String defaultUserAgent;
     private ArrayAdapter<CharSequence> userAgentNamesArray;
     private String[] translatedUserAgentNamesArray;
@@ -117,9 +116,6 @@ public class SettingsFragment extends PreferenceFragmentCompat {
         // Get a handle for the resources.
         Resources resources = getResources();
 
-        // Get the current theme status.
-        currentThemeStatus = getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;
-
         // Get a handle for the shared preferences.
         SharedPreferences sharedPreferences = getPreferenceScreen().getSharedPreferences();
 
@@ -131,7 +127,7 @@ public class SettingsFragment extends PreferenceFragmentCompat {
         cookiesPreference = findPreference(getString(R.string.cookies_key));
         domStoragePreference = findPreference("dom_storage");
         formDataPreference = findPreference("save_form_data");  // The form data preference can be removed once the minimum API >= 26.
-        userAgentPreference = findPreference("user_agent");
+        userAgentPreference = findPreference(getString(R.string.user_agent_key));
         customUserAgentPreference = findPreference("custom_user_agent");
         xRequestedWithHeaderPreference = findPreference(getString(R.string.x_requested_with_header_key));
         incognitoModePreference = findPreference("incognito_mode");
@@ -158,17 +154,17 @@ public class SettingsFragment extends PreferenceFragmentCompat {
         clearLogcatPreference = findPreference(getString(R.string.clear_logcat_key));
         clearCachePreference = findPreference("clear_cache");
         homepagePreference = findPreference("homepage");
-        fontSizePreference = findPreference("font_size");
+        fontSizePreference = findPreference(getString(R.string.font_size_key));
         openIntentsInNewTabPreference = findPreference("open_intents_in_new_tab");
-        swipeToRefreshPreference = findPreference("swipe_to_refresh");
+        swipeToRefreshPreference = findPreference(getString(R.string.swipe_to_refresh_key));
         downloadWithExternalAppPreference = findPreference(getString(R.string.download_with_external_app_key));
         scrollAppBarPreference = findPreference(getString(R.string.scroll_app_bar_key));
         bottomAppBarPreference = findPreference(getString(R.string.bottom_app_bar_key));
         displayAdditionalAppBarIconsPreference = findPreference(getString(R.string.display_additional_app_bar_icons_key));
         appThemePreference = findPreference("app_theme");
-        webViewThemePreference = findPreference("webview_theme");
-        wideViewportPreference = findPreference("wide_viewport");
-        displayWebpageImagesPreference = findPreference("display_webpage_images");
+        webViewThemePreference = findPreference(getString(R.string.webview_theme_key));
+        wideViewportPreference = findPreference(getString(R.string.wide_viewport_key));
+        displayWebpageImagesPreference = findPreference(getString(R.string.display_webpage_images_key));
 
         // Remove the lint warnings below that the preferences might be null.
         assert javaScriptPreference != null;
@@ -219,7 +215,7 @@ public class SettingsFragment extends PreferenceFragmentCompat {
         domStoragePreference.setDependency("javascript");
 
         // Get strings from the preferences.
-        String userAgentName = sharedPreferences.getString("user_agent", getString(R.string.user_agent_default_value));
+        String userAgentName = sharedPreferences.getString(getString(R.string.user_agent_key), getString(R.string.user_agent_default_value));
         String searchString = sharedPreferences.getString("search", getString(R.string.search_default_value));
         String proxyString = sharedPreferences.getString("proxy", getString(R.string.proxy_default_value));
 
@@ -292,7 +288,7 @@ public class SettingsFragment extends PreferenceFragmentCompat {
         }
 
         // Set the summary text for the custom user agent preference.
-        customUserAgentPreference.setSummary(sharedPreferences.getString("custom_user_agent", getString(R.string.custom_user_agent_default_value)));
+        customUserAgentPreference.setSummary(sharedPreferences.getString(getString(R.string.custom_user_agent_key), 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(Objects.equals(userAgentPreference.getSummary(), getString(R.string.custom_user_agent)));
@@ -352,7 +348,7 @@ public class SettingsFragment extends PreferenceFragmentCompat {
 
 
         // Set the font size as the summary text for the preference.
-        fontSizePreference.setSummary(sharedPreferences.getString("font_size", getString(R.string.font_size_default_value)) + "%");
+        fontSizePreference.setSummary(sharedPreferences.getString(getString(R.string.font_size_key), getString(R.string.font_size_default_value)) + "%");
 
 
         // Get the app theme string arrays.
@@ -362,7 +358,7 @@ public class SettingsFragment extends PreferenceFragmentCompat {
         // Get the current app theme.
         String currentAppTheme = sharedPreferences.getString("app_theme", getString(R.string.app_theme_default_value));
 
-        // Define an app theme entry number.
+        // Declare an app theme entry number.
         int appThemeEntryNumber;
 
         // Get the app theme entry number that matches the current app theme.  A switch statement cannot be used because the theme entry values string array is not a compile time constant.
@@ -380,13 +376,16 @@ public class SettingsFragment extends PreferenceFragmentCompat {
         // Set the current theme as the summary text for the preference.
         appThemePreference.setSummary(appThemeEntriesStringArray[appThemeEntryNumber]);
 
+        // Disable the WebView theme preference if the API >= 33 and the app theme is set to light.
+        webViewThemePreference.setEnabled((Build.VERSION.SDK_INT < 33) || (appThemeEntryNumber != 1));
+
 
         // Get the WebView theme string arrays.
         webViewThemeEntriesStringArray = resources.getStringArray(R.array.webview_theme_entries);
         webViewThemeEntryValuesStringArray = resources.getStringArray(R.array.webview_theme_entry_values);
 
         // Get the current WebView theme.
-        String currentWebViewTheme = sharedPreferences.getString("webview_theme", getString(R.string.webview_theme_default_value));
+        String currentWebViewTheme = sharedPreferences.getString(getString(R.string.webview_theme_key), getString(R.string.webview_theme_default_value));
 
         // Define a WebView theme entry number.
         int webViewThemeEntryNumber;
@@ -625,71 +624,72 @@ public class SettingsFragment extends PreferenceFragmentCompat {
         }
 
         // Set the swipe to refresh preference icon.
-        if (sharedPreferences.getBoolean("swipe_to_refresh", true)) {
+        if (sharedPreferences.getBoolean(getString(R.string.swipe_to_refresh_key), true))
             swipeToRefreshPreference.setIcon(R.drawable.refresh_enabled);
-        } else {
+        else
             swipeToRefreshPreference.setIcon(R.drawable.refresh_disabled);
-        }
 
         // Set the download with external app preference icon.
-        if (sharedPreferences.getBoolean(getString(R.string.download_with_external_app_key), false)) {
+        if (sharedPreferences.getBoolean(getString(R.string.download_with_external_app_key), false))
             downloadWithExternalAppPreference.setIcon(R.drawable.download_with_external_app_enabled);
-        } else {
+        else
             downloadWithExternalAppPreference.setIcon(R.drawable.download_with_external_app_disabled);
-        }
 
         // Set the scroll app bar preference icon.
-        if (sharedPreferences.getBoolean(getString(R.string.scroll_app_bar_key), true)) {
+        if (sharedPreferences.getBoolean(getString(R.string.scroll_app_bar_key), true))
             scrollAppBarPreference.setIcon(R.drawable.app_bar_enabled);
-        } else {
+        else
             scrollAppBarPreference.setIcon(R.drawable.app_bar_disabled);
-        }
 
         // Set the bottom app bar preference icon.
-        if (sharedPreferences.getBoolean(getString(R.string.bottom_app_bar_key), false)) {
+        if (sharedPreferences.getBoolean(getString(R.string.bottom_app_bar_key), false))
             bottomAppBarPreference.setIcon(R.drawable.bottom_app_bar_enabled);
-        } else {
+        else
             bottomAppBarPreference.setIcon(R.drawable.bottom_app_bar_disabled);
-        }
 
         // Set the display additional app bar icons preference icon.
-        if (sharedPreferences.getBoolean(getString(R.string.display_additional_app_bar_icons_key), false)) {
+        if (sharedPreferences.getBoolean(getString(R.string.display_additional_app_bar_icons_key), false))
             displayAdditionalAppBarIconsPreference.setIcon(R.drawable.more_enabled);
-        } else {
+        else
             displayAdditionalAppBarIconsPreference.setIcon(R.drawable.more_disabled);
-        }
 
         // Set the WebView theme preference icon.
-        switch (webViewThemeEntryNumber) {
-            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);
-                } else {
-                    webViewThemePreference.setIcon(R.drawable.webview_dark_theme);
-                }
-                break;
+        if (webViewThemePreference.isEnabled()) {  // The WebView theme preference is enabled.
+            switch (webViewThemeEntryNumber) {
+                case 0:  // The system default WebView theme is selected.
+                    // Get the current theme status.
+                    int currentThemeStatus = getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;
+
+                    // Set the icon according to the app theme.
+                    if (currentThemeStatus == Configuration.UI_MODE_NIGHT_NO)
+                        webViewThemePreference.setIcon(R.drawable.webview_light_theme);
+                    else
+                        webViewThemePreference.setIcon(R.drawable.webview_dark_theme);
+                    break;
 
-            case 1:  // The light WebView theme is selected.
-                // Set the icon.
-                webViewThemePreference.setIcon(R.drawable.webview_light_theme);
-                break;
+                case 1:  // The light WebView theme is selected.
+                    // Set the icon.
+                    webViewThemePreference.setIcon(R.drawable.webview_light_theme);
+                    break;
 
-            case 2:  // The dark WebView theme is selected.
-                // Set the icon.
-                webViewThemePreference.setIcon(R.drawable.webview_dark_theme);
-                break;
+                case 2:  // The dark WebView theme is selected.
+                    // Set the icon.
+                    webViewThemePreference.setIcon(R.drawable.webview_dark_theme);
+                    break;
+            }
+        } else {  // The WebView theme preference is disabled.
+            webViewThemePreference.setIcon(R.drawable.webview_theme_ghosted);
         }
 
         // Set the wide viewport preference icon.
-        if (sharedPreferences.getBoolean("wide_viewport", true)) {
+        if (sharedPreferences.getBoolean(getString(R.string.wide_viewport_key), true)) {
             wideViewportPreference.setIcon(R.drawable.wide_viewport_enabled);
         } else {
             wideViewportPreference.setIcon(R.drawable.wide_viewport_disabled);
         }
 
         // Set the display webpage images preference icon.
-        if (sharedPreferences.getBoolean("display_webpage_images", true)) {
+        if (sharedPreferences.getBoolean(getString(R.string.display_webpage_images_key), true)) {
             displayWebpageImagesPreference.setIcon(R.drawable.images_enabled);
         } else {
             displayWebpageImagesPreference.setIcon(R.drawable.images_disabled);
@@ -794,7 +794,7 @@ public class SettingsFragment extends PreferenceFragmentCompat {
 
                 case "user_agent":
                     // Get the new user agent name.
-                    String newUserAgentName = sharedPreferences.getString("user_agent", context.getString(R.string.user_agent_default_value));
+                    String newUserAgentName = sharedPreferences.getString(context.getString(R.string.user_agent_key), context.getString(R.string.user_agent_default_value));
 
                     // Get the array position for the new user agent name.
                     int newUserAgentArrayPosition = userAgentNamesArray.getPosition(newUserAgentName);
@@ -840,7 +840,7 @@ public class SettingsFragment extends PreferenceFragmentCompat {
 
                 case "custom_user_agent":
                     // Set the new custom user agent as the summary text for the preference.
-                    customUserAgentPreference.setSummary(sharedPreferences.getString("custom_user_agent", context.getString(R.string.custom_user_agent_default_value)));
+                    customUserAgentPreference.setSummary(sharedPreferences.getString(context.getString(R.string.custom_user_agent_key), context.getString(R.string.custom_user_agent_default_value)));
                     break;
 
                 case "x_requested_with_header":
@@ -849,6 +849,9 @@ public class SettingsFragment extends PreferenceFragmentCompat {
                         xRequestedWithHeaderPreference.setIcon(R.drawable.x_requested_with_header_enabled);
                     else
                         xRequestedWithHeaderPreference.setIcon(R.drawable.x_requested_with_header_disabled);
+
+                    // Restart Privacy Browser.
+                    restartPrivacyBrowser();
                     break;
 
                 case "incognito_mode":
@@ -1186,47 +1189,48 @@ public class SettingsFragment extends PreferenceFragmentCompat {
 
                 case "font_size":
                     // Update the font size summary text.
-                    fontSizePreference.setSummary(sharedPreferences.getString("font_size", context.getString(R.string.font_size_default_value)) + "%");
+                    fontSizePreference.setSummary(sharedPreferences.getString(context.getString(R.string.font_size_key), context.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 (sharedPreferences.getBoolean("open_intents_in_new_tab", true))
                         openIntentsInNewTabPreference.setIcon(R.drawable.tab_enabled);
-                    } else {
+                    else
                         openIntentsInNewTabPreference.setIcon(R.drawable.tab_disabled);
-                    }
                     break;
 
                 case "swipe_to_refresh":
                     // Update the icon.
-                    if (sharedPreferences.getBoolean("swipe_to_refresh", true)) {
+                    if (sharedPreferences.getBoolean(context.getString(R.string.swipe_to_refresh_key), true))
                         swipeToRefreshPreference.setIcon(R.drawable.refresh_enabled);
-                    } else {
+                    else
                         swipeToRefreshPreference.setIcon(R.drawable.refresh_disabled);
-                    }
                     break;
 
                 case "download_with_external_app":
                     // Update the icon.
-                    if (sharedPreferences.getBoolean(context.getString(R.string.download_with_external_app_key), false)) {
+                    if (sharedPreferences.getBoolean(context.getString(R.string.download_with_external_app_key), false))
                         downloadWithExternalAppPreference.setIcon(R.drawable.download_with_external_app_enabled);
-                    } else {
+                    else
                         downloadWithExternalAppPreference.setIcon(R.drawable.download_with_external_app_disabled);
-                    }
                     break;
 
                 case "scroll_app_bar":
                     // Update the icon.
-                    if (sharedPreferences.getBoolean(context.getString(R.string.scroll_app_bar_key), true)) scrollAppBarPreference.setIcon(R.drawable.app_bar_enabled);
-                    else scrollAppBarPreference.setIcon(R.drawable.app_bar_disabled);
+                    if (sharedPreferences.getBoolean(context.getString(R.string.scroll_app_bar_key), true))
+                        scrollAppBarPreference.setIcon(R.drawable.app_bar_enabled);
+                    else
+                        scrollAppBarPreference.setIcon(R.drawable.app_bar_disabled);
 
                     break;
 
                 case "bottom_app_bar":
                     // Update the icon.
-                    if (sharedPreferences.getBoolean(context.getString(R.string.bottom_app_bar_key), false)) bottomAppBarPreference.setIcon(R.drawable.bottom_app_bar_enabled);
-                    else bottomAppBarPreference.setIcon(R.drawable.bottom_app_bar_disabled);
+                    if (sharedPreferences.getBoolean(context.getString(R.string.bottom_app_bar_key), false))
+                        bottomAppBarPreference.setIcon(R.drawable.bottom_app_bar_enabled);
+                    else
+                        bottomAppBarPreference.setIcon(R.drawable.bottom_app_bar_disabled);
 
                     // Restart Privacy Browser.
                     restartPrivacyBrowser();
@@ -1234,53 +1238,119 @@ public class SettingsFragment extends PreferenceFragmentCompat {
 
                 case "display_additional_app_bar_icons":
                     // Update the icon.
-                    if (sharedPreferences.getBoolean(context.getString(R.string.display_additional_app_bar_icons_key), false)) {
+                    if (sharedPreferences.getBoolean(context.getString(R.string.display_additional_app_bar_icons_key), false))
                         displayAdditionalAppBarIconsPreference.setIcon(R.drawable.more_enabled);
-                    } else {
+                    else
                         displayAdditionalAppBarIconsPreference.setIcon(R.drawable.more_disabled);
-                    }
                     break;
 
                 case "app_theme":
                     // Get the new theme.
                     String newAppTheme = sharedPreferences.getString("app_theme", context.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]);
+                    // Declare an app theme entry number.
+                    int appThemeEntryNumber;
 
-                        // Apply the new theme.
-                        AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
+                    // Get the app theme entry number that matches the current app 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.
+                        // Store the app theme entry number.
+                        appThemeEntryNumber = 1;
                     } else if (newAppTheme.equals(appThemeEntryValuesStringArray[2])) {  // The dark theme is selected.
-                        // Update the theme preference summary text.
-                        appThemePreference.setSummary(appThemeEntriesStringArray[2]);
+                        // Store the app theme entry number.
+                        appThemeEntryNumber = 2;
+                    } else {  // The system default theme is selected.
+                        // Store the app theme entry number.
+                        appThemeEntryNumber = 0;
+                    }
+
+                    // 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.
+                    switch (appThemeEntryNumber) {
+                        case 0:  // 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);
+                            }
+                            break;
+
+                        case 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);
+                            break;
+
+                        case 2:
+                            // Update the theme preference summary text.
+                            appThemePreference.setSummary(appThemeEntriesStringArray[2]);
+
+                            // Apply the new theme.
+                            AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
+                            break;
+                    }
+
+                    // Disable the WebView theme preference if the API >= 33 and the app theme is set to light.
+                    webViewThemePreference.setEnabled((Build.VERSION.SDK_INT < 33) || (appThemeEntryNumber != 1));
+
+                    // Get the WebView theme.
+                    String webViewTheme = sharedPreferences.getString(context.getString(R.string.webview_theme_key), context.getString(R.string.webview_theme_default_value));
+
+                    // Declare a WebView theme entry number.
+                    int webViewThemeEntryNumber;
 
-                        // Apply the new theme.
-                        AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
+                    // 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 (webViewTheme.equals(webViewThemeEntriesStringArray[1])) {  // The light theme is selected.
+                        // Store the WebView theme entry number.
+                        webViewThemeEntryNumber = 1;
+                    } else if (webViewTheme.equals(webViewThemeEntryValuesStringArray[2])) {  // The dark theme is selected.
+                        // Store the WebView theme entry number.
+                        webViewThemeEntryNumber = 2;
                     } 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);
-                        }
+                        // Store the WebView theme entry number.
+                        webViewThemeEntryNumber = 0;
                     }
 
-                    // Update the current theme status.
-                    currentThemeStatus = getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;
+                    // Update the WebView theme preference icon.
+                    if (webViewThemePreference.isEnabled()) {  // The WebView theme preference is enabled.
+                        switch (webViewThemeEntryNumber) {
+                            case 0:  // The system default WebView theme is selected.
+                                // Get the current theme status.
+                                int currentThemeStatus = getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;
+
+                                // Set the icon according to the app theme.
+                                if (currentThemeStatus == Configuration.UI_MODE_NIGHT_NO)
+                                    webViewThemePreference.setIcon(R.drawable.webview_light_theme);
+                                else
+                                    webViewThemePreference.setIcon(R.drawable.webview_dark_theme);
+                                break;
+
+                            case 1:  // The light WebView theme is selected.
+                                // Set the icon.
+                                webViewThemePreference.setIcon(R.drawable.webview_light_theme);
+                                break;
+
+                            case 2:  // The dark WebView theme is selected.
+                                // Set the icon.
+                                webViewThemePreference.setIcon(R.drawable.webview_dark_theme);
+                                break;
+                        }
+                    } else {  // The WebView theme preference is disabled.
+                        webViewThemePreference.setIcon(R.drawable.webview_theme_ghosted);
+                    }
                     break;
 
                 case "webview_theme":
                     // Get the new WebView theme.
-                    String newWebViewTheme = sharedPreferences.getString("webview_theme", context.getString(R.string.webview_theme_default_value));
+                    String newWebViewTheme = sharedPreferences.getString(context.getString(R.string.webview_theme_key), context.getString(R.string.webview_theme_default_value));
 
-                    // Define a new WebView theme entry number.
+                    // Declare 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.
@@ -1288,16 +1358,19 @@ public class SettingsFragment extends PreferenceFragmentCompat {
                         // 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.
+                        // Store the new WebView theme entry number.
                         newWebViewThemeEntryNumber = 2;
                     } else {  // The system default theme is selected.
-                        // Store the WebView theme entry number.
+                        // Store the new WebView theme entry number.
                         newWebViewThemeEntryNumber = 0;
                     }
 
                     // Update the icon.
                     switch (newWebViewThemeEntryNumber) {
                         case 0:  // The system default WebView theme is selected.
+                            // Get the current theme status.
+                            int currentThemeStatus = getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;
+
                             // Set the icon.
                             if (currentThemeStatus == Configuration.UI_MODE_NIGHT_NO) {
                                 webViewThemePreference.setIcon(R.drawable.webview_light_theme);
@@ -1323,7 +1396,7 @@ public class SettingsFragment extends PreferenceFragmentCompat {
 
                 case "wide_viewport":
                     // Update the icon.
-                    if (sharedPreferences.getBoolean("wide_viewport", true)) {
+                    if (sharedPreferences.getBoolean(context.getString(R.string.wide_viewport_key), true)) {
                         wideViewportPreference.setIcon(R.drawable.wide_viewport_enabled);
                     } else {
                         wideViewportPreference.setIcon(R.drawable.wide_viewport_disabled);
@@ -1332,7 +1405,7 @@ public class SettingsFragment extends PreferenceFragmentCompat {
 
                 case "display_webpage_images":
                     // Update the icon.
-                    if (sharedPreferences.getBoolean("display_webpage_images", true)) {
+                    if (sharedPreferences.getBoolean(context.getString(R.string.display_webpage_images_key), true)) {
                         displayWebpageImagesPreference.setIcon(R.drawable.images_enabled);
                     } else {
                         displayWebpageImagesPreference.setIcon(R.drawable.images_disabled);