/*
- * Copyright 2016-2022 Soren Stoutner <soren@stoutner.com>.
+ * Copyright 2016-2024 Soren Stoutner <soren@stoutner.com>.
*
* This file is part of Privacy Browser Android <https://www.stoutner.com/privacy-browser-android>.
*
import androidx.appcompat.app.AppCompatDelegate
import androidx.preference.Preference
-import androidx.preference.PreferenceCategory
import androidx.preference.PreferenceFragmentCompat
import com.stoutner.privacybrowser.R
-import com.stoutner.privacybrowser.activities.MainWebViewActivity
+import com.stoutner.privacybrowser.activities.SETTINGS_CUSTOM_USER_AGENT
+import com.stoutner.privacybrowser.activities.SETTINGS_WEBVIEW_DEFAULT_USER_AGENT
+import com.stoutner.privacybrowser.activities.UNRECOGNIZED_USER_AGENT
import com.stoutner.privacybrowser.helpers.ProxyHelper
import kotlin.system.exitProcess
+// Define the class constants.
+private const val SCROLL_Y = "scroll_y"
+
class SettingsFragment : PreferenceFragmentCompat() {
+ companion object {
+ // Declare the private static class variables. For some reason (I'm looking at you Android's Activity Lifecycle) this only works if these are static.
+ private var fragmentRestarted: Boolean = false
+ private var scrollY: Int = 0
+ }
+
// Declare the class variables.
+ private lateinit var allowScreenshotsPreference: Preference
+ private lateinit var ampRedirectsPreference: Preference
private lateinit var appThemeEntriesStringArray: Array<String>
private lateinit var appThemeEntryValuesStringArray: Array<String>
- private lateinit var defaultUserAgent: String
- private lateinit var sharedPreferenceChangeListener: OnSharedPreferenceChangeListener
- private lateinit var translatedUserAgentNamesArray: Array<String>
- private lateinit var userAgentDataArray: Array<String>
- private lateinit var userAgentNamesArray: ArrayAdapter<CharSequence>
- private lateinit var webViewThemeEntriesStringArray: Array<String>
- private lateinit var webViewThemeEntryValuesStringArray: Array<String>
-
- // Define the the class views.
- private lateinit var javaScriptPreference: Preference
+ private lateinit var appThemePreference: Preference
+ private lateinit var blockAllThirdPartyRequestsPreference: Preference
+ private lateinit var bottomAppBarPreference: Preference
+ private lateinit var clearCachePreference: Preference
+ private lateinit var clearCookiesPreference: Preference
+ private lateinit var clearDomStoragePreference: Preference
+ private lateinit var clearEverythingPreference: Preference
+ private lateinit var clearLogcatPreference: Preference
private lateinit var cookiesPreference: Preference
- private lateinit var domStoragePreference: Preference
- private lateinit var formDataPreference: Preference // The form data preference can be removed once the minimum API >= 26.
- private lateinit var userAgentPreference: Preference
private lateinit var customUserAgentPreference: Preference
- private lateinit var xRequestedWithHeaderPreference: Preference
- private lateinit var incognitoModePreference: Preference
- private lateinit var allowScreenshotsPreference: Preference
+ private lateinit var defaultUserAgent: String
+ private lateinit var displayAdditionalAppBarIconsPreference: Preference
+ private lateinit var displayWebpageImagesPreference: Preference
+ private lateinit var domStoragePreference: Preference
+ private lateinit var downloadProviderEntryValuesStringArray: Array<String>
+ private lateinit var downloadProviderPreference: Preference
private lateinit var easyListPreference: Preference
private lateinit var easyPrivacyPreference: Preference
private lateinit var fanboyAnnoyanceListPreference: Preference
private lateinit var fanboySocialBlockingListPreference: Preference
- private lateinit var ultraListPreference: Preference
- private lateinit var ultraPrivacyPreference: Preference
- private lateinit var blockAllThirdPartyRequestsPreference: Preference
- private lateinit var trackingQueriesPreference: Preference
- private lateinit var ampRedirectsPreference: Preference
- private lateinit var searchPreference: Preference
- private lateinit var searchCustomURLPreference: Preference
- private lateinit var proxyPreference: Preference
- private lateinit var proxyCustomUrlPreference: Preference
+ private lateinit var fontSizePreference: Preference
private lateinit var fullScreenBrowsingModePreference: Preference
private lateinit var hideAppBarPreference: Preference
- private lateinit var clearEverythingPreference: Preference
- private lateinit var clearCookiesPreference: Preference
- private lateinit var clearDomStoragePreference: Preference
- private lateinit var clearFormDataPreference: Preference // The clear form data preference can be removed once the minimum API >= 26.
- private lateinit var clearLogcatPreference: Preference
- private lateinit var clearCachePreference: Preference
+ private lateinit var displayUnderCutoutsPreference: Preference
private lateinit var homepagePreference: Preference
- private lateinit var fontSizePreference: Preference
+ private lateinit var incognitoModePreference: Preference
+ private lateinit var javaScriptPreference: Preference
private lateinit var openIntentsInNewTabPreference: Preference
- private lateinit var swipeToRefreshPreference: Preference
- private lateinit var downloadWithExternalAppPreference: Preference
+ private lateinit var proxyCustomUrlPreference: Preference
+ private lateinit var proxyPreference: Preference
private lateinit var scrollAppBarPreference: Preference
- private lateinit var bottomAppBarPreference: Preference
- private lateinit var displayAdditionalAppBarIconsPreference: Preference
- private lateinit var appThemePreference: Preference
+ private lateinit var searchCustomURLPreference: Preference
+ private lateinit var searchPreference: Preference
+ private lateinit var sharedPreferenceChangeListener: OnSharedPreferenceChangeListener
+ private lateinit var swipeToRefreshPreference: Preference
+ private lateinit var trackingQueriesPreference: Preference
+ private lateinit var translatedUserAgentNamesArray: Array<String>
+ private lateinit var ultraListPreference: Preference
+ private lateinit var ultraPrivacyPreference: Preference
+ private lateinit var userAgentDataArray: Array<String>
+ private lateinit var userAgentPreference: Preference
+ private lateinit var userAgentNamesArray: ArrayAdapter<CharSequence>
+ private lateinit var webViewThemeEntriesStringArray: Array<String>
+ private lateinit var webViewThemeEntryValuesStringArray: Array<String>
private lateinit var webViewThemePreference: Preference
private lateinit var wideViewportPreference: Preference
- private lateinit var displayWebpageImagesPreference: Preference
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
+ // Check if the fragment has been restarted.
+ if (savedInstanceState != null) {
+ // Set the fragment restored flag.
+ fragmentRestarted = true
+
+ // Save the scroll Y.
+ scrollY = savedInstanceState.getInt(SCROLL_Y)
+ }
+
// Load the preferences from the XML file.
setPreferencesFromResource(R.xml.preferences, rootKey)
javaScriptPreference = findPreference(getString(R.string.javascript_key))!!
cookiesPreference = findPreference(getString(R.string.cookies_key))!!
domStoragePreference = findPreference(getString(R.string.dom_storage_key))!!
- formDataPreference = findPreference(getString(R.string.save_form_data_key))!! // The form data preference can be removed once the minimum API >= 26.
userAgentPreference = findPreference(getString(R.string.user_agent_key))!!
customUserAgentPreference = findPreference(getString(R.string.custom_user_agent_key))!!
- xRequestedWithHeaderPreference = findPreference(getString(R.string.x_requested_with_header_key))!!
incognitoModePreference = findPreference(getString(R.string.incognito_mode_key))!!
allowScreenshotsPreference = findPreference(getString(R.string.allow_screenshots_key))!!
easyListPreference = findPreference(getString(R.string.easylist_key))!!
proxyCustomUrlPreference = findPreference(getString(R.string.proxy_custom_url_key))!!
fullScreenBrowsingModePreference = findPreference(getString(R.string.full_screen_browsing_mode_key))!!
hideAppBarPreference = findPreference(getString(R.string.hide_app_bar_key))!!
+ displayUnderCutoutsPreference = findPreference(getString(R.string.display_under_cutouts_key))!!
clearEverythingPreference = findPreference(getString(R.string.clear_everything_key))!!
clearCookiesPreference = findPreference(getString(R.string.clear_cookies_key))!!
clearDomStoragePreference = findPreference(getString(R.string.clear_dom_storage_key))!!
- clearFormDataPreference = findPreference(getString(R.string.clear_form_data_key))!! // The clear form data preference can be removed once the minimum API >= 26.
clearLogcatPreference = findPreference(getString(R.string.clear_logcat_key))!!
clearCachePreference = findPreference(getString(R.string.clear_cache_key))!!
homepagePreference = findPreference(getString(R.string.homepage_key))!!
fontSizePreference = findPreference(getString(R.string.font_size_key))!!
openIntentsInNewTabPreference = findPreference(getString(R.string.open_intents_in_new_tab_key))!!
swipeToRefreshPreference = findPreference(getString(R.string.swipe_to_refresh_key))!!
- downloadWithExternalAppPreference = findPreference(getString(R.string.download_with_external_app_key))!!
+ downloadProviderPreference = findPreference(getString(R.string.download_provider_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))!!
// Set the preference dependencies.
domStoragePreference.dependency = getString(R.string.javascript_key)
hideAppBarPreference.dependency = getString(R.string.full_screen_browsing_mode_key)
+ displayUnderCutoutsPreference.dependency = getString(R.string.full_screen_browsing_mode_key)
// Get strings from the preferences.
val userAgentName = sharedPreferences.getString(getString(R.string.user_agent_key), getString(R.string.user_agent_default_value))
val fullScreenBrowsingMode = sharedPreferences.getBoolean(getString(R.string.full_screen_browsing_mode_key), false)
val clearEverything = sharedPreferences.getBoolean(getString(R.string.clear_everything_key), true)
- // Remove the form data preferences if the API is >= 26 as they no longer do anything.
- if (Build.VERSION.SDK_INT >= 26) {
- // Get handles for the categories.
- val privacyCategory = findPreference<PreferenceCategory>(getString(R.string.privacy_category_key))!!
- val clearAndExitCategory = findPreference<PreferenceCategory>(getString(R.string.clear_and_exit_category_key))!!
-
- // Remove the form data preferences.
- privacyCategory.removePreference(formDataPreference)
- clearAndExitCategory.removePreference(clearFormDataPreference)
- }
-
// Only enable Fanboy's social blocking list preference if Fanboy's annoyance list is disabled.
fanboySocialBlockingListPreference.isEnabled = !fanboyAnnoyanceListEnabled
when (val userAgentArrayPosition = userAgentNamesArray.getPosition(userAgentName)) {
// The user agent name is not on the canonical list.
// This is probably because it was set in an older version of Privacy Browser before the switch to persistent user agent names. Use the current user agent entry name as the summary.
- MainWebViewActivity.UNRECOGNIZED_USER_AGENT -> userAgentPreference.summary = userAgentName
+ UNRECOGNIZED_USER_AGENT -> userAgentPreference.summary = userAgentName
// Get the user agent text from the webview (which changes based on the version of Android and WebView installed).
- MainWebViewActivity.SETTINGS_WEBVIEW_DEFAULT_USER_AGENT -> userAgentPreference.summary = "${translatedUserAgentNamesArray[userAgentArrayPosition]}:\n$defaultUserAgent"
+ SETTINGS_WEBVIEW_DEFAULT_USER_AGENT -> userAgentPreference.summary = "${translatedUserAgentNamesArray[userAgentArrayPosition]}:\n$defaultUserAgent"
// Display the custom user agent.
- MainWebViewActivity.SETTINGS_CUSTOM_USER_AGENT -> userAgentPreference.setSummary(R.string.custom_user_agent)
+ SETTINGS_CUSTOM_USER_AGENT -> userAgentPreference.setSummary(R.string.custom_user_agent)
// Get the user agent summary from the user agent data array.
else -> userAgentPreference.summary = "${translatedUserAgentNamesArray[userAgentArrayPosition]}:\n${userAgentDataArray[userAgentArrayPosition]}"
// Set the status of the clear and exit preferences.
clearCookiesPreference.isEnabled = !clearEverything
clearDomStoragePreference.isEnabled = !clearEverything
- clearFormDataPreference.isEnabled = !clearEverything // Clear form data can be removed once the minimum API is >= 26.
clearLogcatPreference.isEnabled = !clearEverything
clearCachePreference.isEnabled = !clearEverything
// Set the font size as the summary text for the preference.
fontSizePreference.summary = sharedPreferences.getString(getString(R.string.font_size_key), getString(R.string.font_size_default_value)) + "%"
+ // Get the download provider entry values string array
+ downloadProviderEntryValuesStringArray = resources.getStringArray(R.array.download_provider_entry_values)
+
+ // Set the summary text for the download provider preference.
+ downloadProviderPreference.summary = when (sharedPreferences.getString(getString(R.string.download_provider_key), getString(R.string.download_provider_default_value))) {
+ downloadProviderEntryValuesStringArray[0] -> getString(R.string.download_with_privacy_browser) // Privacy Browser is selected.
+ downloadProviderEntryValuesStringArray[1] -> getString(R.string.download_with_android_download_manager) // Android download manager is selected.
+ else -> getString(R.string.download_with_external_app) // External app is selected.
+ }
+
// Get the app theme string arrays.
appThemeEntriesStringArray = resources.getStringArray(R.array.app_theme_entries)
appThemeEntryValuesStringArray = resources.getStringArray(R.array.app_theme_entry_values)
// Set the current theme as the summary text for the preference.
appThemePreference.summary = appThemeEntriesStringArray[appThemeEntryNumber]
- // Enable the WebView theme preference if the API < 33 or the app theme is not set to light. Google no longer allows light themes to display dark WebViews.
- webViewThemePreference.isEnabled = ((Build.VERSION.SDK_INT < 33) || (appThemeEntryNumber != 1))
+ // Enable the WebView theme preference if the app theme is not set to light. Google does not allow light themes to display dark WebViews.
+ webViewThemePreference.isEnabled = (appThemeEntryNumber != 1)
// Get the WebView theme string arrays.
webViewThemeEntriesStringArray = resources.getStringArray(R.array.webview_theme_entries)
domStoragePreference.setIcon(R.drawable.dom_storage_ghosted)
}
- // Set the save form data icon if API < 26. Save form data has no effect on API >= 26.
- if (Build.VERSION.SDK_INT < 26) {
- if (sharedPreferences.getBoolean(getString(R.string.save_form_data_key), false))
- formDataPreference.setIcon(R.drawable.form_data_enabled)
- else
- formDataPreference.setIcon(R.drawable.form_data_disabled)
- }
-
// Set the custom user agent icon.
if (customUserAgentPreference.isEnabled)
customUserAgentPreference.setIcon(R.drawable.custom_user_agent_enabled)
else
customUserAgentPreference.setIcon(R.drawable.custom_user_agent_ghosted)
- // Set the X-Requested With header icon.
- if (sharedPreferences.getBoolean(getString(R.string.x_requested_with_header_key), true))
- xRequestedWithHeaderPreference.setIcon(R.drawable.x_requested_with_header_enabled)
- else
- xRequestedWithHeaderPreference.setIcon(R.drawable.x_requested_with_header_disabled)
-
// Set the incognito mode icon.
if (sharedPreferences.getBoolean(getString(R.string.incognito_mode_key), false))
incognitoModePreference.setIcon(R.drawable.incognito_mode_enabled)
hideAppBarPreference.setIcon(R.drawable.app_bar_ghosted)
}
+ // Set the display under cutouts icon.
+ if (sharedPreferences.getBoolean(getString(R.string.display_under_cutouts_key), false))
+ displayUnderCutoutsPreference.setIcon(R.drawable.display_under_cutouts_enabled)
+ else
+ displayUnderCutoutsPreference.setIcon(R.drawable.display_under_cutouts_disabled)
+
// Set the clear everything icon.
if (clearEverything) {
clearEverythingPreference.setIcon(R.drawable.clear_everything_enabled)
else
clearDomStoragePreference.setIcon(R.drawable.clear_dom_storage_disabled)
- // Set the clear form data icon if the API < 26. It has no effect on newer versions of Android.
- if (Build.VERSION.SDK_INT < 26) {
- if (clearEverything || sharedPreferences.getBoolean(getString(R.string.clear_form_data_key), true))
- clearFormDataPreference.setIcon(R.drawable.clear_form_data_enabled)
- else
- clearFormDataPreference.setIcon(R.drawable.clear_form_data_disabled)
- }
-
// Set the clear logcat icon.
if (clearEverything || sharedPreferences.getBoolean(getString(R.string.clear_logcat_key), true))
clearLogcatPreference.setIcon(R.drawable.clear_logcat_enabled)
else
swipeToRefreshPreference.setIcon(R.drawable.refresh_disabled)
- // Set the download with external app icon.
- if (sharedPreferences.getBoolean(getString(R.string.download_with_external_app_key), false))
- downloadWithExternalAppPreference.setIcon(R.drawable.download_with_external_app_enabled)
- else
- downloadWithExternalAppPreference.setIcon(R.drawable.download_with_external_app_disabled)
-
// Set the scroll app bar icon.
- if (sharedPreferences.getBoolean(getString(R.string.scroll_app_bar_key), true))
+ if (sharedPreferences.getBoolean(getString(R.string.scroll_app_bar_key), false))
scrollAppBarPreference.setIcon(R.drawable.app_bar_enabled)
else
scrollAppBarPreference.setIcon(R.drawable.app_bar_disabled)
// Re-register the shared preference listener.
sharedPreferences.registerOnSharedPreferenceChangeListener(sharedPreferenceChangeListener)
+
+ // Restore the scroll position if the fragment has been restarted.
+ if (fragmentRestarted) {
+ // Reset the fragment restarted flag.
+ fragmentRestarted = false
+
+ // Set the scroll position.
+ listView.post { listView.smoothScrollBy(0, scrollY) }
+ }
+ }
+
+ override fun onSaveInstanceState(savedInstanceState: Bundle) {
+ // Run the default commands.
+ super.onSaveInstanceState(savedInstanceState)
+
+ // Save the scroll position.
+ savedInstanceState.putInt(SCROLL_Y, listView.computeVerticalScrollOffset())
}
private fun getSharedPreferenceChangeListener(): OnSharedPreferenceChangeListener {
domStoragePreference.setIcon(R.drawable.dom_storage_disabled)
}
- getString(R.string.save_form_data_key) -> { // Saved form data can be removed once the minimum API >= 26.
- // Update the icon.
- if (sharedPreferences.getBoolean(getString(R.string.save_form_data_key), false))
- formDataPreference.setIcon(R.drawable.form_data_enabled)
- else
- formDataPreference.setIcon(R.drawable.form_data_disabled)
- }
-
getString(R.string.user_agent_key) -> {
// Get the new user agent name.
val newUserAgentName = sharedPreferences.getString(getString(R.string.user_agent_key), getString(R.string.user_agent_default_value))
// Populate the user agent summary.
when (newUserAgentArrayPosition) {
- MainWebViewActivity.SETTINGS_WEBVIEW_DEFAULT_USER_AGENT -> {
+ SETTINGS_WEBVIEW_DEFAULT_USER_AGENT -> {
// Get the user agent text from the webview (which changes based on the version of Android and WebView installed).
userAgentPreference.summary = "$translatedNewUserAgentName:\n$defaultUserAgent"
customUserAgentPreference.setIcon(R.drawable.custom_user_agent_ghosted)
}
- MainWebViewActivity.SETTINGS_CUSTOM_USER_AGENT -> {
+ SETTINGS_CUSTOM_USER_AGENT -> {
// Set the summary text.
userAgentPreference.setSummary(R.string.custom_user_agent)
customUserAgentPreference.summary = sharedPreferences.getString(getString(R.string.custom_user_agent_key), getString(R.string.custom_user_agent_default_value))
}
- getString(R.string.x_requested_with_header_key) -> {
- // Update the icon.
- if (sharedPreferences.getBoolean(getString(R.string.x_requested_with_header_key), true))
- xRequestedWithHeaderPreference.setIcon(R.drawable.x_requested_with_header_enabled)
- else
- xRequestedWithHeaderPreference.setIcon(R.drawable.x_requested_with_header_disabled)
-
- // Restart Privacy Browser.
- restartPrivacyBrowser()
- }
-
getString(R.string.incognito_mode_key) -> {
// Update the icon.
if (sharedPreferences.getBoolean(getString(R.string.incognito_mode_key), false))
hideAppBarPreference.setIcon(R.drawable.app_bar_disabled)
}
+ getString(R.string.display_under_cutouts_key) -> {
+ // Update the icon.
+ if (sharedPreferences.getBoolean(getString(R.string.display_under_cutouts_key), true))
+ displayUnderCutoutsPreference.setIcon(R.drawable.display_under_cutouts_enabled)
+ else
+ displayUnderCutoutsPreference.setIcon(R.drawable.display_under_cutouts_disabled)
+
+ // Restart Privacy Browser.
+ restartPrivacyBrowser()
+ }
+
getString(R.string.clear_everything_key) -> {
// Store the new clear everything status
val newClearEverythingBoolean = sharedPreferences.getBoolean(getString(R.string.clear_everything_key), true)
// Update the status of the clear and exit preferences.
clearCookiesPreference.isEnabled = !newClearEverythingBoolean
clearDomStoragePreference.isEnabled = !newClearEverythingBoolean
- clearFormDataPreference.isEnabled = !newClearEverythingBoolean // Clear form data can be removed once the minimum API >= 26.
clearLogcatPreference.isEnabled = !newClearEverythingBoolean
clearCachePreference.isEnabled = !newClearEverythingBoolean
else
clearDomStoragePreference.setIcon(R.drawable.clear_dom_storage_disabled)
- // Update the clear form data preference icon if the API < 26.
- if (Build.VERSION.SDK_INT < 26) {
- if (newClearEverythingBoolean || sharedPreferences.getBoolean(getString(R.string.clear_form_data_key), true))
- clearFormDataPreference.setIcon(R.drawable.clear_form_data_enabled)
- else
- clearFormDataPreference.setIcon(R.drawable.clear_form_data_disabled)
- }
-
// Update the clear logcat preference icon.
if (newClearEverythingBoolean || sharedPreferences.getBoolean(getString(R.string.clear_logcat_key), true))
clearLogcatPreference.setIcon(R.drawable.clear_logcat_enabled)
clearDomStoragePreference.setIcon(R.drawable.clear_dom_storage_disabled)
}
- getString(R.string.clear_form_data_key) -> {
- // Update the icon.
- if (sharedPreferences.getBoolean(getString(R.string.clear_form_data_key), true))
- clearFormDataPreference.setIcon(R.drawable.clear_form_data_enabled)
- else
- clearFormDataPreference.setIcon(R.drawable.clear_form_data_disabled)
- }
-
getString(R.string.clear_logcat_key) -> {
// Update the icon.
if (sharedPreferences.getBoolean(getString(R.string.clear_logcat_key), true))
swipeToRefreshPreference.setIcon(R.drawable.refresh_disabled)
}
- getString(R.string.download_with_external_app_key) -> {
- // Update the icon.
- if (sharedPreferences.getBoolean(getString(R.string.download_with_external_app_key), false))
- downloadWithExternalAppPreference.setIcon(R.drawable.download_with_external_app_enabled)
- else
- downloadWithExternalAppPreference.setIcon(R.drawable.download_with_external_app_disabled)
+ getString(R.string.download_provider_key) -> {
+ // Set the summary text for the download provider preference.
+ downloadProviderPreference.summary = when (sharedPreferences.getString(getString(R.string.download_provider_key), getString(R.string.download_provider_default_value))) {
+ downloadProviderEntryValuesStringArray[0] -> getString(R.string.download_with_privacy_browser) // Privacy Browser is selected.
+ downloadProviderEntryValuesStringArray[1] -> getString(R.string.download_with_android_download_manager) // Android download manager is selected.
+ else -> getString(R.string.download_with_external_app) // External app is selected.
+ }
}
getString(R.string.scroll_app_bar_key) -> {
// Update the icon.
- if (sharedPreferences.getBoolean(getString(R.string.scroll_app_bar_key), true))
+ if (sharedPreferences.getBoolean(getString(R.string.scroll_app_bar_key), false))
scrollAppBarPreference.setIcon(R.drawable.app_bar_enabled)
else
scrollAppBarPreference.setIcon(R.drawable.app_bar_disabled)
displayAdditionalAppBarIconsPreference.setIcon(R.drawable.more_enabled)
else
displayAdditionalAppBarIconsPreference.setIcon(R.drawable.more_disabled)
+
+ // Restart Privacy Browser.
+ restartPrivacyBrowser()
}
getString(R.string.app_theme_key) -> {
- // 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.
+ // Get the app theme entry number that matches the current app theme.
val appThemeEntryNumber: Int = when (sharedPreferences.getString(getString(R.string.app_theme_key), getString(R.string.app_theme_default_value))) {
appThemeEntryValuesStringArray[1] -> 1 // The light theme is selected.
appThemeEntryValuesStringArray[2] -> 2 // The dark theme is selected.
}
}
- // Enable the WebView theme preference if the API < 33 or the app theme is set to light.
- webViewThemePreference.isEnabled = ((Build.VERSION.SDK_INT < 33) || (appThemeEntryNumber != 1))
+ // Enable the WebView theme preference if the app theme is not set to light. Google does not allow light themes to display dark WebViews.
+ webViewThemePreference.isEnabled = (appThemeEntryNumber != 1)
// Get the webView theme entry number that matches the new WebView theme.
val webViewThemeEntryNumber: Int = when (sharedPreferences.getString(getString(R.string.webview_theme_key), getString(R.string.webview_theme_default_value))) {