/*
- * Copyright 2016-2023 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>.
+ * This file is part of Privacy Browser Android <https://www.stoutner.com/privacy-browser-android/>.
*
* Privacy Browser Android is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
import androidx.appcompat.app.AppCompatDelegate
import androidx.preference.Preference
-import androidx.preference.PreferenceCategory
import androidx.preference.PreferenceFragmentCompat
import com.stoutner.privacybrowser.R
private lateinit var clearCookiesPreference: Preference
private lateinit var clearDomStoragePreference: Preference
private lateinit var clearEverythingPreference: 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 cookiesPreference: Preference
private lateinit var customUserAgentPreference: Preference
private lateinit var displayAdditionalAppBarIconsPreference: Preference
private lateinit var displayWebpageImagesPreference: Preference
private lateinit var domStoragePreference: Preference
- private lateinit var downloadWithExternalAppPreference: 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 fontSizePreference: Preference
- private lateinit var formDataPreference: Preference // The form data preference can be removed once the minimum API >= 26.
private lateinit var fullScreenBrowsingModePreference: Preference
private lateinit var hideAppBarPreference: Preference
+ private lateinit var displayUnderCutoutsPreference: Preference
private lateinit var homepagePreference: Preference
private lateinit var incognitoModePreference: Preference
private lateinit var javaScriptPreference: Preference
private lateinit var searchCustomURLPreference: Preference
private lateinit var searchPreference: Preference
private lateinit var sharedPreferenceChangeListener: OnSharedPreferenceChangeListener
+ private lateinit var sortBookmarksAlphabeticallyPreference: Preference
private lateinit var swipeToRefreshPreference: Preference
private lateinit var trackingQueriesPreference: Preference
private lateinit var translatedUserAgentNamesArray: Array<String>
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))!!
incognitoModePreference = findPreference(getString(R.string.incognito_mode_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))!!
+ sortBookmarksAlphabeticallyPreference = findPreference(getString(R.string.sort_bookmarks_alphabetically_key))!!
appThemePreference = findPreference(getString(R.string.app_theme_key))!!
webViewThemePreference = findPreference(getString(R.string.webview_theme_key))!!
wideViewportPreference = findPreference(getString(R.string.wide_viewport_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
// 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)
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)
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)
else
displayAdditionalAppBarIconsPreference.setIcon(R.drawable.more_disabled)
+ // Set the sort bookmarks alphabetically icon.
+ if (sharedPreferences.getBoolean(getString(R.string.sort_bookmarks_alphabetically_key), false))
+ sortBookmarksAlphabeticallyPreference.setIcon(R.drawable.sort_by_alpha_enabled)
+ else
+ sortBookmarksAlphabeticallyPreference.setIcon(R.drawable.sort_by_alpha_disabled)
+
// Set the WebView theme icon.
if (webViewThemePreference.isEnabled) { // The WebView theme preference is enabled.
when (webViewThemeEntryNumber) {
fragmentRestarted = false
// Set the scroll position.
- listView.smoothScrollBy(0, scrollY)
+ listView.post { listView.smoothScrollBy(0, scrollY) }
}
}
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))
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)
restartPrivacyBrowser()
}
+ getString(R.string.sort_bookmarks_alphabetically_key) -> {
+ // Update the icon.
+ if (sharedPreferences.getBoolean(getString(R.string.sort_bookmarks_alphabetically_key), false))
+ sortBookmarksAlphabeticallyPreference.setIcon(R.drawable.sort_by_alpha_enabled)
+ else
+ sortBookmarksAlphabeticallyPreference.setIcon(R.drawable.sort_by_alpha_disabled)
+ }
+
getString(R.string.app_theme_key) -> {
// 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))) {