commit 69d9eb769e905244baeb9be6955d5aa4467c4375
parent 18432accbdce21a24b475de1d8a1d97a4cb7e557
Author: Mugurell <Mugurell@users.noreply.github.com>
Date: Thu, 20 Nov 2025 09:12:33 +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:
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,