tor-browser

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

commit 18432accbdce21a24b475de1d8a1d97a4cb7e557
parent dcfec3072a33ee155929c2e666669c23e274b394
Author: Mugurell <Mugurell@users.noreply.github.com>
Date:   Thu, 20 Nov 2025 09:12:32 +0000

Bug 1996643 - part 7 - Migrate from the LifecycleHolder idiom within saved logins r=android-reviewers,matt-tighe,nalexander

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

Diffstat:
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/logins/fragment/SavedLoginsFragment.kt | 48+++++++++++++++++++-----------------------------
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/logins/ui/LoginsStore.kt | 3---
2 files changed, 19 insertions(+), 32 deletions(-)

diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/logins/fragment/SavedLoginsFragment.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/logins/fragment/SavedLoginsFragment.kt @@ -36,6 +36,7 @@ import mozilla.components.concept.engine.EngineSession import mozilla.components.concept.menu.MenuController import mozilla.components.concept.menu.Orientation import mozilla.components.lib.state.ext.consumeFrom +import mozilla.components.lib.state.helpers.StoreProvider.Companion.fragmentStore import org.mozilla.fenix.BrowserDirection import org.mozilla.fenix.Config import org.mozilla.fenix.HomeActivity @@ -51,7 +52,6 @@ import org.mozilla.fenix.ext.hideToolbar import org.mozilla.fenix.ext.registerForActivityResult import org.mozilla.fenix.ext.settings import org.mozilla.fenix.ext.showToolbar -import org.mozilla.fenix.lifecycle.LifecycleHolder import org.mozilla.fenix.settings.biometric.DefaultBiometricUtils import org.mozilla.fenix.settings.logins.LoginsAction import org.mozilla.fenix.settings.logins.LoginsFragmentStore @@ -154,22 +154,20 @@ class SavedLoginsFragment : SecureFragment(), MenuProvider { if (requireContext().settings().enableComposeLogins) { return ComposeView(requireContext()).apply { setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed) - val buildStore = { navController: NavHostController -> - val store = StoreProvider.get(this@SavedLoginsFragment) { - val lifecycleHolder = LifecycleHolder( - context = requireContext(), - navController = this@SavedLoginsFragment.findNavController(), - composeNavController = navController, - homeActivity = (requireActivity() as HomeActivity), - ) - - LoginsStore( - initialState = LoginsState.default.copy( - sortOrder = LoginsSortOrder.fromString( - value = requireContext().settings().loginsListSortOrder, - default = LoginsSortOrder.Alphabetical, - ), + val buildStore = { composeNavController: NavHostController -> + val homeActivity = (requireActivity() as HomeActivity) + val navController = findNavController() + + val store by fragmentStore( + LoginsState.default.copy( + sortOrder = LoginsSortOrder.fromString( + value = requireContext().settings().loginsListSortOrder, + default = LoginsSortOrder.Alphabetical, ), + ), + ) { + LoginsStore( + initialState = it, middleware = listOf( LogMiddleware( tag = "LoginsStore", @@ -177,15 +175,15 @@ class SavedLoginsFragment : SecureFragment(), MenuProvider { ), LoginsMiddleware( loginsStorage = requireContext().components.core.passwordsStorage, - getNavController = { lifecycleHolder.composeNavController }, - exitLogins = { lifecycleHolder.navController.popBackStack() }, + getNavController = { composeNavController }, + exitLogins = { navController.popBackStack() }, persistLoginsSortOrder = { DefaultSavedLoginsStorage( - lifecycleHolder.context.settings(), + context.settings(), ).savedLoginsSortOrder = it }, openTab = { url, openInNewTab -> - lifecycleHolder.homeActivity.openToBrowserAndLoad( + homeActivity.openToBrowserAndLoad( searchTermOrURL = url, newTab = openInNewTab, from = BrowserDirection.FromSavedLoginsFragment, @@ -194,20 +192,12 @@ class SavedLoginsFragment : SecureFragment(), MenuProvider { ), ) }, - clipboardManager = lifecycleHolder.homeActivity.getSystemService(), + clipboardManager = homeActivity.getSystemService(), ), ), - lifecycleHolder = lifecycleHolder, ) } - store.lifecycleHolder?.apply { - this.navController = this@SavedLoginsFragment.findNavController() - this.composeNavController = navController - this.homeActivity = (requireActivity() as HomeActivity) - this.context = requireContext() - } - store } setContent { diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/logins/ui/LoginsStore.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/logins/ui/LoginsStore.kt @@ -7,7 +7,6 @@ package org.mozilla.fenix.settings.logins.ui import mozilla.components.lib.state.Middleware import mozilla.components.lib.state.Reducer import mozilla.components.lib.state.Store -import org.mozilla.fenix.lifecycle.LifecycleHolder /** * A Store for handling [LoginsState] and dispatching [LoginsAction]. @@ -15,13 +14,11 @@ import org.mozilla.fenix.lifecycle.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 LoginsStore( initialState: LoginsState = LoginsState.default, reducer: Reducer<LoginsState, LoginsAction> = ::loginsReducer, middleware: List<Middleware<LoginsState, LoginsAction>> = listOf(), - val lifecycleHolder: LifecycleHolder? = null, ) : Store<LoginsState, LoginsAction>( initialState = initialState, reducer = reducer,