X-Git-Url: https://gitweb.stoutner.com/?a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fcom%2Fstoutner%2Fprivacybrowser%2Ffragments%2FSettingsFragment.kt;h=10a4532d0880867c0283e48096a5839f9680de7a;hb=6696d6946875515ae71c46a62dede4df44ad4351;hp=a22734eeb4404451073f5711fae83b811a6ba06b;hpb=dc36dea65a4eb37496fb1ecbbd9f8e1906f50216;p=PrivacyBrowserAndroid.git diff --git a/app/src/main/java/com/stoutner/privacybrowser/fragments/SettingsFragment.kt b/app/src/main/java/com/stoutner/privacybrowser/fragments/SettingsFragment.kt index a22734ee..10a4532d 100644 --- a/app/src/main/java/com/stoutner/privacybrowser/fragments/SettingsFragment.kt +++ b/app/src/main/java/com/stoutner/privacybrowser/fragments/SettingsFragment.kt @@ -1,5 +1,5 @@ /* - * Copyright 2016-2023 Soren Stoutner . + * Copyright 2016-2024 Soren Stoutner . * * This file is part of Privacy Browser Android . * @@ -43,62 +43,80 @@ 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 private lateinit var appThemeEntryValuesStringArray: Array - private lateinit var defaultUserAgent: String - private lateinit var sharedPreferenceChangeListener: OnSharedPreferenceChangeListener - private lateinit var translatedUserAgentNamesArray: Array - private lateinit var userAgentDataArray: Array - private lateinit var userAgentNamesArray: ArrayAdapter - private lateinit var webViewThemeEntriesStringArray: Array - private lateinit var webViewThemeEntryValuesStringArray: Array - - // 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 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 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 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 + 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 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 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 + private lateinit var ultraListPreference: Preference + private lateinit var ultraPrivacyPreference: Preference + private lateinit var userAgentDataArray: Array + private lateinit var userAgentPreference: Preference + private lateinit var userAgentNamesArray: ArrayAdapter + private lateinit var webViewThemeEntriesStringArray: Array + private lateinit var webViewThemeEntryValuesStringArray: Array 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) @@ -129,6 +147,7 @@ class SettingsFragment : PreferenceFragmentCompat() { 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))!! @@ -139,7 +158,7 @@ class SettingsFragment : PreferenceFragmentCompat() { 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))!! @@ -151,6 +170,7 @@ class SettingsFragment : PreferenceFragmentCompat() { // 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)) @@ -175,15 +195,6 @@ class SettingsFragment : PreferenceFragmentCompat() { clearAndExitCategory.removePreference(clearFormDataPreference) } - // Remove the WebView theme preference if the API < 29. - if (Build.VERSION.SDK_INT < 29) { - // Get a handle for the general category. - val generalCategory = findPreference(getString(R.string.general_category_key))!! - - // Remove the WebView theme preference. - generalCategory.removePreference(webViewThemePreference) - } - // Only enable Fanboy's social blocking list preference if Fanboy's annoyance list is disabled. fanboySocialBlockingListPreference.isEnabled = !fanboyAnnoyanceListEnabled @@ -270,6 +281,16 @@ class SettingsFragment : PreferenceFragmentCompat() { // 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) @@ -449,6 +470,12 @@ class SettingsFragment : PreferenceFragmentCompat() { 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) @@ -500,14 +527,8 @@ class SettingsFragment : PreferenceFragmentCompat() { 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) @@ -593,6 +614,23 @@ class SettingsFragment : PreferenceFragmentCompat() { // 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 { @@ -909,6 +947,17 @@ class SettingsFragment : PreferenceFragmentCompat() { 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) @@ -1025,17 +1074,18 @@ class SettingsFragment : PreferenceFragmentCompat() { 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)