/*
- * Copyright 2017-2022 Soren Stoutner <soren@stoutner.com>.
+ * Copyright 2017-2023 Soren Stoutner <soren@stoutner.com>.
*
* This file is part of Privacy Browser Android <https://www.stoutner.com/privacy-browser-android>.
*
import androidx.preference.PreferenceManager
import com.stoutner.privacybrowser.R
+import com.stoutner.privacybrowser.activities.DOMAINS_CUSTOM_USER_AGENT
+import com.stoutner.privacybrowser.activities.DOMAINS_SYSTEM_DEFAULT_USER_AGENT
+import com.stoutner.privacybrowser.activities.DOMAINS_WEBVIEW_DEFAULT_USER_AGENT
+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.activities.DomainsActivity
-import com.stoutner.privacybrowser.activities.MainWebViewActivity
import com.stoutner.privacybrowser.helpers.DomainsDatabaseHelper
import java.lang.IndexOutOfBoundsException
// Store the default settings.
val defaultUserAgentName = sharedPreferences.getString(getString(R.string.user_agent_key), getString(R.string.user_agent_default_value))
val defaultCustomUserAgentString = sharedPreferences.getString(getString(R.string.custom_user_agent_key), getString(R.string.custom_user_agent_default_value))
- val defaultXRequestedWithHeader = sharedPreferences.getBoolean(getString(R.string.x_requested_with_header_key), true)
val defaultFontSizeString = sharedPreferences.getString(getString(R.string.font_size_key), getString(R.string.font_size_default_value))
val defaultSwipeToRefresh = sharedPreferences.getBoolean(getString(R.string.swipe_to_refresh_key), true)
val defaultWebViewTheme = sharedPreferences.getString(getString(R.string.webview_theme_key), getString(R.string.webview_theme_default_value))
val userAgentSpinner = domainSettingsView.findViewById<Spinner>(R.id.user_agent_spinner)
val userAgentTextView = domainSettingsView.findViewById<TextView>(R.id.user_agent_textview)
val customUserAgentEditText = domainSettingsView.findViewById<EditText>(R.id.custom_user_agent_edittext)
- val xRequestedWithHeaderImageView = domainSettingsView.findViewById<ImageView>(R.id.x_requested_with_header_imageview)
- val xRequestedWithHeaderSpinner = domainSettingsView.findViewById<Spinner>(R.id.x_requested_with_header_spinner)
- val xRequestedWithHeaderTextView = domainSettingsView.findViewById<TextView>(R.id.x_requested_with_header_textview)
- val xRequestedWithHeaderExplanationTextView = domainSettingsView.findViewById<TextView>(R.id.x_requested_with_header_explanation_textview)
val fontSizeSpinner = domainSettingsView.findViewById<Spinner>(R.id.font_size_spinner)
val defaultFontSizeTextView = domainSettingsView.findViewById<TextView>(R.id.default_font_size_textview)
val customFontSizeEditText = domainSettingsView.findViewById<EditText>(R.id.custom_font_size_edittext)
val swipeToRefreshImageView = domainSettingsView.findViewById<ImageView>(R.id.swipe_to_refresh_imageview)
val swipeToRefreshSpinner = domainSettingsView.findViewById<Spinner>(R.id.swipe_to_refresh_spinner)
val swipeToRefreshTextView = domainSettingsView.findViewById<TextView>(R.id.swipe_to_refresh_textview)
+ val webViewThemeLinearLayout = domainSettingsView.findViewById<LinearLayout>(R.id.webview_theme_linearlayout)
val webViewThemeImageView = domainSettingsView.findViewById<ImageView>(R.id.webview_theme_imageview)
val webViewThemeSpinner = domainSettingsView.findViewById<Spinner>(R.id.webview_theme_spinner)
val webViewThemeTextView = domainSettingsView.findViewById<TextView>(R.id.webview_theme_textview)
val currentIpAddressesRadioButton = domainSettingsView.findViewById<RadioButton>(R.id.current_ip_addresses_radiobutton)
val currentIpAddressesTextView = domainSettingsView.findViewById<TextView>(R.id.current_ip_addresses_textview)
+ // Hide the WebView theme linear layout if the API < 29.
+ if (Build.VERSION.SDK_INT < 29)
+ webViewThemeLinearLayout.visibility = View.GONE
+
// Setup the pinned labels.
- val cNameLabel = getString(R.string.common_name) + " "
- val oNameLabel = getString(R.string.organization) + " "
- val uNameLabel = getString(R.string.organizational_unit) + " "
- val startDateLabel = getString(R.string.start_date) + " "
- val endDateLabel = getString(R.string.end_date) + " "
+ val cNameLabel = getString(R.string.common_name)
+ val oNameLabel = getString(R.string.organization)
+ val uNameLabel = getString(R.string.organizational_unit)
+ val startDateLabel = getString(R.string.start_date)
+ val endDateLabel = getString(R.string.end_date)
// Initialize the database handler.
val domainsDatabaseHelper = DomainsDatabaseHelper(requireContext())
val ultraPrivacyInt = domainCursor.getInt(domainCursor.getColumnIndexOrThrow(DomainsDatabaseHelper.ENABLE_ULTRAPRIVACY))
val blockAllThirdPartyRequestsInt = domainCursor.getInt(domainCursor.getColumnIndexOrThrow(DomainsDatabaseHelper.BLOCK_ALL_THIRD_PARTY_REQUESTS))
val currentUserAgentName = domainCursor.getString(domainCursor.getColumnIndexOrThrow(DomainsDatabaseHelper.USER_AGENT))
- val xRequestedWithHeaderInt = domainCursor.getInt(domainCursor.getColumnIndexOrThrow(DomainsDatabaseHelper.X_REQUESTED_WITH_HEADER))
val fontSizeInt = domainCursor.getInt(domainCursor.getColumnIndexOrThrow(DomainsDatabaseHelper.FONT_SIZE))
val swipeToRefreshInt = domainCursor.getInt(domainCursor.getColumnIndexOrThrow(DomainsDatabaseHelper.SWIPE_TO_REFRESH))
val webViewThemeInt = domainCursor.getInt(domainCursor.getColumnIndexOrThrow(DomainsDatabaseHelper.WEBVIEW_THEME))
// Create array adapters for the spinners.
val translatedUserAgentArrayAdapter = ArrayAdapter.createFromResource(requireContext(), R.array.translated_domain_settings_user_agent_names, R.layout.spinner_item)
- val xRequestedWithHeaderArrayAdapter = ArrayAdapter.createFromResource(requireContext(), R.array.x_requested_with_header_array, R.layout.spinner_item)
val fontSizeArrayAdapter = ArrayAdapter.createFromResource(requireContext(), R.array.font_size_array, R.layout.spinner_item)
val swipeToRefreshArrayAdapter = ArrayAdapter.createFromResource(requireContext(), R.array.swipe_to_refresh_array, R.layout.spinner_item)
val webViewThemeArrayAdapter = ArrayAdapter.createFromResource(requireContext(), R.array.webview_theme_array, R.layout.spinner_item)
// Set the drop down view resource on the spinners.
translatedUserAgentArrayAdapter.setDropDownViewResource(R.layout.domain_settings_spinner_dropdown_items)
- xRequestedWithHeaderArrayAdapter.setDropDownViewResource(R.layout.domain_settings_spinner_dropdown_items)
fontSizeArrayAdapter.setDropDownViewResource(R.layout.domain_settings_spinner_dropdown_items)
swipeToRefreshArrayAdapter.setDropDownViewResource(R.layout.domain_settings_spinner_dropdown_items)
webViewThemeArrayAdapter.setDropDownViewResource(R.layout.domain_settings_spinner_dropdown_items)
// Set the array adapters for the spinners.
userAgentSpinner.adapter = translatedUserAgentArrayAdapter
- xRequestedWithHeaderSpinner.adapter = xRequestedWithHeaderArrayAdapter
fontSizeSpinner.adapter = fontSizeArrayAdapter
swipeToRefreshSpinner.adapter = swipeToRefreshArrayAdapter
webViewThemeSpinner.adapter = webViewThemeArrayAdapter
// Set the user agent according to the system default.
when (defaultUserAgentArrayPosition) {
// This is probably because it was set in an older version of Privacy Browser before the switch to persistent user agent names.
- MainWebViewActivity.UNRECOGNIZED_USER_AGENT -> userAgentTextView.text = defaultUserAgentName
+ UNRECOGNIZED_USER_AGENT -> userAgentTextView.text = defaultUserAgentName
// Display the WebView default user agent.
- MainWebViewActivity.SETTINGS_WEBVIEW_DEFAULT_USER_AGENT -> userAgentTextView.text = webViewDefaultUserAgentString
+ SETTINGS_WEBVIEW_DEFAULT_USER_AGENT -> userAgentTextView.text = webViewDefaultUserAgentString
// Display the custom user agent.
- MainWebViewActivity.SETTINGS_CUSTOM_USER_AGENT -> userAgentTextView.text = defaultCustomUserAgentString
+ SETTINGS_CUSTOM_USER_AGENT -> userAgentTextView.text = defaultCustomUserAgentString
// Get the user agent string from the user agent data array.
else -> userAgentTextView.text = userAgentDataArray[defaultUserAgentArrayPosition]
}
- } else if (userAgentArrayPosition == MainWebViewActivity.UNRECOGNIZED_USER_AGENT || currentUserAgentName == getString(R.string.custom_user_agent)) {
+ } else if (userAgentArrayPosition == UNRECOGNIZED_USER_AGENT || currentUserAgentName == getString(R.string.custom_user_agent)) {
// A custom user agent is stored in the current user agent name. The second check is necessary in case the user did not change the default custom text.
// Set the user agent spinner to `Custom user agent`.
- userAgentSpinner.setSelection(MainWebViewActivity.DOMAINS_CUSTOM_USER_AGENT)
+ userAgentSpinner.setSelection(DOMAINS_CUSTOM_USER_AGENT)
// Hide the user agent text view.
userAgentTextView.visibility = View.GONE
customUserAgentEditText.visibility = View.GONE
// Set the user agent text.
- if (userAgentArrayPosition == MainWebViewActivity.DOMAINS_WEBVIEW_DEFAULT_USER_AGENT) { // The WebView default user agent is selected.
+ if (userAgentArrayPosition == DOMAINS_WEBVIEW_DEFAULT_USER_AGENT) { // The WebView default user agent is selected.
// Display the WebView default user agent.
userAgentTextView.text = webViewDefaultUserAgentString
} else { // A user agent besides the default is selected.
// Open the user agent spinner when the text view is clicked.
userAgentTextView.setOnClickListener { userAgentSpinner.performClick() }
- // Select the X-Requested-With header selection in the spinner.
- xRequestedWithHeaderSpinner.setSelection(xRequestedWithHeaderInt)
-
- // Set the X-Requested-With header text.
- if (defaultXRequestedWithHeader)
- xRequestedWithHeaderTextView.text = xRequestedWithHeaderArrayAdapter.getItem(DomainsDatabaseHelper.ENABLED)
- else
- xRequestedWithHeaderTextView.text = xRequestedWithHeaderArrayAdapter.getItem(DomainsDatabaseHelper.DISABLED)
-
- // Set the X-Requested-With header icon and text view settings.
- when (xRequestedWithHeaderInt) {
- DomainsDatabaseHelper.SYSTEM_DEFAULT -> {
- // Set the icon color.
- xRequestedWithHeaderImageView.isSelected = defaultXRequestedWithHeader
-
- // Show the X-Requested-With header text view.
- xRequestedWithHeaderTextView.visibility = View.VISIBLE
- }
-
- DomainsDatabaseHelper.ENABLED -> {
- // Set the icon color.
- xRequestedWithHeaderImageView.isSelected = true
-
- // Hide the X-Requested-With header text view.
- xRequestedWithHeaderTextView.visibility = View.GONE
- }
-
- DomainsDatabaseHelper.DISABLED -> {
- // Set the icon color.
- xRequestedWithHeaderImageView.isSelected = false
-
- // Hide the X-Requested-With header text view.
- xRequestedWithHeaderTextView.visibility = View.GONE
- }
- }
-
- // Open the X-Requested-With header spinner when the text view is clicked.
- xRequestedWithHeaderTextView.setOnClickListener { xRequestedWithHeaderSpinner.performClick() }
-
- // Open the X-Requested-With header spinner when the explanation text view is clicked.
- xRequestedWithHeaderExplanationTextView.setOnClickListener { xRequestedWithHeaderSpinner.performClick() }
-
// Display the font size settings.
if (fontSizeInt == 0) { // `0` is the code for system default font size.
// Set the font size to the system default.
override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
// Set the new user agent.
when (position) {
- MainWebViewActivity.DOMAINS_SYSTEM_DEFAULT_USER_AGENT -> {
+ DOMAINS_SYSTEM_DEFAULT_USER_AGENT -> {
// Show the user agent text view.
userAgentTextView.visibility = View.VISIBLE
// Set the user text.
when (defaultUserAgentArrayPosition) {
// This is probably because it was set in an older version of Privacy Browser before the switch to persistent user agent names.
- MainWebViewActivity.UNRECOGNIZED_USER_AGENT -> userAgentTextView.text = defaultUserAgentName
+ UNRECOGNIZED_USER_AGENT -> userAgentTextView.text = defaultUserAgentName
// Display the `WebView` default user agent.
- MainWebViewActivity.SETTINGS_WEBVIEW_DEFAULT_USER_AGENT -> userAgentTextView.text = webViewDefaultUserAgentString
+ SETTINGS_WEBVIEW_DEFAULT_USER_AGENT -> userAgentTextView.text = webViewDefaultUserAgentString
// Display the custom user agent.
- MainWebViewActivity.SETTINGS_CUSTOM_USER_AGENT -> userAgentTextView.text = defaultCustomUserAgentString
+ SETTINGS_CUSTOM_USER_AGENT -> userAgentTextView.text = defaultCustomUserAgentString
// Get the user agent string from the user agent data array.
else -> userAgentTextView.text = userAgentDataArray[defaultUserAgentArrayPosition]
}
}
- MainWebViewActivity.DOMAINS_WEBVIEW_DEFAULT_USER_AGENT -> {
+ DOMAINS_WEBVIEW_DEFAULT_USER_AGENT -> {
// Show the user agent text view.
userAgentTextView.visibility = View.VISIBLE
customUserAgentEditText.visibility = View.GONE
}
- MainWebViewActivity.DOMAINS_CUSTOM_USER_AGENT -> {
+ DOMAINS_CUSTOM_USER_AGENT -> {
// Hide the user agent TextView.
userAgentTextView.visibility = View.GONE
}
}
- // Set the X-Requested-With header spinner listener.
- xRequestedWithHeaderSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
- override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
- // Update the icon and the visibility of the text view.
- when (position) {
- DomainsDatabaseHelper.SYSTEM_DEFAULT -> {
- // Set the icon color.
- xRequestedWithHeaderImageView.isSelected = defaultXRequestedWithHeader
-
- // Show the X-Requested-With header text view.
- xRequestedWithHeaderTextView.visibility = View.VISIBLE
- }
-
- DomainsDatabaseHelper.ENABLED -> {
- // Set the icon color.
- xRequestedWithHeaderImageView.isSelected = true
-
- // Hide the X-Requested-With header text view.
- xRequestedWithHeaderTextView.visibility = View.GONE
- }
-
- DomainsDatabaseHelper.DISABLED -> {
- // Set the icon color.
- xRequestedWithHeaderImageView.isSelected = false
-
- // Hide the X-Requested-With header text view.
- xRequestedWithHeaderTextView.visibility = View.GONE
- }
- }
- }
-
- override fun onNothingSelected(parent: AdapterView<*>?) {
- // Do nothing.
- }
- }
-
// Set the font size spinner listener.
fontSizeSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {