]> gitweb.stoutner.com Git - PrivacyBrowserAndroid.git/blobdiff - app/src/main/java/com/stoutner/privacybrowser/fragments/DomainSettingsFragment.kt
Bump the minimum API to 26. https://redmine.stoutner.com/issues/1163
[PrivacyBrowserAndroid.git] / app / src / main / java / com / stoutner / privacybrowser / fragments / DomainSettingsFragment.kt
index ee7bc883c93235af9d54f8709d753fd05fd6cd7b..00c3447e7681d996c1046caad5731e9f7e953c14 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright 2017-2023 Soren Stoutner <soren@stoutner.com>.
+ * Copyright 2017-2024 Soren Stoutner <soren@stoutner.com>.
  *
  * This file is part of Privacy Browser Android <https://www.stoutner.com/privacy-browser-android>.
  *
@@ -22,7 +22,6 @@ package com.stoutner.privacybrowser.fragments
 import android.annotation.SuppressLint
 import android.content.Context
 import android.content.res.Configuration
-import android.os.Build
 import android.os.Bundle
 import android.text.Editable
 import android.text.SpannableStringBuilder
@@ -73,7 +72,6 @@ import com.stoutner.privacybrowser.helpers.ENABLE_EASYLIST
 import com.stoutner.privacybrowser.helpers.ENABLE_EASYPRIVACY
 import com.stoutner.privacybrowser.helpers.ENABLE_FANBOYS_ANNOYANCE_LIST
 import com.stoutner.privacybrowser.helpers.ENABLE_FANBOYS_SOCIAL_BLOCKING_LIST
-import com.stoutner.privacybrowser.helpers.ENABLE_FORM_DATA
 import com.stoutner.privacybrowser.helpers.ENABLE_JAVASCRIPT
 import com.stoutner.privacybrowser.helpers.ENABLE_ULTRAPRIVACY
 import com.stoutner.privacybrowser.helpers.FONT_SIZE
