X-Git-Url: https://gitweb.stoutner.com/?p=PrivacyBrowserAndroid.git;a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fcom%2Fstoutner%2Fprivacybrowser%2Ffragments%2FSettingsFragment.kt;h=7935a8a1c1a38225416b934fec26fad1e2a55baa;hp=2ce103dcbda524fdbe74db3cbe538836ca6f3e9d;hb=5f1a770884ec933217ba377e92e0e7466572e92d;hpb=eac401700379e6ac5e6b0b696b932354001ef738 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 2ce103dc..7935a8a1 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-2022 Soren Stoutner . + * Copyright 2016-2023 Soren Stoutner . * * This file is part of Privacy Browser Android . * @@ -37,66 +37,84 @@ 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 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 downloadWithExternalAppPreference: 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 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) @@ -207,13 +225,13 @@ class SettingsFragment : PreferenceFragmentCompat() { 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]}" @@ -591,6 +609,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.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 { @@ -659,7 +694,7 @@ class SettingsFragment : PreferenceFragmentCompat() { // 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" @@ -670,7 +705,7 @@ class SettingsFragment : PreferenceFragmentCompat() { 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) @@ -1056,6 +1091,9 @@ class SettingsFragment : PreferenceFragmentCompat() { displayAdditionalAppBarIconsPreference.setIcon(R.drawable.more_enabled) else displayAdditionalAppBarIconsPreference.setIcon(R.drawable.more_disabled) + + // Restart Privacy Browser. + restartPrivacyBrowser() } getString(R.string.app_theme_key) -> {