commit 87d62c53683e401d61fbadf14ac211df55803b76 parent cf930bf809144cc0f790b1c3a871085a9fe4e0c0 Author: Mugurell <Mugurell@users.noreply.github.com> Date: Thu, 20 Nov 2025 09:12:32 +0000 Bug 1996643 - part 4 - Migrate from the environment idiom within AddressStore r=android-reviewers,matt-tighe,nalexander Differential Revision: https://phabricator.services.mozilla.com/D272157 Diffstat:
5 files changed, 30 insertions(+), 31 deletions(-)
diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/address/AddressEditorFragment.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/address/AddressEditorFragment.kt @@ -15,8 +15,8 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext import mozilla.components.concept.engine.Engine import mozilla.components.concept.engine.autofill.AddressStructure +import mozilla.components.lib.state.helpers.StoreProvider.Companion.fragmentStore import org.mozilla.fenix.SecureFragment -import org.mozilla.fenix.components.StoreProvider import org.mozilla.fenix.ext.hideToolbar import org.mozilla.fenix.ext.requireComponents import org.mozilla.fenix.settings.address.store.AddressEnvironment @@ -24,7 +24,6 @@ import org.mozilla.fenix.settings.address.store.AddressMiddleware import org.mozilla.fenix.settings.address.store.AddressState import org.mozilla.fenix.settings.address.store.AddressStore import org.mozilla.fenix.settings.address.store.AddressStructureMiddleware -import org.mozilla.fenix.settings.address.store.EnvironmentRehydrated import org.mozilla.fenix.settings.address.ui.edit.EditAddressScreen import org.mozilla.fenix.theme.FirefoxTheme import kotlin.coroutines.resume @@ -42,18 +41,12 @@ class AddressEditorFragment : SecureFragment() { container: ViewGroup?, savedInstanceState: Bundle?, ) = content { - val store = StoreProvider.get(this) { - AddressStore( - initialState = AddressState.initial( - region = requireComponents.core.store.state.search.region, - address = args.address, - ), - middleware = listOf( - AddressMiddleware(scope = viewLifecycleOwner.lifecycleScope), - AddressStructureMiddleware(scope = viewLifecycleOwner.lifecycleScope), - ), - ) - }.also { + val store = fragmentStore( + AddressState.initial( + region = requireComponents.core.store.state.search.region, + address = args.address, + ), + ) { val storage = requireComponents.core.autofillStorage val engine = requireComponents.core.engine val crashReporter = requireComponents.analytics.crashReporter @@ -65,10 +58,23 @@ class AddressEditorFragment : SecureFragment() { getAddressStructure = engine::getAddressStructure, submitCaughtException = crashReporter::submitCaughtException, ) - it.dispatch(EnvironmentRehydrated(environment)) + + AddressStore( + initialState = it, + middleware = listOf( + AddressMiddleware( + environment = environment, + scope = viewLifecycleOwner.lifecycleScope, + ), + AddressStructureMiddleware( + environment = environment, + scope = viewLifecycleOwner.lifecycleScope, + ), + ), + ) } FirefoxTheme { - EditAddressScreen(store) + EditAddressScreen(store.value) } } diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/address/store/AddressAction.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/address/store/AddressAction.kt @@ -83,11 +83,6 @@ sealed class DeleteDialogAction : AddressAction { } /** - * The Environment has been rehydrated from a configuration change. - */ -data class EnvironmentRehydrated(val environment: AddressEnvironment) : AddressAction - -/** * The Address View appeared. */ data object ViewAppeared : AddressAction diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/address/store/AddressMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/address/store/AddressMiddleware.kt @@ -22,7 +22,7 @@ import org.mozilla.fenix.GleanMetrics.Addresses * @param ioDispatcher the dispatcher to run background code on. */ class AddressMiddleware( - private var environment: AddressEnvironment? = null, + private val environment: AddressEnvironment, private val scope: CoroutineScope = MainScope(), private val ioDispatcher: CoroutineDispatcher = IO, ) : Middleware<AddressState, AddressAction> { @@ -33,23 +33,22 @@ class AddressMiddleware( ) { next(action) when (action) { - is EnvironmentRehydrated -> environment = action.environment is SaveTapped -> runAndNavigateBack { context.state.guidToUpdate?.let { - environment?.updateAddress(it, context.state.address) + environment.updateAddress(it, context.state.address) Addresses.updated.add() } ?: run { - environment?.createAddress(context.state.address) + environment.createAddress(context.state.address) Addresses.saved.add() } } is DeleteDialogAction.DeleteTapped -> runAndNavigateBack { context.state.guidToUpdate?.also { - environment?.deleteAddress(it) + environment.deleteAddress(it) Addresses.deleted.add() } } - BackTapped, CancelTapped -> environment?.navigateBack() + BackTapped, CancelTapped -> environment.navigateBack() else -> {} // noop } } @@ -58,7 +57,7 @@ class AddressMiddleware( action() scope.launch(Dispatchers.Main) { - environment?.navigateBack() + environment.navigateBack() } } } diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/address/store/AddressReducer.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/address/store/AddressReducer.kt @@ -47,7 +47,7 @@ fun addressReducer(state: AddressState, action: AddressAction): AddressState { } } is DeleteDialogAction.DeleteTapped, ViewAppeared, - is EnvironmentRehydrated, BackTapped, CancelTapped, SaveTapped, + is BackTapped, CancelTapped, SaveTapped, -> state } } diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/address/store/AddressStructureMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/address/store/AddressStructureMiddleware.kt @@ -44,7 +44,7 @@ data class UnknownLocalizationKey( * @param ioDispatcher the dispatcher to run background code on. */ class AddressStructureMiddleware( - private var environment: AddressEnvironment? = null, + private val environment: AddressEnvironment, private val scope: CoroutineScope = MainScope(), private val ioDispatcher: CoroutineDispatcher = IO, ) : Middleware<AddressState, AddressAction> { @@ -57,7 +57,6 @@ class AddressStructureMiddleware( next(action) when (action) { - is EnvironmentRehydrated -> environment = action.environment is ViewAppeared -> loadAddressStructure(context.store, true) is FormChange.Country -> if (preReductionCountry != context.store.state.address.country) { loadAddressStructure(context.store, false)