X-Git-Url: https://gitweb.stoutner.com/?a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fcom%2Fstoutner%2Fprivacybrowser%2Ffragments%2FSettingsFragment.java;h=d7aecd301dacd9657e5892dadccc49439792be6e;hb=a156c3942ca31a1afca3271245cc2bda7ed5aed8;hp=5720e06e1a4c13c0db0b5213c7163bda4e351605;hpb=aa9590ff1a1097733bdda217ce1fe6f1fc93afc3;p=PrivacyBrowserAndroid.git diff --git a/app/src/main/java/com/stoutner/privacybrowser/fragments/SettingsFragment.java b/app/src/main/java/com/stoutner/privacybrowser/fragments/SettingsFragment.java index 5720e06e..d7aecd30 100644 --- a/app/src/main/java/com/stoutner/privacybrowser/fragments/SettingsFragment.java +++ b/app/src/main/java/com/stoutner/privacybrowser/fragments/SettingsFragment.java @@ -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 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,7 +624,7 @@ 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 swipeToRefreshPreference.setIcon(R.drawable.refresh_disabled); @@ -655,36 +654,42 @@ public class SettingsFragment extends PreferenceFragmentCompat { 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); @@ -789,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); @@ -835,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": @@ -1184,7 +1189,7 @@ 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": @@ -1197,7 +1202,7 @@ public class SettingsFragment extends PreferenceFragmentCompat { 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 swipeToRefreshPreference.setIcon(R.drawable.refresh_disabled); @@ -1243,42 +1248,109 @@ public class SettingsFragment extends PreferenceFragmentCompat { // 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_YES); + // 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; + + // 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. @@ -1286,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); @@ -1321,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); @@ -1330,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);