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=e79e399e026e649b042911a6909132ed9b0e1491;hpb=323bc5323b1f8e2b9d0f78acfdd6b6c8e8246932;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 e79e399e..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,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);