tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

commit 688e7b30dcf80b580018bee8efc323510f010780
parent dec545f9e2a617a6fef23a1057275aade956a2eb
Author: Harrison Oglesby <oglesby.harrison@gmail.com>
Date:   Thu, 23 Oct 2025 19:12:48 +0000

Bug 1990028 - Part 1: Changes to settings fragments to enable scrollToPreference in navigation r=android-reviewers,petru

Differential Revision: https://phabricator.services.mozilla.com/D267853

Diffstat:
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/AccessibilityFragment.kt | 8++++++++
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/CustomizationFragment.kt | 5+++++
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/DownloadsSettingsFragment.kt | 6++++++
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/HomeSettingsFragment.kt | 6++++++
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/OpenLinksInAppsFragment.kt | 5+++++
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/SponsoredStoriesSettingsFragment.kt | 9+++++++++
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/TabsSettingsFragment.kt | 5+++++
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/TrackingProtectionFragment.kt | 6++++++
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/account/AccountSettingsFragment.kt | 5+++++
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/sitepermissions/SiteSettingsFragment.kt | 6++++++
Mmobile/android/fenix/app/src/main/res/navigation/nav_graph.xml | 66+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-----
11 files changed, 122 insertions(+), 5 deletions(-)

diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/AccessibilityFragment.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/AccessibilityFragment.kt @@ -5,6 +5,7 @@ package org.mozilla.fenix.settings import android.os.Bundle +import androidx.navigation.fragment.navArgs import androidx.preference.PreferenceFragmentCompat import androidx.preference.SwitchPreference import org.mozilla.fenix.R @@ -19,6 +20,9 @@ import org.mozilla.fenix.ext.showToolbar * When turned off, the font sizing can be controlled manually within the app. */ class AccessibilityFragment : PreferenceFragmentCompat() { + + private val args by navArgs<AccessibilityFragmentArgs>() + override fun onResume() { super.onResume() showToolbar(getString(R.string.preferences_accessibility)) @@ -81,6 +85,10 @@ class AccessibilityFragment : PreferenceFragmentCompat() { components.useCases.sessionUseCases.reload() true } + + args.preferenceToScrollTo?.let { + scrollToPreference(it) + } } override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/CustomizationFragment.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/CustomizationFragment.kt @@ -8,6 +8,7 @@ import android.os.Build import android.os.Build.VERSION.SDK_INT import android.os.Bundle import androidx.appcompat.app.AppCompatDelegate +import androidx.navigation.fragment.navArgs import androidx.preference.Preference import androidx.preference.PreferenceCategory import androidx.preference.PreferenceFragmentCompat @@ -38,6 +39,7 @@ class CustomizationFragment : PreferenceFragmentCompat() { private lateinit var radioDarkTheme: RadioButtonPreference private lateinit var radioAutoBatteryTheme: RadioButtonPreference private lateinit var radioFollowDeviceTheme: RadioButtonPreference + private val args by navArgs<CustomizationFragmentArgs>() override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { setPreferencesFromResource(R.xml.customization_preferences, rootKey) @@ -48,6 +50,9 @@ class CustomizationFragment : PreferenceFragmentCompat() { override fun onResume() { super.onResume() showToolbar(getString(R.string.preferences_customize)) + args.preferenceToScrollTo?.let { + scrollToPreference(it) + } } private fun setupPreferences() { diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/DownloadsSettingsFragment.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/DownloadsSettingsFragment.kt @@ -5,6 +5,7 @@ package org.mozilla.fenix.settings import android.os.Bundle +import androidx.navigation.fragment.navArgs import androidx.preference.PreferenceFragmentCompat import androidx.preference.SwitchPreference import org.mozilla.fenix.R @@ -14,6 +15,8 @@ import org.mozilla.fenix.ext.showToolbar * A [PreferenceFragmentCompat] that displays settings related to downloads. */ class DownloadsSettingsFragment : PreferenceFragmentCompat() { + private val args by navArgs<DownloadsSettingsFragmentArgs>() + override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { setPreferencesFromResource(R.xml.downloads_settings_preferences, rootKey) requirePreference<SwitchPreference>(R.string.pref_key_downloads_clean_up_files_automatically).apply { @@ -27,5 +30,8 @@ class DownloadsSettingsFragment : PreferenceFragmentCompat() { override fun onResume() { super.onResume() showToolbar(getString(R.string.preferences_downloads)) + args.preferenceToScrollTo?.let { + scrollToPreference(it) + } } } diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/HomeSettingsFragment.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/HomeSettingsFragment.kt @@ -6,6 +6,7 @@ package org.mozilla.fenix.settings import android.os.Bundle import androidx.navigation.findNavController +import androidx.navigation.fragment.navArgs import androidx.preference.CheckBoxPreference import androidx.preference.Preference import androidx.preference.PreferenceFragmentCompat @@ -25,6 +26,8 @@ import org.mozilla.fenix.utils.view.addToRadioGroup */ class HomeSettingsFragment : PreferenceFragmentCompat() { + private val args by navArgs<HomeSettingsFragmentArgs>() + override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { setPreferencesFromResource(R.xml.home_preferences, rootKey) setupPreferences() @@ -33,6 +36,9 @@ class HomeSettingsFragment : PreferenceFragmentCompat() { override fun onResume() { super.onResume() showToolbar(getString(R.string.preferences_home_2)) + args.preferenceToScrollTo?.let { + scrollToPreference(it) + } } private fun setupPreferences() { diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/OpenLinksInAppsFragment.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/OpenLinksInAppsFragment.kt @@ -5,6 +5,7 @@ package org.mozilla.fenix.settings import android.os.Bundle +import androidx.navigation.fragment.navArgs import androidx.preference.PreferenceFragmentCompat import org.mozilla.fenix.R import org.mozilla.fenix.browser.browsingmode.BrowsingMode @@ -19,6 +20,7 @@ class OpenLinksInAppsFragment : PreferenceFragmentCompat() { private lateinit var radioAlways: RadioButtonPreference private lateinit var radioAskBeforeOpening: RadioButtonPreference private lateinit var radioNever: RadioButtonPreference + private val args by navArgs<OpenLinksInAppsFragmentArgs>() override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { setPreferencesFromResource(R.xml.open_links_in_apps_preferences, rootKey) @@ -36,6 +38,9 @@ class OpenLinksInAppsFragment : PreferenceFragmentCompat() { showToolbar(getString(R.string.preferences_open_links_in_apps)) setupPreferences() + args.preferenceToScrollTo?.let { + scrollToPreference(it) + } } private fun setupPreferences() { diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/SponsoredStoriesSettingsFragment.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/SponsoredStoriesSettingsFragment.kt @@ -5,6 +5,7 @@ package org.mozilla.fenix.settings import android.os.Bundle +import androidx.navigation.fragment.navArgs import androidx.preference.EditTextPreference import androidx.preference.Preference import androidx.preference.PreferenceFragmentCompat @@ -17,6 +18,7 @@ import org.mozilla.fenix.ext.settings * Allows customizing sponsored stories fetch parameters. */ class SponsoredStoriesSettingsFragment : PreferenceFragmentCompat() { + private val args by navArgs<SponsoredStoriesSettingsFragmentArgs>() override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { setPreferencesFromResource(R.xml.sponsored_stories_settings, rootKey) @@ -51,4 +53,11 @@ class SponsoredStoriesSettingsFragment : PreferenceFragmentCompat() { } } } + + override fun onResume() { + super.onResume() + args.preferenceToScrollTo?.let { + scrollToPreference(it) + } + } } diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/TabsSettingsFragment.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/TabsSettingsFragment.kt @@ -6,6 +6,7 @@ package org.mozilla.fenix.settings import android.os.Bundle import android.view.View +import androidx.navigation.fragment.navArgs import androidx.preference.PreferenceCategory import androidx.preference.PreferenceFragmentCompat import androidx.preference.SwitchPreference @@ -29,6 +30,7 @@ class TabsSettingsFragment : PreferenceFragmentCompat() { private lateinit var radioOneMonth: RadioButtonPreference private lateinit var inactiveTabsCategory: PreferenceCategory private lateinit var inactiveTabs: SwitchPreference + private val args by navArgs<TabsSettingsFragmentArgs>() override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { setPreferencesFromResource(R.xml.tabs_preferences, rootKey) @@ -44,6 +46,9 @@ class TabsSettingsFragment : PreferenceFragmentCompat() { showToolbar(getString(R.string.preferences_tabs)) setupPreferences() + args.preferenceToScrollTo?.let { + scrollToPreference(it) + } } private fun setupPreferences() { diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/TrackingProtectionFragment.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/TrackingProtectionFragment.kt @@ -9,6 +9,7 @@ import android.os.Bundle import androidx.annotation.VisibleForTesting import androidx.appcompat.app.AlertDialog import androidx.navigation.findNavController +import androidx.navigation.fragment.navArgs import androidx.preference.CheckBoxPreference import androidx.preference.DropDownPreference import androidx.preference.Preference @@ -31,6 +32,7 @@ import org.mozilla.fenix.utils.view.addToRadioGroup * to open info about the tracking protection [org.mozilla.fenix.settings.TrackingProtectionFragment]. */ class TrackingProtectionFragment : PreferenceFragmentCompat() { + private val args by navArgs<TrackingProtectionFragmentArgs>() private val exceptionsClickListener = Preference.OnPreferenceClickListener { val directions = @@ -155,6 +157,10 @@ class TrackingProtectionFragment : PreferenceFragmentCompat() { } } } + + args.preferenceToScrollTo?.let { + scrollToPreference(it) + } } private fun bindTrackingProtectionRadio( diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/account/AccountSettingsFragment.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/account/AccountSettingsFragment.kt @@ -16,6 +16,7 @@ import android.view.View import androidx.core.content.edit import androidx.lifecycle.lifecycleScope import androidx.navigation.fragment.findNavController +import androidx.navigation.fragment.navArgs import androidx.preference.CheckBoxPreference import androidx.preference.EditTextPreference import androidx.preference.Preference @@ -60,6 +61,7 @@ class AccountSettingsFragment : PreferenceFragmentCompat() { private lateinit var accountManager: FxaAccountManager private lateinit var accountSettingsStore: AccountSettingsFragmentStore private lateinit var accountSettingsInteractor: AccountSettingsInteractor + private val args by navArgs<AccountSettingsFragmentArgs>() // Navigate away from this fragment when we encounter auth problems or logout events. private val accountStateObserver = object : AccountObserver { @@ -85,6 +87,9 @@ class AccountSettingsFragment : PreferenceFragmentCompat() { override fun onResume() { super.onResume() showToolbar(getString(R.string.preferences_account_settings)) + args.preferenceToScrollTo?.let { + scrollToPreference(it) + } } override fun onCreate(savedInstanceState: Bundle?) { diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/sitepermissions/SiteSettingsFragment.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/sitepermissions/SiteSettingsFragment.kt @@ -7,6 +7,7 @@ package org.mozilla.fenix.settings.sitepermissions import android.os.Bundle import androidx.core.content.ContextCompat import androidx.navigation.findNavController +import androidx.navigation.fragment.navArgs import androidx.preference.Preference import androidx.preference.Preference.OnPreferenceClickListener import androidx.preference.PreferenceFragmentCompat @@ -30,6 +31,8 @@ import org.mozilla.fenix.settings.requirePreference @SuppressWarnings("TooManyFunctions") class SiteSettingsFragment : PreferenceFragmentCompat() { + val args by navArgs<SiteSettingsFragmentArgs>() + override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { setPreferencesFromResource(R.xml.site_permissions_preferences, rootKey) @@ -41,6 +44,9 @@ class SiteSettingsFragment : PreferenceFragmentCompat() { super.onResume() showToolbar(getString(R.string.preferences_site_settings)) setupPreferences() + args.preferenceToScrollTo?.let { + scrollToPreference(it) + } } private fun setupPreferences() { diff --git a/mobile/android/fenix/app/src/main/res/navigation/nav_graph.xml b/mobile/android/fenix/app/src/main/res/navigation/nav_graph.xml @@ -813,11 +813,22 @@ <fragment android:id="@+id/tabsSettingsFragment" android:name="org.mozilla.fenix.settings.TabsSettingsFragment" - android:label="@string/preferences_tabs" /> + android:label="@string/preferences_tabs" > + <argument + android:name="preference_to_scroll_to" + android:defaultValue="@null" + app:argType="string" + app:nullable="true" /> + </fragment> <fragment android:id="@+id/homeSettingsFragment" android:name="org.mozilla.fenix.settings.HomeSettingsFragment" android:label="@string/preferences_home_2"> + <argument + android:name="preference_to_scroll_to" + android:defaultValue="@null" + app:argType="string" + app:nullable="true" /> <action android:id="@+id/action_homeSettingsFragment_to_wallpaperSettingsFragment" app:destination="@id/wallpaperSettingsFragment" @@ -851,6 +862,11 @@ android:id="@+id/sitePermissionsFragment" android:name="org.mozilla.fenix.settings.sitepermissions.SiteSettingsFragment" android:label="@string/preferences_site_settings"> + <argument + android:name="preference_to_scroll_to" + android:defaultValue="@null" + app:argType="string" + app:nullable="true" /> <action android:id="@+id/action_site_permissions_to_manage_phone_features" app:destination="@id/SitePermissionsManagePhoneFeature" @@ -872,11 +888,23 @@ <fragment android:id="@+id/accessibilityFragment" android:name="org.mozilla.fenix.settings.AccessibilityFragment" - android:label="@string/preferences_accessibility" /> + android:label="@string/preferences_accessibility" > + <argument + android:name="preference_to_scroll_to" + android:defaultValue="@null" + app:argType="string" + app:nullable="true" /> + </fragment> + <fragment android:id="@+id/accountSettingsFragment" android:name="org.mozilla.fenix.settings.account.AccountSettingsFragment" android:label="@string/preferences_account_settings"> + <argument + android:name="preference_to_scroll_to" + android:defaultValue="@null" + app:argType="string" + app:nullable="true" /> <action android:id="@+id/action_accountSettingsFragment_to_signOutFragment" app:destination="@id/signOutFragment" /> @@ -948,6 +976,11 @@ android:id="@+id/customizationFragment" android:name="org.mozilla.fenix.settings.CustomizationFragment" android:label="@string/preferences_customize"> + <argument + android:name="preference_to_scroll_to" + android:defaultValue="@null" + app:argType="string" + app:nullable="true" /> <action android:id="@+id/action_customizationFragment_appIconSelectionFragment" app:destination="@+id/appIconSelectionFragment" @@ -967,10 +1000,21 @@ <fragment android:id="@+id/sponsoredStoriesSettings" android:name="org.mozilla.fenix.settings.SponsoredStoriesSettingsFragment" - android:label="@string/preferences_debug_settings_custom_sponsored_stories_parameters" /> + android:label="@string/preferences_debug_settings_custom_sponsored_stories_parameters" > + <argument + android:name="preference_to_scroll_to" + android:defaultValue="@null" + app:argType="string" + app:nullable="true" /> + </fragment> <fragment android:id="@+id/trackingProtectionFragment" android:name="org.mozilla.fenix.settings.TrackingProtectionFragment"> + <argument + android:name="preference_to_scroll_to" + android:defaultValue="@null" + app:argType="string" + app:nullable="true" /> <action android:id="@+id/action_trackingProtectionFragment_to_exceptionsFragment" app:destination="@id/trackingProtectionExceptionsFragment" @@ -988,10 +1032,22 @@ </fragment> <fragment android:id="@+id/openLinksInAppsFragment" - android:name="org.mozilla.fenix.settings.OpenLinksInAppsFragment" /> + android:name="org.mozilla.fenix.settings.OpenLinksInAppsFragment" > + <argument + android:name="preference_to_scroll_to" + android:defaultValue="@null" + app:argType="string" + app:nullable="true" /> + </fragment> <fragment android:id="@+id/openDownloadsSettingsFragment" - android:name="org.mozilla.fenix.settings.DownloadsSettingsFragment" /> + android:name="org.mozilla.fenix.settings.DownloadsSettingsFragment"> + <argument + android:name="preference_to_scroll_to" + android:defaultValue="@null" + app:argType="string" + app:nullable="true" /> + </fragment> <fragment android:id="@+id/linkSharingFragment" android:name="org.mozilla.fenix.settings.LinkSharingFragment" />