@@ -142,16 +140,15 @@ class DomainSettingsFragment : Fragment() {
         val javaScriptDefault = sharedPreferences.getBoolean(getString(R.string.javascript_key), false)
         val cookiesDefault = sharedPreferences.getBoolean(getString(R.string.cookies_key), false)
         val domStorageDefault = sharedPreferences.getBoolean(getString(R.string.dom_storage_key), false)
-        val formDataDefault = sharedPreferences.getBoolean(getString(R.string.save_form_data_key), false)  // The form data views can be remove once the minimum API >= 26.
+        val userAgentDefault = sharedPreferences.getString(getString(R.string.user_agent_key), getString(R.string.user_agent_default_value))
+        val customUserAgentStringDefault = sharedPreferences.getString(getString(R.string.custom_user_agent_key), getString(R.string.custom_user_agent_default_value))
         val easyListDefault = sharedPreferences.getBoolean(getString(R.string.easylist_key), true)
         val easyPrivacyDefault = sharedPreferences.getBoolean(getString(R.string.easyprivacy_key), true)
         val fanboysAnnoyanceListDefault = sharedPreferences.getBoolean(getString(R.string.fanboys_annoyance_list_key), true)
-        val fanboysSocialBlockingListDefault = sharedPreferences.getBoolean(getString(R.string.fanboys_social_blocking_list), true)
+        val fanboysSocialBlockingListDefault = sharedPreferences.getBoolean(getString(R.string.fanboys_social_blocking_list_key), true)
         val ultraListDefault = sharedPreferences.getBoolean(getString(R.string.ultralist_key), true)
         val ultraPrivacyDefault = sharedPreferences.getBoolean(getString(R.string.ultraprivacy_key), true)
         val blockAllThirdPartyRequestsDefault = sharedPreferences.getBoolean(getString(R.string.block_all_third_party_requests_key), false)
-        val userAgentDefault = sharedPreferences.getString(getString(R.string.user_agent_key), getString(R.string.user_agent_default_value))
-        val customUserAgentStringDefault = sharedPreferences.getString(getString(R.string.custom_user_agent_key), getString(R.string.custom_user_agent_default_value))
         val fontSizeStringDefault = sharedPreferences.getString(getString(R.string.font_size_key), getString(R.string.font_size_default_value))
         val swipeToRefreshDefault = sharedPreferences.getBoolean(getString(R.string.swipe_to_refresh_key), true)
         val webViewThemeDefault = sharedPreferences.getString(getString(R.string.webview_theme_key), getString(R.string.webview_theme_default_value))
@@ -173,10 +170,10 @@ class DomainSettingsFragment : Fragment() {
         val domStorageImageView = domainSettingsView.findViewById<ImageView>(R.id.dom_storage_imageview)
         val domStorageSpinner = domainSettingsView.findViewById<Spinner>(R.id.dom_storage_spinner)
         val domStorageTextView = domainSettingsView.findViewById<TextView>(R.id.dom_storage_textview)
-        val formDataLinearLayout = domainSettingsView.findViewById<LinearLayout>(R.id.form_data_linearlayout)  // The form data views can be remove once the minimum API >= 26.
-        val formDataImageView = domainSettingsView.findViewById<ImageView>(R.id.form_data_imageview)  // The form data views can be remove once the minimum API >= 26.
-        val formDataSpinner = domainSettingsView.findViewById<Spinner>(R.id.form_data_spinner)  // The form data views can be remove once the minimum API >= 26.
-        val formDataTextView = domainSettingsView.findViewById<TextView>(R.id.form_data_textview)  // The form data views can be remove once the minimum API >= 26.
+        val userAgentLinearLayout = domainSettingsView.findViewById<LinearLayout>(R.id.user_agent_linearlayout)
+        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 easyListLinearLayout = domainSettingsView.findViewById<LinearLayout>(R.id.easylist_linearlayout)
         val easyListImageView = domainSettingsView.findViewById<ImageView>(R.id.easylist_imageview)
         val easyListSpinner = domainSettingsView.findViewById<Spinner>(R.id.easylist_spinner)
@@ -205,10 +202,6 @@ class DomainSettingsFragment : Fragment() {
         val blockAllThirdPartyRequestsImageView = domainSettingsView.findViewById<ImageView>(R.id.block_all_third_party_requests_imageview)
         val blockAllThirdPartyRequestsSpinner = domainSettingsView.findViewById<Spinner>(R.id.block_all_third_party_requests_spinner)
         val blockAllThirdPartyRequestsTextView = domainSettingsView.findViewById<TextView>(R.id.block_all_third_party_requests_textview)
-        val userAgentLinearLayout = domainSettingsView.findViewById<LinearLayout>(R.id.user_agent_linearlayout)
-        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 fontSizeLinearLayout = domainSettingsView.findViewById<LinearLayout>(R.id.font_size_linearlayout)
         val fontSizeSpinner = domainSettingsView.findViewById<Spinner>(R.id.font_size_spinner)
         val defaultFontSizeTextView = domainSettingsView.findViewById<TextView>(R.id.default_font_size_textview)
@@ -265,14 +258,6 @@ class DomainSettingsFragment : Fragment() {
         val currentIpAddressesRadioButton = domainSettingsView.findViewById<RadioButton>(R.id.current_ip_addresses_radiobutton)
         val currentIpAddressesTextView = domainSettingsView.findViewById<TextView>(R.id.current_ip_addresses_textview)
 
-        // Hide the form data linear layout if the API >= 26.
-        if (Build.VERSION.SDK_INT >= 26)
-            formDataLinearLayout.visibility = View.GONE
-
-        // Hide the WebView theme linear layout if the API < 29.
-        if (Build.VERSION.SDK_INT < 29)
-            webViewThemeLinearLayout.visibility = View.GONE
-
         // Initialize the database handler.
         val domainsDatabaseHelper = DomainsDatabaseHelper(requireContext())
 
@@ -287,7 +272,7 @@ class DomainSettingsFragment : Fragment() {
         val javaScriptInt = domainCursor.getInt(domainCursor.getColumnIndexOrThrow(ENABLE_JAVASCRIPT))
         val cookiesInt = domainCursor.getInt(domainCursor.getColumnIndexOrThrow(COOKIES))
         val domStorageInt = domainCursor.getInt(domainCursor.getColumnIndexOrThrow(ENABLE_DOM_STORAGE))
-        val formDataInt = domainCursor.getInt(domainCursor.getColumnIndexOrThrow(ENABLE_FORM_DATA))  // Form data can be remove once the minimum API >= 26.
+        val currentUserAgentName = domainCursor.getString(domainCursor.getColumnIndexOrThrow(USER_AGENT))
         val easyListInt = domainCursor.getInt(domainCursor.getColumnIndexOrThrow(ENABLE_EASYLIST))
         val easyPrivacyInt = domainCursor.getInt(domainCursor.getColumnIndexOrThrow(ENABLE_EASYPRIVACY))
         val fanboysAnnoyanceListInt = domainCursor.getInt(domainCursor.getColumnIndexOrThrow(ENABLE_FANBOYS_ANNOYANCE_LIST))
@@ -295,7 +280,6 @@ class DomainSettingsFragment : Fragment() {
         val ultraListInt = domainCursor.getInt(domainCursor.getColumnIndexOrThrow(ULTRALIST))
         val ultraPrivacyInt = domainCursor.getInt(domainCursor.getColumnIndexOrThrow(ENABLE_ULTRAPRIVACY))
         val blockAllThirdPartyRequestsInt = domainCursor.getInt(domainCursor.getColumnIndexOrThrow(BLOCK_ALL_THIRD_PARTY_REQUESTS))
-        val currentUserAgentName = domainCursor.getString(domainCursor.getColumnIndexOrThrow(USER_AGENT))
         val fontSizeInt = domainCursor.getInt(domainCursor.getColumnIndexOrThrow(FONT_SIZE))
         val swipeToRefreshInt = domainCursor.getInt(domainCursor.getColumnIndexOrThrow(SWIPE_TO_REFRESH))
         val webViewThemeInt = domainCursor.getInt(domainCursor.getColumnIndexOrThrow(WEBVIEW_THEME))
@@ -320,7 +304,7 @@ class DomainSettingsFragment : Fragment() {
         val javaScriptArrayAdapter = ArrayAdapter.createFromResource(context, R.array.javascript_array, R.layout.spinner_item)
         val cookiesArrayAdapter = ArrayAdapter.createFromResource(context, R.array.cookies_array, R.layout.spinner_item)
         val domStorageArrayAdapter = ArrayAdapter.createFromResource(context, R.array.dom_storage_array, R.layout.spinner_item)
-        val formDataArrayAdapter = ArrayAdapter.createFromResource(context, R.array.form_data_array, R.layout.spinner_item)  // Form data can be remove once the minimum API >= 26.
+        val translatedUserAgentArrayAdapter = ArrayAdapter.createFromResource(context, R.array.translated_domain_settings_user_agent_names, R.layout.spinner_item)
         val easyListArrayAdapter = ArrayAdapter.createFromResource(context, R.array.easylist_array, R.layout.spinner_item)
         val easyPrivacyArrayAdapter = ArrayAdapter.createFromResource(context, R.array.easyprivacy_array, R.layout.spinner_item)
         val fanboysAnnoyanceListArrayAdapter = ArrayAdapter.createFromResource(context, R.array.fanboys_annoyance_list_array, R.layout.spinner_item)
@@ -328,7 +312,6 @@ class DomainSettingsFragment : Fragment() {
         val ultraListArrayAdapter = ArrayAdapter.createFromResource(context, R.array.ultralist_array, R.layout.spinner_item)
         val ultraPrivacyArrayAdapter = ArrayAdapter.createFromResource(context, R.array.ultraprivacy_array, R.layout.spinner_item)
         val blockAllThirdPartyRequestsArrayAdapter = ArrayAdapter.createFromResource(context, R.array.block_all_third_party_requests_array, R.layout.spinner_item)
-        val translatedUserAgentArrayAdapter = ArrayAdapter.createFromResource(context, R.array.translated_domain_settings_user_agent_names, R.layout.spinner_item)
         val fontSizeArrayAdapter = ArrayAdapter.createFromResource(context, R.array.font_size_array, R.layout.spinner_item)
         val swipeToRefreshArrayAdapter = ArrayAdapter.createFromResource(context, R.array.swipe_to_refresh_array, R.layout.spinner_item)
         val webViewThemeArrayAdapter = ArrayAdapter.createFromResource(context, R.array.webview_theme_array, R.layout.spinner_item)
@@ -339,7 +322,7 @@ class DomainSettingsFragment : Fragment() {
         javaScriptArrayAdapter.setDropDownViewResource(R.layout.domain_settings_spinner_dropdown_items)
         cookiesArrayAdapter.setDropDownViewResource(R.layout.domain_settings_spinner_dropdown_items)
         domStorageArrayAdapter.setDropDownViewResource(R.layout.domain_settings_spinner_dropdown_items)
-        formDataArrayAdapter.setDropDownViewResource(R.layout.domain_settings_spinner_dropdown_items)  // Form data can be remove once the minimum API >= 26.
+        translatedUserAgentArrayAdapter.setDropDownViewResource(R.layout.domain_settings_spinner_dropdown_items)
         easyListArrayAdapter.setDropDownViewResource(R.layout.domain_settings_spinner_dropdown_items)
         easyPrivacyArrayAdapter.setDropDownViewResource(R.layout.domain_settings_spinner_dropdown_items)
         fanboysAnnoyanceListArrayAdapter.setDropDownViewResource(R.layout.domain_settings_spinner_dropdown_items)
@@ -347,7 +330,6 @@ class DomainSettingsFragment : Fragment() {
         ultraListArrayAdapter.setDropDownViewResource(R.layout.domain_settings_spinner_dropdown_items)
         ultraPrivacyArrayAdapter.setDropDownViewResource(R.layout.domain_settings_spinner_dropdown_items)
         blockAllThirdPartyRequestsArrayAdapter.setDropDownViewResource(R.layout.domain_settings_spinner_dropdown_items)
-        translatedUserAgentArrayAdapter.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)
@@ -358,7 +340,7 @@ class DomainSettingsFragment : Fragment() {
         javaScriptSpinner.adapter = javaScriptArrayAdapter
         cookiesSpinner.adapter = cookiesArrayAdapter
         domStorageSpinner.adapter = domStorageArrayAdapter
-        formDataSpinner.adapter = formDataArrayAdapter  // Form data can be remove once the minimum API >= 26.
+        userAgentSpinner.adapter = translatedUserAgentArrayAdapter
         easyListSpinner.adapter = easyListArrayAdapter
         easyPrivacySpinner.adapter = easyPrivacyArrayAdapter
         fanboysAnnoyanceListSpinner.adapter = fanboysAnnoyanceListArrayAdapter
@@ -366,7 +348,6 @@ class DomainSettingsFragment : Fragment() {
         ultraListSpinner.adapter = ultraListArrayAdapter
         ultraPrivacySpinner.adapter = ultraPrivacyArrayAdapter
         blockAllThirdPartyRequestsSpinner.adapter = blockAllThirdPartyRequestsArrayAdapter
-        userAgentSpinner.adapter = translatedUserAgentArrayAdapter
         fontSizeSpinner.adapter = fontSizeArrayAdapter
         swipeToRefreshSpinner.adapter = swipeToRefreshArrayAdapter
         webViewThemeSpinner.adapter = webViewThemeArrayAdapter
@@ -377,7 +358,7 @@ class DomainSettingsFragment : Fragment() {
         javaScriptTextView.setOnClickListener { javaScriptSpinner.performClick() }
         cookiesTextView.setOnClickListener { cookiesSpinner.performClick() }
         domStorageTextView.setOnClickListener { domStorageSpinner.performClick() }
-        formDataTextView.setOnClickListener { formDataSpinner.performClick() }
+        userAgentTextView.setOnClickListener { userAgentSpinner.performClick() }
         easyListTextView.setOnClickListener { easyListSpinner.performClick() }
         easyPrivacyTextView.setOnClickListener { easyPrivacySpinner.performClick() }
         fanboysAnnoyanceListTextView.setOnClickListener { fanboysAnnoyanceListSpinner.performClick() }
@@ -385,7 +366,6 @@ class DomainSettingsFragment : Fragment() {
         ultraListTextView.setOnClickListener { ultraListSpinner.performClick() }
         ultraPrivacyTextView.setOnClickListener { ultraPrivacySpinner.performClick() }
         blockAllThirdPartyRequestsTextView.setOnClickListener { blockAllThirdPartyRequestsSpinner.performClick() }
-        userAgentTextView.setOnClickListener { userAgentSpinner.performClick() }
         defaultFontSizeTextView.setOnClickListener { fontSizeSpinner.performClick() }
         swipeToRefreshTextView.setOnClickListener { swipeToRefreshSpinner.performClick() }
         webViewThemeTextView.setOnClickListener { webViewThemeSpinner.performClick() }
@@ -396,7 +376,6 @@ class DomainSettingsFragment : Fragment() {
         javaScriptSpinner.setSelection(javaScriptInt)
         cookiesSpinner.setSelection(cookiesInt)
         domStorageSpinner.setSelection(domStorageInt)
-        formDataSpinner.setSelection(formDataInt)
         easyListSpinner.setSelection(easyListInt)
         easyPrivacySpinner.setSelection(easyPrivacyInt)
         fanboysAnnoyanceListSpinner.setSelection(fanboysAnnoyanceListInt)
@@ -413,7 +392,6 @@ class DomainSettingsFragment : Fragment() {
         populateTextView(javaScriptDefault, javaScriptArrayAdapter, javaScriptTextView)
         populateTextView(cookiesDefault, cookiesArrayAdapter, cookiesTextView)
         populateTextView(domStorageDefault, domStorageArrayAdapter, domStorageTextView)
-        populateTextView(formDataDefault, formDataArrayAdapter, formDataTextView)
         populateTextView(easyListDefault, easyListArrayAdapter, easyListTextView)
         populateTextView(easyPrivacyDefault, easyPrivacyArrayAdapter, easyPrivacyTextView)
         populateTextView(fanboysAnnoyanceListDefault, fanboysAnnoyanceListArrayAdapter, fanboysAnnoyanceListTextView)
@@ -428,7 +406,6 @@ class DomainSettingsFragment : Fragment() {
         // Set the icon and text view settings.  Non-standard items are handled individually below.
         setIconAndTextViewSettings(cookiesInt, cookiesDefault, cookiesLinearLayout, cookiesImageView, cookiesTextView)
         setIconAndTextViewSettings(domStorageInt, domStorageDefault, domStorageLinearLayout, domStorageImageView, domStorageTextView)
-        setIconAndTextViewSettings(formDataInt, formDataDefault, formDataLinearLayout, formDataImageView, formDataTextView)
         setIconAndTextViewSettings(easyListInt, easyListDefault, easyListLinearLayout, easyListImageView, easyListTextView)
         setIconAndTextViewSettings(easyPrivacyInt, easyPrivacyDefault, easyPrivacyLinearLayout, easyPrivacyImageView, easyListTextView)
         setIconAndTextViewSettings(fanboysAnnoyanceListInt, fanboysAnnoyanceListDefault, fanboysAnnoyanceListLinearLayout, fanboysAnnoyanceListImageView, fanboysAnnoyanceListTextView)
@@ -559,17 +536,6 @@ class DomainSettingsFragment : Fragment() {
         domStorageImageView.isEnabled = javaScriptEnabled
 
 
-        // Calculate if Fanboy's Annoyance List is enabled, either because it is the system default and that default is enabled, or because it is explicitly set to be enabled for this domain.
-        val fanboysAnnoyanceListEnabled = (((fanboysAnnoyanceListInt == 0) && fanboysAnnoyanceListDefault) || (fanboysAnnoyanceListInt == 1))
-
-        // Set Fanboy's Social Blocking List spinner and text view status based on the Annoyance List status.
-        fanboysSocialBlockingListSpinner.isEnabled = !fanboysAnnoyanceListEnabled
-        fanboysSocialBlockingListTextView.isEnabled = !fanboysAnnoyanceListEnabled
-
-        // Set the Social Blocking List icon ghosted status based on the Annoyance List status.
-        fanboysSocialBlockingListImageView.isEnabled = !fanboysAnnoyanceListEnabled
-
-
         // Inflated a WebView to get the default user agent.
         // `@SuppressLint("InflateParams")` removes the warning about using `null` as the `ViewGroup`, which in this case makes sense because the bare WebView should not be displayed on the screen.
         @SuppressLint("InflateParams") val bareWebViewLayout = inflater.inflate(R.layout.bare_webview, null, false)
@@ -647,6 +613,17 @@ class DomainSettingsFragment : Fragment() {
         }
 
 
+        // Calculate if Fanboy's Annoyance List is enabled, either because it is the system default and that default is enabled, or because it is explicitly set to be enabled for this domain.
+        val fanboysAnnoyanceListEnabled = (((fanboysAnnoyanceListInt == 0) && fanboysAnnoyanceListDefault) || (fanboysAnnoyanceListInt == 1))
+
+        // Set Fanboy's Social Blocking List spinner and text view status based on the Annoyance List status.
+        fanboysSocialBlockingListSpinner.isEnabled = !fanboysAnnoyanceListEnabled
+        fanboysSocialBlockingListTextView.isEnabled = !fanboysAnnoyanceListEnabled
+
+        // Set the Social Blocking List icon ghosted status based on the Annoyance List status.
+        fanboysSocialBlockingListImageView.isEnabled = !fanboysAnnoyanceListEnabled
+
+
         // Display the font size settings.
         if (fontSizeInt == SYSTEM_DEFAULT) {  // `0` is the code for system default font size.
             // Set the font size to the system default.
@@ -1063,18 +1040,84 @@ class DomainSettingsFragment : Fragment() {
             }
         }
 
-        // Set the form data spinner listener.  It can be removed once the minimum API >= 26.
-        if (Build.VERSION.SDK_INT < 26) {
-            formDataSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
-                override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
-                    // Update the icon and the text view settings.
-                    setIconAndTextViewSettings(position, formDataDefault, formDataLinearLayout, formDataImageView, formDataTextView)
-                }
+        // Set the user agent spinner listener.
+        userAgentSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
+            override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
+                // Set the new user agent.
+                when (position) {
+                    DOMAINS_SYSTEM_DEFAULT_USER_AGENT -> {
+                        // Show the user agent text view.
+                        userAgentTextView.visibility = View.VISIBLE
+
+                        // Hide the custom user agent edit text.
+                        customUserAgentEditText.visibility = View.GONE
+
+                        // 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.
+                            UNRECOGNIZED_USER_AGENT -> userAgentTextView.text = userAgentDefault
+
+                            // Display the `WebView` default user agent.
+                            SETTINGS_WEBVIEW_DEFAULT_USER_AGENT -> userAgentTextView.text = webViewDefaultUserAgentString
+
+                            // Display the custom user agent.
+                            SETTINGS_CUSTOM_USER_AGENT -> userAgentTextView.text = customUserAgentStringDefault
+
+                            // Get the user agent string from the user agent data array.
+                            else -> userAgentTextView.text = userAgentDataArray[defaultUserAgentArrayPosition]
+                        }
+
+                        // Set the background color to be transparent.
+                        userAgentLinearLayout.setBackgroundColor(getColor(context, R.color.transparent))
+                    }
+
+                    DOMAINS_WEBVIEW_DEFAULT_USER_AGENT -> {
+                        // Show the user agent text view.
+                        userAgentTextView.visibility = View.VISIBLE
+
+                        // Set the user agent text.
+                        userAgentTextView.text = webViewDefaultUserAgentString
+
+                        // Hide the custom user agent edit text.
+                        customUserAgentEditText.visibility = View.GONE
+
+                        // Set the background color to be blue.
+                        userAgentLinearLayout.setBackgroundColor(getColor(context, R.color.blue_background))
+                    }
+
+                    DOMAINS_CUSTOM_USER_AGENT -> {
+                        // Hide the user agent text view.
+                        userAgentTextView.visibility = View.GONE
+
+                        // Show the custom user agent edit text.
+                        customUserAgentEditText.visibility = View.VISIBLE
+
+                        // Set the current user agent name as the text.
+                        customUserAgentEditText.setText(currentUserAgentName)
 
-                override fun onNothingSelected(parent: AdapterView<*>?) {
-                    // Do nothing.
+                        // Set the background color to be blue.
+                        userAgentLinearLayout.setBackgroundColor(getColor(context, R.color.blue_background))
+                    }
+
+                    else -> {
+                        // Show the user agent text view.
+                        userAgentTextView.visibility = View.VISIBLE
+
+                        // Set the text from the user agent data array, which has one less entry than the spinner, so the position must be decremented.
+                        userAgentTextView.text = userAgentDataArray[position - 1]
+
+                        // Hide the custom user agent edit text.
+                        customUserAgentEditText.visibility = View.GONE
+
+                        // Set the background color to be blue.
+                        userAgentLinearLayout.setBackgroundColor(getColor(context, R.color.blue_background))
+                    }
                 }
             }
+
+            override fun onNothingSelected(parent: AdapterView<*>?) {
+                // Do nothing.
+            }
         }
 
         // Set the EasyList spinner listener.
@@ -1171,86 +1214,6 @@ class DomainSettingsFragment : Fragment() {
             }
         }
 
-        // Set the user agent spinner listener.
-        userAgentSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
-            override fun onItemSelected(parent: AdapterView<*>?, view: View?, position: Int, id: Long) {
-                // Set the new user agent.
-                when (position) {
-                    DOMAINS_SYSTEM_DEFAULT_USER_AGENT -> {
-                        // Show the user agent text view.
-                        userAgentTextView.visibility = View.VISIBLE
-
-                        // Hide the custom user agent edit text.
-                        customUserAgentEditText.visibility = View.GONE
-
-                        // 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.
-                            UNRECOGNIZED_USER_AGENT -> userAgentTextView.text = userAgentDefault
-
-                            // Display the `WebView` default user agent.
-                            SETTINGS_WEBVIEW_DEFAULT_USER_AGENT -> userAgentTextView.text = webViewDefaultUserAgentString
-
-                            // Display the custom user agent.
-                            SETTINGS_CUSTOM_USER_AGENT -> userAgentTextView.text = customUserAgentStringDefault
-
-                            // Get the user agent string from the user agent data array.
-                            else -> userAgentTextView.text = userAgentDataArray[defaultUserAgentArrayPosition]
-                        }
-
-                        // Set the background color to be transparent.
-                        userAgentLinearLayout.setBackgroundColor(getColor(context, R.color.transparent))
-                    }
-
-                    DOMAINS_WEBVIEW_DEFAULT_USER_AGENT -> {
-                        // Show the user agent text view.
-                        userAgentTextView.visibility = View.VISIBLE
-
-                        // Set the user agent text.
-                        userAgentTextView.text = webViewDefaultUserAgentString
-
-                        // Hide the custom user agent edit text.
-                        customUserAgentEditText.visibility = View.GONE
-
-                        // Set the background color to be blue.
-                        userAgentLinearLayout.setBackgroundColor(getColor(context, R.color.blue_background))
-                    }
-
-                    DOMAINS_CUSTOM_USER_AGENT -> {
-                        // Hide the user agent text view.
-                        userAgentTextView.visibility = View.GONE
-
-                        // Show the custom user agent edit text.
-                        customUserAgentEditText.visibility = View.VISIBLE
-
-                        // Set the current user agent name as the text.
-                        customUserAgentEditText.setText(currentUserAgentName)
-
-                        // Set the background color to be blue.
-                        userAgentLinearLayout.setBackgroundColor(getColor(context, R.color.blue_background))
-                    }
-
-                    else -> {
-                        // Show the user agent text view.
-                        userAgentTextView.visibility = View.VISIBLE
-
-                        // Set the text from the user agent data array, which has one less entry than the spinner, so the position must be decremented.
-                        userAgentTextView.text = userAgentDataArray[position - 1]
-
-                        // Hide the custom user agent edit text.
-                        customUserAgentEditText.visibility = View.GONE
-
-                        // Set the background color to be blue.
-                        userAgentLinearLayout.setBackgroundColor(getColor(context, R.color.blue_background))
-                    }
-                }
-            }
-
-            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) {