tor-browser

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

commit 2c8ade6308ae273882889432db500bd72ca4b8c8
parent 5d4c722bec61a35d028bb1357492ac1f255dad73
Author: Mugurell <Mugurell@users.noreply.github.com>
Date:   Mon, 17 Nov 2025 17:52:52 +0000

Bug 1996643 - part 8 - Migrate from the LifecycleHolder idiom within DoH settings r=android-reviewers,matt-tighe,nalexander

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

Diffstat:
Dmobile/android/fenix/app/src/main/java/org/mozilla/fenix/lifecycle/LifecycleHolder.kt | 25-------------------------
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/doh/DohSettingsFragment.kt | 43+++++++++++++++----------------------------
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/doh/DohSettingsStore.kt | 23-----------------------
3 files changed, 15 insertions(+), 76 deletions(-)

diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/lifecycle/LifecycleHolder.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/lifecycle/LifecycleHolder.kt @@ -1,25 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -package org.mozilla.fenix.lifecycle - -import android.content.Context -import androidx.navigation.NavController -import org.mozilla.fenix.HomeActivity - -/** - * A helper class to be able to change the reference to objects that get replaced when the activity - * gets recreated. - * - * @property context the android [Context] - * @property navController A [NavController] for interacting with the androidx navigation library. - * @property composeNavController A [NavController] for navigating within the local Composable nav graph. - * @property homeActivity so that we can reference openToBrowserAndLoad and browsingMode :( - */ -class LifecycleHolder( - var context: Context, - var navController: NavController, - var composeNavController: NavController, - var homeActivity: HomeActivity, -) diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/doh/DohSettingsFragment.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/doh/DohSettingsFragment.kt @@ -12,9 +12,9 @@ import androidx.compose.ui.platform.ViewCompositionStrategy import androidx.fragment.app.Fragment import androidx.navigation.NavHostController import androidx.navigation.fragment.findNavController +import mozilla.components.lib.state.helpers.StoreProvider.Companion.fragmentStore import org.mozilla.fenix.HomeActivity import org.mozilla.fenix.R -import org.mozilla.fenix.components.StoreProvider import org.mozilla.fenix.databinding.FragmentDohSettingsBinding import org.mozilla.fenix.ext.components import org.mozilla.fenix.ext.settings @@ -43,40 +43,27 @@ internal class DohSettingsFragment : Fragment() { binding.composeView.apply { setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed) - val buildStore = { navController: NavHostController -> - val store = StoreProvider.get(this@DohSettingsFragment) { - val lifecycleHolder = LifecycleHolder( - context = requireContext(), - navController = this@DohSettingsFragment.findNavController(), - composeNavController = navController, - settingsProvider = DefaultDohSettingsProvider( - engine = requireContext().components.core.engine, - settings = requireContext().settings(), - ), - homeActivity = (requireActivity() as HomeActivity), - ) + val buildStore = { composeNavController: NavHostController -> + val homeActivity = (requireActivity() as HomeActivity) + val navController = findNavController() + val settingsProvider = DefaultDohSettingsProvider( + engine = requireContext().components.core.engine, + settings = requireContext().settings(), + ) + + val store by fragmentStore(DohSettingsState()) { DohSettingsStore( middleware = listOf( DohSettingsMiddleware( - getSettingsProvider = { lifecycleHolder.settingsProvider }, - getNavController = { lifecycleHolder.composeNavController }, - getHomeActivity = { lifecycleHolder.homeActivity }, - exitDohSettings = { lifecycleHolder.navController.popBackStack() }, + getSettingsProvider = { settingsProvider }, + getNavController = { composeNavController }, + getHomeActivity = { homeActivity }, + exitDohSettings = { navController.popBackStack() }, ), ), - lifecycleHolder = lifecycleHolder, ) } - store.lifecycleHolder?.apply { - this.context = requireContext() - this.navController = this@DohSettingsFragment.findNavController() - this.composeNavController = navController - this.settingsProvider = DefaultDohSettingsProvider( - engine = requireContext().components.core.engine, - settings = requireContext().settings(), - ) - this.homeActivity = (requireActivity() as HomeActivity) - } + store } diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/doh/DohSettingsStore.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/doh/DohSettingsStore.kt @@ -4,30 +4,9 @@ package org.mozilla.fenix.settings.doh -import androidx.navigation.NavController import mozilla.components.lib.state.Middleware import mozilla.components.lib.state.Reducer import mozilla.components.lib.state.Store -import org.mozilla.fenix.HomeActivity - -/** - * A helper class to be able to change the reference to objects that get replaced when the activity - * gets recreated. - * - * @property context An Android [Context]. - * @property navController A [NavController] for interacting with the androidx navigation library. - * @property composeNavController A [NavController] for navigating within the local Composable nav graph. - * @property settingsProvider A [DefaultDohSettingsProvider] for connecting DoH modes/providers via GeckoView API. - * @property homeActivity The [HomeActivity] that provides a reference to the browsing mode and allows - * for opening a URL in the browser. - */ -internal class LifecycleHolder( - var context: android.content.Context, - var navController: NavController, - var composeNavController: NavController, - var settingsProvider: DefaultDohSettingsProvider, - var homeActivity: HomeActivity, -) /** * A Store for handling [DohSettingsState] and dispatching [DohSettingsAction]. @@ -35,13 +14,11 @@ internal class LifecycleHolder( * @param initialState The initial state for the Store. * @param reducer Reducer to handle state updates based on dispatched actions. * @param middleware Middleware to handle side-effects in response to dispatched actions. - * @property lifecycleHolder a hack to box the references to objects that get recreated with the activity. */ internal class DohSettingsStore( initialState: DohSettingsState = DohSettingsState(), reducer: Reducer<DohSettingsState, DohSettingsAction> = ::dohSettingsReducer, middleware: List<Middleware<DohSettingsState, DohSettingsAction>> = listOf(), - var lifecycleHolder: LifecycleHolder? = null, ) : Store<DohSettingsState, DohSettingsAction>( initialState = initialState, reducer = reducer,