tor-browser

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

commit edf59073659aa92b4056ed02f63db978acc668b6
parent ca99e52450edd424e6333367fa506a9487d3db2f
Author: pollymce <pmceldowney@mozilla.com>
Date:   Thu, 18 Dec 2025 15:52:46 +0000

Bug 2005443 - remove MiddlewareContext stage 2. r=android-reviewers,kaya

remove the MiddlewareContext everywhere and replace it with the Store it contained.

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

Diffstat:
Mmobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/engine/middleware/CrashMiddleware.kt | 10+++++-----
Mmobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/engine/middleware/CreateEngineSessionMiddleware.kt | 11+++++------
Mmobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/engine/middleware/EngineDelegateMiddleware.kt | 33++++++++++++++++-----------------
Mmobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/engine/middleware/ExtensionsProcessMiddleware.kt | 4++--
Mmobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/engine/middleware/LinkingMiddleware.kt | 26+++++++++++++-------------
Mmobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/engine/middleware/PdfStateMiddleware.kt | 14+++++++-------
Mmobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/engine/middleware/SessionPrioritizationMiddleware.kt | 20++++++++++----------
Mmobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/engine/middleware/SuspendMiddleware.kt | 14+++++++-------
Mmobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/engine/middleware/TabsRemovedMiddleware.kt | 28++++++++++++++--------------
Mmobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/engine/middleware/TranslationsMiddleware.kt | 224++++++++++++++++++++++++++++++++++++++++----------------------------------------
Mmobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/engine/middleware/TrimMemoryMiddleware.kt | 14+++++++-------
Mmobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/engine/middleware/WebExtensionMiddleware.kt | 18+++++++++---------
Mmobile/android/android-components/components/browser/state/src/test/java/mozilla/components/browser/state/engine/middleware/TabsRemovedMiddlewareTest.kt | 4++--
Mmobile/android/android-components/components/browser/state/src/test/java/mozilla/components/browser/state/engine/middleware/TranslationsMiddlewareTest.kt | 89+++++++++++++++++++++++++++++++++++++------------------------------------------
Mmobile/android/android-components/components/browser/thumbnails/src/main/java/mozilla/components/browser/thumbnails/ThumbnailsMiddleware.kt | 14+++++++-------
Mmobile/android/android-components/components/feature/containers/src/main/java/mozilla/components/feature/containers/ContainerMiddleware.kt | 7+++----
Mmobile/android/android-components/components/feature/downloads/src/main/java/mozilla/components/feature/downloads/DownloadMiddleware.kt | 25++++++++++++-------------
Mmobile/android/android-components/components/feature/fxsuggest/src/main/java/mozilla/components/feature/fxsuggest/facts/FxSuggestFactsMiddleware.kt | 12++++++------
Mmobile/android/android-components/components/feature/media/src/main/java/mozilla/components/feature/media/middleware/LastMediaAccessMiddleware.kt | 8++++----
Mmobile/android/android-components/components/feature/media/src/main/java/mozilla/components/feature/media/middleware/RecordingDevicesMiddleware.kt | 12++++++------
Mmobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/PromptMiddleware.kt | 10+++++-----
Mmobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/file/FileUploadsDirCleanerMiddleware.kt | 6+++---
Mmobile/android/android-components/components/feature/readerview/src/main/java/mozilla/components/feature/readerview/ReaderViewMiddleware.kt | 42+++++++++++++++++++++---------------------
Mmobile/android/android-components/components/feature/recentlyclosed/src/main/java/mozilla/components/feature/recentlyclosed/RecentlyClosedMiddleware.kt | 19+++++++++----------
Mmobile/android/android-components/components/feature/search/src/main/java/mozilla/components/feature/search/middleware/AdsTelemetryMiddleware.kt | 6+++---
Mmobile/android/android-components/components/feature/search/src/main/java/mozilla/components/feature/search/middleware/SearchMiddleware.kt | 11+++++------
Mmobile/android/android-components/components/feature/search/src/main/java/mozilla/components/feature/search/region/RegionMiddleware.kt | 7+++----
Mmobile/android/android-components/components/feature/search/src/test/java/mozilla/components/feature/search/region/RegionMiddlewareTest.kt | 22++++++----------------
Mmobile/android/android-components/components/feature/session/src/main/java/mozilla/components/feature/session/middleware/LastAccessMiddleware.kt | 24++++++++++++------------
Mmobile/android/android-components/components/feature/session/src/main/java/mozilla/components/feature/session/middleware/undo/UndoMiddleware.kt | 25+++++++++++--------------
Mmobile/android/android-components/components/feature/session/src/test/java/mozilla/components/feature/session/middleware/LastAccessMiddlewareTest.kt | 18++----------------
Mmobile/android/android-components/components/lib/state/src/main/java/mozilla/components/lib/state/Middleware.kt | 18+-----------------
Mmobile/android/android-components/components/lib/state/src/main/java/mozilla/components/lib/state/internal/ReducerChainBuilder.kt | 9+--------
Mmobile/android/android-components/components/lib/state/src/test/java/mozilla/components/lib/state/StoreTest.kt | 22+++++++++++-----------
Mmobile/android/android-components/components/support/locale/src/main/java/mozilla/components/support/locale/LocaleMiddleware.kt | 5++---
Mmobile/android/android-components/components/support/test-libstate/src/main/java/mozilla/components/support/test/middleware/CaptureActionsMiddleware.kt | 4++--
Mmobile/android/android-components/samples/compose-browser/src/main/java/org/mozilla/samples/compose/browser/browser/BrowserToolbarMiddleware.kt | 3+--
Mmobile/android/android-components/samples/toolbar/src/main/java/org/mozilla/samples/toolbar/middleware/BrowserToolbarMiddleware.kt | 6+++---
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/bookmarks/BookmarksMiddleware.kt | 51+++++++++++++++++++++++++--------------------------
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/bookmarks/BookmarksSyncMiddleware.kt | 8++++----
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/bookmarks/BookmarksTelemetryMiddleware.kt | 6+++---
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/bookmarks/BrowserToolbarSyncToBookmarksMiddleware.kt | 8++++----
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/bookmarks/PrivateBrowsingLockMiddleware.kt | 4++--
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/browser/desktopmode/DesktopModeMiddleware.kt | 10+++++-----
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/browser/store/BrowserScreenMiddleware.kt | 5++---
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/AboutHomeMiddleware.kt | 6+++---
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/BackgroundServices.kt | 8++++----
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/ChangeDetectionMiddleware.kt | 8++++----
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/LogMiddleware.kt | 4++--
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/PerformanceComponent.kt | 6+++---
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/ProfileMarkerMiddleware.kt | 4++--
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/StartupMiddleware.kt | 6+++---
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/menu/middleware/MenuDialogMiddleware.kt | 17++++++++---------
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/menu/middleware/MenuNavigationMiddleware.kt | 6+++---
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/menu/middleware/MenuTelemetryMiddleware.kt | 6+++---
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/metrics/MetricsMiddleware.kt | 4++--
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/search/ApplicationSearchMiddleware.kt | 5++---
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserToolbarMiddleware.kt | 163+++++++++++++++++++++++++++++++++++++++----------------------------------------
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserToolbarTelemetryMiddleware.kt | 4++--
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/toolbar/CustomTabBrowserToolbarMiddleware.kt | 59+++++++++++++++++++++++++++++------------------------------
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/crashes/CrashReportingAppMiddleware.kt | 8++++----
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/debugsettings/cfrs/CfrToolsPreferencesMiddleware.kt | 14+++++++-------
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/debugsettings/gleandebugtools/GleanDebugToolsMiddleware.kt | 16++++++++--------
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/debugsettings/store/DebugDrawerNavigationMiddleware.kt | 4++--
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/downloads/listscreen/middleware/DownloadDeleteMiddleware.kt | 12++++++------
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/downloads/listscreen/middleware/DownloadTelemetryMiddleware.kt | 4++--
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/downloads/listscreen/middleware/DownloadUIMapperMiddleware.kt | 5++---
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/downloads/listscreen/middleware/DownloadUIShareMiddleware.kt | 4++--
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/downloads/listscreen/middleware/DownloadsServiceCommunicationMiddleware.kt | 4++--
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/historymetadata/HistoryMetadataMiddleware.kt | 47+++++++++++++++++++++++------------------------
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/PocketMiddleware.kt | 7+++----
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/blocklist/BlocklistMiddleware.kt | 6+++---
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/middleware/HomeTelemetryMiddleware.kt | 4++--
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/setup/store/SetupChecklistPreferencesMiddleware.kt | 6+++---
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/setup/store/SetupChecklistTelemetryMiddleware.kt | 4++--
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/toolbar/BrowserToolbarMiddleware.kt | 71+++++++++++++++++++++++++++++++++++------------------------------------
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/toolbar/BrowserToolbarTelemetryMiddleware.kt | 4++--
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/iconpicker/AppIconMiddleware.kt | 8++++----
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/iconpicker/AppIconTelemetryMiddleware.kt | 4++--
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/library/history/BrowserToolbarSyncToHistoryMiddleware.kt | 4++--
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/library/history/state/HistoryTelemetryMiddleware.kt | 6+++---
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/messaging/state/MessagingMiddleware.kt | 90++++++++++++++++++++++++++++++++++++++++----------------------------------------
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/onboarding/store/OnboardingPreferencesMiddleware.kt | 6+++---
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/onboarding/store/PrivacyPreferencesMiddleware.kt | 4++--
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/onboarding/store/PrivacyPreferencesTelemetryMiddleware.kt | 4++--
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/reviewprompt/CustomReviewPromptNavigationMiddleware.kt | 6+++---
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/reviewprompt/CustomReviewPromptTelemetryMiddleware.kt | 4++--
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/reviewprompt/ReviewPromptMiddleware.kt | 16++++++++--------
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/search/BrowserStoreToFenixSearchMapperMiddleware.kt | 9++++-----
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/search/BrowserToolbarSearchMiddleware.kt | 79+++++++++++++++++++++++++++++++++++++++----------------------------------------
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/search/BrowserToolbarSearchStatusSyncMiddleware.kt | 12++++++------
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/search/BrowserToolbarToFenixSearchMapperMiddleware.kt | 21++++++++++-----------
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/search/FenixSearchMiddleware.kt | 113+++++++++++++++++++++++++++++++++++++++----------------------------------------
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/address/store/AddressMiddleware.kt | 12++++++------
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/address/store/AddressStructureMiddleware.kt | 11+++++------
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/autofill/ui/AutofillSettingsMiddleware.kt | 7+++----
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/creditcards/ui/CreditCardEditorMiddleware.kt | 36++++++++++++++++++------------------
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/datachoices/DataChoicesMiddleware.kt | 8++++----
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/doh/DohSettingsMiddleware.kt | 36++++++++++++++++++------------------
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/logins/ui/LoginsMiddleware.kt | 15+++++++--------
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/settingssearch/SettingsSearchMiddleware.kt | 7+++----
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/trustpanel/middleware/TrustPanelMiddleware.kt | 6++----
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/trustpanel/middleware/TrustPanelNavigationMiddleware.kt | 4++--
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/trustpanel/middleware/TrustPanelTelemetryMiddleware.kt | 6+++---
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/share/SaveToPDFMiddleware.kt | 16++++++++--------
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/startupCrash/StartupCrashMiddleware.kt | 5++---
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/tabstray/TabsTrayTelemetryMiddleware.kt | 4++--
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/telemetry/TelemetryMiddleware.kt | 20++++++++++----------
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/termsofuse/store/PrivacyNoticeBannerMiddleware.kt | 4++--
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/termsofuse/store/PrivacyNoticeBannerTelemetryMiddleware.kt | 4++--
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/termsofuse/store/TermsOfUsePromptPreferencesMiddleware.kt | 4++--
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/termsofuse/store/TermsOfUsePromptTelemetryMiddleware.kt | 4++--
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/translations/TranslationsDialogMiddleware.kt | 8++++----
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/webcompat/middleware/WebCompatReporterNavigationMiddleware.kt | 6+++---
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/webcompat/middleware/WebCompatReporterStorageMiddleware.kt | 5++---
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/webcompat/middleware/WebCompatReporterSubmissionMiddleware.kt | 42+++++++++++++++++++++---------------------
Mmobile/android/fenix/app/src/main/java/org/mozilla/fenix/webcompat/middleware/WebCompatReporterTelemetryMiddleware.kt | 6+++---
Mmobile/android/fenix/app/src/test/java/org/mozilla/fenix/bookmarks/PrivateBrowsingLockMiddlewareTest.kt | 4++--
Mmobile/android/fenix/app/src/test/java/org/mozilla/fenix/components/search/ApplicationSearchMiddlewareTest.kt | 6+-----
Mmobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/setup/store/SetupChecklistPreferencesMiddlewareTest.kt | 11+++--------
Mmobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/setup/store/SetupChecklistTelemetryMiddlewareTest.kt | 6+++---
Mmobile/android/fenix/app/src/test/java/org/mozilla/fenix/onboarding/store/OnboardingPreferencesMiddlewareTest.kt | 10+++-------
Mmobile/android/fenix/app/src/test/java/org/mozilla/fenix/onboarding/store/PrivacyPreferencesMiddlewareTest.kt | 12++++--------
Mmobile/android/fenix/app/src/test/java/org/mozilla/fenix/onboarding/store/PrivacyPreferencesTelemetryMiddlewareTest.kt | 13+++++--------
Mmobile/android/fenix/app/src/test/java/org/mozilla/fenix/search/FenixSearchMiddlewareTest.kt | 16++--------------
Mmobile/android/fenix/app/src/test/java/org/mozilla/fenix/termsofuse/store/PrivacyNoticeBannerMiddlewareTest.kt | 16++++++++--------
Mmobile/android/fenix/app/src/test/java/org/mozilla/fenix/termsofuse/store/PrivacyNoticeBannerTelemetryMiddlewareTest.kt | 8++++----
Mmobile/android/fenix/app/src/test/java/org/mozilla/fenix/termsofuse/store/TermsOfUsePromptPreferencesMiddlewareTest.kt | 17++++++-----------
Mmobile/android/fenix/app/src/test/java/org/mozilla/fenix/termsofuse/store/TermsOfUsePromptTelemetryMiddlewareTest.kt | 8++------
Mmobile/android/focus-android/app/src/main/java/org/mozilla/focus/browser/BlockedTrackersMiddleware.kt | 4++--
Mmobile/android/focus-android/app/src/main/java/org/mozilla/focus/cfr/CfrMiddleware.kt | 6+++---
Mmobile/android/focus-android/app/src/main/java/org/mozilla/focus/cookiebannerreducer/CookieBannerReducerMiddleware.kt | 52++++++++++++++++++++++++++--------------------------
Mmobile/android/focus-android/app/src/main/java/org/mozilla/focus/engine/SanityCheckMiddleware.kt | 6+++---
Mmobile/android/focus-android/app/src/main/java/org/mozilla/focus/locale/screen/LanguageMiddleware.kt | 6+++---
Mmobile/android/focus-android/app/src/main/java/org/mozilla/focus/search/SearchFilterMiddleware.kt | 4++--
Mmobile/android/focus-android/app/src/main/java/org/mozilla/focus/settings/permissions/permissionoptions/SitePermissionOptionsStorageMiddleware.kt | 6+++---
Mmobile/android/focus-android/app/src/main/java/org/mozilla/focus/telemetry/TelemetryMiddleware.kt | 18+++++++++---------
Mmobile/android/focus-android/app/src/test/java/org/mozilla/focus/locale/screen/LanguageMiddlewareTest.kt | 16+++++++---------
138 files changed, 1120 insertions(+), 1249 deletions(-)

diff --git a/mobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/engine/middleware/CrashMiddleware.kt b/mobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/engine/middleware/CrashMiddleware.kt @@ -10,14 +10,14 @@ import mozilla.components.browser.state.action.EngineAction import mozilla.components.browser.state.state.BrowserState import mozilla.components.concept.engine.EngineSession import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store /** * [Middleware] responsible for recovering crashed [EngineSession] instances. */ internal class CrashMiddleware : Middleware<BrowserState, BrowserAction> { override fun invoke( - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, next: (BrowserAction) -> Unit, action: BrowserAction, ) { @@ -29,18 +29,18 @@ internal class CrashMiddleware : Middleware<BrowserState, BrowserAction> { // crashes and will not request a new engine session until the user // explicitly asked to restore the session. if (action is CrashAction.SessionCrashedAction) { - onCrash(context, action) + onCrash(store, action) } } private fun onCrash( - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, action: CrashAction.SessionCrashedAction, ) { // We suspend the crashed session here. After that the reducer will mark it as "crashed". // That will prevent it from getting recreated until explicitly handling the crash by // restoring. - context.store.dispatch( + store.dispatch( EngineAction.SuspendEngineSessionAction(action.tabId), ) } diff --git a/mobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/engine/middleware/CreateEngineSessionMiddleware.kt b/mobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/engine/middleware/CreateEngineSessionMiddleware.kt @@ -15,7 +15,6 @@ import mozilla.components.browser.state.state.SessionState import mozilla.components.concept.engine.Engine import mozilla.components.concept.engine.EngineSession import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext import mozilla.components.lib.state.Store import mozilla.components.support.base.log.logger.Logger @@ -30,15 +29,15 @@ internal class CreateEngineSessionMiddleware( private val logger = Logger("CreateEngineSessionMiddleware") override fun invoke( - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, next: (BrowserAction) -> Unit, action: BrowserAction, ) { if (action is EngineAction.CreateEngineSessionAction) { - val engineState = context.store.state.findTabOrCustomTab(action.tabId)?.engineState + val engineState = store.state.findTabOrCustomTab(action.tabId)?.engineState if (engineState?.initializing == false && engineState.engineSession == null && !engineState.crashed) { - context.store.dispatch(EngineAction.UpdateEngineSessionInitializingAction(action.tabId, true)) - createEngineSession(context.store, action) + store.dispatch(EngineAction.UpdateEngineSessionInitializingAction(action.tabId, true)) + createEngineSession(store, action) next(action) } else { // Initialization is in progress by a pending CreateEngineSessionAction. Let's @@ -47,7 +46,7 @@ internal class CreateEngineSessionMiddleware( // is created which has been launched on main already at this point. action.followupAction?.let { scope.launch { - context.store.dispatch(it) + store.dispatch(it) } } } diff --git a/mobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/engine/middleware/EngineDelegateMiddleware.kt b/mobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/engine/middleware/EngineDelegateMiddleware.kt @@ -18,7 +18,6 @@ import mozilla.components.browser.state.state.BrowserState import mozilla.components.browser.state.state.TabSessionState import mozilla.components.concept.engine.EngineSession import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext import mozilla.components.lib.state.Store /** @@ -29,31 +28,31 @@ internal class EngineDelegateMiddleware( private val scope: CoroutineScope, ) : Middleware<BrowserState, BrowserAction> { override fun invoke( - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, next: (BrowserAction) -> Unit, action: BrowserAction, ) { when (action) { - is EngineAction.LoadUrlAction -> loadUrl(context.store, action) - is EngineAction.LoadDataAction -> loadData(context.store, action) - is EngineAction.ReloadAction -> reload(context.store, action) - is EngineAction.GoBackAction -> goBack(context.store, action) - is EngineAction.GoForwardAction -> goForward(context.store, action) - is EngineAction.GoToHistoryIndexAction -> goToHistoryIndex(context.store, action) - is EngineAction.ToggleDesktopModeAction -> toggleDesktopMode(context.store, action) - is EngineAction.ExitFullScreenModeAction -> exitFullScreen(context.store, action) - is EngineAction.SaveToPdfAction -> saveToPdf(context.store, action) - is EngineAction.PrintContentAction -> printContent(context.store, action) - is EngineAction.ClearDataAction -> clearData(context.store, action) - is EngineAction.PurgeHistoryAction -> purgeHistory(context.store.state) - is EngineAction.FlushEngineSessionStateAction -> flushEngineSessionSate(context.store, action) + is EngineAction.LoadUrlAction -> loadUrl(store, action) + is EngineAction.LoadDataAction -> loadData(store, action) + is EngineAction.ReloadAction -> reload(store, action) + is EngineAction.GoBackAction -> goBack(store, action) + is EngineAction.GoForwardAction -> goForward(store, action) + is EngineAction.GoToHistoryIndexAction -> goToHistoryIndex(store, action) + is EngineAction.ToggleDesktopModeAction -> toggleDesktopMode(store, action) + is EngineAction.ExitFullScreenModeAction -> exitFullScreen(store, action) + is EngineAction.SaveToPdfAction -> saveToPdf(store, action) + is EngineAction.PrintContentAction -> printContent(store, action) + is EngineAction.ClearDataAction -> clearData(store, action) + is EngineAction.PurgeHistoryAction -> purgeHistory(store.state) + is EngineAction.FlushEngineSessionStateAction -> flushEngineSessionSate(store, action) is TranslationsAction.TranslateAction -> { next(action) - translate(context.store, action) + translate(store, action) } is TranslationsAction.TranslateRestoreAction -> { next(action) - translateRestoreOriginal(context.store, action) + translateRestoreOriginal(store, action) } else -> next(action) } diff --git a/mobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/engine/middleware/ExtensionsProcessMiddleware.kt b/mobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/engine/middleware/ExtensionsProcessMiddleware.kt @@ -9,7 +9,7 @@ import mozilla.components.browser.state.action.ExtensionsProcessAction import mozilla.components.browser.state.state.BrowserState import mozilla.components.concept.engine.Engine import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store /** * [Middleware] implementation responsible for enabling and disabling the extensions process (spawning). @@ -21,7 +21,7 @@ internal class ExtensionsProcessMiddleware( ) : Middleware<BrowserState, BrowserAction> { override fun invoke( - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, next: (BrowserAction) -> Unit, action: BrowserAction, ) { diff --git a/mobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/engine/middleware/LinkingMiddleware.kt b/mobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/engine/middleware/LinkingMiddleware.kt @@ -16,7 +16,7 @@ import mozilla.components.browser.state.state.SessionState import mozilla.components.browser.state.state.TabSessionState import mozilla.components.concept.engine.EngineSession import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store import mozilla.components.support.ktx.kotlin.isExtensionUrl /** @@ -27,7 +27,7 @@ internal class LinkingMiddleware( ) : Middleware<BrowserState, BrowserAction> { override fun invoke( - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, next: (BrowserAction) -> Unit, action: BrowserAction, ) { @@ -36,7 +36,7 @@ internal class LinkingMiddleware( is TabListAction.AddTabAction -> { if (action.tab.engineState.engineSession != null && action.tab.engineState.engineObserver == null) { engineObserver = link( - context, + store, action.tab.engineState.engineSession, action.tab, skipLoading = true, @@ -50,7 +50,7 @@ internal class LinkingMiddleware( } } is EngineAction.UnlinkEngineSessionAction -> { - unlink(context, action) + unlink(store, action) } else -> { // no-op @@ -61,8 +61,8 @@ internal class LinkingMiddleware( when (action) { is EngineAction.LinkEngineSessionAction -> { - context.store.state.findTabOrCustomTab(action.tabId)?.let { tab -> - engineObserver = link(context, action.engineSession, tab, action.skipLoading, action.includeParent) + store.state.findTabOrCustomTab(action.tabId)?.let { tab -> + engineObserver = link(store, action.engineSession, tab, action.skipLoading, action.includeParent) } } else -> { @@ -71,19 +71,19 @@ internal class LinkingMiddleware( } engineObserver?.let { - context.store.dispatch(EngineAction.UpdateEngineSessionObserverAction(it.first, it.second)) - context.store.dispatch(EngineAction.UpdateEngineSessionInitializingAction(it.first, false)) + store.dispatch(EngineAction.UpdateEngineSessionObserverAction(it.first, it.second)) + store.dispatch(EngineAction.UpdateEngineSessionInitializingAction(it.first, false)) } } private fun link( - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, engineSession: EngineSession, tab: SessionState, skipLoading: Boolean = true, includeParent: Boolean, ): Pair<String, EngineObserver> { - val observer = EngineObserver(tab.id, context.store, scope) + val observer = EngineObserver(tab.id, store, scope) engineSession.register(observer) if (skipLoading) { @@ -97,7 +97,7 @@ internal class LinkingMiddleware( performLoadOnMainThread(engineSession, tab.content.url, loadFlags = tab.engineState.initialLoadFlags) } else { val parentEngineSession = if (includeParent && tab is TabSessionState) { - tab.parentId?.let { context.store.state.findTabOrCustomTab(it)?.engineState?.engineSession } + tab.parentId?.let { store.state.findTabOrCustomTab(it)?.engineState?.engineSession } } else { null } @@ -136,10 +136,10 @@ internal class LinkingMiddleware( } private fun unlink( - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, action: EngineAction.UnlinkEngineSessionAction, ) { - val tab = context.store.state.findTabOrCustomTab(action.tabId) ?: return + val tab = store.state.findTabOrCustomTab(action.tabId) ?: return tab.engineState.engineObserver?.let { tab.engineState.engineSession?.unregister(it) diff --git a/mobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/engine/middleware/PdfStateMiddleware.kt b/mobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/engine/middleware/PdfStateMiddleware.kt @@ -12,7 +12,7 @@ import mozilla.components.browser.state.action.ContentAction import mozilla.components.browser.state.selector.findTabOrCustomTabOrSelectedTab import mozilla.components.browser.state.state.BrowserState import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store private const val PAGE_FULLY_LOADED_PROGRESS = 100 @@ -26,7 +26,7 @@ internal class PdfStateMiddleware( private val scope: CoroutineScope, ) : Middleware<BrowserState, BrowserAction> { override fun invoke( - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, next: (BrowserAction) -> Unit, action: BrowserAction, ) { @@ -34,11 +34,11 @@ internal class PdfStateMiddleware( if (action is ContentAction.UpdateProgressAction && action.progress == PAGE_FULLY_LOADED_PROGRESS) { scope.launch { - val newPdfRenderingStatus = isRenderingPdf(action.sessionId, context.store.state) - val previousRenderingStatus = previousPdfRenderingStatus(action.sessionId, context.store.state) + val newPdfRenderingStatus = isRenderingPdf(action.sessionId, store.state) + val previousRenderingStatus = previousPdfRenderingStatus(action.sessionId, store.state) if (newPdfRenderingStatus != previousRenderingStatus) { - dispatchPdfStatusUpdate(action.sessionId, newPdfRenderingStatus, context) + dispatchPdfStatusUpdate(action.sessionId, newPdfRenderingStatus, store) } } } @@ -47,8 +47,8 @@ internal class PdfStateMiddleware( private fun dispatchPdfStatusUpdate( sessionId: String, isPdf: Boolean, - context: MiddlewareContext<BrowserState, BrowserAction>, - ) = context.store.dispatch( + store: Store<BrowserState, BrowserAction>, + ) = store.dispatch( when (isPdf) { true -> ContentAction.EnteredPdfViewer(sessionId) false -> ContentAction.ExitedPdfViewer(sessionId) diff --git a/mobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/engine/middleware/SessionPrioritizationMiddleware.kt b/mobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/engine/middleware/SessionPrioritizationMiddleware.kt @@ -22,7 +22,7 @@ import mozilla.components.concept.engine.EngineSession import mozilla.components.concept.engine.EngineSession.SessionPriority.DEFAULT import mozilla.components.concept.engine.EngineSession.SessionPriority.HIGH import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store import mozilla.components.support.base.log.logger.Logger import mozilla.components.support.base.coroutines.Dispatchers as MozillaDispatchers @@ -46,13 +46,13 @@ class SessionPrioritizationMiddleware( @Suppress("NestedBlockDepth") override fun invoke( - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, next: (BrowserAction) -> Unit, action: BrowserAction, ) { when (action) { is EngineAction.UnlinkEngineSessionAction -> { - val activeTab = context.store.state.findTab(action.tabId) + val activeTab = store.state.findTab(action.tabId) activeTab?.engineState?.engineSession?.updateSessionPriority(DEFAULT) if (previousHighestPriorityTabId == action.tabId) { previousHighestPriorityTabId = "" @@ -61,12 +61,12 @@ class SessionPrioritizationMiddleware( } is ContentAction.UpdateHasFormDataAction -> { if (action.adjustPriority) { - val tab = context.store.state.findTab(action.tabId) + val tab = store.state.findTab(action.tabId) if (action.containsFormData) { tab?.engineState?.engineSession?.updateSessionPriority(HIGH) logger.info("Update the tab ${tab?.id} priority to ${HIGH.name}") tab?.let { - updatePriorityToDefault(context, it.id, updatePriorityAfterMillis) + updatePriorityToDefault(store, it.id, updatePriorityAfterMillis) } } else { tab?.engineState?.engineSession?.updateSessionPriority(DEFAULT) @@ -76,7 +76,7 @@ class SessionPrioritizationMiddleware( } is ContentAction.UpdatePriorityToDefaultAfterTimeoutAction -> { // remove finished job from map - val tab = context.store.state.findTab(action.tabId) + val tab = store.state.findTab(action.tabId) tab?.engineState?.engineSession?.updateSessionPriority(DEFAULT) logger.info("Update the tab ${tab?.id} priority back to ${DEFAULT.name}") updatePriorityToDefaultJobs.remove(action.tabId) @@ -85,7 +85,7 @@ class SessionPrioritizationMiddleware( is AppLifecycleAction.PauseAction -> { // Check for form data for the selected tab when the app is backgrounded. mainScope.launch { - context.store.state.selectedTab?.engineState?.engineSession?.checkForFormData( + store.state.selectedTab?.engineState?.engineSession?.checkForFormData( adjustPriority = false, ) } @@ -102,7 +102,7 @@ class SessionPrioritizationMiddleware( is EngineAction.LinkEngineSessionAction, -> { // if it exists in the map of high priority tabs to be cleared, cancel the job and remove it - val state = context.store.state + val state = store.state updatePriorityToDefaultJobs[state.selectedTabId]?.cancel() updatePriorityToDefaultJobs.remove(state.selectedTabId) @@ -138,14 +138,14 @@ class SessionPrioritizationMiddleware( } private fun updatePriorityToDefault( - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, tabId: String, updatePriorityAfterMillis: Long, ) { // store and launch the new job related to the tabId var updateJob: Job = waitScope.launch { delay(updatePriorityAfterMillis) - context.store.dispatch(ContentAction.UpdatePriorityToDefaultAfterTimeoutAction(tabId)) + store.dispatch(ContentAction.UpdatePriorityToDefaultAfterTimeoutAction(tabId)) } updatePriorityToDefaultJobs[tabId] = updateJob logger.info("Tab $tabId will return to ${DEFAULT.name} priority after $updatePriorityAfterMillis ms") diff --git a/mobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/engine/middleware/SuspendMiddleware.kt b/mobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/engine/middleware/SuspendMiddleware.kt @@ -14,7 +14,7 @@ import mozilla.components.browser.state.state.EngineState import mozilla.components.concept.engine.EngineSession import mozilla.components.concept.engine.EngineSessionState import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store /** * [Middleware] implementation responsible for suspending an [EngineSession]. @@ -28,28 +28,28 @@ internal class SuspendMiddleware( private val scope: CoroutineScope, ) : Middleware<BrowserState, BrowserAction> { override fun invoke( - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, next: (BrowserAction) -> Unit, action: BrowserAction, ) { when (action) { - is EngineAction.SuspendEngineSessionAction -> suspend(context, action.tabId) + is EngineAction.SuspendEngineSessionAction -> suspend(store, action.tabId) is EngineAction.KillEngineSessionAction -> { next(action) - suspend(context, action.tabId) + suspend(store, action.tabId) } else -> next(action) } } private fun suspend( - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, sessionId: String, ) { - val tab = context.store.state.findTabOrCustomTab(sessionId) ?: return + val tab = store.state.findTabOrCustomTab(sessionId) ?: return // First we unlink (which clearsEngineSession and state) - context.store.dispatch( + store.dispatch( EngineAction.UnlinkEngineSessionAction( tab.id, ), diff --git a/mobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/engine/middleware/TabsRemovedMiddleware.kt b/mobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/engine/middleware/TabsRemovedMiddleware.kt @@ -18,7 +18,7 @@ import mozilla.components.browser.state.state.BrowserState import mozilla.components.browser.state.state.SessionState import mozilla.components.concept.engine.EngineSession import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store /** * [Middleware] responsible for closing and unlinking [EngineSession] instances whenever tabs get @@ -28,23 +28,23 @@ internal class TabsRemovedMiddleware( private val scope: CoroutineScope, ) : Middleware<BrowserState, BrowserAction> { override fun invoke( - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, next: (BrowserAction) -> Unit, action: BrowserAction, ) { when (action) { - is TabListAction.RemoveAllNormalTabsAction -> onTabsRemoved(context, context.store.state.normalTabs) - is TabListAction.RemoveAllPrivateTabsAction -> onTabsRemoved(context, context.store.state.privateTabs) - is TabListAction.RemoveAllTabsAction -> onTabsRemoved(context, context.store.state.tabs) - is TabListAction.RemoveTabAction -> context.store.state.findTab(action.tabId)?.let { - onTabsRemoved(context, listOf(it)) + is TabListAction.RemoveAllNormalTabsAction -> onTabsRemoved(store, store.state.normalTabs) + is TabListAction.RemoveAllPrivateTabsAction -> onTabsRemoved(store, store.state.privateTabs) + is TabListAction.RemoveAllTabsAction -> onTabsRemoved(store, store.state.tabs) + is TabListAction.RemoveTabAction -> store.state.findTab(action.tabId)?.let { + onTabsRemoved(store, listOf(it)) } - is TabListAction.RemoveTabsAction -> action.tabIds.mapNotNull { context.store.state.findTab(it) }.let { - onTabsRemoved(context, it) + is TabListAction.RemoveTabsAction -> action.tabIds.mapNotNull { store.state.findTab(it) }.let { + onTabsRemoved(store, it) } - is CustomTabListAction.RemoveAllCustomTabsAction -> onTabsRemoved(context, context.store.state.customTabs) - is CustomTabListAction.RemoveCustomTabAction -> context.store.state.findCustomTab(action.tabId)?.let { - onTabsRemoved(context, listOf(it)) + is CustomTabListAction.RemoveAllCustomTabsAction -> onTabsRemoved(store, store.state.customTabs) + is CustomTabListAction.RemoveCustomTabAction -> store.state.findCustomTab(action.tabId)?.let { + onTabsRemoved(store, listOf(it)) } else -> { // no-op @@ -55,12 +55,12 @@ internal class TabsRemovedMiddleware( } private fun onTabsRemoved( - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, tabs: List<SessionState>, ) { tabs.forEach { tab -> if (tab.engineState.engineSession != null) { - context.store.dispatch( + store.dispatch( EngineAction.UnlinkEngineSessionAction( tab.id, ), diff --git a/mobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/engine/middleware/TranslationsMiddleware.kt b/mobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/engine/middleware/TranslationsMiddleware.kt @@ -30,7 +30,7 @@ import mozilla.components.concept.engine.translate.TranslationPageSettingOperati import mozilla.components.concept.engine.translate.TranslationPageSettings import mozilla.components.concept.engine.translate.findLanguage import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store import mozilla.components.support.base.log.logger.Logger import kotlin.coroutines.resume import kotlin.coroutines.suspendCoroutine @@ -49,51 +49,51 @@ class TranslationsMiddleware( @Suppress("LongMethod", "CyclomaticComplexMethod", "CognitiveComplexMethod") override fun invoke( - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, next: (BrowserAction) -> Unit, action: BrowserAction, ) { // Pre process actions when (action) { is InitAction -> if (automaticallyInitialize) { - context.store.dispatch(TranslationsAction.InitTranslationsBrowserState) + store.dispatch(TranslationsAction.InitTranslationsBrowserState) } is LocaleAction.UpdateLocaleAction -> { logger.info("Detected app locale change.") scope.launch { // This information is dependent on the app language - requestSupportedLanguages(context, null) - requestLanguageModels(context, null) + requestSupportedLanguages(store, null) + requestLanguageModels(store, null) } } is TranslationsAction.InitTranslationsBrowserState -> { scope.launch { - val engineIsSupported = requestEngineSupport(context) + val engineIsSupported = requestEngineSupport(store) if (engineIsSupported == true) { - initializeBrowserStore(context) + initializeBrowserStore(store) } } } is TranslationsAction.TranslateExpectedAction -> { - requestDefaultModelDownloadSize(context, action.tabId) + requestDefaultModelDownloadSize(store, action.tabId) } is TranslationsAction.OperationRequestedAction -> { when (action.operation) { TranslationOperation.FETCH_SUPPORTED_LANGUAGES -> { scope.launch { - requestSupportedLanguages(context, action.tabId) + requestSupportedLanguages(store, action.tabId) } } TranslationOperation.FETCH_LANGUAGE_MODELS -> { scope.launch { - requestLanguageModels(context, action.tabId) + requestLanguageModels(store, action.tabId) } } TranslationOperation.FETCH_PAGE_SETTINGS -> { - val tabId = action.tabId ?: context.store.state.selectedTab?.id + val tabId = action.tabId ?: store.state.selectedTab?.id if (action.tabId == null) { logger.warn( "Passed null tabId to FETCH_PAGE_SETTINGS, " + @@ -102,8 +102,8 @@ class TranslationsMiddleware( } if (tabId != null) { scope.launch { - context.store.state.selectedTab?.let { - requestPageSettings(context, it.id) + store.state.selectedTab?.let { + requestPageSettings(store, it.id) } } } else { @@ -115,18 +115,18 @@ class TranslationsMiddleware( } TranslationOperation.FETCH_OFFER_SETTING -> { scope.launch { - requestOfferSetting(context, action.tabId) + requestOfferSetting(store, action.tabId) } } TranslationOperation.FETCH_AUTOMATIC_LANGUAGE_SETTINGS -> { scope.launch { - requestLanguageSettings(context, action.tabId) + requestLanguageSettings(store, action.tabId) } } TranslationOperation.FETCH_NEVER_TRANSLATE_SITES -> { scope.launch { - requestNeverTranslateSites(context, action.tabId) + requestNeverTranslateSites(store, action.tabId) } } TranslationOperation.TRANSLATE, @@ -138,7 +138,7 @@ class TranslationsMiddleware( is TranslationsAction.FetchTranslationDownloadSizeAction -> { scope.launch { requestTranslationSize( - context = context, + store = store, tabId = action.tabId, fromLanguage = action.fromLanguage, toLanguage = action.toLanguage, @@ -148,7 +148,7 @@ class TranslationsMiddleware( is TranslationsAction.RemoveNeverTranslateSiteAction -> { scope.launch { - removeNeverTranslateSite(context, action.origin) + removeNeverTranslateSite(store, action.origin) } } @@ -164,7 +164,7 @@ class TranslationsMiddleware( TranslationPageSettingOperation.UPDATE_ALWAYS_TRANSLATE_LANGUAGE -> scope.launch { updateLanguagePageSetting( - context = context, + store = store, tabId = action.tabId, setting = action.setting, settingType = LanguageSetting.ALWAYS, @@ -174,7 +174,7 @@ class TranslationsMiddleware( TranslationPageSettingOperation.UPDATE_NEVER_TRANSLATE_LANGUAGE -> scope.launch { updateLanguagePageSetting( - context = context, + store = store, tabId = action.tabId, setting = action.setting, settingType = LanguageSetting.NEVER, @@ -184,7 +184,7 @@ class TranslationsMiddleware( TranslationPageSettingOperation.UPDATE_NEVER_TRANSLATE_SITE -> scope.launch { updateNeverTranslateSitePageSetting( - context = context, + store = store, tabId = action.tabId, setting = action.setting, ) @@ -203,7 +203,7 @@ class TranslationsMiddleware( is TranslationsAction.UpdateLanguageSettingsAction -> { scope.launch { updateLanguageSetting( - context = context, + store = store, languageCode = action.languageCode, setting = action.setting, ) @@ -213,7 +213,7 @@ class TranslationsMiddleware( is TranslationsAction.ManageLanguageModelsAction -> { scope.launch { updateLanguageModel( - context = context, + store = store, options = action.options, ) } @@ -239,33 +239,33 @@ class TranslationsMiddleware( * Never Translate Sites List - [requestNeverTranslateSites] * Offer Setting - [requestOfferSetting] * - * @param context Context to use to dispatch to the store. + * @param store Store to be initialised. */ private fun initializeBrowserStore( - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, ) { - requestSupportedLanguages(context) - requestLanguageModels(context) - requestLanguageSettings(context) - requestNeverTranslateSites(context) - requestOfferSetting(context) + requestSupportedLanguages(store) + requestLanguageModels(store) + requestLanguageSettings(store) + requestNeverTranslateSites(store) + requestOfferSetting(store) } /** * Checks if the translations engine supports the device architecture and updates the state on * [BrowserState.translationEngine]. * - * @param context Context to use to dispatch to the store. + * @param store Store to dispatch translation actions to. * @return Whether the engine is supported or not, or null when the support cannot be * determined. */ private suspend fun requestEngineSupport( - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, ): Boolean? { return suspendCoroutine { continuation -> engine.isTranslationsEngineSupported( onSuccess = { isEngineSupported -> - context.store.dispatch( + store.dispatch( TranslationsAction.SetEngineSupportedAction( isEngineSupported = isEngineSupported, ), @@ -274,7 +274,7 @@ class TranslationsMiddleware( continuation.resume(isEngineSupported) }, onError = { error -> - context.store.dispatch( + store.dispatch( TranslationsAction.EngineExceptionAction( error = TranslationError.UnknownEngineSupportError(error), ), @@ -300,18 +300,18 @@ class TranslationsMiddleware( * to set the error both on the [BrowserState.translationEngine] and * [SessionState.translationsState]. * - * @param context Context to use to dispatch to the store. + * @param store Store to use to dispatch to the store. * @param tabId If a Tab ID associated with the request for error handling. * If null, this will only dispatch errors on the global translations browser state. * */ private fun requestSupportedLanguages( - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, tabId: String? = null, ) { engine.getSupportedTranslationLanguages( onSuccess = { - context.store.dispatch( + store.dispatch( TranslationsAction.SetSupportedLanguagesAction( supportedLanguages = it, ), @@ -319,7 +319,7 @@ class TranslationsMiddleware( // Ensures error is cleared, if a tab made this request. if (tabId != null) { - context.store.dispatch( + store.dispatch( TranslationsAction.TranslateSuccessAction( tabId = tabId, operation = TranslationOperation.FETCH_SUPPORTED_LANGUAGES, @@ -330,14 +330,14 @@ class TranslationsMiddleware( logger.info("Success requesting supported languages.") }, onError = { - context.store.dispatch( + store.dispatch( TranslationsAction.EngineExceptionAction( error = TranslationError.CouldNotLoadLanguagesError(it), ), ) if (tabId != null) { - context.store.dispatch( + store.dispatch( TranslationsAction.TranslateExceptionAction( tabId = tabId, operation = TranslationOperation.FETCH_SUPPORTED_LANGUAGES, @@ -365,18 +365,18 @@ class TranslationsMiddleware( * to set the error both on the [BrowserState.translationEngine] and * [SessionState.translationsState]. * - * @param context Context to use to dispatch to the store. + * @param store Store to use to dispatch to the store. * @param tabId If a Tab ID associated with the request for error handling. * If null, this will only dispatch errors on the global translations browser state. * */ private fun requestLanguageModels( - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, tabId: String? = null, ) { engine.getTranslationsModelDownloadStates( onSuccess = { - context.store.dispatch( + store.dispatch( TranslationsAction.SetLanguageModelsAction( languageModels = it, ), @@ -384,14 +384,14 @@ class TranslationsMiddleware( logger.info("Success requesting language models.") }, onError = { error -> - context.store.dispatch( + store.dispatch( TranslationsAction.EngineExceptionAction( error = TranslationError.ModelCouldNotRetrieveError(error), ), ) if (tabId != null) { - context.store.dispatch( + store.dispatch( TranslationsAction.TranslateExceptionAction( tabId = tabId, operation = TranslationOperation.FETCH_LANGUAGE_MODELS, @@ -411,16 +411,16 @@ class TranslationsMiddleware( * dispatches the failure via [TranslationsAction.EngineExceptionAction] and * when a [tabId] is provided, [TranslationsAction.TranslateExceptionAction]. * - * @param context Context to use to dispatch to the store. + * @param store Store to use to dispatch to the store. * @param tabId Tab ID associated with the request. */ private fun requestNeverTranslateSites( - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, tabId: String? = null, ) { engine.getNeverTranslateSiteList( onSuccess = { - context.store.dispatch( + store.dispatch( TranslationsAction.SetNeverTranslateSitesAction( neverTranslateSites = it, ), @@ -428,13 +428,13 @@ class TranslationsMiddleware( logger.info("Success requesting never translate sites.") }, onError = { - context.store.dispatch( + store.dispatch( TranslationsAction.EngineExceptionAction( error = TranslationError.CouldNotLoadNeverTranslateSites(it), ), ) if (tabId != null) { - context.store.dispatch( + store.dispatch( TranslationsAction.TranslateExceptionAction( tabId = tabId, operation = TranslationOperation.FETCH_NEVER_TRANSLATE_SITES, @@ -452,11 +452,11 @@ class TranslationsMiddleware( * store via [TranslationsAction.SetNeverTranslateSitesAction] or else dispatches the failure * [TranslationsAction.TranslateExceptionAction]. * - * @param context Context to use to dispatch to the store. + * @param store Store to use to dispatch to the store. * @param origin A site origin URI that will have the specified never translate permission set. */ private fun removeNeverTranslateSite( - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, origin: String, ) { engine.setNeverTranslateSpecifiedSite( @@ -469,7 +469,7 @@ class TranslationsMiddleware( logger.error("Error removing site from never translate list: ", it) // Fetch never translate sites to ensure the state matches the engine, because it // was proactively removed in the reducer. - requestNeverTranslateSites(context) + requestNeverTranslateSites(store) }, ) } @@ -479,11 +479,11 @@ class TranslationsMiddleware( * store via [TranslationsAction.SetPageSettingsAction] or else dispatches the failure * [TranslationsAction.TranslateExceptionAction]. * - * @param context Context to use to dispatch to the store. + * @param store Store to use to dispatch to the store. * @param tabId Tab ID associated with the request. */ private suspend fun requestPageSettings( - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, tabId: String, ) { logger.info("Requesting page settings.") @@ -491,14 +491,14 @@ class TranslationsMiddleware( val alwaysOfferPopup: Boolean = engine.getTranslationsOfferPopup() // Page language settings - val pageLanguage = context.store.state.findTab(tabId) + val pageLanguage = store.state.findTab(tabId) ?.translationsState?.translationEngineState?.detectedLanguages?.documentLangTag val setting = pageLanguage?.let { getLanguageSetting(it) } val alwaysTranslateLanguage = setting?.toBoolean(LanguageSetting.ALWAYS) val neverTranslateLanguage = setting?.toBoolean(LanguageSetting.NEVER) // Never translate site - val engineSession = context.store.state.findTab(tabId) + val engineSession = store.state.findTab(tabId) ?.engineState?.engineSession val neverTranslateSite = engineSession?.let { getNeverTranslateSiteSetting(it) } @@ -508,7 +508,7 @@ class TranslationsMiddleware( neverTranslateSite != null ) { logger.info("Successfully found all page settings.") - context.store.dispatch( + store.dispatch( TranslationsAction.SetPageSettingsAction( tabId = tabId, pageSettings = TranslationPageSettings( @@ -522,7 +522,7 @@ class TranslationsMiddleware( } else { logger.error("Could not find all page settings.") // Any null values indicate something went wrong, alert an error occurred - context.store.dispatch( + store.dispatch( TranslationsAction.TranslateExceptionAction( tabId = tabId, operation = TranslationOperation.FETCH_PAGE_SETTINGS, @@ -537,17 +537,17 @@ class TranslationsMiddleware( * store via [TranslationsAction.SetGlobalOfferTranslateSettingAction]. Will additionally * dispatch a request to update page settings, when a [tabId] is provided. * - * @param context Context to use to dispatch to the store. + * @param store Store to use to dispatch to the store. * @param tabId Tab ID associated with the request. */ private fun requestOfferSetting( - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, tabId: String? = null, ) { logger.info("Requesting offer setting.") val alwaysOfferPopup: Boolean = engine.getTranslationsOfferPopup() - context.store.dispatch( + store.dispatch( TranslationsAction.SetGlobalOfferTranslateSettingAction( offerTranslation = alwaysOfferPopup, ), @@ -555,7 +555,7 @@ class TranslationsMiddleware( if (tabId != null) { // Fetch page settings to ensure the state matches the engine. - context.store.dispatch( + store.dispatch( TranslationsAction.OperationRequestedAction( tabId = tabId, operation = TranslationOperation.FETCH_PAGE_SETTINGS, @@ -601,17 +601,17 @@ class TranslationsMiddleware( * to set the error both on the [BrowserState.translationEngine] and * [SessionState.translationsState]. * - * @param context Context to use to dispatch to the store. + * @param store Store to use to dispatch to the store. * @param tabId If a Tab ID is associated with the request for error handling. * If null, this will only dispatch errors on the global translations browser state. */ private fun requestLanguageSettings( - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, tabId: String? = null, ) { engine.getLanguageSettings( onSuccess = { settings -> - context.store.dispatch( + store.dispatch( TranslationsAction.SetLanguageSettingsAction( languageSettings = settings, ), @@ -619,14 +619,14 @@ class TranslationsMiddleware( logger.info("Success requesting language settings.") }, onError = { - context.store.dispatch( + store.dispatch( TranslationsAction.EngineExceptionAction( error = TranslationError.CouldNotLoadLanguageSettingsError(it), ), ) if (tabId != null) { - context.store.dispatch( + store.dispatch( TranslationsAction.TranslateExceptionAction( tabId = tabId, operation = TranslationOperation.FETCH_AUTOMATIC_LANGUAGE_SETTINGS, @@ -667,13 +667,13 @@ class TranslationsMiddleware( * [SessionState.translationsState] on the [BrowserStore] * via [TranslationsAction.SetTranslationDownloadSizeAction]. * - * @param context Context to use to dispatch to the store. + * @param store Store to use to dispatch to the store. * @param tabId Tab ID associated with the request. * @param fromLanguage The from language to request the translation download size for. * @param toLanguage The to language to request the translation download size for. */ private fun requestTranslationSize( - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, tabId: String, fromLanguage: Language, toLanguage: Language, @@ -682,7 +682,7 @@ class TranslationsMiddleware( fromLanguage = fromLanguage.code, toLanguage = toLanguage.code, onSuccess = { size -> - context.store.dispatch( + store.dispatch( TranslationsAction.SetTranslationDownloadSizeAction( tabId = tabId, translationSize = TranslationDownloadSize( @@ -696,7 +696,7 @@ class TranslationsMiddleware( logger.info("Success requesting download size.") }, onError = { error -> - context.store.dispatch( + store.dispatch( TranslationsAction.SetTranslationDownloadSizeAction( tabId = tabId, translationSize = TranslationDownloadSize( @@ -722,16 +722,16 @@ class TranslationsMiddleware( * * If no defaults are available, then no action will occur. * - * @param context Context to use to dispatch to the store. + * @param store Store to use to dispatch to the store. * @param tabId Tab ID associated with the request. */ private fun requestDefaultModelDownloadSize( - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, tabId: String, ) { - val fromLanguage = getDefaultFromLanguage(context, tabId) ?: return - val toLanguage = getDefaultToLanguage(context, tabId) ?: return - context.store.dispatch( + val fromLanguage = getDefaultFromLanguage(store, tabId) ?: return + val toLanguage = getDefaultToLanguage(store, tabId) ?: return + store.dispatch( TranslationsAction.FetchTranslationDownloadSizeAction( tabId = tabId, fromLanguage = fromLanguage, @@ -758,21 +758,21 @@ class TranslationsMiddleware( * If an error occurs, then the method will request the page settings be re-fetched and set on * the browser store. * - * @param context The context used to request the page settings. + * @param store The store used to request the page settings. * @param tabId Tab ID associated with the request. * @param setting The value of the always offer setting to update. * @param settingType If the boolean to update is from the * [LanguageSetting.ALWAYS] or [LanguageSetting.NEVER] perspective. */ private fun updateLanguagePageSetting( - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, tabId: String, setting: Boolean, settingType: LanguageSetting, ) { logger.info("Preparing to update the translations language preference.") - val pageLanguage = context.store.state.findTab(tabId) + val pageLanguage = store.state.findTab(tabId) ?.translationsState?.translationEngineState?.detectedLanguages?.documentLangTag val convertedSetting = settingType.toLanguageSetting(setting) @@ -780,7 +780,7 @@ class TranslationsMiddleware( logger.info("An issue occurred while preparing to update the language setting.") // Fetch page settings to ensure the state matches the engine. - context.store.dispatch( + store.dispatch( TranslationsAction.OperationRequestedAction( tabId = tabId, operation = TranslationOperation.FETCH_PAGE_SETTINGS, @@ -788,7 +788,7 @@ class TranslationsMiddleware( ) } else { logger.info("Updating language setting.") - updateLanguageSetting(context, tabId, pageLanguage, convertedSetting) + updateLanguageSetting(store, tabId, pageLanguage, convertedSetting) } } @@ -798,13 +798,13 @@ class TranslationsMiddleware( * If an error occurs, and a [tabId] is known then the method will request the page settings be * re-fetched and set on the browser store. * - * @param context The context used to request the page settings. + * @param store The store used to request the page settings. * @param tabId Tab ID associated with the request. * @param languageCode The BCP-47 language to update. * @param setting The new language setting for the [languageCode]. */ private fun updateLanguageSetting( - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, tabId: String? = null, languageCode: String, setting: LanguageSetting, @@ -820,7 +820,7 @@ class TranslationsMiddleware( if (tabId != null) { // Ensure the session's page settings remain in sync with this update. - context.store.dispatch( + store.dispatch( TranslationsAction.OperationRequestedAction( tabId = tabId, operation = TranslationOperation.FETCH_AUTOMATIC_LANGUAGE_SETTINGS, @@ -834,11 +834,11 @@ class TranslationsMiddleware( logger.error("Could not update the language preference.", it) // The browser store [TranslationsBrowserState.languageSettings] is out of sync, // re-request to sync the state. - requestLanguageSettings(context, tabId) + requestLanguageSettings(store, tabId) if (tabId != null) { // Fetch page settings to ensure the state matches the engine. - context.store.dispatch( + store.dispatch( TranslationsAction.OperationRequestedAction( tabId = tabId, operation = TranslationOperation.FETCH_PAGE_SETTINGS, @@ -858,16 +858,16 @@ class TranslationsMiddleware( * * Note: This method should be used when on the same page as the requested change. * - * @param context The context used to request the page settings. + * @param store The store used to request the page settings. * @param tabId Tab ID associated with the request. * @param setting The value of the site setting to update. */ private fun updateNeverTranslateSitePageSetting( - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, tabId: String, setting: Boolean, ) { - val engineSession = context.store.state.findTab(tabId) + val engineSession = store.state.findTab(tabId) ?.engineState?.engineSession if (engineSession == null) { @@ -879,7 +879,7 @@ class TranslationsMiddleware( logger.info("Successfully updated the never translate site preference.") // Ensure the global sites store is in-sync with the page settings. - context.store.dispatch( + store.dispatch( TranslationsAction.OperationRequestedAction( tabId = tabId, operation = TranslationOperation.FETCH_NEVER_TRANSLATE_SITES, @@ -890,7 +890,7 @@ class TranslationsMiddleware( logger.error("Could not update the never translate site preference.", it) // Fetch page settings to ensure the state matches the engine. - context.store.dispatch( + store.dispatch( TranslationsAction.OperationRequestedAction( tabId = tabId, operation = TranslationOperation.FETCH_PAGE_SETTINGS, @@ -905,18 +905,18 @@ class TranslationsMiddleware( * Helper to find the default "from" language for a site using the page detected language and * engine supported languages. * - * @param context The context used to request the information from the store. + * @param store The store used to request the information from the store. * @param tabId Tab ID associated with the request. * @return The default expected translate "from" language, which is the page language or null * if unavailable or an unsupported language by the engine. */ private fun getDefaultFromLanguage( - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, tabId: String, ): Language? { - val pageLang = context.store.state.findTab(tabId) + val pageLang = store.state.findTab(tabId) ?.translationsState?.translationEngineState?.detectedLanguages?.documentLangTag ?: return null - val supportedLanguages = context.store.state.translationEngine.supportedLanguages ?: return null + val supportedLanguages = store.state.translationEngine.supportedLanguages ?: return null return supportedLanguages.findLanguage(pageLang) } @@ -924,18 +924,18 @@ class TranslationsMiddleware( * Helper to find the default "to" language using the user's preferred language and * engine supported languages. * - * @param context The context used to request the information from the store. + * @param store The store used to request the information from the store. * @param tabId Tab ID associated with the request. * @return The default translate "to" language, which is the user's preferred language or null * if unavailable or an unsupported language by the engine. */ private fun getDefaultToLanguage( - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, tabId: String, ): Language? { - val userPreferredLang = context.store.state.findTab(tabId) + val userPreferredLang = store.state.findTab(tabId) ?.translationsState?.translationEngineState?.detectedLanguages?.userPreferredLangTag ?: return null - val supportedLanguages = context.store.state.translationEngine.supportedLanguages ?: return null + val supportedLanguages = store.state.translationEngine.supportedLanguages ?: return null return supportedLanguages.findLanguage(userPreferredLang) } @@ -945,12 +945,12 @@ class TranslationsMiddleware( * Examples of operations include downloading and deleting individual models, all models, * or the cache. * - * @param context The context used to update the language models. + * @param store The store used to update the language models. * @param options The change and specified language models that should change state. */ @Suppress("CognitiveComplexMethod") private fun updateLanguageModel( - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, options: ModelManagementOptions, ) { logger.info("Requesting the translations engine update the language model(s).") @@ -965,13 +965,13 @@ class TranslationsMiddleware( ModelState.NOT_DOWNLOADED } val newModelState = LanguageModel.determineNewLanguageModelState( - appLanguage = context.store.state.locale?.language.toString(), - currentLanguageModels = context.store.state.translationEngine.languageModels, + appLanguage = store.state.locale?.language.toString(), + currentLanguageModels = store.state.translationEngine.languageModels, options = options, newStatus = processState, ) if (newModelState != null) { - context.store.dispatch( + store.dispatch( TranslationsAction.SetLanguageModelsAction( languageModels = newModelState, ), @@ -979,7 +979,7 @@ class TranslationsMiddleware( if (!areModelsProcessing(newModelState)) { // Refresh state to ensure we have the latest model sizes. // Sizes can change if pivots are required and acquired or deleted. - requestLanguageModels(context) + requestLanguageModels(store) } logger.info("Successfully updated the language model(s).") @@ -990,7 +990,7 @@ class TranslationsMiddleware( "Re-requesting state be retrieved from the engine.", ) // Unexpectedly lost state, so check with the engine to put it back in-sync. - requestLanguageModels(context) + requestLanguageModels(store) } }, onError = { error -> @@ -1003,14 +1003,14 @@ class TranslationsMiddleware( ModelState.ERROR_DELETION } val errorModelState = LanguageModel.determineNewLanguageModelState( - appLanguage = context.store.state.locale?.language.toString(), - currentLanguageModels = context.store.state.translationEngine.languageModels, + appLanguage = store.state.locale?.language.toString(), + currentLanguageModels = store.state.translationEngine.languageModels, options = options, newStatus = errorState, ) if (errorModelState != null) { - context.store.dispatch( + store.dispatch( TranslationsAction.SetLanguageModelsAction( languageModels = errorModelState, ), @@ -1022,10 +1022,10 @@ class TranslationsMiddleware( "Re-requesting state be retrieved from the engine.", ) // Unexpectedly lost state, so check with the engine to put it back in-sync. - requestLanguageModels(context) + requestLanguageModels(store) } - context.store.dispatch( + store.dispatch( TranslationsAction.EngineExceptionAction( error = TranslationError.LanguageModelUpdateError(error), ), diff --git a/mobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/engine/middleware/TrimMemoryMiddleware.kt b/mobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/engine/middleware/TrimMemoryMiddleware.kt @@ -13,7 +13,7 @@ import mozilla.components.browser.state.state.BrowserState import mozilla.components.browser.state.state.SessionState import mozilla.components.browser.state.state.TabSessionState import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store import mozilla.components.support.base.log.logger.Logger // The number of tabs we keep active and do not suspend (in addition to the selected tab) @@ -26,33 +26,33 @@ internal class TrimMemoryMiddleware : Middleware<BrowserState, BrowserAction> { private val logger = Logger("TrimMemoryMiddleware") override fun invoke( - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, next: (BrowserAction) -> Unit, action: BrowserAction, ) { next(action) if (action is SystemAction.LowMemoryAction) { - trimMemory(context, action) + trimMemory(store, action) } } private fun trimMemory( - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, action: SystemAction.LowMemoryAction, ) { if (!shouldCloseEngineSessions(action.level)) { return } - val suspendTabs = determineTabsToSuspend(context.store.state) + val suspendTabs = determineTabsToSuspend(store.state) - logger.info("Trim memory (tabs=${context.store.state.allTabs.size}, suspending=${suspendTabs.size})") + logger.info("Trim memory (tabs=${store.state.allTabs.size}, suspending=${suspendTabs.size})") // This is not the most efficient way of doing this. We are looping over all tabs and then // dispatching a SuspendEngineSessionAction for each tab that is no longer needed. suspendTabs.forEach { tab -> - context.store.dispatch(EngineAction.SuspendEngineSessionAction(tab.id)) + store.dispatch(EngineAction.SuspendEngineSessionAction(tab.id)) } } diff --git a/mobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/engine/middleware/WebExtensionMiddleware.kt b/mobile/android/android-components/components/browser/state/src/main/java/mozilla/components/browser/state/engine/middleware/WebExtensionMiddleware.kt @@ -12,7 +12,7 @@ import mozilla.components.browser.state.selector.findTab import mozilla.components.browser.state.state.BrowserState import mozilla.components.concept.engine.EngineSession import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store import mozilla.components.support.base.log.logger.Logger /** @@ -23,14 +23,14 @@ internal class WebExtensionMiddleware : Middleware<BrowserState, BrowserAction> private val logger = Logger("WebExtensionsMiddleware") override fun invoke( - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, next: (BrowserAction) -> Unit, action: BrowserAction, ) { when (action) { is EngineAction.UnlinkEngineSessionAction -> { - if (context.store.state.activeWebExtensionTabId == action.tabId) { - val activeTab = context.store.state.findTab(action.tabId) + if (store.state.activeWebExtensionTabId == action.tabId) { + val activeTab = store.state.findTab(action.tabId) activeTab?.engineState?.engineSession?.markActiveForWebExtensions(false) } } @@ -45,7 +45,7 @@ internal class WebExtensionMiddleware : Middleware<BrowserState, BrowserAction> is TabListAction, is EngineAction.LinkEngineSessionAction, -> { - switchActiveStateIfNeeded(context) + switchActiveStateIfNeeded(store) } else -> { // no-op @@ -53,8 +53,8 @@ internal class WebExtensionMiddleware : Middleware<BrowserState, BrowserAction> } } - private fun switchActiveStateIfNeeded(context: MiddlewareContext<BrowserState, BrowserAction>) { - val state = context.store.state + private fun switchActiveStateIfNeeded(store: Store<BrowserState, BrowserAction>) { + val state = store.state if (state.activeWebExtensionTabId == state.selectedTabId) { return } @@ -67,12 +67,12 @@ internal class WebExtensionMiddleware : Middleware<BrowserState, BrowserAction> if (engineSession == null) { logger.debug("No engine session for new active tab (${nextActiveTab?.id})") - context.store.dispatch(WebExtensionAction.UpdateActiveWebExtensionTabAction(null)) + store.dispatch(WebExtensionAction.UpdateActiveWebExtensionTabAction(null)) return } else { logger.debug("New active tab (${nextActiveTab.id})") engineSession.markActiveForWebExtensions(true) - context.store.dispatch(WebExtensionAction.UpdateActiveWebExtensionTabAction(nextActiveTab.id)) + store.dispatch(WebExtensionAction.UpdateActiveWebExtensionTabAction(nextActiveTab.id)) } } } diff --git a/mobile/android/android-components/components/browser/state/src/test/java/mozilla/components/browser/state/engine/middleware/TabsRemovedMiddlewareTest.kt b/mobile/android/android-components/components/browser/state/src/test/java/mozilla/components/browser/state/engine/middleware/TabsRemovedMiddlewareTest.kt @@ -17,7 +17,7 @@ import mozilla.components.browser.state.state.createTab import mozilla.components.browser.state.store.BrowserStore import mozilla.components.concept.engine.EngineSession import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store import mozilla.components.support.test.mock import mozilla.components.support.test.rule.MainCoroutineRule import mozilla.components.support.test.rule.runTestOnMain @@ -218,7 +218,7 @@ class TabsRemovedMiddlewareTest { // TabsRemovedMiddleware processed the action. private class ConsumeRemoveTabActionsMiddleware : Middleware<BrowserState, BrowserAction> { override fun invoke( - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, next: (BrowserAction) -> Unit, action: BrowserAction, ) { diff --git a/mobile/android/android-components/components/browser/state/src/test/java/mozilla/components/browser/state/engine/middleware/TranslationsMiddlewareTest.kt b/mobile/android/android-components/components/browser/state/src/test/java/mozilla/components/browser/state/engine/middleware/TranslationsMiddlewareTest.kt @@ -7,7 +7,6 @@ package mozilla.components.browser.state.engine.middleware import kotlinx.coroutines.test.StandardTestDispatcher import kotlinx.coroutines.test.TestScope import kotlinx.coroutines.test.runTest -import mozilla.components.browser.state.action.BrowserAction import mozilla.components.browser.state.action.InitAction import mozilla.components.browser.state.action.LocaleAction import mozilla.components.browser.state.action.TranslationsAction @@ -34,7 +33,6 @@ import mozilla.components.concept.engine.translate.TranslationOperation import mozilla.components.concept.engine.translate.TranslationPageSettingOperation import mozilla.components.concept.engine.translate.TranslationPageSettings import mozilla.components.concept.engine.translate.TranslationSupport -import mozilla.components.lib.state.MiddlewareContext import mozilla.components.support.test.any import mozilla.components.support.test.argumentCaptor import mozilla.components.support.test.eq @@ -60,7 +58,6 @@ class TranslationsMiddlewareTest { private lateinit var tabs: List<TabSessionState> private lateinit var state: BrowserState private lateinit var store: BrowserStore - private lateinit var context: MiddlewareContext<BrowserState, BrowserAction> // Mock Variables private val mockFrom = Language(code = "es", localizedDisplayName = "Spanish") @@ -91,10 +88,8 @@ class TranslationsMiddlewareTest { state = spy(BrowserState(tabs = tabs, selectedTabId = tab.id)) translationsMiddleware = TranslationsMiddleware(engine = engine, scope = scope) store = spy(BrowserStore(middleware = listOf(translationsMiddleware), initialState = state)) - context = mock<MiddlewareContext<BrowserState, BrowserAction>>() - whenever(context.store).thenReturn(store) - whenever(context.store.state).thenReturn(state) + whenever(store.state).thenReturn(state) mockLanguageModels = mutableListOf(mockLanguageModel) } @@ -128,7 +123,7 @@ class TranslationsMiddlewareTest { operation = TranslationOperation.FETCH_SUPPORTED_LANGUAGES, ) - translationsMiddleware.invoke(context = context, next = {}, action = action) + translationsMiddleware.invoke(store = store, next = {}, action = action) scope.testScheduler.advanceUntilIdle() // Verify results @@ -143,13 +138,13 @@ class TranslationsMiddlewareTest { scope.testScheduler.advanceUntilIdle() - verify(context.store, atLeastOnce()).dispatch( + verify(store, atLeastOnce()).dispatch( TranslationsAction.SetSupportedLanguagesAction( supportedLanguages = supportedLanguages, ), ) - verify(context.store, atLeastOnce()).dispatch( + verify(store, atLeastOnce()).dispatch( TranslationsAction.TranslateSuccessAction( tabId = tab.id, operation = TranslationOperation.FETCH_SUPPORTED_LANGUAGES, @@ -166,7 +161,7 @@ class TranslationsMiddlewareTest { operation = TranslationOperation.FETCH_SUPPORTED_LANGUAGES, ) - translationsMiddleware.invoke(context = context, next = {}, action = action) + translationsMiddleware.invoke(store = store, next = {}, action = action) scope.testScheduler.advanceUntilIdle() // Verify results @@ -196,7 +191,7 @@ class TranslationsMiddlewareTest { fun `WHEN InitAction is dispatched THEN InitTranslationsBrowserState is also dispatched`() = runTest { // Send Action // Note: Will cause a double InitAction - translationsMiddleware.invoke(context = context, next = {}, action = InitAction) + translationsMiddleware.invoke(store = store, next = {}, action = InitAction) scope.testScheduler.advanceUntilIdle() verify(store, atLeastOnce()).dispatch( @@ -211,7 +206,7 @@ class TranslationsMiddlewareTest { automaticallyInitialize = false, scope = scope, ) - middleware.invoke(context = context, next = {}, action = InitAction) + middleware.invoke(store = store, next = {}, action = InitAction) scope.testScheduler.advanceUntilIdle() verify(store, never()).dispatch( @@ -222,7 +217,7 @@ class TranslationsMiddlewareTest { @Test fun `WHEN InitTranslationsBrowserState is dispatched AND the engine is supported THEN SetSupportedLanguagesAction is also dispatched`() = runTest { // Send Action - translationsMiddleware.invoke(context = context, next = {}, action = TranslationsAction.InitTranslationsBrowserState) + translationsMiddleware.invoke(store = store, next = {}, action = TranslationsAction.InitTranslationsBrowserState) scope.testScheduler.advanceUntilIdle() // Set the engine to support @@ -257,7 +252,7 @@ class TranslationsMiddlewareTest { @Test fun `WHEN InitTranslationsBrowserState is dispatched AND the engine is supported THEN SetLanguageSettingsAction is also dispatched`() = runTest { // Send Action - translationsMiddleware.invoke(context = context, next = {}, action = TranslationsAction.InitTranslationsBrowserState) + translationsMiddleware.invoke(store = store, next = {}, action = TranslationsAction.InitTranslationsBrowserState) scope.testScheduler.advanceUntilIdle() // Set the engine to support @@ -290,7 +285,7 @@ class TranslationsMiddlewareTest { @Test fun `WHEN InitTranslationsBrowserState is dispatched AND an error occurs THEN TranslateExceptionAction is dispatched for language settings`() = runTest { // Send Action - translationsMiddleware.invoke(context = context, next = {}, action = TranslationsAction.InitTranslationsBrowserState) + translationsMiddleware.invoke(store = store, next = {}, action = TranslationsAction.InitTranslationsBrowserState) scope.testScheduler.advanceUntilIdle() // Set the engine to support @@ -322,7 +317,7 @@ class TranslationsMiddlewareTest { @Test fun `WHEN InitTranslationsBrowserState is dispatched AND the engine is supported THEN SetLanguageModelsAction is also dispatched`() = runTest { // Send Action - translationsMiddleware.invoke(context = context, next = {}, action = TranslationsAction.InitTranslationsBrowserState) + translationsMiddleware.invoke(store = store, next = {}, action = TranslationsAction.InitTranslationsBrowserState) scope.testScheduler.advanceUntilIdle() // Set the engine to support val engineSupportedCallback = argumentCaptor<((Boolean) -> Unit)>() @@ -349,7 +344,7 @@ class TranslationsMiddlewareTest { @Test fun `WHEN InitTranslationsBrowserState is dispatched AND the engine is supported THEN SetNeverTranslateSitesAction is also dispatched`() = runTest { // Send Action - translationsMiddleware.invoke(context = context, next = {}, action = TranslationsAction.InitTranslationsBrowserState) + translationsMiddleware.invoke(store = store, next = {}, action = TranslationsAction.InitTranslationsBrowserState) scope.testScheduler.advanceUntilIdle() // Set the engine to support @@ -379,7 +374,7 @@ class TranslationsMiddlewareTest { fun `WHEN InitTranslationsBrowserState is dispatched AND has an issue with the engine THEN EngineExceptionAction is dispatched`() = runTest { // Send Action // Note: Implicitly called once due to connection with InitAction - translationsMiddleware.invoke(context = context, next = {}, action = TranslationsAction.InitTranslationsBrowserState) + translationsMiddleware.invoke(store = store, next = {}, action = TranslationsAction.InitTranslationsBrowserState) scope.testScheduler.advanceUntilIdle() // Check expectations @@ -402,7 +397,7 @@ class TranslationsMiddlewareTest { fun `WHEN InitTranslationsBrowserState is dispatched AND the engine is not supported THEN SetSupportedLanguagesAction and SetLanguageModelsAction are NOT dispatched`() = runTest { // Send Action // Will invoke a double InitAction - translationsMiddleware.invoke(context = context, next = {}, action = TranslationsAction.InitTranslationsBrowserState) + translationsMiddleware.invoke(store = store, next = {}, action = TranslationsAction.InitTranslationsBrowserState) scope.testScheduler.advanceUntilIdle() // Set the engine to not support @@ -423,7 +418,7 @@ class TranslationsMiddlewareTest { setupMockState() // Action - translationsMiddleware.invoke(context = context, next = {}, action = TranslationsAction.TranslateExpectedAction(tab.id)) + translationsMiddleware.invoke(store = store, next = {}, action = TranslationsAction.TranslateExpectedAction(tab.id)) scope.testScheduler.advanceUntilIdle() @@ -441,7 +436,7 @@ class TranslationsMiddlewareTest { fun `WHEN TranslateExpectedAction is dispatched AND the defaults are NOT available THEN FetchTranslationDownloadSizeAction is NOT dispatched`() = runTest { // Note, no state is set on the engine, so no default values are available. // Action - translationsMiddleware.invoke(context = context, next = {}, action = TranslationsAction.TranslateExpectedAction(tab.id)) + translationsMiddleware.invoke(store = store, next = {}, action = TranslationsAction.TranslateExpectedAction(tab.id)) scope.testScheduler.advanceUntilIdle() @@ -480,7 +475,7 @@ class TranslationsMiddlewareTest { tabId = tab.id, operation = TranslationOperation.FETCH_PAGE_SETTINGS, ) - translationsMiddleware.invoke(context, {}, action) + translationsMiddleware.invoke(store = store, {}, action) scope.testScheduler.advanceUntilIdle() // Check Behavior @@ -527,7 +522,7 @@ class TranslationsMiddlewareTest { tabId = tab.id, operation = TranslationOperation.FETCH_PAGE_SETTINGS, ) - translationsMiddleware.invoke(context, {}, action) + translationsMiddleware.invoke(store = store, {}, action) scope.testScheduler.advanceUntilIdle() // Check Behavior @@ -580,7 +575,7 @@ class TranslationsMiddlewareTest { operation = TranslationPageSettingOperation.UPDATE_ALWAYS_TRANSLATE_LANGUAGE, setting = true, ) - translationsMiddleware.invoke(context, {}, action) + translationsMiddleware.invoke(store = store, {}, action) scope.testScheduler.advanceUntilIdle() // Verify Dispatch @@ -600,7 +595,7 @@ class TranslationsMiddlewareTest { tabId = tab.id, operation = TranslationOperation.FETCH_AUTOMATIC_LANGUAGE_SETTINGS, ) - translationsMiddleware.invoke(context = context, next = {}, action = action) + translationsMiddleware.invoke(store = store, next = {}, action = action) scope.testScheduler.advanceUntilIdle() // Check expectations @@ -644,7 +639,7 @@ class TranslationsMiddlewareTest { operation = TranslationPageSettingOperation.UPDATE_ALWAYS_TRANSLATE_LANGUAGE, setting = true, ) - translationsMiddleware.invoke(context = context, next = {}, action = action) + translationsMiddleware.invoke(store = store, next = {}, action = action) scope.testScheduler.advanceUntilIdle() // Check expectations @@ -657,7 +652,7 @@ class TranslationsMiddlewareTest { ) // the success callback is going to be executed, which will trigger a FETCH_AUTOMATIC_LANGUAGE_SETTINGS action - verify(context.store).dispatch( + verify(store).dispatch( TranslationsAction.OperationRequestedAction( tabId = tab.id, operation = TranslationOperation.FETCH_AUTOMATIC_LANGUAGE_SETTINGS, @@ -680,7 +675,7 @@ class TranslationsMiddlewareTest { tabId = tab.id, operation = TranslationOperation.FETCH_AUTOMATIC_LANGUAGE_SETTINGS, ) - translationsMiddleware.invoke(context = context, next = {}, action = action) + translationsMiddleware.invoke(store = store, next = {}, action = action) scope.testScheduler.advanceUntilIdle() // Check expectations @@ -729,7 +724,7 @@ class TranslationsMiddlewareTest { operation = TranslationPageSettingOperation.UPDATE_NEVER_TRANSLATE_LANGUAGE, setting = true, ) - translationsMiddleware.invoke(context, {}, action) + translationsMiddleware.invoke(store = store, {}, action) scope.testScheduler.advanceUntilIdle() // Verify Dispatch @@ -762,7 +757,7 @@ class TranslationsMiddlewareTest { operation = TranslationPageSettingOperation.UPDATE_NEVER_TRANSLATE_SITE, setting = true, ) - translationsMiddleware.invoke(context, {}, action) + translationsMiddleware.invoke(store = store, {}, action) scope.testScheduler.advanceUntilIdle() // Verify Dispatch @@ -783,13 +778,13 @@ class TranslationsMiddlewareTest { tabId = tab.id, operation = TranslationOperation.FETCH_NEVER_TRANSLATE_SITES, ) - translationsMiddleware.invoke(context, {}, action) + translationsMiddleware.invoke(store = store, {}, action) scope.testScheduler.advanceUntilIdle() verify(engine).getNeverTranslateSiteList(onSuccess = sitesCallback.capture(), onError = any()) sitesCallback.value.invoke(neverTranslateSites) - verify(context.store).dispatch( + verify(store).dispatch( TranslationsAction.SetNeverTranslateSitesAction( neverTranslateSites = neverTranslateSites, ), @@ -830,7 +825,7 @@ class TranslationsMiddlewareTest { fromLanguage = translationSize.fromLanguage, toLanguage = translationSize.toLanguage, ) - translationsMiddleware.invoke(context = context, next = {}, action = action) + translationsMiddleware.invoke(store = store, next = {}, action = action) scope.testScheduler.advanceUntilIdle() val sizeCaptor = argumentCaptor<((Long) -> Unit)>() @@ -842,7 +837,7 @@ class TranslationsMiddlewareTest { ) sizeCaptor.value.invoke(translationSize.size!!) - verify(context.store).dispatch( + verify(store).dispatch( TranslationsAction.SetTranslationDownloadSizeAction( tabId = tab.id, translationSize = translationSize, @@ -858,7 +853,7 @@ class TranslationsMiddlewareTest { fromLanguage = Language("en", "English"), toLanguage = Language("fr", "French"), ) - translationsMiddleware.invoke(context = context, next = {}, action = action) + translationsMiddleware.invoke(store = store, next = {}, action = action) scope.testScheduler.advanceUntilIdle() val errorCaptor = argumentCaptor<((Throwable) -> Unit)>() @@ -871,7 +866,7 @@ class TranslationsMiddlewareTest { errorCaptor.value.invoke(TranslationError.CouldNotDetermineDownloadSizeError(cause = null)) scope.testScheduler.advanceUntilIdle() - verify(context.store).dispatch( + verify(store).dispatch( TranslationsAction.SetTranslationDownloadSizeAction( tabId = tab.id, translationSize = TranslationDownloadSize( @@ -900,7 +895,7 @@ class TranslationsMiddlewareTest { TranslationsAction.RemoveNeverTranslateSiteAction( origin = "google.com", ) - translationsMiddleware.invoke(context, {}, action) + translationsMiddleware.invoke(store = store, {}, action) scope.testScheduler.advanceUntilIdle() val neverTranslateSitesCallBack = argumentCaptor<((List<String>) -> Unit)>() @@ -926,14 +921,14 @@ class TranslationsMiddlewareTest { tabId = tab.id, operation = TranslationOperation.FETCH_LANGUAGE_MODELS, ) - translationsMiddleware.invoke(context, {}, action) + translationsMiddleware.invoke(store = store, {}, action) scope.testScheduler.advanceUntilIdle() // Verify results verify(engine, atLeastOnce()).getTranslationsModelDownloadStates(onSuccess = languageCallback.capture(), onError = any()) languageCallback.value.invoke(mockLanguageModels) - verify(context.store, atLeastOnce()).dispatch( + verify(store, atLeastOnce()).dispatch( TranslationsAction.SetLanguageModelsAction( languageModels = mockLanguageModels, ), @@ -955,7 +950,7 @@ class TranslationsMiddlewareTest { tabId = tab.id, operation = TranslationOperation.FETCH_LANGUAGE_MODELS, ) - translationsMiddleware.invoke(context, {}, action) + translationsMiddleware.invoke(store = store, {}, action) scope.testScheduler.advanceUntilIdle() // Verify Dispatch @@ -977,7 +972,7 @@ class TranslationsMiddlewareTest { @Test fun `WHEN InitTranslationsBrowserState is dispatched AND the engine is supported THEN SetOfferTranslateSettingAction is also dispatched`() = runTest { // Send Action - translationsMiddleware.invoke(context = context, next = {}, action = TranslationsAction.InitTranslationsBrowserState) + translationsMiddleware.invoke(store = store, next = {}, action = TranslationsAction.InitTranslationsBrowserState) scope.testScheduler.advanceUntilIdle() // Set the engine to support @@ -1015,7 +1010,7 @@ class TranslationsMiddlewareTest { tabId = tab.id, operation = TranslationOperation.FETCH_OFFER_SETTING, ) - translationsMiddleware.invoke(context, {}, action) + translationsMiddleware.invoke(store = store, {}, action) scope.testScheduler.advanceUntilIdle() // Verify Dispatch @@ -1041,7 +1036,7 @@ class TranslationsMiddlewareTest { TranslationsAction.UpdateGlobalOfferTranslateSettingAction( offerTranslation = true, ) - translationsMiddleware.invoke(context, {}, action) + translationsMiddleware.invoke(store = store, {}, action) scope.testScheduler.advanceUntilIdle() // Verify offer was set @@ -1056,7 +1051,7 @@ class TranslationsMiddlewareTest { languageCode = "es", setting = LanguageSetting.ALWAYS, ) - translationsMiddleware.invoke(context, {}, action) + translationsMiddleware.invoke(store = store, {}, action) scope.testScheduler.advanceUntilIdle() @@ -1091,7 +1086,7 @@ class TranslationsMiddlewareTest { TranslationsAction.ManageLanguageModelsAction( options, ) - translationsMiddleware.invoke(context, {}, action) + translationsMiddleware.invoke(store = store, {}, action) scope.testScheduler.advanceUntilIdle() @@ -1127,7 +1122,7 @@ class TranslationsMiddlewareTest { TranslationsAction.ManageLanguageModelsAction( options, ) - translationsMiddleware.invoke(context, {}, action) + translationsMiddleware.invoke(store = store, {}, action) scope.testScheduler.advanceUntilIdle() @@ -1161,7 +1156,7 @@ class TranslationsMiddlewareTest { @Test fun `WHEN UpdateLocaleAction is dispatched THEN SetLanguageSettingsAction AND SetLanguageModelsAction are also dispatched`() = runTest { // Send Action - translationsMiddleware.invoke(context = context, next = {}, action = LocaleAction.UpdateLocaleAction(locale = Locale.forLanguageTag("es"))) + translationsMiddleware.invoke(store = store, next = {}, action = LocaleAction.UpdateLocaleAction(locale = Locale.forLanguageTag("es"))) scope.testScheduler.advanceUntilIdle() // Mock responses diff --git a/mobile/android/android-components/components/browser/thumbnails/src/main/java/mozilla/components/browser/thumbnails/ThumbnailsMiddleware.kt b/mobile/android/android-components/components/browser/thumbnails/src/main/java/mozilla/components/browser/thumbnails/ThumbnailsMiddleware.kt @@ -11,7 +11,7 @@ import mozilla.components.browser.state.state.BrowserState import mozilla.components.browser.thumbnails.storage.ThumbnailStorage import mozilla.components.concept.base.images.ImageSaveRequest import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store /** * [Middleware] implementation for handling [ContentAction.UpdateThumbnailAction] and storing @@ -21,18 +21,18 @@ class ThumbnailsMiddleware( private val thumbnailStorage: ThumbnailStorage, ) : Middleware<BrowserState, BrowserAction> { override fun invoke( - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, next: (BrowserAction) -> Unit, action: BrowserAction, ) { when (action) { is TabListAction.RemoveAllNormalTabsAction -> { - context.store.state.tabs.filterNot { it.content.private }.forEach { tab -> + store.state.tabs.filterNot { it.content.private }.forEach { tab -> thumbnailStorage.deleteThumbnail(tab.id, isPrivate = false) } } is TabListAction.RemoveAllPrivateTabsAction -> { - context.store.state.tabs.filter { it.content.private }.forEach { tab -> + store.state.tabs.filter { it.content.private }.forEach { tab -> thumbnailStorage.deleteThumbnail(tab.id, isPrivate = true) } } @@ -41,19 +41,19 @@ class ThumbnailsMiddleware( } is TabListAction.RemoveTabAction -> { // Delete the tab screenshot from the storage when the tab is removed. - val isPrivate = context.store.state.isTabIdPrivate(action.tabId) + val isPrivate = store.state.isTabIdPrivate(action.tabId) thumbnailStorage.deleteThumbnail(action.tabId, isPrivate) } is TabListAction.RemoveTabsAction -> { action.tabIds.forEach { id -> - val isPrivate = context.store.state.isTabIdPrivate(id) + val isPrivate = store.state.isTabIdPrivate(id) thumbnailStorage.deleteThumbnail(id, isPrivate) } } is ContentAction.UpdateThumbnailAction -> { // Store the captured tab screenshot from the EngineView when the session's // thumbnail is updated. - context.store.state.tabs.find { it.id == action.sessionId }?.let { session -> + store.state.tabs.find { it.id == action.sessionId }?.let { session -> val request = ImageSaveRequest(session.id, session.content.private) thumbnailStorage.saveThumbnail(request, action.thumbnail) } diff --git a/mobile/android/android-components/components/feature/containers/src/main/java/mozilla/components/feature/containers/ContainerMiddleware.kt b/mobile/android/android-components/components/feature/containers/src/main/java/mozilla/components/feature/containers/ContainerMiddleware.kt @@ -15,7 +15,6 @@ import mozilla.components.browser.state.action.InitAction import mozilla.components.browser.state.state.BrowserState import mozilla.components.browser.state.state.ContainerState import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext import mozilla.components.lib.state.Store import java.util.UUID import kotlin.coroutines.CoroutineContext @@ -33,14 +32,14 @@ class ContainerMiddleware( private var scope = CoroutineScope(coroutineContext) override fun invoke( - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, next: (BrowserAction) -> Unit, action: BrowserAction, ) { when (action) { - is InitAction -> initializeContainers(context.store) + is InitAction -> initializeContainers(store) is ContainerAction.AddContainerAction -> addContainer(action) - is ContainerAction.RemoveContainerAction -> removeContainer(context.store, action) + is ContainerAction.RemoveContainerAction -> removeContainer(store, action) else -> { // no-op } diff --git a/mobile/android/android-components/components/feature/downloads/src/main/java/mozilla/components/feature/downloads/DownloadMiddleware.kt b/mobile/android/android-components/components/feature/downloads/src/main/java/mozilla/components/feature/downloads/DownloadMiddleware.kt @@ -29,7 +29,6 @@ import mozilla.components.browser.state.state.content.DownloadState.Status.COMPL import mozilla.components.browser.state.state.content.DownloadState.Status.FAILED import mozilla.components.feature.downloads.AbstractFetchDownloadService.Companion.ACTION_REMOVE_PRIVATE_DOWNLOAD import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext import mozilla.components.lib.state.Store import mozilla.components.support.base.android.DefaultPowerManagerInfoProvider import mozilla.components.support.base.android.StartForegroundService @@ -58,19 +57,19 @@ class DownloadMiddleware( private var scope = CoroutineScope(coroutineContext) override fun invoke( - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, next: (BrowserAction) -> Unit, action: BrowserAction, ) { when (action) { - is DownloadAction.RemoveDownloadAction -> removeDownload(action.downloadId, context.store) + is DownloadAction.RemoveDownloadAction -> removeDownload(action.downloadId, store) is DownloadAction.RemoveAllDownloadsAction -> removeDownloads() - is DownloadAction.UpdateDownloadAction -> updateDownload(action.download, context) - is DownloadAction.RestoreDownloadsStateAction -> restoreDownloads(context.store) - is DownloadAction.RemoveDeletedDownloads -> removeDeletedDownloads(context.store) - is ContentAction.CancelDownloadAction -> closeDownloadResponse(context.store, action.sessionId) + is DownloadAction.UpdateDownloadAction -> updateDownload(action.download, store) + is DownloadAction.RestoreDownloadsStateAction -> restoreDownloads(store) + is DownloadAction.RemoveDeletedDownloads -> removeDeletedDownloads(store) + is ContentAction.CancelDownloadAction -> closeDownloadResponse(store, action.sessionId) is DownloadAction.AddDownloadAction -> { - if (!action.download.private && !saveDownload(context.store, action.download)) { + if (!action.download.private && !saveDownload(store, action.download)) { // The download was already added before, so we are ignoring this request. logger.debug( "Ignored add action for ${action.download.id} " + @@ -89,13 +88,13 @@ class DownloadMiddleware( when (action) { is TabListAction.RemoveAllTabsAction, is TabListAction.RemoveAllPrivateTabsAction, - -> removePrivateNotifications(context.store) + -> removePrivateNotifications(store) is TabListAction.RemoveTabsAction, is TabListAction.RemoveTabAction, -> { - val privateTabs = context.store.state.getNormalOrPrivateTabs(private = true) + val privateTabs = store.state.getNormalOrPrivateTabs(private = true) if (privateTabs.isEmpty()) { - removePrivateNotifications(context.store) + removePrivateNotifications(store) } } is DownloadAction.AddDownloadAction -> sendDownloadIntent(action.download) @@ -142,9 +141,9 @@ class DownloadMiddleware( downloadStorage.removeAllDownloads() } - private fun updateDownload(updated: DownloadState, context: MiddlewareContext<BrowserState, BrowserAction>) { + private fun updateDownload(updated: DownloadState, store: Store<BrowserState, BrowserAction>) { if (updated.private) return - context.store.state.downloads[updated.id]?.let { old -> + store.state.downloads[updated.id]?.let { old -> // To not overwhelm the storage, we only send updates that are relevant, // we only care about properties, that we are stored on the storage. if (!DownloadStorage.isSameDownload(old, updated)) { diff --git a/mobile/android/android-components/components/feature/fxsuggest/src/main/java/mozilla/components/feature/fxsuggest/facts/FxSuggestFactsMiddleware.kt b/mobile/android/android-components/components/feature/fxsuggest/src/main/java/mozilla/components/feature/fxsuggest/facts/FxSuggestFactsMiddleware.kt @@ -13,7 +13,7 @@ import mozilla.components.concept.awesomebar.AwesomeBar import mozilla.components.feature.fxsuggest.FxSuggestInteractionInfo import mozilla.components.feature.fxsuggest.FxSuggestSuggestionProvider import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store import mozilla.components.support.base.facts.Fact /** @@ -31,21 +31,21 @@ import mozilla.components.support.base.facts.Fact */ class FxSuggestFactsMiddleware : Middleware<BrowserState, BrowserAction> { override fun invoke( - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, next: (BrowserAction) -> Unit, action: BrowserAction, ) { - handleAction(context, action) + handleAction(store, action) next(action) } private fun handleAction( - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, action: BrowserAction, ) = when (action) { is AwesomeBarAction.EngagementFinished -> emitSuggestionFacts( - awesomeBarState = context.store.state.awesomeBarState, - clientCountry = context.store.state.search.region?.home ?: RegionState.Default.home, + awesomeBarState = store.state.awesomeBarState, + clientCountry = store.state.search.region?.home ?: RegionState.Default.home, engagementAbandoned = action.abandoned, ) else -> Unit diff --git a/mobile/android/android-components/components/feature/media/src/main/java/mozilla/components/feature/media/middleware/LastMediaAccessMiddleware.kt b/mobile/android/android-components/components/feature/media/src/main/java/mozilla/components/feature/media/middleware/LastMediaAccessMiddleware.kt @@ -11,7 +11,7 @@ import mozilla.components.browser.state.state.BrowserState import mozilla.components.browser.state.state.TabSessionState import mozilla.components.concept.engine.mediasession.MediaSession import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store /** * [Middleware] that updates [TabSessionState.lastMediaAccessState] everytime the user starts playing media or @@ -21,7 +21,7 @@ import mozilla.components.lib.state.MiddlewareContext class LastMediaAccessMiddleware : Middleware<BrowserState, BrowserAction> { @Suppress("ComplexCondition") override fun invoke( - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, next: (BrowserAction) -> Unit, action: BrowserAction, ) { @@ -30,9 +30,9 @@ class LastMediaAccessMiddleware : Middleware<BrowserState, BrowserAction> { if (action is MediaSessionAction.UpdateMediaPlaybackStateAction && action.playbackState == MediaSession.PlaybackState.PLAYING ) { - context.store.dispatch(LastAccessAction.UpdateLastMediaAccessAction(action.tabId)) + store.dispatch(LastAccessAction.UpdateLastMediaAccessAction(action.tabId)) } else if (action is MediaSessionAction.DeactivatedMediaSessionAction) { - context.store.dispatch(LastAccessAction.ResetLastMediaSessionAction(action.tabId)) + store.dispatch(LastAccessAction.ResetLastMediaSessionAction(action.tabId)) } } } diff --git a/mobile/android/android-components/components/feature/media/src/main/java/mozilla/components/feature/media/middleware/RecordingDevicesMiddleware.kt b/mobile/android/android-components/components/feature/media/src/main/java/mozilla/components/feature/media/middleware/RecordingDevicesMiddleware.kt @@ -23,7 +23,7 @@ import mozilla.components.concept.engine.media.RecordingDevice import mozilla.components.feature.media.R import mozilla.components.feature.media.notification.MediaNotificationChannel import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store import mozilla.components.support.base.android.NotificationsDelegate import mozilla.components.support.base.android.OnPermissionGranted import mozilla.components.support.base.ids.SharedIdsHelper @@ -49,7 +49,7 @@ class RecordingDevicesMiddleware( private var isShowingNotification: Boolean = false override fun invoke( - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, next: (BrowserAction) -> Unit, action: BrowserAction, ) { @@ -62,15 +62,15 @@ class RecordingDevicesMiddleware( action is TabListAction || action is CustomTabListAction ) { - process(context, false) + process(store, false) } } private fun process( - middlewareContext: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, isReminder: Boolean, ) { - val devices = middlewareContext.store.state.tabs + val devices = store.state.tabs .map { tab -> tab.content.recordingDevices } .flatten() .filter { device -> device.status == RecordingDevice.Status.RECORDING } @@ -91,7 +91,7 @@ class RecordingDevicesMiddleware( isReminder, processRecordingState = { isShowingNotification = false - process(middlewareContext, true) + process(store, true) }, ) } diff --git a/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/PromptMiddleware.kt b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/PromptMiddleware.kt @@ -12,7 +12,7 @@ import mozilla.components.browser.state.selector.findTab import mozilla.components.browser.state.state.BrowserState import mozilla.components.concept.engine.prompt.PromptRequest import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store /** * [Middleware] implementation for managing [PromptRequest]s. @@ -22,13 +22,13 @@ class PromptMiddleware : Middleware<BrowserState, BrowserAction> { private val scope = MainScope() override fun invoke( - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, next: (BrowserAction) -> Unit, action: BrowserAction, ) { when (action) { is ContentAction.UpdatePromptRequestAction -> { - if (shouldBlockPrompt(action, context)) { + if (shouldBlockPrompt(action, store)) { return } } @@ -42,10 +42,10 @@ class PromptMiddleware : Middleware<BrowserState, BrowserAction> { private fun shouldBlockPrompt( action: ContentAction.UpdatePromptRequestAction, - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, ): Boolean { if (action.promptRequest is PromptRequest.Popup) { - context.store.state.findTab(action.sessionId)?.let { + store.state.findTab(action.sessionId)?.let { if (it.content.promptRequests.lastOrNull { prompt -> prompt is PromptRequest.Popup } != null) { scope.launch { (action.promptRequest as PromptRequest.Popup).onDeny() diff --git a/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/file/FileUploadsDirCleanerMiddleware.kt b/mobile/android/android-components/components/feature/prompts/src/main/java/mozilla/components/feature/prompts/file/FileUploadsDirCleanerMiddleware.kt @@ -10,7 +10,7 @@ import mozilla.components.browser.state.action.ContentAction import mozilla.components.browser.state.selector.findTab import mozilla.components.browser.state.state.BrowserState import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store /** * [Middleware] that observe when a user navigates away from a site and clean up, @@ -21,13 +21,13 @@ class FileUploadsDirCleanerMiddleware( ) : Middleware<BrowserState, BrowserAction> { override fun invoke( - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, next: (BrowserAction) -> Unit, action: BrowserAction, ) { when (action) { is ContentAction.UpdateUrlAction -> { - context.store.state.findTab(action.sessionId)?.let { actualSession -> + store.state.findTab(action.sessionId)?.let { actualSession -> val actualHost = actualSession.content.url.toUri().host val newHost = action.url.toUri().host if (actualHost != newHost) { diff --git a/mobile/android/android-components/components/feature/readerview/src/main/java/mozilla/components/feature/readerview/ReaderViewMiddleware.kt b/mobile/android/android-components/components/feature/readerview/src/main/java/mozilla/components/feature/readerview/ReaderViewMiddleware.kt @@ -17,7 +17,7 @@ import mozilla.components.feature.readerview.ReaderViewFeature.Companion.READER_ import mozilla.components.feature.readerview.ReaderViewFeature.Companion.READER_VIEW_EXTENSION_ID import mozilla.components.feature.readerview.ReaderViewFeature.Companion.READER_VIEW_EXTENSION_URL import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store import mozilla.components.support.webextensions.BuiltInWebExtensionController /** @@ -35,25 +35,25 @@ class ReaderViewMiddleware : Middleware<BrowserState, BrowserAction> { ) override fun invoke( - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, next: (BrowserAction) -> Unit, action: BrowserAction, ) { - if (preProcess(context, action)) { + if (preProcess(store, action)) { next(action) - postProcess(context, action) + postProcess(store, action) } } /** * Processes the action before it is dispatched to the store. * - * @param context a reference to the [MiddlewareContext]. + * @param store a reference to the [Store]. * @param action the action to process. * @return true if the original action should be processed, otherwise false. */ private fun preProcess( - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, action: BrowserAction, ): Boolean { return when (action) { @@ -62,7 +62,7 @@ class ReaderViewMiddleware : Middleware<BrowserState, BrowserAction> { // (e.g. via a tabs tray fragment). In order to disconnect the port as // early as possible it's best to do it here directly. is EngineAction.UnlinkEngineSessionAction -> { - context.store.state.findTab(action.tabId)?.engineState?.engineSession?.let { + store.state.findTab(action.tabId)?.engineState?.engineSession?.let { extensionController.disconnectPort(it, READER_VIEW_EXTENSION_ID) } true @@ -80,19 +80,19 @@ class ReaderViewMiddleware : Middleware<BrowserState, BrowserAction> { // Change made to UpdateUrlAction so when the source page (not viewed in reader // mode) has the same url, we clear the reader mode status on url update. // https://bugzilla.mozilla.org/show_bug.cgi?id=1970308 - val tab = context.store.state.findTab(action.sessionId) + val tab = store.state.findTab(action.sessionId) if (isReaderUrl(tab, action.url)) { val urlReplaced = tab?.readerState?.activeUrl?.let { activeUrl -> - context.store.dispatch(ContentAction.UpdateUrlAction(action.sessionId, activeUrl)) + store.dispatch(ContentAction.UpdateUrlAction(action.sessionId, activeUrl)) true } ?: false - context.store.dispatch(ReaderAction.UpdateReaderActiveAction(action.sessionId, true)) + store.dispatch(ReaderAction.UpdateReaderActiveAction(action.sessionId, true)) !urlReplaced } else { - context.store.dispatch(ReaderAction.UpdateReaderActiveAction(action.sessionId, false)) - context.store.dispatch(ReaderAction.UpdateReaderableAction(action.sessionId, false)) - context.store.dispatch(ReaderAction.UpdateReaderableCheckRequiredAction(action.sessionId, true)) - context.store.dispatch(ReaderAction.ClearReaderActiveUrlAction(action.sessionId)) + store.dispatch(ReaderAction.UpdateReaderActiveAction(action.sessionId, false)) + store.dispatch(ReaderAction.UpdateReaderableAction(action.sessionId, false)) + store.dispatch(ReaderAction.UpdateReaderableCheckRequiredAction(action.sessionId, true)) + store.dispatch(ReaderAction.ClearReaderActiveUrlAction(action.sessionId)) true } } @@ -101,26 +101,26 @@ class ReaderViewMiddleware : Middleware<BrowserState, BrowserAction> { } private fun postProcess( - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, action: BrowserAction, ) { when (action) { is TabListAction.SelectTabAction -> { - context.store.dispatch(ReaderAction.UpdateReaderConnectRequiredAction(action.tabId, true)) - context.store.dispatch(ReaderAction.UpdateReaderableAction(action.tabId, false)) - context.store.dispatch(ReaderAction.UpdateReaderableCheckRequiredAction(action.tabId, true)) + store.dispatch(ReaderAction.UpdateReaderConnectRequiredAction(action.tabId, true)) + store.dispatch(ReaderAction.UpdateReaderableAction(action.tabId, false)) + store.dispatch(ReaderAction.UpdateReaderableCheckRequiredAction(action.tabId, true)) } is EngineAction.LinkEngineSessionAction -> { - context.store.dispatch(ReaderAction.UpdateReaderConnectRequiredAction(action.tabId, true)) + store.dispatch(ReaderAction.UpdateReaderConnectRequiredAction(action.tabId, true)) } is ReaderAction.UpdateReaderActiveUrlAction -> { // When a tab is restored, the reader page will connect, but we won't get a // UpdateUrlAction. We still want to mask the moz-extension:// URL though // so we update the URL here. See comment on handling UpdateUrlAction. - val tab = context.store.state.findTab(action.tabId) + val tab = store.state.findTab(action.tabId) val url = tab?.content?.url if (url != null && isReaderUrl(tab, url)) { - context.store.dispatch(ContentAction.UpdateUrlAction(tab.id, url)) + store.dispatch(ContentAction.UpdateUrlAction(tab.id, url)) } } else -> { diff --git a/mobile/android/android-components/components/feature/recentlyclosed/src/main/java/mozilla/components/feature/recentlyclosed/RecentlyClosedMiddleware.kt b/mobile/android/android-components/components/feature/recentlyclosed/src/main/java/mozilla/components/feature/recentlyclosed/RecentlyClosedMiddleware.kt @@ -17,7 +17,6 @@ import mozilla.components.browser.state.state.TabSessionState import mozilla.components.browser.state.state.recover.RecoverableTab import mozilla.components.browser.state.state.recover.TabState import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext import mozilla.components.lib.state.Store /** @@ -31,30 +30,30 @@ class RecentlyClosedMiddleware( ) : Middleware<BrowserState, BrowserAction> { override fun invoke( - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, next: (BrowserAction) -> Unit, action: BrowserAction, ) { when (action) { is UndoAction.ClearRecoverableTabs -> { - if (action.tag == context.store.state.undoHistory.tag) { + if (action.tag == store.state.undoHistory.tag) { // If the user has removed tabs and not invoked "undo" then let's save all non // private tabs. - context.store.dispatch( + store.dispatch( RecentlyClosedAction.AddClosedTabsAction( - context.store.state.undoHistory.tabs.filter { tab -> !tab.state.private }, + store.state.undoHistory.tabs.filter { tab -> !tab.state.private }, ), ) } } is UndoAction.AddRecoverableTabs -> { - if (context.store.state.undoHistory.tabs.isNotEmpty()) { + if (store.state.undoHistory.tabs.isNotEmpty()) { // If new tabs get added to the undo history and there were some previously // then add them to the list of closed tabs now since they will never go through // the clear call above. - context.store.dispatch( + store.dispatch( RecentlyClosedAction.AddClosedTabsAction( - context.store.state.undoHistory.tabs.filter { tab -> !tab.state.private }, + store.state.undoHistory.tabs.filter { tab -> !tab.state.private }, ), ) } @@ -69,7 +68,7 @@ class RecentlyClosedMiddleware( removeTab(action) } is InitAction -> { - initializeRecentlyClosed(context.store) + initializeRecentlyClosed(store) } else -> { // no-op @@ -78,7 +77,7 @@ class RecentlyClosedMiddleware( next(action) - pruneTabs(context.store) + pruneTabs(store) } private fun pruneTabs(store: Store<BrowserState, BrowserAction>) { diff --git a/mobile/android/android-components/components/feature/search/src/main/java/mozilla/components/feature/search/middleware/AdsTelemetryMiddleware.kt b/mobile/android/android-components/components/feature/search/src/main/java/mozilla/components/feature/search/middleware/AdsTelemetryMiddleware.kt @@ -12,7 +12,7 @@ import mozilla.components.browser.state.state.BrowserState import mozilla.components.browser.state.store.BrowserStore import mozilla.components.feature.search.telemetry.ads.AdsTelemetry import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store import mozilla.components.support.base.log.logger.Logger /** @@ -28,13 +28,13 @@ class AdsTelemetryMiddleware( @Suppress("TooGenericExceptionCaught") override fun invoke( - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, next: (BrowserAction) -> Unit, action: BrowserAction, ) { when (action) { is ContentAction.UpdateLoadRequestAction -> { - context.store.state.findTab(action.sessionId)?.let { tab -> + store.state.findTab(action.sessionId)?.let { tab -> // Collect all load requests in between location changes if (!redirectChain.containsKey(action.sessionId) && action.loadRequest.url != tab.content.url) { redirectChain[action.sessionId] = RedirectChain(tab.content.url) diff --git a/mobile/android/android-components/components/feature/search/src/main/java/mozilla/components/feature/search/middleware/SearchMiddleware.kt b/mobile/android/android-components/components/feature/search/src/main/java/mozilla/components/feature/search/middleware/SearchMiddleware.kt @@ -25,7 +25,6 @@ import mozilla.components.feature.search.storage.SearchEngineSelectorConfig import mozilla.components.feature.search.storage.SearchEngineSelectorRepository import mozilla.components.feature.search.storage.SearchMetadataStorage import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext import mozilla.components.lib.state.Store import mozilla.components.support.base.log.logger.Logger import java.util.Locale @@ -86,12 +85,12 @@ class SearchMiddleware( } override fun invoke( - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, next: (BrowserAction) -> Unit, action: BrowserAction, ) { when (action) { - is SearchAction.SetRegionAction -> loadSearchEngines(context.store, action.regionState, action.distribution) + is SearchAction.SetRegionAction -> loadSearchEngines(store, action.regionState, action.distribution) is SearchAction.UpdateCustomSearchEngineAction -> saveCustomSearchEngine(action) is SearchAction.RemoveCustomSearchEngineAction -> removeCustomSearchEngine(action) is SearchAction.SelectSearchEngineAction -> updateSearchEngineSelection(action) @@ -105,11 +104,11 @@ class SearchMiddleware( when (action) { is SearchAction.ShowSearchEngineAction, is SearchAction.HideSearchEngineAction, is SearchAction.RestoreHiddenSearchEnginesAction, - -> updateHiddenSearchEngines(context.store.state.search.hiddenSearchEngines) + -> updateHiddenSearchEngines(store.state.search.hiddenSearchEngines) is SearchAction.AddAdditionalSearchEngineAction, is SearchAction.RemoveAdditionalSearchEngineAction -> - updateAdditionalSearchEngines(context.store.state.search.additionalSearchEngines) + updateAdditionalSearchEngines(store.state.search.additionalSearchEngines) is SearchAction.UpdateDisabledSearchEngineIdsAction -> updateDisabledSearchEngineIds( - context.store, + store, action, ) else -> { diff --git a/mobile/android/android-components/components/feature/search/src/main/java/mozilla/components/feature/search/region/RegionMiddleware.kt b/mobile/android/android-components/components/feature/search/src/main/java/mozilla/components/feature/search/region/RegionMiddleware.kt @@ -19,7 +19,6 @@ import mozilla.components.browser.state.action.UpdateDistribution import mozilla.components.browser.state.search.RegionState import mozilla.components.browser.state.state.BrowserState import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext import mozilla.components.lib.state.Store import mozilla.components.service.location.LocationService @@ -39,14 +38,14 @@ class RegionMiddleware( internal var updateJob: Job? = null override fun invoke( - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, next: (BrowserAction) -> Unit, action: BrowserAction, ) { if (action is InitAction || action is SearchAction.RefreshSearchEnginesAction) { - updateJob = determineRegion(context.store) + updateJob = determineRegion(store) } else if (action is UpdateDistribution) { - updateJob = determineRegion(context.store, action.distributionId) + updateJob = determineRegion(store, action.distributionId) } next(action) diff --git a/mobile/android/android-components/components/feature/search/src/test/java/mozilla/components/feature/search/region/RegionMiddlewareTest.kt b/mobile/android/android-components/components/feature/search/src/test/java/mozilla/components/feature/search/region/RegionMiddlewareTest.kt @@ -4,7 +4,6 @@ package mozilla.components.feature.search.region -import mozilla.components.browser.state.action.BrowserAction import mozilla.components.browser.state.action.InitAction import mozilla.components.browser.state.action.SearchAction import mozilla.components.browser.state.action.SearchAction.RefreshSearchEnginesAction @@ -12,7 +11,6 @@ import mozilla.components.browser.state.action.UpdateDistribution import mozilla.components.browser.state.search.RegionState import mozilla.components.browser.state.state.BrowserState import mozilla.components.browser.state.store.BrowserStore -import mozilla.components.lib.state.MiddlewareContext import mozilla.components.service.location.LocationService import mozilla.components.support.test.ext.joinBlocking import mozilla.components.support.test.fakes.FakeClock @@ -154,17 +152,15 @@ class RegionMiddlewareTest { @Test fun `WHEN the UpdateDistribution action is received THEN the distribution is updated`() = runTestOnMain { val middleware = RegionMiddleware(FakeContext(), locationService, dispatcher) - val middlewareContext: MiddlewareContext<BrowserState, BrowserAction> = mock() val regionManager: RegionManager = mock() middleware.regionManager = regionManager val store: BrowserStore = mock() // null RegionState - `when`(middlewareContext.store).thenReturn(store) `when`(regionManager.region()).thenReturn(null) middleware.invoke( - middlewareContext, + store, {}, UpdateDistribution("testId"), ) @@ -174,11 +170,10 @@ class RegionMiddlewareTest { verify(store).dispatch(SearchAction.SetRegionAction(RegionState.Default, "testId")) // non null RegionState - `when`(middlewareContext.store).thenReturn(store) `when`(regionManager.region()).thenReturn(RegionState("US", "US")) middleware.invoke( - middlewareContext, + store, {}, UpdateDistribution("testId"), ) @@ -188,12 +183,11 @@ class RegionMiddlewareTest { verify(store).dispatch(SearchAction.SetRegionAction(RegionState("US", "US"), "testId")) // region manager update has a new RegionState - `when`(middlewareContext.store).thenReturn(store) `when`(regionManager.region()).thenReturn(null) `when`(regionManager.update()).thenReturn(RegionState("DE", "DE")) middleware.invoke( - middlewareContext, + store, {}, UpdateDistribution("testId"), ) @@ -206,18 +200,16 @@ class RegionMiddlewareTest { @Test fun `WHEN the RefreshSearchEngines action is received THEN the distribution is updated`() = runTestOnMain { val middleware = RegionMiddleware(FakeContext(), locationService, dispatcher) - val middlewareContext: MiddlewareContext<BrowserState, BrowserAction> = mock() val regionManager: RegionManager = mock() middleware.regionManager = regionManager val store: BrowserStore = mock() // null RegionState - `when`(middlewareContext.store).thenReturn(store) `when`(regionManager.region()).thenReturn(null) `when`(store.state).thenReturn(BrowserState(distributionId = "testId")) middleware.invoke( - middlewareContext, + store, {}, RefreshSearchEnginesAction, ) @@ -227,12 +219,11 @@ class RegionMiddlewareTest { verify(store).dispatch(SearchAction.SetRegionAction(RegionState.Default, "testId")) // non null RegionState - `when`(middlewareContext.store).thenReturn(store) `when`(regionManager.region()).thenReturn(RegionState("US", "US")) `when`(store.state).thenReturn(BrowserState(distributionId = "testId")) middleware.invoke( - middlewareContext, + store, {}, RefreshSearchEnginesAction, ) @@ -242,13 +233,12 @@ class RegionMiddlewareTest { verify(store).dispatch(SearchAction.SetRegionAction(RegionState("US", "US"), "testId")) // region manager update has a new RegionState - `when`(middlewareContext.store).thenReturn(store) `when`(regionManager.region()).thenReturn(null) `when`(regionManager.update()).thenReturn(RegionState("DE", "DE")) `when`(store.state).thenReturn(BrowserState(distributionId = "testId")) middleware.invoke( - middlewareContext, + store, {}, RefreshSearchEnginesAction, ) diff --git a/mobile/android/android-components/components/feature/session/src/main/java/mozilla/components/feature/session/middleware/LastAccessMiddleware.kt b/mobile/android/android-components/components/feature/session/src/main/java/mozilla/components/feature/session/middleware/LastAccessMiddleware.kt @@ -11,14 +11,14 @@ import mozilla.components.browser.state.action.TabListAction import mozilla.components.browser.state.state.BrowserState import mozilla.components.browser.state.state.TabSessionState import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store /** * [Middleware] that handles updating the [TabSessionState.lastAccess] when a tab is selected. */ class LastAccessMiddleware : Middleware<BrowserState, BrowserAction> { override fun invoke( - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, next: (BrowserAction) -> Unit, action: BrowserAction, ) { @@ -29,7 +29,7 @@ class LastAccessMiddleware : Middleware<BrowserState, BrowserAction> { is TabListAction.RemoveTabsAction, // NB: RemoveAllNormalTabsAction and RemoveAllPrivateTabsAction never update tab selection -> { - context.store.state.selectedTabId + store.state.selectedTabId } else -> null } @@ -43,27 +43,27 @@ class LastAccessMiddleware : Middleware<BrowserState, BrowserAction> { -> { // If the selected tab changed during removal we make sure to update // the lastAccess state of the newly selected tab. - val newSelection = context.store.state.selectedTabId + val newSelection = store.state.selectedTabId if (newSelection != null && newSelection != selectionBeforeRemoval) { - context.dispatchUpdateActionForId(newSelection) + store.dispatchUpdateActionForId(newSelection) } } is TabListAction.SelectTabAction -> { - context.dispatchUpdateActionForId(action.tabId) + store.dispatchUpdateActionForId(action.tabId) } is TabListAction.AddTabAction -> { if (action.select) { - context.dispatchUpdateActionForId(action.tab.id) + store.dispatchUpdateActionForId(action.tab.id) } } is TabListAction.RestoreAction -> { action.selectedTabId?.let { - context.dispatchUpdateActionForId(it) + store.dispatchUpdateActionForId(it) } } is ContentAction.UpdateUrlAction -> { - if (action.sessionId == context.store.state.selectedTabId) { - context.dispatchUpdateActionForId(action.sessionId) + if (action.sessionId == store.state.selectedTabId) { + store.dispatchUpdateActionForId(action.sessionId) } } else -> { @@ -72,7 +72,7 @@ class LastAccessMiddleware : Middleware<BrowserState, BrowserAction> { } } - private fun MiddlewareContext<BrowserState, BrowserAction>.dispatchUpdateActionForId(id: String) { - store.dispatch(LastAccessAction.UpdateLastAccessAction(id, System.currentTimeMillis())) + private fun Store<BrowserState, BrowserAction>.dispatchUpdateActionForId(id: String) { + dispatch(LastAccessAction.UpdateLastAccessAction(id, System.currentTimeMillis())) } } diff --git a/mobile/android/android-components/components/feature/session/src/main/java/mozilla/components/feature/session/middleware/undo/UndoMiddleware.kt b/mobile/android/android-components/components/feature/session/src/main/java/mozilla/components/feature/session/middleware/undo/UndoMiddleware.kt @@ -21,7 +21,6 @@ import mozilla.components.browser.state.state.TabSessionState import mozilla.components.browser.state.state.recover.RecoverableTab import mozilla.components.browser.state.state.recover.toRecoverableTab import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext import mozilla.components.lib.state.Store import mozilla.components.support.base.log.logger.Logger import java.util.UUID @@ -41,40 +40,40 @@ class UndoMiddleware( private var clearJob: Job? = null override fun invoke( - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, next: (BrowserAction) -> Unit, action: BrowserAction, ) { - val state = context.store.state + val state = store.state when (action) { // Remember removed tabs is TabListAction.RemoveAllNormalTabsAction -> onTabsRemoved( - context, + store, state.normalTabs, state.selectedTabId, ) is TabListAction.RemoveAllPrivateTabsAction -> onTabsRemoved( - context, + store, state.privateTabs, state.selectedTabId, ) is TabListAction.RemoveAllTabsAction -> { if (action.recoverable) { - onTabsRemoved(context, state.tabs, state.selectedTabId) + onTabsRemoved(store, state.tabs, state.selectedTabId) } } is TabListAction.RemoveTabAction -> state.findTab(action.tabId)?.let { - onTabsRemoved(context, listOf(it), state.selectedTabId) + onTabsRemoved(store, listOf(it), state.selectedTabId) } is TabListAction.RemoveTabsAction -> { action.tabIds.mapNotNull { state.findTab(it) }.let { - onTabsRemoved(context, it, state.selectedTabId) + onTabsRemoved(store, it, state.selectedTabId) } } // Restore - is UndoAction.RestoreRecoverableTabs -> restore(context.store, context.store.state) + is UndoAction.RestoreRecoverableTabs -> restore(store, store.state) // Do nothing when an action different from above is passed in. else -> { } @@ -84,7 +83,7 @@ class UndoMiddleware( } private fun onTabsRemoved( - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, tabs: List<SessionState>, selectedTabId: String?, ) { @@ -93,7 +92,7 @@ class UndoMiddleware( val recoverableTabs = mutableListOf<RecoverableTab>() tabs.forEach { tab -> if (tab is TabSessionState) { - val index = context.store.state.tabs.indexOfFirst { it.id == tab.id } + val index = store.state.tabs.indexOfFirst { it.id == tab.id } recoverableTabs.add(tab.toRecoverableTab(index)) } } @@ -109,12 +108,10 @@ class UndoMiddleware( recoverableTabs.find { it.state.id == selectedTabId }?.state?.id } - context.store.dispatch( + store.dispatch( UndoAction.AddRecoverableTabs(tag, recoverableTabs, selectionToRestore), ) - val store = context.store - clearJob = waitScope.launch { delay(clearAfterMillis) store.dispatch(UndoAction.ClearRecoverableTabs(tag)) diff --git a/mobile/android/android-components/components/feature/session/src/test/java/mozilla/components/feature/session/middleware/LastAccessMiddlewareTest.kt b/mobile/android/android-components/components/feature/session/src/test/java/mozilla/components/feature/session/middleware/LastAccessMiddlewareTest.kt @@ -5,7 +5,6 @@ package mozilla.components.feature.session.middleware import androidx.test.ext.junit.runners.AndroidJUnit4 -import mozilla.components.browser.state.action.BrowserAction import mozilla.components.browser.state.action.ContentAction import mozilla.components.browser.state.action.TabListAction import mozilla.components.browser.state.selector.findTab @@ -15,30 +14,17 @@ import mozilla.components.browser.state.state.createTab import mozilla.components.browser.state.state.recover.RecoverableTab import mozilla.components.browser.state.state.recover.TabState import mozilla.components.browser.state.store.BrowserStore -import mozilla.components.lib.state.MiddlewareContext -import mozilla.components.support.test.mock -import mozilla.components.support.test.whenever import org.junit.Assert.assertEquals import org.junit.Assert.assertFalse import org.junit.Assert.assertNotEquals import org.junit.Assert.assertNotNull import org.junit.Assert.assertTrue -import org.junit.Before import org.junit.Test import org.junit.runner.RunWith +import org.mockito.Mockito.mock @RunWith(AndroidJUnit4::class) class LastAccessMiddlewareTest { - lateinit var store: BrowserStore - lateinit var context: MiddlewareContext<BrowserState, BrowserAction> - - @Before - fun setup() { - store = BrowserStore() - context = mock() - - whenever(context.store).thenReturn(store) - } @Test fun `UpdateLastAction is dispatched when tab is selected`() { @@ -310,7 +296,7 @@ class LastAccessMiddlewareTest { var nextInvoked = false val middleware = LastAccessMiddleware() - middleware.invoke(context, { nextInvoked = true }, TabListAction.RemoveTabAction("123")) + middleware.invoke(BrowserStore(), { nextInvoked = true }, TabListAction.RemoveTabAction("123")) assertTrue(nextInvoked) } diff --git a/mobile/android/android-components/components/lib/state/src/main/java/mozilla/components/lib/state/Middleware.kt b/mobile/android/android-components/components/lib/state/src/main/java/mozilla/components/lib/state/Middleware.kt @@ -15,20 +15,4 @@ package mozilla.components.lib.state * [Middleware] can decide to continue the chain (by calling `next`), intercept the chain (by not * invoking `next`). A [Middleware] has no knowledge of what comes before or after it in the chain. */ -typealias Middleware<S, A> = (context: MiddlewareContext<S, A>, next: (A) -> Unit, action: A) -> Unit - -/** - * The context a Middleware is running in. Allows access to privileged [Store] functionality. It is - * passed to a [Middleware] with every [Action]. - * - * Note that the [MiddlewareContext] should not be passed to other components and calling methods - * on non-[Store] threads may throw an exception. Instead the value of the [store] property, granting - * access to the underlying store, can safely be used outside of the middleware. - */ -interface MiddlewareContext<S : State, A : Action> { - - /** - * Returns a reference to the [Store] the [Middleware] is running in. - */ - val store: Store<S, A> -} +typealias Middleware<S, A> = (store: Store<S, A>, next: (A) -> Unit, action: A) -> Unit diff --git a/mobile/android/android-components/components/lib/state/src/main/java/mozilla/components/lib/state/internal/ReducerChainBuilder.kt b/mobile/android/android-components/components/lib/state/src/main/java/mozilla/components/lib/state/internal/ReducerChainBuilder.kt @@ -6,7 +6,6 @@ package mozilla.components.lib.state.internal import mozilla.components.lib.state.Action import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext import mozilla.components.lib.state.Reducer import mozilla.components.lib.state.State import mozilla.components.lib.state.Store @@ -34,12 +33,6 @@ internal class ReducerChainBuilder<S : State, A : Action>( } private fun build(store: Store<S, A>): (A) -> Unit { - val context = object : MiddlewareContext<S, A> { - - override val store: Store<S, A> - get() = store - } - var chain: (A) -> Unit = { action -> val state = reducer(store.state, action) store.transitionTo(state) @@ -47,7 +40,7 @@ internal class ReducerChainBuilder<S : State, A : Action>( middleware.reversed().forEach { middleware -> val next = chain - chain = { action -> middleware(context, next, action) } + chain = { action -> middleware(store, next, action) } } return chain diff --git a/mobile/android/android-components/components/lib/state/src/test/java/mozilla/components/lib/state/StoreTest.kt b/mobile/android/android-components/components/lib/state/src/test/java/mozilla/components/lib/state/StoreTest.kt @@ -125,17 +125,17 @@ class StoreTest { @Test fun `Middleware chain gets executed in order`() { - val incrementMiddleware: Middleware<TestState, TestAction> = { middlewareContext, next, action -> + val incrementMiddleware: Middleware<TestState, TestAction> = { store, next, action -> if (action == TestAction.DoNothingAction) { - middlewareContext.store.dispatch(TestAction.IncrementAction) + store.dispatch(TestAction.IncrementAction) } next(action) } - val doubleMiddleware: Middleware<TestState, TestAction> = { middlewareContext, next, action -> + val doubleMiddleware: Middleware<TestState, TestAction> = { store, next, action -> if (action == TestAction.DoNothingAction) { - middlewareContext.store.dispatch(TestAction.DoubleAction) + store.dispatch(TestAction.DoubleAction) } next(action) @@ -213,9 +213,9 @@ class StoreTest { @Test fun `Middleware can intercept and dispatch other action instead`() { - val rewritingMiddleware: Middleware<TestState, TestAction> = { middlewareContext, next, action -> + val rewritingMiddleware: Middleware<TestState, TestAction> = { store, next, action -> if (action == TestAction.IncrementAction) { - middlewareContext.store.dispatch(TestAction.DecrementAction) + store.dispatch(TestAction.DecrementAction) } else { next(action) } @@ -242,10 +242,10 @@ class StoreTest { var countBefore = -1 var countAfter = -1 - val observingMiddleware: Middleware<TestState, TestAction> = { context, next, action -> - countBefore = context.store.state.counter + val observingMiddleware: Middleware<TestState, TestAction> = { store, next, action -> + countBefore = store.state.counter next(action) - countAfter = context.store.state.counter + countAfter = store.state.counter } val store = Store( @@ -302,14 +302,14 @@ class StoreTest { val storeDispatcher = Executors.newSingleThreadExecutor().asCoroutineDispatcher() val middleware = object : Middleware<TestState, TestAction> { override fun invoke( - context: MiddlewareContext<TestState, TestAction>, + store: Store<TestState, TestAction>, next: (TestAction) -> Unit, action: TestAction, ) { if (action is TestAction.DecrementAction) { middlewareJobs += this@runTest.launch(middlewareDispatcher) { delay(5) - context.store.dispatch(TestAction.IncrementAction) + store.dispatch(TestAction.IncrementAction) } } next(action) diff --git a/mobile/android/android-components/components/support/locale/src/main/java/mozilla/components/support/locale/LocaleMiddleware.kt b/mobile/android/android-components/components/support/locale/src/main/java/mozilla/components/support/locale/LocaleMiddleware.kt @@ -12,7 +12,6 @@ import mozilla.components.browser.state.action.BrowserAction import mozilla.components.browser.state.action.LocaleAction import mozilla.components.browser.state.state.BrowserState import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext import mozilla.components.lib.state.Store import mozilla.components.support.base.log.logger.Logger import java.util.Locale @@ -31,12 +30,12 @@ class LocaleMiddleware( private var scope = CoroutineScope(coroutineContext) override fun invoke( - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, next: (BrowserAction) -> Unit, action: BrowserAction, ) { when (action) { - is LocaleAction.RestoreLocaleStateAction -> restoreLocale(context.store) + is LocaleAction.RestoreLocaleStateAction -> restoreLocale(store) is LocaleAction.UpdateLocaleAction -> updateLocale(action.locale) else -> { // no-op diff --git a/mobile/android/android-components/components/support/test-libstate/src/main/java/mozilla/components/support/test/middleware/CaptureActionsMiddleware.kt b/mobile/android/android-components/components/support/test-libstate/src/main/java/mozilla/components/support/test/middleware/CaptureActionsMiddleware.kt @@ -6,8 +6,8 @@ package mozilla.components.support.test.middleware import mozilla.components.lib.state.Action import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext import mozilla.components.lib.state.State +import mozilla.components.lib.state.Store import kotlin.reflect.KClass /** @@ -17,7 +17,7 @@ class CaptureActionsMiddleware<S : State, A : Action> : Middleware<S, A> { private val capturedActions = mutableListOf<A>() @Synchronized - override fun invoke(context: MiddlewareContext<S, A>, next: (A) -> Unit, action: A) { + override fun invoke(store: Store<S, A>, next: (A) -> Unit, action: A) { capturedActions.add(action) next(action) } diff --git a/mobile/android/android-components/samples/compose-browser/src/main/java/org/mozilla/samples/compose/browser/browser/BrowserToolbarMiddleware.kt b/mobile/android/android-components/samples/compose-browser/src/main/java/org/mozilla/samples/compose/browser/browser/BrowserToolbarMiddleware.kt @@ -22,7 +22,6 @@ import mozilla.components.compose.browser.toolbar.store.DisplayState import mozilla.components.compose.browser.toolbar.store.EditState import mozilla.components.compose.browser.toolbar.store.Mode import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext import mozilla.components.lib.state.Store import org.mozilla.samples.compose.browser.BrowserComposeActivity.Companion.ROUTE_SETTINGS import org.mozilla.samples.compose.browser.R @@ -58,7 +57,7 @@ internal class BrowserToolbarMiddleware( var dependencies = initialDependencies override fun invoke( - context: MiddlewareContext<BrowserToolbarState, BrowserToolbarAction>, + store: Store<BrowserToolbarState, BrowserToolbarAction>, next: (BrowserToolbarAction) -> Unit, action: BrowserToolbarAction, ) { diff --git a/mobile/android/android-components/samples/toolbar/src/main/java/org/mozilla/samples/toolbar/middleware/BrowserToolbarMiddleware.kt b/mobile/android/android-components/samples/toolbar/src/main/java/org/mozilla/samples/toolbar/middleware/BrowserToolbarMiddleware.kt @@ -32,7 +32,7 @@ import mozilla.components.compose.browser.toolbar.store.EditState import mozilla.components.compose.browser.toolbar.store.Mode import mozilla.components.compose.browser.toolbar.store.ProgressBarConfig import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store import org.mozilla.samples.toolbar.R import org.mozilla.samples.toolbar.middleware.PageActionsEndInteractions.RefreshClicked import org.mozilla.samples.toolbar.middleware.PageOriginInteractions.PageOriginClicked @@ -97,13 +97,13 @@ internal class BrowserToolbarMiddleware( set(value) { field = value.coerceAtLeast(0) } override fun invoke( - context: MiddlewareContext<BrowserToolbarState, BrowserToolbarAction>, + store: Store<BrowserToolbarState, BrowserToolbarAction>, next: (BrowserToolbarAction) -> Unit, action: BrowserToolbarAction, ) { when (action) { is BrowserToolbarAction.Init -> { - store = context.store as BrowserToolbarStore + this.store = store as BrowserToolbarStore next( BrowserToolbarAction.Init( diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/bookmarks/BookmarksMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/bookmarks/BookmarksMiddleware.kt @@ -20,7 +20,6 @@ import mozilla.components.concept.storage.BookmarkNodeType import mozilla.components.concept.storage.BookmarksStorage import mozilla.components.feature.tabs.TabsUseCases import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext import mozilla.components.lib.state.Store import org.mozilla.fenix.browser.browsingmode.BrowsingMode import org.mozilla.fenix.components.usecases.FenixBrowserUseCases @@ -80,24 +79,24 @@ internal class BookmarksMiddleware( @Suppress("LongMethod", "CognitiveComplexMethod", "CyclomaticComplexMethod") override fun invoke( - context: MiddlewareContext<BookmarksState, BookmarksAction>, + store: Store<BookmarksState, BookmarksAction>, next: (BookmarksAction) -> Unit, action: BookmarksAction, ) { - val preReductionState = context.store.state + val preReductionState = store.state next(action) - val dialogState = context.store.state.bookmarksDeletionDialogState + val dialogState = store.state.bookmarksDeletionDialogState if (dialogState is DeletionDialogState.LoadingCount) { scope.launch { val count = bookmarksStorage.countBookmarksInTrees(dialogState.guidsToDelete) - context.store.dispatch(DeletionDialogAction.CountLoaded(count.toInt())) + store.dispatch(DeletionDialogAction.CountLoaded(count.toInt())) } } when (action) { - Init -> context.store.tryDispatchLoadFor(BookmarkRoot.Mobile.id) + Init -> store.tryDispatchLoadFor(BookmarkRoot.Mobile.id) is InitEdit -> scope.launch { Result.runCatching { val bookmarkNode = bookmarksStorage.getBookmark(action.guid).getOrNull() @@ -116,12 +115,12 @@ internal class BookmarksMiddleware( InitEditLoaded(bookmark = bookmark!!, folder = folder!!) }.getOrNull()?.also { - context.store.dispatch(it) + store.dispatch(it) } } is BookmarkClicked -> { if (preReductionState.selectedItems.isNotEmpty()) { - context.store.tryDispatchReceivedRecursiveCountUpdate() + store.tryDispatchReceivedRecursiveCountUpdate() return } @@ -138,15 +137,15 @@ internal class BookmarksMiddleware( is FolderClicked -> { if (preReductionState.selectedItems.isNotEmpty()) { - context.store.tryDispatchReceivedRecursiveCountUpdate() + store.tryDispatchReceivedRecursiveCountUpdate() return } - context.store.tryDispatchLoadFor(action.item.guid) + store.tryDispatchLoadFor(action.item.guid) } is BookmarkLongClicked, is FolderLongClicked, -> { - context.store.tryDispatchReceivedRecursiveCountUpdate() + store.tryDispatchReceivedRecursiveCountUpdate() } SearchClicked -> if (!useNewSearchUX) { navigateToSearch() @@ -160,7 +159,7 @@ internal class BookmarksMiddleware( // non-list screen cases need to come first, since we presume if all subscreen // state is null then we are on the list screen preReductionState.bookmarksAddFolderState != null && - context.store.state.bookmarksAddFolderState == null -> { + store.state.bookmarksAddFolderState == null -> { scope.launch(ioDispatcher) { val newFolderTitle = preReductionState.bookmarksAddFolderState.folderBeingAddedTitle @@ -180,7 +179,7 @@ internal class BookmarksMiddleware( position = position, ) - context.store.dispatch(AddFolderAction.FolderCreated(folder)) + store.dispatch(AddFolderAction.FolderCreated(folder)) withContext(Dispatchers.Main) { if (preReductionState.bookmarksSelectFolderState != null) { @@ -197,7 +196,7 @@ internal class BookmarksMiddleware( getNavController().popBackStack() } } - context.store.tryDispatchLoadFor(preReductionState.currentFolder.guid) + store.tryDispatchLoadFor(preReductionState.currentFolder.guid) } } @@ -216,9 +215,9 @@ internal class BookmarksMiddleware( } } if (successes.isNullOrEmpty()) { - context.store.dispatch(SnackbarAction.SelectFolderFailed) + store.dispatch(SnackbarAction.SelectFolderFailed) } - context.store.tryDispatchLoadFor(preReductionState.currentFolder.guid) + store.tryDispatchLoadFor(preReductionState.currentFolder.guid) } } } @@ -233,7 +232,7 @@ internal class BookmarksMiddleware( reportResultGlobally(BookmarksGlobalResultReport.EditFolderFailed) } } - context.store.tryDispatchLoadFor(preReductionState.currentFolder.guid) + store.tryDispatchLoadFor(preReductionState.currentFolder.guid) } } @@ -255,7 +254,7 @@ internal class BookmarksMiddleware( } } } - context.store.tryDispatchLoadFor(preReductionState.currentFolder.guid) + store.tryDispatchLoadFor(preReductionState.currentFolder.guid) } } // list screen cases @@ -268,7 +267,7 @@ internal class BookmarksMiddleware( .getOrNull() ?.parentGuid ?: BookmarkRoot.Mobile.id } - context.store.tryDispatchLoadFor(parentFolderGuid) + store.tryDispatchLoadFor(parentFolderGuid) } } @@ -305,8 +304,8 @@ internal class BookmarksMiddleware( getNavController().navigate(BookmarksDestinations.SELECT_FOLDER) } - SelectFolderAction.ViewAppeared -> context.store.tryDispatchLoadFolders() - is BookmarksListMenuAction -> action.handleSideEffects(context.store, preReductionState) + SelectFolderAction.ViewAppeared -> store.tryDispatchLoadFolders() + is BookmarksListMenuAction -> action.handleSideEffects(store, preReductionState) SnackbarAction.Dismissed -> when (preReductionState.bookmarksSnackbarState) { is BookmarksSnackbarState.UndoDeletion -> scope.launch { if (preReductionState.bookmarksDeletionSnackbarQueueCount <= 1) { @@ -357,7 +356,7 @@ internal class BookmarksMiddleware( } } is FirstSyncCompleted -> { - context.store.tryDispatchLoadFor(preReductionState.currentFolder.guid) + store.tryDispatchLoadFor(preReductionState.currentFolder.guid) } ViewDisposed -> { preReductionState.bookmarksSnackbarState.let { snackState -> @@ -376,12 +375,12 @@ internal class BookmarksMiddleware( } } is SelectFolderAction.SortMenu -> scope.launch { - context.store.tryDispatchLoadFolders() - saveBookmarkSortOrder(context.store.state.sortOrder) + store.tryDispatchLoadFolders() + saveBookmarkSortOrder(store.state.sortOrder) } is SelectFolderAction.SearchQueryUpdated -> { scope.launch { - val state = context.store.state.bookmarksSelectFolderState + val state = store.state.bookmarksSelectFolderState val filteredFolders = state?.folders ?.filter { it.title.startsWith( @@ -390,7 +389,7 @@ internal class BookmarksMiddleware( ) } filteredFolders?.let { - context.store.dispatch(SelectFolderAction.FilteredFoldersLoaded(it)) + store.dispatch(SelectFolderAction.FilteredFoldersLoaded(it)) } } } diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/bookmarks/BookmarksSyncMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/bookmarks/BookmarksSyncMiddleware.kt @@ -13,7 +13,7 @@ import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.onEach import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store import mozilla.components.lib.state.ext.flow import mozilla.components.service.fxa.store.SyncStatus import mozilla.components.service.fxa.store.SyncStore @@ -23,7 +23,7 @@ internal class BookmarksSyncMiddleware( private val scope: CoroutineScope, ) : Middleware<BookmarksState, BookmarksAction> { override fun invoke( - context: MiddlewareContext<BookmarksState, BookmarksAction>, + store: Store<BookmarksState, BookmarksAction>, next: (BookmarksAction) -> Unit, action: BookmarksAction, ) { @@ -36,7 +36,7 @@ internal class BookmarksSyncMiddleware( .map { it.account != null } .distinctUntilChanged() .onEach { isSignedIn -> - context.store.dispatch(ReceivedSyncSignInUpdate(isSignedIn)) + store.dispatch(ReceivedSyncSignInUpdate(isSignedIn)) if (isSignedIn) { syncStore.flow() .map { it.status == SyncStatus.Idle } @@ -46,7 +46,7 @@ internal class BookmarksSyncMiddleware( } } .cancellable() - .catch { context.store.dispatch(FirstSyncCompleted) } + .catch { store.dispatch(FirstSyncCompleted) } .launchIn(scope) } } diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/bookmarks/BookmarksTelemetryMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/bookmarks/BookmarksTelemetryMiddleware.kt @@ -5,7 +5,7 @@ package org.mozilla.fenix.bookmarks import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store import mozilla.telemetry.glean.private.NoExtras import org.mozilla.fenix.GleanMetrics.BookmarksManagement import org.mozilla.fenix.components.metrics.MetricsUtils @@ -17,11 +17,11 @@ internal class BookmarksTelemetryMiddleware : Middleware<BookmarksState, Bookmar @Suppress("CyclomaticComplexMethod") override fun invoke( - context: MiddlewareContext<BookmarksState, BookmarksAction>, + store: Store<BookmarksState, BookmarksAction>, next: (BookmarksAction) -> Unit, action: BookmarksAction, ) { - val preReductionState = context.store.state + val preReductionState = store.state next(action) when (action) { BackClicked -> preReductionState.handleBackClick() diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/bookmarks/BrowserToolbarSyncToBookmarksMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/bookmarks/BrowserToolbarSyncToBookmarksMiddleware.kt @@ -10,7 +10,7 @@ import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.onEach import mozilla.components.compose.browser.toolbar.store.BrowserToolbarStore import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store import mozilla.components.lib.state.ext.flow /** @@ -22,7 +22,7 @@ internal class BrowserToolbarSyncToBookmarksMiddleware( private val scope: CoroutineScope, ) : Middleware<BookmarksState, BookmarksAction> { override fun invoke( - context: MiddlewareContext<BookmarksState, BookmarksAction>, + store: Store<BookmarksState, BookmarksAction>, next: (BookmarksAction) -> Unit, action: BookmarksAction, ) { @@ -32,8 +32,8 @@ internal class BrowserToolbarSyncToBookmarksMiddleware( toolbarStore.flow() .map { it.isEditMode() } .onEach { isInEditMode -> - if (context.store.state.isSearching && !isInEditMode) { - context.store.dispatch(SearchDismissed) + if (store.state.isSearching && !isInEditMode) { + store.dispatch(SearchDismissed) } } .launchIn(scope) diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/bookmarks/PrivateBrowsingLockMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/bookmarks/PrivateBrowsingLockMiddleware.kt @@ -6,7 +6,7 @@ package org.mozilla.fenix.bookmarks import androidx.annotation.VisibleForTesting import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store import org.mozilla.fenix.components.AppStore /** @@ -27,7 +27,7 @@ internal class PrivateBrowsingLockMiddleware( internal var pendingAction: BookmarksAction? = null override fun invoke( - context: MiddlewareContext<BookmarksState, BookmarksAction>, + store: Store<BookmarksState, BookmarksAction>, next: (BookmarksAction) -> Unit, action: BookmarksAction, ) { diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/browser/desktopmode/DesktopModeMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/browser/desktopmode/DesktopModeMiddleware.kt @@ -12,7 +12,7 @@ import mozilla.components.browser.state.action.DefaultDesktopModeAction import mozilla.components.browser.state.action.InitAction import mozilla.components.browser.state.state.BrowserState import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store import mozilla.telemetry.glean.private.NoExtras import org.mozilla.fenix.GleanMetrics.DesktopMode @@ -29,7 +29,7 @@ class DesktopModeMiddleware( ) : Middleware<BrowserState, BrowserAction> { override fun invoke( - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, next: (BrowserAction) -> Unit, action: BrowserAction, ) { @@ -38,7 +38,7 @@ class DesktopModeMiddleware( when (action) { InitAction -> { scope.launch { - context.store.dispatch( + store.dispatch( DefaultDesktopModeAction.DesktopModeUpdated( newValue = repository.getDesktopBrowsingEnabled(), ), @@ -48,12 +48,12 @@ class DesktopModeMiddleware( DefaultDesktopModeAction.ToggleDesktopMode -> { scope.launch { - val updatedDesktopMode = context.store.state.desktopMode + val updatedDesktopMode = store.state.desktopMode val preferenceWriteSucceeded = repository.setDesktopBrowsingEnabled(updatedDesktopMode) if (!preferenceWriteSucceeded) { // If the preference write fails, revert the state change. - context.store.dispatch( + store.dispatch( DefaultDesktopModeAction.DesktopModeUpdated( newValue = !updatedDesktopMode, ), diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/browser/store/BrowserScreenMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/browser/store/BrowserScreenMiddleware.kt @@ -12,7 +12,6 @@ import mozilla.components.concept.base.crash.Breadcrumb import mozilla.components.feature.downloads.ui.DownloadCancelDialogFragment import mozilla.components.lib.crash.CrashReporter import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext import mozilla.components.lib.state.Store import org.mozilla.fenix.R import org.mozilla.fenix.browser.store.BrowserScreenAction.CancelPrivateDownloadsOnPrivateTabsClosedAccepted @@ -34,7 +33,7 @@ class BrowserScreenMiddleware( ) : Middleware<BrowserScreenState, BrowserScreenAction> { override fun invoke( - context: MiddlewareContext<BrowserScreenState, BrowserScreenAction>, + store: Store<BrowserScreenState, BrowserScreenAction>, next: (BrowserScreenAction) -> Unit, action: BrowserScreenAction, ) { @@ -43,7 +42,7 @@ class BrowserScreenMiddleware( next(action) showCancelledDownloadWarning( - store = context.store, + store = store, downloadCount = action.inProgressPrivateDownloads, tabId = action.tabId, ) diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/AboutHomeMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/AboutHomeMiddleware.kt @@ -10,7 +10,7 @@ import mozilla.components.browser.state.selector.findTab import mozilla.components.browser.state.state.BrowserState import mozilla.components.concept.engine.utils.ABOUT_HOME_URL import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store /** * [Middleware] implementation for overriding the title of the "about:home" homepage tab with the @@ -22,12 +22,12 @@ class AboutHomeMiddleware( private val homepageTitle: String, ) : Middleware<BrowserState, BrowserAction> { override fun invoke( - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, next: (BrowserAction) -> Unit, action: BrowserAction, ) { if (action is ContentAction.UpdateTitleAction && - context.store.state.findTab(tabId = action.sessionId)?.content?.url == ABOUT_HOME_URL + store.state.findTab(tabId = action.sessionId)?.content?.url == ABOUT_HOME_URL ) { // Override the title of the homepage tab with the provided [homepageTitle] that will // appear in the [ContentState]. diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/BackgroundServices.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/BackgroundServices.kt @@ -30,7 +30,7 @@ import mozilla.components.feature.syncedtabs.commands.SyncedTabsCommandsFlushSch import mozilla.components.feature.syncedtabs.storage.SyncedTabsStorage import mozilla.components.lib.crash.CrashReporter import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store import mozilla.components.service.fxa.PeriodicSyncConfig import mozilla.components.service.fxa.ServerConfig import mozilla.components.service.fxa.SyncConfig @@ -264,13 +264,13 @@ private class AccountManagerReadyObserver( internal class TelemetryMiddleware : Middleware<SyncState, SyncAction> { override fun invoke( - context: MiddlewareContext<SyncState, SyncAction>, + store: Store<SyncState, SyncAction>, next: (SyncAction) -> Unit, action: SyncAction, ) { - val prevState = context.store.state + val prevState = store.state next(action) - val accountUid = context.store.state.account?.uid + val accountUid = store.state.account?.uid if (prevState.account?.uid != accountUid && accountUid != null) { ClientAssociation.uid.set(accountUid) fxAccounts.submit() diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/ChangeDetectionMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/ChangeDetectionMiddleware.kt @@ -6,8 +6,8 @@ package org.mozilla.fenix.components import mozilla.components.lib.state.Action import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext import mozilla.components.lib.state.State +import mozilla.components.lib.state.Store /** * A Middleware for detecting changes to a state property, and offering a callback that captures the action that changed @@ -29,10 +29,10 @@ class ChangeDetectionMiddleware<S : State, A : Action, T>( private val selector: (S) -> T, private val onChange: (A, pre: T, post: T) -> Unit, ) : Middleware<S, A> { - override fun invoke(context: MiddlewareContext<S, A>, next: (A) -> Unit, action: A) { - val pre = selector(context.store.state) + override fun invoke(store: Store<S, A>, next: (A) -> Unit, action: A) { + val pre = selector(store.state) next(action) - val post = selector(context.store.state) + val post = selector(store.state) if (pre != post) { onChange(action, pre, post) } diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/LogMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/LogMiddleware.kt @@ -6,8 +6,8 @@ package org.mozilla.fenix.components import mozilla.components.lib.state.Action import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext import mozilla.components.lib.state.State +import mozilla.components.lib.state.Store import mozilla.components.support.base.log.logger.Logger /** @@ -31,7 +31,7 @@ class LogMiddleware<S : State, A : Action>( }, ) : Middleware<S, A> { override fun invoke( - context: MiddlewareContext<S, A>, + store: Store<S, A>, next: (A) -> Unit, action: A, ) { diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/PerformanceComponent.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/PerformanceComponent.kt @@ -12,7 +12,7 @@ import mozilla.components.browser.state.action.BrowserAction import mozilla.components.browser.state.action.ContentAction import mozilla.components.browser.state.state.BrowserState import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store import mozilla.components.support.utils.RunWhenReadyQueue import org.mozilla.fenix.components.appstate.AppAction import org.mozilla.fenix.components.appstate.AppState @@ -37,7 +37,7 @@ class AppVisualCompletenessMiddleware( private val scope: CoroutineScope = CoroutineScope(Dispatchers.Default), ) : Middleware<AppState, AppAction> { override fun invoke( - context: MiddlewareContext<AppState, AppAction>, + store: Store<AppState, AppAction>, next: (AppAction) -> Unit, action: AppAction, ) { @@ -62,7 +62,7 @@ class BrowserVisualCompletenessMiddleware( private val queue: RunWhenReadyQueue, ) : Middleware<BrowserState, BrowserAction> { override fun invoke( - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, next: (BrowserAction) -> Unit, action: BrowserAction, ) { diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/ProfileMarkerMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/ProfileMarkerMiddleware.kt @@ -10,8 +10,8 @@ import kotlinx.coroutines.launch import mozilla.components.concept.base.profiler.Profiler import mozilla.components.lib.state.Action import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext import mozilla.components.lib.state.State +import mozilla.components.lib.state.Store /** * A generic middleware that can be attached to a Store to log every action that is processed by that @@ -24,7 +24,7 @@ class ProfileMarkerMiddleware<S : State, A : Action>( val scope: CoroutineScope = CoroutineScope(Dispatchers.Main), ) : Middleware<S, A> { override fun invoke( - context: MiddlewareContext<S, A>, + store: Store<S, A>, next: (A) -> Unit, action: A, ) { diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/StartupMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/StartupMiddleware.kt @@ -9,7 +9,7 @@ import mozilla.components.browser.state.action.BrowserAction import mozilla.components.browser.state.action.RestoreCompleteAction import mozilla.components.browser.state.state.BrowserState import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store import org.mozilla.fenix.ext.components import org.mozilla.fenix.utils.Settings @@ -26,12 +26,12 @@ class StartupMiddleware( private val repository: HomepageAsANewTabPreferencesRepository, ) : Middleware<BrowserState, BrowserAction> { override fun invoke( - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, next: (BrowserAction) -> Unit, action: BrowserAction, ) { if (action is RestoreCompleteAction && - context.store.state.tabs.isEmpty() && + store.state.tabs.isEmpty() && repository.getHomepageAsANewTabEnabled() ) { // After previous sessions are restored, add a new homepage tab if diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/menu/middleware/MenuDialogMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/menu/middleware/MenuDialogMiddleware.kt @@ -25,7 +25,6 @@ import mozilla.components.feature.top.sites.PinnedSiteStorage import mozilla.components.feature.top.sites.TopSite import mozilla.components.feature.top.sites.TopSitesUseCases import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext import mozilla.components.lib.state.Store import mozilla.components.support.base.log.logger.Logger import mozilla.components.ui.widgets.withCenterAlignedButtons @@ -100,23 +99,23 @@ class MenuDialogMiddleware( private val logger = Logger("MenuDialogMiddleware") override fun invoke( - context: MiddlewareContext<MenuState, MenuAction>, + store: Store<MenuState, MenuAction>, next: (MenuAction) -> Unit, action: MenuAction, ) { - val currentState = context.store.state + val currentState = store.state when (action) { - is MenuAction.InitAction -> initialize(context.store) - is MenuAction.AddBookmark -> addBookmark(context.store) - is MenuAction.AddShortcut -> addShortcut(context.store) - is MenuAction.RemoveShortcut -> removeShortcut(context.store) + is MenuAction.InitAction -> initialize(store) + is MenuAction.AddBookmark -> addBookmark(store) + is MenuAction.AddShortcut -> addShortcut(store) + is MenuAction.RemoveShortcut -> removeShortcut(store) is MenuAction.DeleteBrowsingDataAndQuit -> deleteBrowsingDataAndQuit() is MenuAction.FindInPage -> launchFindInPage() is MenuAction.DismissMenuBanner -> dismissMenuBanner() - is MenuAction.OpenInApp -> openInApp(context.store) + is MenuAction.OpenInApp -> openInApp(store) is MenuAction.OpenInFirefox -> openInFirefox() - is MenuAction.InstallAddon -> installAddon(context.store, action.addon) + is MenuAction.InstallAddon -> installAddon(store, action.addon) is MenuAction.InstallAddonSuccess -> installAddonSuccess() is MenuAction.CustomMenuItemAction -> customMenuItemAction(action.intent, action.url) is MenuAction.ToggleReaderView -> toggleReaderView(state = currentState) diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/menu/middleware/MenuNavigationMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/menu/middleware/MenuNavigationMiddleware.kt @@ -21,7 +21,7 @@ import mozilla.components.concept.engine.prompt.ShareData import mozilla.components.feature.pwa.WebAppUseCases import mozilla.components.feature.session.SessionUseCases import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store import mozilla.components.service.fxa.manager.AccountState.Authenticated import mozilla.components.service.fxa.manager.AccountState.Authenticating import mozilla.components.service.fxa.manager.AccountState.AuthenticationProblem @@ -78,7 +78,7 @@ class MenuNavigationMiddleware( @Suppress("CyclomaticComplexMethod", "LongMethod", "CognitiveComplexMethod") override fun invoke( - context: MiddlewareContext<MenuState, MenuAction>, + store: Store<MenuState, MenuAction>, next: (MenuAction) -> Unit, action: MenuAction, ) { @@ -86,7 +86,7 @@ class MenuNavigationMiddleware( // This is to ensure that any navigation action will be using correct // state properties before they are modified due to other actions being // dispatched and processes. - val currentState = context.store.state + val currentState = store.state next(action) diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/menu/middleware/MenuTelemetryMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/menu/middleware/MenuTelemetryMiddleware.kt @@ -5,7 +5,7 @@ package org.mozilla.fenix.components.menu.middleware import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store import mozilla.telemetry.glean.private.NoExtras import org.mozilla.fenix.GleanMetrics.AppMenu import org.mozilla.fenix.GleanMetrics.Events @@ -30,11 +30,11 @@ class MenuTelemetryMiddleware( @Suppress("CyclomaticComplexMethod", "LongMethod", "CognitiveComplexMethod") override fun invoke( - context: MiddlewareContext<MenuState, MenuAction>, + store: Store<MenuState, MenuAction>, next: (MenuAction) -> Unit, action: MenuAction, ) { - val currentState = context.store.state + val currentState = store.state next(action) diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/metrics/MetricsMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/metrics/MetricsMiddleware.kt @@ -5,7 +5,7 @@ package org.mozilla.fenix.components.metrics import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store import org.mozilla.experiments.nimbus.NimbusEventStore import org.mozilla.fenix.components.appstate.AppAction import org.mozilla.fenix.components.appstate.AppState @@ -18,7 +18,7 @@ class MetricsMiddleware( private val nimbusEventStore: NimbusEventStore, ) : Middleware<AppState, AppAction> { override fun invoke( - context: MiddlewareContext<AppState, AppAction>, + store: Store<AppState, AppAction>, next: (AppAction) -> Unit, action: AppAction, ) { diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/search/ApplicationSearchMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/search/ApplicationSearchMiddleware.kt @@ -17,7 +17,6 @@ import mozilla.components.browser.state.action.SearchAction import mozilla.components.browser.state.state.BrowserState import mozilla.components.feature.search.ext.createApplicationSearchEngine import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext import mozilla.components.lib.state.Store import org.mozilla.fenix.R @@ -40,12 +39,12 @@ class ApplicationSearchMiddleware( private val scope: CoroutineScope = CoroutineScope(Dispatchers.IO), ) : Middleware<BrowserState, BrowserAction> { override fun invoke( - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, next: (BrowserAction) -> Unit, action: BrowserAction, ) { if (action is InitAction) { - loadSearchEngines(context.store) + loadSearchEngines(store) } next(action) diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserToolbarMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserToolbarMiddleware.kt @@ -68,7 +68,6 @@ import mozilla.components.feature.session.SessionUseCases import mozilla.components.feature.session.TrackingProtectionUseCases import mozilla.components.lib.publicsuffixlist.PublicSuffixList import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext import mozilla.components.lib.state.State import mozilla.components.lib.state.Store import mozilla.components.lib.state.ext.flow @@ -236,7 +235,7 @@ class BrowserToolbarMiddleware( ) : Middleware<BrowserToolbarState, BrowserToolbarAction> { @Suppress("LongMethod", "CyclomaticComplexMethod", "NestedBlockDepth", "ReturnCount", "CognitiveComplexMethod") override fun invoke( - context: MiddlewareContext<BrowserToolbarState, BrowserToolbarAction>, + store: Store<BrowserToolbarState, BrowserToolbarAction>, next: (BrowserToolbarAction) -> Unit, action: BrowserToolbarAction, ) { @@ -246,30 +245,30 @@ class BrowserToolbarMiddleware( appStore.dispatch(SearchEnded) - updateStartBrowserActions(context) - updateStartPageActions(context) - updateCurrentPageOrigin(context) - updateEndPageActions(context) + updateStartBrowserActions(store) + updateStartPageActions(store) + updateCurrentPageOrigin(store) + updateEndPageActions(store) scope.launch { - updateEndBrowserActions(context) - updateNavigationActions(context) + updateEndBrowserActions(store) + updateNavigationActions(store) } - observeProgressBarUpdates(context) - observeOrientationChanges(context) - observeTabsCountUpdates(context) - observeMenuHighlightChanges(context) - observeAcceptingCancellingPrivateDownloads(context) - observePageNavigationStatus(context) - observePageOriginUpdates(context) - observeSelectedTabBookmarkedUpdates(context) - observeReaderModeUpdates(context) - observePageTranslationsUpdates(context) - observePageRefreshUpdates(context) - observePageTrackingProtectionUpdates(context) - observePageSecurityUpdates(context) - observePermissionHighlightsUpdates(context) + observeProgressBarUpdates(store) + observeOrientationChanges(store) + observeTabsCountUpdates(store) + observeMenuHighlightChanges(store) + observeAcceptingCancellingPrivateDownloads(store) + observePageNavigationStatus(store) + observePageOriginUpdates(store) + observeSelectedTabBookmarkedUpdates(store) + observeReaderModeUpdates(store) + observePageTranslationsUpdates(store) + observePageRefreshUpdates(store) + observePageTrackingProtectionUpdates(store) + observePageSecurityUpdates(store) + observePermissionHighlightsUpdates(store) } is StartPageActions.SiteInfoClicked -> { @@ -374,7 +373,7 @@ class BrowserToolbarMiddleware( ), ) } else { - context.store.dispatch(SearchQueryUpdated(BrowserToolbarQuery(searchTerms))) + store.dispatch(SearchQueryUpdated(BrowserToolbarQuery(searchTerms))) appStore.dispatch(SearchStarted(selectedTab.id)) } } @@ -394,7 +393,7 @@ class BrowserToolbarMiddleware( } } is PasteFromClipboardClicked -> { - context.store.dispatch(SearchQueryUpdated(BrowserToolbarQuery(clipboard.text.orEmpty()))) + store.dispatch(SearchQueryUpdated(BrowserToolbarQuery(clipboard.text.orEmpty()))) appStore.dispatch(SearchStarted(browserStore.state.selectedTabId)) } is LoadFromClipboardClicked -> { @@ -661,22 +660,22 @@ class BrowserToolbarMiddleware( } } - private fun updateStartBrowserActions(context: MiddlewareContext<BrowserToolbarState, BrowserToolbarAction>) = - context.store.dispatch( + private fun updateStartBrowserActions(store: Store<BrowserToolbarState, BrowserToolbarAction>) = + store.dispatch( BrowserActionsStartUpdated( buildStartBrowserActions(), ), ) - private fun updateStartPageActions(context: MiddlewareContext<BrowserToolbarState, BrowserToolbarAction>) = - context.store.dispatch( + private fun updateStartPageActions(store: Store<BrowserToolbarState, BrowserToolbarAction>) = + store.dispatch( BrowserDisplayToolbarAction.PageActionsStartUpdated( buildStartPageActions(), ), ) - private suspend fun updateEndBrowserActions(context: MiddlewareContext<BrowserToolbarState, BrowserToolbarAction>) { - context.store.dispatch( + private suspend fun updateEndBrowserActions(store: Store<BrowserToolbarState, BrowserToolbarAction>) { + store.dispatch( BrowserActionsEndUpdated( buildEndBrowserActions(), ), @@ -695,8 +694,8 @@ class BrowserToolbarMiddleware( } } - private fun updateEndPageActions(context: MiddlewareContext<BrowserToolbarState, BrowserToolbarAction>) = - context.store.dispatch( + private fun updateEndPageActions(store: Store<BrowserToolbarState, BrowserToolbarAction>) = + store.dispatch( PageActionsEndUpdated( buildEndPageActions(), ), @@ -806,8 +805,8 @@ class BrowserToolbarMiddleware( } } - private suspend fun updateNavigationActions(context: MiddlewareContext<BrowserToolbarState, BrowserToolbarAction>) { - context.store.dispatch( + private suspend fun updateNavigationActions(store: Store<BrowserToolbarState, BrowserToolbarAction>) { + store.dispatch( NavigationActionsUpdated( buildNavigationActions(), ), @@ -867,11 +866,11 @@ class BrowserToolbarMiddleware( } } - private fun observeProgressBarUpdates(context: MiddlewareContext<BrowserToolbarState, BrowserToolbarAction>) { + private fun observeProgressBarUpdates(store: Store<BrowserToolbarState, BrowserToolbarAction>) { browserStore.observeWhileActive { distinctUntilChangedBy { it.selectedTab?.content?.progress } .collect { - context.store.dispatch( + store.dispatch( UpdateProgressBarConfig( buildProgressBar(it.selectedTab?.content?.progress ?: 0), ), @@ -880,51 +879,51 @@ class BrowserToolbarMiddleware( } } - private fun observeOrientationChanges(context: MiddlewareContext<BrowserToolbarState, BrowserToolbarAction>) { + private fun observeOrientationChanges(store: Store<BrowserToolbarState, BrowserToolbarAction>) { appStore.observeWhileActive { distinctUntilChangedBy { it.orientation } .collect { - updateStartBrowserActions(context) - updateEndBrowserActions(context) - updateEndPageActions(context) - updateNavigationActions(context) + updateStartBrowserActions(store) + updateEndBrowserActions(store) + updateEndPageActions(store) + updateNavigationActions(store) } } } - private fun observeTabsCountUpdates(context: MiddlewareContext<BrowserToolbarState, BrowserToolbarAction>) { + private fun observeTabsCountUpdates(store: Store<BrowserToolbarState, BrowserToolbarAction>) { browserStore.observeWhileActive { distinctUntilChangedBy { it.tabs.size } .collect { - updateEndBrowserActions(context) - updateNavigationActions(context) + updateEndBrowserActions(store) + updateNavigationActions(store) } } } - private fun observeMenuHighlightChanges(context: MiddlewareContext<BrowserToolbarState, BrowserToolbarAction>) { + private fun observeMenuHighlightChanges(store: Store<BrowserToolbarState, BrowserToolbarAction>) { appStore.observeWhileActive { distinctUntilChangedBy { it.supportedMenuNotifications.isNotEmpty() } .collect { - updateEndBrowserActions(context) - updateNavigationActions(context) + updateEndBrowserActions(store) + updateNavigationActions(store) } } } - private fun observePageOriginUpdates(context: MiddlewareContext<BrowserToolbarState, BrowserToolbarAction>) { + private fun observePageOriginUpdates(store: Store<BrowserToolbarState, BrowserToolbarAction>) { browserStore.observeWhileActive { distinctUntilChangedBy { it.selectedTab?.content?.url } .collect { - updateCurrentPageOrigin(context) - updateEndBrowserActions(context) - updateNavigationActions(context) + updateCurrentPageOrigin(store) + updateEndBrowserActions(store) + updateNavigationActions(store) } } } private fun updateCurrentPageOrigin( - context: MiddlewareContext<BrowserToolbarState, BrowserToolbarAction>, + store: Store<BrowserToolbarState, BrowserToolbarAction>, ) = scope.launch { val url = browserStore.state.selectedTab?.content?.url?.let { it.applyRegistrableDomainSpan(publicSuffixList) @@ -942,7 +941,7 @@ class BrowserToolbarMiddleware( } } - context.store.dispatch( + store.dispatch( BrowserDisplayToolbarAction.PageOriginUpdated( PageOrigin( hint = R.string.search_hint, @@ -955,54 +954,54 @@ class BrowserToolbarMiddleware( ) } - private fun observePageSecurityUpdates(context: MiddlewareContext<BrowserToolbarState, BrowserToolbarAction>) { + private fun observePageSecurityUpdates(store: Store<BrowserToolbarState, BrowserToolbarAction>) { browserStore.observeWhileActive { distinctUntilChangedBy { it.selectedTab?.content?.securityInfo } .collect { - updateStartPageActions(context) + updateStartPageActions(store) } } } private fun observeAcceptingCancellingPrivateDownloads( - context: MiddlewareContext<BrowserToolbarState, BrowserToolbarAction>, + store: Store<BrowserToolbarState, BrowserToolbarAction>, ) { browserScreenStore.observeWhileActive { distinctUntilChangedBy { it.cancelPrivateDownloadsAccepted } .collect { if (it.cancelPrivateDownloadsAccepted) { - context.store.dispatch(CloseCurrentTab) + store.dispatch(CloseCurrentTab) } } } } - private fun observeReaderModeUpdates(context: MiddlewareContext<BrowserToolbarState, BrowserToolbarAction>) { + private fun observeReaderModeUpdates(store: Store<BrowserToolbarState, BrowserToolbarAction>) { browserScreenStore.observeWhileActive { distinctUntilChangedBy { it.readerModeStatus } .collect { - updateStartPageActions(context) - updateEndPageActions(context) + updateStartPageActions(store) + updateEndPageActions(store) } } } - private fun observePageTranslationsUpdates(context: MiddlewareContext<BrowserToolbarState, BrowserToolbarAction>) { + private fun observePageTranslationsUpdates(store: Store<BrowserToolbarState, BrowserToolbarAction>) { browserScreenStore.observeWhileActive { distinctUntilChangedBy { it.pageTranslationStatus } - .collect { - updateEndPageActions(context) - if (ShortcutType.fromValue(settings.toolbarSimpleShortcut) == ShortcutType.TRANSLATE) { - updateEndBrowserActions(context) - } - if (ShortcutType.fromValue(settings.toolbarExpandedShortcut) == ShortcutType.TRANSLATE) { - updateNavigationActions(context) + .collect { + updateEndPageActions(store) + if (ShortcutType.fromValue(settings.toolbarSimpleShortcut) == ShortcutType.TRANSLATE) { + updateEndBrowserActions(store) + } + if (ShortcutType.fromValue(settings.toolbarExpandedShortcut) == ShortcutType.TRANSLATE) { + updateNavigationActions(store) + } } - } } } - private fun observePageNavigationStatus(context: MiddlewareContext<BrowserToolbarState, BrowserToolbarAction>) { + private fun observePageNavigationStatus(store: Store<BrowserToolbarState, BrowserToolbarAction>) { browserStore.observeWhileActive { distinctUntilChangedBy { arrayOf( @@ -1010,35 +1009,35 @@ class BrowserToolbarMiddleware( it.selectedTab?.content?.canGoForward, ) }.collect { - updateStartBrowserActions(context) + updateStartBrowserActions(store) if (ShortcutType.fromValue(settings.toolbarSimpleShortcut) == ShortcutType.BACK) { - updateEndBrowserActions(context) + updateEndBrowserActions(store) } if (ShortcutType.fromValue(settings.toolbarExpandedShortcut) == ShortcutType.BACK) { - updateNavigationActions(context) + updateNavigationActions(store) } } } } - private fun observePageRefreshUpdates(context: MiddlewareContext<BrowserToolbarState, BrowserToolbarAction>) { + private fun observePageRefreshUpdates(store: Store<BrowserToolbarState, BrowserToolbarAction>) { browserStore.observeWhileActive { distinctUntilChangedBy { it.selectedTab?.content?.loading == true } - .collect { updateStartBrowserActions(context) } + .collect { updateStartBrowserActions(store) } } } private fun observePageTrackingProtectionUpdates( - context: MiddlewareContext<BrowserToolbarState, BrowserToolbarAction>, + store: Store<BrowserToolbarState, BrowserToolbarAction>, ) { browserStore.observeWhileActive { distinctUntilChangedBy { it.selectedTab?.trackingProtection } - .collect { updateStartPageActions(context) } + .collect { updateStartPageActions(store) } } } private fun observeSelectedTabBookmarkedUpdates( - context: MiddlewareContext<BrowserToolbarState, BrowserToolbarAction>, + store: Store<BrowserToolbarState, BrowserToolbarAction>, ) { appStore.observeWhileActive { distinctUntilChangedBy { @@ -1046,22 +1045,22 @@ class BrowserToolbarMiddleware( it.snackbarState is SnackbarState.BookmarkDeleted }.collect { isBookmarked -> if (ShortcutType.fromValue(settings.toolbarSimpleShortcut) == ShortcutType.BOOKMARK) { - updateEndBrowserActions(context) + updateEndBrowserActions(store) } if (ShortcutType.fromValue(settings.toolbarExpandedShortcut) == ShortcutType.BOOKMARK) { - updateNavigationActions(context) + updateNavigationActions(store) } } } } private fun observePermissionHighlightsUpdates( - context: MiddlewareContext<BrowserToolbarState, BrowserToolbarAction>, + store: Store<BrowserToolbarState, BrowserToolbarAction>, ) { browserStore.observeWhileActive { distinctUntilChangedBy { it.selectedTab?.content?.permissionHighlights } .collect { - updateStartPageActions(context) + updateStartPageActions(store) } } } diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserToolbarTelemetryMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserToolbarTelemetryMiddleware.kt @@ -9,7 +9,7 @@ import mozilla.components.compose.browser.toolbar.store.BrowserToolbarAction import mozilla.components.compose.browser.toolbar.store.BrowserToolbarInteraction.BrowserToolbarEvent.Source import mozilla.components.compose.browser.toolbar.store.BrowserToolbarState import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store import org.mozilla.fenix.GleanMetrics.Toolbar import org.mozilla.fenix.components.toolbar.DisplayActions.AddBookmarkClicked import org.mozilla.fenix.components.toolbar.DisplayActions.EditBookmarkClicked @@ -60,7 +60,7 @@ import org.mozilla.fenix.telemetry.SOURCE_PAGE_START class BrowserToolbarTelemetryMiddleware : Middleware<BrowserToolbarState, BrowserToolbarAction> { @Suppress("CyclomaticComplexMethod") override fun invoke( - context: MiddlewareContext<BrowserToolbarState, BrowserToolbarAction>, + store: Store<BrowserToolbarState, BrowserToolbarAction>, next: (BrowserToolbarAction) -> Unit, action: BrowserToolbarAction, ) { diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/toolbar/CustomTabBrowserToolbarMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/components/toolbar/CustomTabBrowserToolbarMiddleware.kt @@ -48,7 +48,6 @@ import mozilla.components.feature.session.TrackingProtectionUseCases import mozilla.components.feature.tabs.CustomTabsUseCases import mozilla.components.lib.publicsuffixlist.PublicSuffixList import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext import mozilla.components.lib.state.State import mozilla.components.lib.state.Store import mozilla.components.lib.state.ext.flow @@ -135,7 +134,7 @@ class CustomTabBrowserToolbarMiddleware( @Suppress("LongMethod") override fun invoke( - context: MiddlewareContext<BrowserToolbarState, BrowserToolbarAction>, + store: Store<BrowserToolbarState, BrowserToolbarAction>, next: (BrowserToolbarAction) -> Unit, action: BrowserToolbarAction, ) { @@ -144,16 +143,16 @@ class CustomTabBrowserToolbarMiddleware( next(action) val customTab = customTab - updateStartPageActions(context, customTab) - updateStartBrowserActions(context, customTab) - updateCurrentPageOrigin(context, customTab) - updateEndPageActions(context, customTab) - updateEndBrowserActions(context) - - observePageLoadUpdates(context) - observePageOriginUpdates(context) - observePageSecurityUpdates(context) - observePageTrackingProtectionUpdates(context) + updateStartPageActions(store, customTab) + updateStartBrowserActions(store, customTab) + updateCurrentPageOrigin(store, customTab) + updateEndPageActions(store, customTab) + updateEndBrowserActions(store) + + observePageLoadUpdates(store) + observePageOriginUpdates(store) + observePageSecurityUpdates(store) + observePageTrackingProtectionUpdates(store) } is CloseClicked -> { @@ -288,22 +287,22 @@ class CustomTabBrowserToolbarMiddleware( } } - private fun observePageOriginUpdates(context: MiddlewareContext<BrowserToolbarState, BrowserToolbarAction>) { + private fun observePageOriginUpdates(store: Store<BrowserToolbarState, BrowserToolbarAction>) { browserStore.observeWhileActive { mapNotNull { state -> state.findCustomTab(customTabId) } .ifAnyChanged { tab -> arrayOf(tab.content.title, tab.content.url) } .collect { - updateCurrentPageOrigin(context, it) + updateCurrentPageOrigin(store, it) } } } - private fun observePageLoadUpdates(context: MiddlewareContext<BrowserToolbarState, BrowserToolbarAction>) { + private fun observePageLoadUpdates(store: Store<BrowserToolbarState, BrowserToolbarAction>) { browserStore.observeWhileActive { mapNotNull { state -> state.findCustomTab(customTabId) } .distinctUntilChangedBy { it.content.progress } .collect { - context.store.dispatch( + store.dispatch( UpdateProgressBarConfig( buildProgressBar(it.content.progress), ), @@ -312,50 +311,50 @@ class CustomTabBrowserToolbarMiddleware( } } - private fun observePageSecurityUpdates(context: MiddlewareContext<BrowserToolbarState, BrowserToolbarAction>) { + private fun observePageSecurityUpdates(store: Store<BrowserToolbarState, BrowserToolbarAction>) { browserStore.observeWhileActive { mapNotNull { state -> state.findCustomTab(customTabId) } .distinctUntilChangedBy { tab -> tab.content.securityInfo } .collect { - updateStartPageActions(context, it) + updateStartPageActions(store, it) } } } private fun observePageTrackingProtectionUpdates( - context: MiddlewareContext<BrowserToolbarState, BrowserToolbarAction>, + store: Store<BrowserToolbarState, BrowserToolbarAction>, ) { browserStore.observeWhileActive { mapNotNull { state -> state.findCustomTab(customTabId) } .distinctUntilChangedBy { tab -> tab.trackingProtection } - .collect { updateStartPageActions(context, it) } + .collect { updateStartPageActions(store, it) } } } private fun updateStartBrowserActions( - context: MiddlewareContext<BrowserToolbarState, BrowserToolbarAction>, + store: Store<BrowserToolbarState, BrowserToolbarAction>, customTab: CustomTabSessionState?, - ) = context.store.dispatch( + ) = store.dispatch( BrowserActionsStartUpdated( buildStartBrowserActions(customTab), ), ) private fun updateStartPageActions( - context: MiddlewareContext<BrowserToolbarState, BrowserToolbarAction>, + store: Store<BrowserToolbarState, BrowserToolbarAction>, customTab: CustomTabSessionState?, - ) = context.store.dispatch( + ) = store.dispatch( PageActionsStartUpdated( buildStartPageActions(customTab), ), ) private fun updateCurrentPageOrigin( - context: MiddlewareContext<BrowserToolbarState, BrowserToolbarAction>, + store: Store<BrowserToolbarState, BrowserToolbarAction>, customTab: CustomTabSessionState?, ) { scope.launch { - context.store.dispatch( + store.dispatch( BrowserDisplayToolbarAction.PageOriginUpdated( PageOrigin( hint = R.string.search_hint, @@ -370,17 +369,17 @@ class CustomTabBrowserToolbarMiddleware( } private fun updateEndPageActions( - context: MiddlewareContext<BrowserToolbarState, BrowserToolbarAction>, + store: Store<BrowserToolbarState, BrowserToolbarAction>, customTab: CustomTabSessionState?, - ) = context.store.dispatch( + ) = store.dispatch( BrowserDisplayToolbarAction.PageActionsEndUpdated( buildEndPageActions(customTab), ), ) private fun updateEndBrowserActions( - context: MiddlewareContext<BrowserToolbarState, BrowserToolbarAction>, - ) = context.store.dispatch( + store: Store<BrowserToolbarState, BrowserToolbarAction>, + ) = store.dispatch( BrowserActionsEndUpdated( buildEndBrowserActions(), ), diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/crashes/CrashReportingAppMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/crashes/CrashReportingAppMiddleware.kt @@ -7,7 +7,7 @@ package org.mozilla.fenix.crashes import mozilla.components.lib.crash.store.CrashAction import mozilla.components.lib.crash.store.CrashMiddleware import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store import org.mozilla.fenix.components.appstate.AppAction import org.mozilla.fenix.components.appstate.AppState @@ -20,16 +20,16 @@ class CrashReportingAppMiddleware( private val crashMiddleware: CrashMiddleware, ) : Middleware<AppState, AppAction> { override fun invoke( - context: MiddlewareContext<AppState, AppAction>, + store: Store<AppState, AppAction>, next: (AppAction) -> Unit, action: AppAction, ) { next(action) when (action) { is AppAction.CrashActionWrapper -> { - val getState = { context.store.state.crashState } + val getState = { store.state.crashState } val dispatch: (CrashAction) -> Unit = { - context.store.dispatch(AppAction.CrashActionWrapper(it)) + store.dispatch(AppAction.CrashActionWrapper(it)) } crashMiddleware.invoke( middlewareContext = Pair(getState, dispatch), diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/debugsettings/cfrs/CfrToolsPreferencesMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/debugsettings/cfrs/CfrToolsPreferencesMiddleware.kt @@ -9,7 +9,7 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store /** * [Middleware] that reacts to various [CfrToolsAction]s and updates any corresponding preferences. @@ -23,7 +23,7 @@ class CfrToolsPreferencesMiddleware( ) : Middleware<CfrToolsState, CfrToolsAction> { override fun invoke( - context: MiddlewareContext<CfrToolsState, CfrToolsAction>, + store: Store<CfrToolsState, CfrToolsAction>, next: (CfrToolsAction) -> Unit, action: CfrToolsAction, ) { @@ -35,7 +35,7 @@ class CfrToolsPreferencesMiddleware( cfrPreferencesRepository.cfrPreferenceUpdates .collect { cfrPreferenceUpdate -> val updateAction = mapRepoUpdateToStoreAction(cfrPreferenceUpdate) - context.store.dispatch(updateAction) + store.dispatch(updateAction) } } cfrPreferencesRepository.init() @@ -44,7 +44,7 @@ class CfrToolsPreferencesMiddleware( cfrPreferencesRepository.updateCfrPreference( CfrPreferencesRepository.CfrPreferenceUpdate( preferenceType = CfrPreferencesRepository.CfrPreference.HomepageSearchBar, - value = context.store.state.homepageSearchBarShown, + value = store.state.homepageSearchBarShown, ), ) } @@ -52,7 +52,7 @@ class CfrToolsPreferencesMiddleware( cfrPreferencesRepository.updateCfrPreference( CfrPreferencesRepository.CfrPreferenceUpdate( preferenceType = CfrPreferencesRepository.CfrPreference.TabAutoCloseBanner, - value = context.store.state.tabAutoCloseBannerShown, + value = store.state.tabAutoCloseBannerShown, ), ) } @@ -60,7 +60,7 @@ class CfrToolsPreferencesMiddleware( cfrPreferencesRepository.updateCfrPreference( CfrPreferencesRepository.CfrPreferenceUpdate( preferenceType = CfrPreferencesRepository.CfrPreference.InactiveTabs, - value = context.store.state.inactiveTabsShown, + value = store.state.inactiveTabsShown, ), ) } @@ -68,7 +68,7 @@ class CfrToolsPreferencesMiddleware( cfrPreferencesRepository.updateCfrPreference( CfrPreferencesRepository.CfrPreferenceUpdate( preferenceType = CfrPreferencesRepository.CfrPreference.OpenInApp, - value = context.store.state.openInAppShown, + value = store.state.openInAppShown, ), ) } diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/debugsettings/gleandebugtools/GleanDebugToolsMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/debugsettings/gleandebugtools/GleanDebugToolsMiddleware.kt @@ -5,7 +5,7 @@ package org.mozilla.fenix.debugsettings.gleandebugtools import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store import mozilla.components.support.ktx.kotlin.urlEncode import mozilla.components.support.utils.ClipboardHandler @@ -26,25 +26,25 @@ class GleanDebugToolsMiddleware( private val showToast: (String) -> Unit, ) : Middleware<GleanDebugToolsState, GleanDebugToolsAction> { override fun invoke( - context: MiddlewareContext<GleanDebugToolsState, GleanDebugToolsAction>, + store: Store<GleanDebugToolsState, GleanDebugToolsAction>, next: (GleanDebugToolsAction) -> Unit, action: GleanDebugToolsAction, ) { next(action) when (action) { is GleanDebugToolsAction.LogPingsToConsoleToggled -> { - gleanDebugToolsStorage.setLogPings(context.store.state.logPingsToConsoleEnabled) + gleanDebugToolsStorage.setLogPings(store.state.logPingsToConsoleEnabled) } is GleanDebugToolsAction.OpenDebugView -> { val debugViewLink = getDebugViewLink( - debugViewTag = context.store.state.debugViewTag, + debugViewTag = store.state.debugViewTag, useDebugViewTag = action.useDebugViewTag, ) openDebugView(debugViewLink) } is GleanDebugToolsAction.CopyDebugViewLink -> { val debugViewLink = getDebugViewLink( - debugViewTag = context.store.state.debugViewTag, + debugViewTag = store.state.debugViewTag, useDebugViewTag = action.useDebugViewTag, ) clipboardHandler.text = debugViewLink @@ -52,10 +52,10 @@ class GleanDebugToolsMiddleware( is GleanDebugToolsAction.DebugViewTagChanged -> {} // No-op is GleanDebugToolsAction.SendPing -> { gleanDebugToolsStorage.sendPing( - pingType = context.store.state.pingType, - debugViewTag = context.store.state.debugViewTag, + pingType = store.state.pingType, + debugViewTag = store.state.debugViewTag, ) - showToast(context.store.state.pingType) + showToast(store.state.pingType) } is GleanDebugToolsAction.ChangePingType -> {} // No-op } diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/debugsettings/store/DebugDrawerNavigationMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/debugsettings/store/DebugDrawerNavigationMiddleware.kt @@ -8,7 +8,7 @@ import androidx.navigation.NavHostController import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store import org.mozilla.fenix.debugsettings.navigation.DebugDrawerRoute import org.mozilla.fenix.debugsettings.ui.DEBUG_DRAWER_HOME_ROUTE @@ -24,7 +24,7 @@ class DebugDrawerNavigationMiddleware( ) : Middleware<DebugDrawerState, DebugDrawerAction> { override fun invoke( - context: MiddlewareContext<DebugDrawerState, DebugDrawerAction>, + store: Store<DebugDrawerState, DebugDrawerAction>, next: (DebugDrawerAction) -> Unit, action: DebugDrawerAction, ) { diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/downloads/listscreen/middleware/DownloadDeleteMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/downloads/listscreen/middleware/DownloadDeleteMiddleware.kt @@ -14,7 +14,7 @@ import kotlinx.coroutines.launch import mozilla.components.compose.base.snackbar.SnackbarTimeout import mozilla.components.feature.downloads.DownloadsUseCases import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store import org.mozilla.fenix.downloads.listscreen.store.DownloadUIAction import org.mozilla.fenix.downloads.listscreen.store.DownloadUIState @@ -41,14 +41,14 @@ class DownloadDeleteMiddleware( private val coroutineScope = CoroutineScope(dispatcher) override fun invoke( - context: MiddlewareContext<DownloadUIState, DownloadUIAction>, + store: Store<DownloadUIState, DownloadUIAction>, next: (DownloadUIAction) -> Unit, action: DownloadUIAction, ) { next(action) when (action) { is DownloadUIAction.AddPendingDeletionSet -> - startDelayedRemoval(context, action.itemIds, undoDelay) + startDelayedRemoval(store, action.itemIds, undoDelay) is DownloadUIAction.UndoPendingDeletion -> lastDeleteOperation?.cancel() else -> { @@ -58,7 +58,7 @@ class DownloadDeleteMiddleware( } private fun startDelayedRemoval( - context: MiddlewareContext<DownloadUIState, DownloadUIAction>, + store: Store<DownloadUIState, DownloadUIAction>, items: Set<String>, delay: Long, ) { @@ -66,9 +66,9 @@ class DownloadDeleteMiddleware( try { delay(delay) items.forEach { removeDownloadUseCase(it) } - context.store.dispatch(DownloadUIAction.FileItemDeletedSuccessfully) + store.dispatch(DownloadUIAction.FileItemDeletedSuccessfully) } catch (e: CancellationException) { - context.store.dispatch(DownloadUIAction.UndoPendingDeletionSet(items)) + store.dispatch(DownloadUIAction.UndoPendingDeletionSet(items)) } finally { // This avoids mistakenly clearing lastDeleteOperation if another job was started before // this one finished. diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/downloads/listscreen/middleware/DownloadTelemetryMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/downloads/listscreen/middleware/DownloadTelemetryMiddleware.kt @@ -5,7 +5,7 @@ package org.mozilla.fenix.downloads.listscreen.middleware import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store import mozilla.telemetry.glean.private.NoExtras import org.mozilla.fenix.GleanMetrics.Downloads import org.mozilla.fenix.downloads.listscreen.store.DownloadUIAction @@ -18,7 +18,7 @@ import org.mozilla.fenix.downloads.listscreen.store.DownloadUIState class DownloadTelemetryMiddleware : Middleware<DownloadUIState, DownloadUIAction> { override fun invoke( - context: MiddlewareContext<DownloadUIState, DownloadUIAction>, + store: Store<DownloadUIState, DownloadUIAction>, next: (DownloadUIAction) -> Unit, action: DownloadUIAction, ) { diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/downloads/listscreen/middleware/DownloadUIMapperMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/downloads/listscreen/middleware/DownloadUIMapperMiddleware.kt @@ -15,7 +15,6 @@ import mozilla.components.browser.state.store.BrowserStore import mozilla.components.feature.downloads.DateTimeProvider import mozilla.components.feature.downloads.DefaultDateTimeProvider import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext import mozilla.components.lib.state.Store import mozilla.components.lib.state.ext.flow import org.mozilla.fenix.downloads.listscreen.store.DownloadUIAction @@ -42,7 +41,7 @@ class DownloadUIMapperMiddleware( ) : Middleware<DownloadUIState, DownloadUIAction> { override fun invoke( - context: MiddlewareContext<DownloadUIState, DownloadUIAction>, + store: Store<DownloadUIState, DownloadUIAction>, next: (DownloadUIAction) -> Unit, action: DownloadUIAction, ) { @@ -50,7 +49,7 @@ class DownloadUIMapperMiddleware( when (action) { is DownloadUIAction.Init -> { browserStore.dispatch(DownloadAction.RemoveDeletedDownloads) - update(context.store) + update(store) } else -> { diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/downloads/listscreen/middleware/DownloadUIShareMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/downloads/listscreen/middleware/DownloadUIShareMiddleware.kt @@ -6,7 +6,7 @@ package org.mozilla.fenix.downloads.listscreen.middleware import android.content.Context import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store import mozilla.components.support.ktx.android.content.share import mozilla.components.support.ktx.android.content.shareMedia import org.mozilla.fenix.downloads.listscreen.store.DownloadUIAction @@ -22,7 +22,7 @@ class DownloadUIShareMiddleware( ) : Middleware<DownloadUIState, DownloadUIAction> { override fun invoke( - context: MiddlewareContext<DownloadUIState, DownloadUIAction>, + store: Store<DownloadUIState, DownloadUIAction>, next: (DownloadUIAction) -> Unit, action: DownloadUIAction, ) { diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/downloads/listscreen/middleware/DownloadsServiceCommunicationMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/downloads/listscreen/middleware/DownloadsServiceCommunicationMiddleware.kt @@ -6,7 +6,7 @@ package org.mozilla.fenix.downloads.listscreen.middleware import mozilla.components.feature.downloads.AbstractFetchDownloadService import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store import org.mozilla.fenix.downloads.listscreen.store.DownloadUIAction import org.mozilla.fenix.downloads.listscreen.store.DownloadUIState @@ -23,7 +23,7 @@ class DownloadsServiceCommunicationMiddleware( ) : Middleware<DownloadUIState, DownloadUIAction> { override fun invoke( - context: MiddlewareContext<DownloadUIState, DownloadUIAction>, + store: Store<DownloadUIState, DownloadUIAction>, next: (DownloadUIAction) -> Unit, action: DownloadUIAction, ) { diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/historymetadata/HistoryMetadataMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/historymetadata/HistoryMetadataMiddleware.kt @@ -18,7 +18,6 @@ import mozilla.components.browser.state.state.SearchState import mozilla.components.browser.state.state.TabSessionState import mozilla.components.feature.search.ext.parseSearchTerms import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext import mozilla.components.lib.state.Store import mozilla.components.support.base.log.logger.Logger @@ -37,7 +36,7 @@ class HistoryMetadataMiddleware( @Suppress("CyclomaticComplexMethod") override fun invoke( - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, next: (BrowserAction) -> Unit, action: BrowserAction, ) { @@ -47,7 +46,7 @@ class HistoryMetadataMiddleware( if (action.select) { // Before we add and select a new tab we update the metadata // of the currently selected tab, if not private. - context.store.state.selectedNormalTab?.let { + store.state.selectedNormalTab?.let { updateHistoryMetadata(it) } } @@ -55,27 +54,27 @@ class HistoryMetadataMiddleware( is TabListAction.SelectTabAction -> { // Before we select a new tab we update the metadata // of the currently selected tab, if not private. - context.store.state.selectedNormalTab?.let { + store.state.selectedNormalTab?.let { updateHistoryMetadata(it) } } is TabListAction.RemoveTabAction -> { - if (action.tabId == context.store.state.selectedTabId) { - context.store.state.findNormalTab(action.tabId)?.let { + if (action.tabId == store.state.selectedTabId) { + store.state.findNormalTab(action.tabId)?.let { updateHistoryMetadata(it) } } } is TabListAction.RemoveTabsAction -> { - action.tabIds.find { it == context.store.state.selectedTabId }?.let { - context.store.state.findNormalTab(it)?.let { tab -> + action.tabIds.find { it == store.state.selectedTabId }?.let { + store.state.findNormalTab(it)?.let { tab -> updateHistoryMetadata(tab) } } } is ContentAction.UpdateUrlAction -> { - context.store.state.findNormalTab(action.sessionId)?.let { tab -> - val selectedTab = tab.id == context.store.state.selectedTabId + store.state.findNormalTab(action.sessionId)?.let { tab -> + val selectedTab = tab.id == store.state.selectedTabId // When page url changes (e.g. user navigated away by clicking on a link) // we update metadata for the selected (i.e. previous) url of this tab. // We don't update metadata for cases or reload or restore. @@ -111,13 +110,13 @@ class HistoryMetadataMiddleware( when (action) { is TabListAction.AddTabAction -> { if (!action.tab.content.private) { - createHistoryMetadataIfNeeded(context, action.tab) + createHistoryMetadataIfNeeded(store, action.tab) } } // NB: sometimes this fires multiple times after the page finished loading. is ContentAction.UpdateHistoryStateAction -> { - context.store.state.findNormalTab(action.sessionId)?.let { tab -> - createHistoryMetadataIfNeeded(context, tab) + store.state.findNormalTab(action.sessionId)?.let { tab -> + createHistoryMetadataIfNeeded(store, tab) } // Once we get a history update let's reset the flag for future loads. @@ -125,8 +124,8 @@ class HistoryMetadataMiddleware( } // NB: this could be called bunch of times in quick succession. is MediaSessionAction.UpdateMediaMetadataAction -> { - context.store.state.findNormalTab(action.tabId)?.let { tab -> - createHistoryMetadata(context, tab) + store.state.findNormalTab(action.tabId)?.let { tab -> + createHistoryMetadata(store, tab) } } else -> { @@ -136,7 +135,7 @@ class HistoryMetadataMiddleware( } private fun createHistoryMetadataIfNeeded( - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, tab: TabSessionState, ) { // When history state is ready, we can record metadata for this page. @@ -146,16 +145,16 @@ class HistoryMetadataMiddleware( // Record metadata for tab if there is no metadata present, or if url of the // tab changes since we last recorded metadata. if (!metadataPresentForUrl) { - createHistoryMetadata(context, tab) + createHistoryMetadata(store, tab) } } @Suppress("CognitiveComplexMethod") private fun createHistoryMetadata( - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, tab: TabSessionState, ) { - val tabParent = tab.getParent(context.store) + val tabParent = tab.getParent(store) val previousUrlIndex = tab.content.history.currentIndex - 1 val tabMetadataHasSearchTerms = !tab.historyMetadata?.searchTerm.isNullOrBlank() val directLoadTriggered = directLoadTriggeredSet.contains(tab.id) @@ -176,7 +175,7 @@ class HistoryMetadataMiddleware( val (searchTerm, referrerUrl) = when { // Page was opened in a new tab. Look for search terms in the parent tab. tabParent != null && !tabMetadataHasSearchTerms -> { - val searchTerms = findSearchTerms(tabParent, context.store.state.search) + val searchTerms = findSearchTerms(tabParent, store.state.search) searchTerms to tabParent.content.url } // Page was navigated to via content i.e., the user followed a link. Look for search terms in tab history. @@ -187,11 +186,11 @@ class HistoryMetadataMiddleware( tab.historyMetadata?.searchTerm to previousUrl } else { // Find search terms by checking if page is a SERP or a result opened from a SERP - val searchTerms = findSearchTerms(tab, context.store.state.search) + val searchTerms = findSearchTerms(tab, store.state.search) if (searchTerms != null) { searchTerms to null } else { - context.store.state.search.parseSearchTerms(previousUrl) to previousUrl + store.state.search.parseSearchTerms(previousUrl) to previousUrl } } @@ -210,7 +209,7 @@ class HistoryMetadataMiddleware( } // In all other cases (e.g. direct load) find search terms by checking if page is a SERP else -> { - findSearchTerms(tab, context.store.state.search) to null + findSearchTerms(tab, store.state.search) to null } } @@ -221,7 +220,7 @@ class HistoryMetadataMiddleware( } val key = historyMetadataService.createMetadata(tab, searchTerm, referrerUrl) - context.store.dispatch(HistoryMetadataAction.SetHistoryMetadataKeyAction(tab.id, key)) + store.dispatch(HistoryMetadataAction.SetHistoryMetadataKeyAction(tab.id, key)) } private fun updateHistoryMetadata(tab: TabSessionState) { diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/PocketMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/PocketMiddleware.kt @@ -13,7 +13,6 @@ import kotlinx.coroutines.flow.first import kotlinx.coroutines.launch import mozilla.components.lib.state.Action import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext import mozilla.components.lib.state.Store import mozilla.components.service.pocket.PocketStoriesService import mozilla.components.service.pocket.PocketStory @@ -73,7 +72,7 @@ class PocketMiddleware( private val coroutineScope: CoroutineScope = CoroutineScope(Dispatchers.IO), ) : Middleware<AppState, AppAction> { override fun invoke( - context: MiddlewareContext<AppState, AppAction>, + store: Store<AppState, AppAction>, next: (AppAction) -> Unit, action: AppAction, ) { @@ -103,7 +102,7 @@ class PocketMiddleware( restoreSelectedCategories( coroutineScope = coroutineScope, currentCategories = action.storiesCategories, - store = context.store, + store = store, selectedPocketCategoriesDataStore = selectedPocketCategoriesDataStore, ) } @@ -128,7 +127,7 @@ class PocketMiddleware( -> { persistSelectedCategories( coroutineScope = coroutineScope, - currentCategoriesSelections = context.store + currentCategoriesSelections = store .state .recommendationState .pocketStoriesCategoriesSelections, diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/blocklist/BlocklistMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/blocklist/BlocklistMiddleware.kt @@ -5,7 +5,7 @@ package org.mozilla.fenix.home.blocklist import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store import org.mozilla.fenix.components.appstate.AppAction import org.mozilla.fenix.components.appstate.AppState import org.mozilla.fenix.home.recenttabs.RecentTab @@ -26,11 +26,11 @@ class BlocklistMiddleware( * the blocklist. */ override fun invoke( - context: MiddlewareContext<AppState, AppAction>, + store: Store<AppState, AppAction>, next: (AppAction) -> Unit, action: AppAction, ) { - next(getUpdatedAction(context.store.state, action)) + next(getUpdatedAction(store.state, action)) } private fun getUpdatedAction( diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/middleware/HomeTelemetryMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/middleware/HomeTelemetryMiddleware.kt @@ -5,7 +5,7 @@ package org.mozilla.fenix.home.middleware import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store import mozilla.components.service.pocket.PocketStory.ContentRecommendation import org.mozilla.fenix.GleanMetrics.HomeContentArticle import org.mozilla.fenix.GleanMetrics.Pings @@ -20,7 +20,7 @@ import org.mozilla.fenix.components.appstate.AppState */ class HomeTelemetryMiddleware : Middleware<AppState, AppAction> { override fun invoke( - context: MiddlewareContext<AppState, AppAction>, + store: Store<AppState, AppAction>, next: (AppAction) -> Unit, action: AppAction, ) { diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/setup/store/SetupChecklistPreferencesMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/setup/store/SetupChecklistPreferencesMiddleware.kt @@ -9,7 +9,7 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store import org.mozilla.fenix.components.appstate.AppAction import org.mozilla.fenix.components.appstate.AppState import org.mozilla.fenix.components.appstate.setup.checklist.ChecklistItem @@ -26,7 +26,7 @@ class SetupChecklistPreferencesMiddleware( ) : Middleware<AppState, AppAction> { override fun invoke( - context: MiddlewareContext<AppState, AppAction>, + store: Store<AppState, AppAction>, next: (AppAction) -> Unit, action: AppAction, ) { @@ -38,7 +38,7 @@ class SetupChecklistPreferencesMiddleware( repository.setupChecklistPreferenceUpdates .collect { preferenceUpdate -> val updateAction = mapRepoUpdateToStoreAction(preferenceUpdate) - context.store.dispatch(updateAction) + store.dispatch(updateAction) } } repository.init() diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/setup/store/SetupChecklistTelemetryMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/setup/store/SetupChecklistTelemetryMiddleware.kt @@ -5,7 +5,7 @@ package org.mozilla.fenix.home.setup.store import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store import org.mozilla.fenix.GleanMetrics.Onboarding import org.mozilla.fenix.components.appstate.AppAction import org.mozilla.fenix.components.appstate.AppState @@ -18,7 +18,7 @@ class SetupChecklistTelemetryMiddleware( val telemetry: SetupChecklistTelemetryRecorder = DefaultSetupChecklistTelemetryRecorder(), ) : Middleware<AppState, AppAction> { override fun invoke( - context: MiddlewareContext<AppState, AppAction>, + store: Store<AppState, AppAction>, next: (AppAction) -> Unit, action: AppAction, ) { diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/toolbar/BrowserToolbarMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/toolbar/BrowserToolbarMiddleware.kt @@ -45,7 +45,6 @@ import mozilla.components.compose.browser.toolbar.store.BrowserToolbarState import mozilla.components.compose.browser.toolbar.store.Mode import mozilla.components.compose.browser.toolbar.ui.BrowserToolbarQuery import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext import mozilla.components.lib.state.State import mozilla.components.lib.state.Store import mozilla.components.lib.state.ext.flow @@ -132,7 +131,7 @@ class BrowserToolbarMiddleware( @Suppress("LongMethod", "CyclomaticComplexMethod", "CognitiveComplexMethod") override fun invoke( - context: MiddlewareContext<BrowserToolbarState, BrowserToolbarAction>, + store: Store<BrowserToolbarState, BrowserToolbarAction>, next: (BrowserToolbarAction) -> Unit, action: BrowserToolbarAction, ) { @@ -140,16 +139,16 @@ class BrowserToolbarMiddleware( is Init -> { next(action) - if (context.store.state.mode == Mode.DISPLAY) { - observeSearchStateUpdates(context) + if (store.state.mode == Mode.DISPLAY) { + observeSearchStateUpdates(store) } - updatePageOrigin(context) - updateEndBrowserActions(context) - updateNavigationActions(context) - updateToolbarActionsBasedOnOrientation(context) - updateTabsCount(context) - updateMenuHighlight(context) + updatePageOrigin(store) + updateEndBrowserActions(store) + updateNavigationActions(store) + updateToolbarActionsBasedOnOrientation(store) + updateTabsCount(store) + updateMenuHighlight(store) } is EnterEditMode -> { @@ -161,7 +160,7 @@ class BrowserToolbarMiddleware( is ExitEditMode -> { next(action) - observeSearchStateUpdates(context) + observeSearchStateUpdates(store) } is MenuClicked -> { @@ -199,11 +198,11 @@ class BrowserToolbarMiddleware( next(action) } is AddNewTab -> { - openNewTab(context, Normal) + openNewTab(store, Normal) next(action) } is AddNewPrivateTab -> { - openNewTab(context, Private) + openNewTab(store, Private) next(action) } @@ -212,7 +211,7 @@ class BrowserToolbarMiddleware( appStore.dispatch(SearchStarted()) } is PasteFromClipboardClicked -> { - openNewTab(context, searchTerms = clipboard.text) + openNewTab(store, searchTerms = clipboard.text) } is LoadFromClipboardClicked -> { clipboard.extractURL()?.let { @@ -233,22 +232,22 @@ class BrowserToolbarMiddleware( } private fun openNewTab( - context: MiddlewareContext<BrowserToolbarState, BrowserToolbarAction>, + store: Store<BrowserToolbarState, BrowserToolbarAction>, browsingMode: BrowsingMode? = null, searchTerms: String? = null, ) { browsingMode?.let { browsingModeManager.mode = it } - context.store.dispatch(SearchQueryUpdated(BrowserToolbarQuery(searchTerms ?: ""))) + store.dispatch(SearchQueryUpdated(BrowserToolbarQuery(searchTerms ?: ""))) appStore.dispatch(SearchStarted()) } - private fun observeSearchStateUpdates(context: MiddlewareContext<BrowserToolbarState, BrowserToolbarAction>) { + private fun observeSearchStateUpdates(store: Store<BrowserToolbarState, BrowserToolbarAction>) { syncCurrentSearchEngineJob?.cancel() syncCurrentSearchEngineJob = appStore.observeWhileActive { distinctUntilChangedBy { it.searchState.selectedSearchEngine?.searchEngine } .collect { it.searchState.selectedSearchEngine?.let { - updateStartPageActions(context, it.searchEngine) + updateStartPageActions(store, it.searchEngine) } } } @@ -258,7 +257,7 @@ class BrowserToolbarMiddleware( distinctUntilChangedBy { it.search.searchEngineShortcuts } .collect { updateStartPageActions( - context = context, + store = store, selectedSearchEngine = reconcileSelectedEngine(), ) } @@ -271,16 +270,16 @@ class BrowserToolbarMiddleware( } private fun updateStartPageActions( - context: MiddlewareContext<BrowserToolbarState, BrowserToolbarAction>, + store: Store<BrowserToolbarState, BrowserToolbarAction>, selectedSearchEngine: SearchEngine?, - ) = context.store.dispatch( + ) = store.dispatch( PageActionsStartUpdated( buildStartPageActions(selectedSearchEngine), ), ) - private fun updatePageOrigin(context: MiddlewareContext<BrowserToolbarState, BrowserToolbarAction>) = - context.store.dispatch( + private fun updatePageOrigin(store: Store<BrowserToolbarState, BrowserToolbarAction>) = + store.dispatch( PageOriginUpdated( PageOrigin( hint = R.string.search_hint, @@ -292,8 +291,8 @@ class BrowserToolbarMiddleware( ), ) - private fun updateEndBrowserActions(context: MiddlewareContext<BrowserToolbarState, BrowserToolbarAction>) { - context.store.dispatch( + private fun updateEndBrowserActions(store: Store<BrowserToolbarState, BrowserToolbarAction>) { + store.dispatch( BrowserActionsEndUpdated( buildEndBrowserActions(), ), @@ -329,8 +328,8 @@ class BrowserToolbarMiddleware( } } - private fun updateNavigationActions(context: MiddlewareContext<BrowserToolbarState, BrowserToolbarAction>) { - context.store.dispatch( + private fun updateNavigationActions(store: Store<BrowserToolbarState, BrowserToolbarAction>) { + store.dispatch( NavigationActionsUpdated( buildNavigationActions(), ), @@ -410,33 +409,33 @@ class BrowserToolbarMiddleware( } private fun updateToolbarActionsBasedOnOrientation( - context: MiddlewareContext<BrowserToolbarState, BrowserToolbarAction>, + store: Store<BrowserToolbarState, BrowserToolbarAction>, ) { appStore.observeWhileActive { distinctUntilChangedBy { it.orientation } .collect { - updateEndBrowserActions(context) - updateNavigationActions(context) + updateEndBrowserActions(store) + updateNavigationActions(store) } } } - private fun updateTabsCount(context: MiddlewareContext<BrowserToolbarState, BrowserToolbarAction>) { + private fun updateTabsCount(store: Store<BrowserToolbarState, BrowserToolbarAction>) { browserStore.observeWhileActive { distinctUntilChangedBy { it.tabs.size } .collect { - updateEndBrowserActions(context) - updateNavigationActions(context) + updateEndBrowserActions(store) + updateNavigationActions(store) } } } - private fun updateMenuHighlight(context: MiddlewareContext<BrowserToolbarState, BrowserToolbarAction>) { + private fun updateMenuHighlight(store: Store<BrowserToolbarState, BrowserToolbarAction>) { appStore.observeWhileActive { distinctUntilChangedBy { it.supportedMenuNotifications.isNotEmpty() } .collect { - updateEndBrowserActions(context) - updateNavigationActions(context) + updateEndBrowserActions(store) + updateNavigationActions(store) } } } diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/toolbar/BrowserToolbarTelemetryMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/home/toolbar/BrowserToolbarTelemetryMiddleware.kt @@ -9,7 +9,7 @@ import mozilla.components.compose.browser.toolbar.store.BrowserToolbarAction import mozilla.components.compose.browser.toolbar.store.BrowserToolbarInteraction.BrowserToolbarEvent.Source import mozilla.components.compose.browser.toolbar.store.BrowserToolbarState import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store import org.mozilla.fenix.GleanMetrics.Toolbar import org.mozilla.fenix.home.toolbar.DisplayActions.MenuClicked import org.mozilla.fenix.home.toolbar.TabCounterInteractions.AddNewPrivateTab @@ -33,7 +33,7 @@ import org.mozilla.fenix.telemetry.SOURCE_PAGE_START */ class BrowserToolbarTelemetryMiddleware : Middleware<BrowserToolbarState, BrowserToolbarAction> { override fun invoke( - context: MiddlewareContext<BrowserToolbarState, BrowserToolbarAction>, + store: Store<BrowserToolbarState, BrowserToolbarAction>, next: (BrowserToolbarAction) -> Unit, action: BrowserToolbarAction, ) { diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/iconpicker/AppIconMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/iconpicker/AppIconMiddleware.kt @@ -5,7 +5,7 @@ package org.mozilla.fenix.iconpicker import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store /** * A middleware for handling side-effects in response to [AppIconAction]s. @@ -17,7 +17,7 @@ class AppIconMiddleware( ) : Middleware<AppIconState, AppIconAction> { override fun invoke( - context: MiddlewareContext<AppIconState, AppIconAction>, + store: Store<AppIconState, AppIconAction>, next: (AppIconAction) -> Unit, action: AppIconAction, ) { @@ -26,9 +26,9 @@ class AppIconMiddleware( when (action) { is UserAction.Confirmed -> { if (updateAppIcon(old = action.newIcon, new = action.oldIcon)) { - context.store.dispatch(SystemAction.Applied(action.newIcon)) + store.dispatch(SystemAction.Applied(action.newIcon)) } else { - context.store.dispatch( + store.dispatch( SystemAction.UpdateFailed( oldIcon = action.oldIcon, newIcon = action.newIcon, diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/iconpicker/AppIconTelemetryMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/iconpicker/AppIconTelemetryMiddleware.kt @@ -5,7 +5,7 @@ package org.mozilla.fenix.iconpicker import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store import org.mozilla.fenix.GleanMetrics.AppIconSelection /** @@ -13,7 +13,7 @@ import org.mozilla.fenix.GleanMetrics.AppIconSelection */ class AppIconTelemetryMiddleware : Middleware<AppIconState, AppIconAction> { override fun invoke( - context: MiddlewareContext<AppIconState, AppIconAction>, + store: Store<AppIconState, AppIconAction>, next: (AppIconAction) -> Unit, action: AppIconAction, ) { diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/library/history/BrowserToolbarSyncToHistoryMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/library/history/BrowserToolbarSyncToHistoryMiddleware.kt @@ -9,7 +9,7 @@ import mozilla.components.compose.browser.toolbar.store.BrowserToolbarAction.Exi import mozilla.components.compose.browser.toolbar.store.BrowserToolbarState import mozilla.components.compose.browser.toolbar.store.BrowserToolbarStore import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store import org.mozilla.fenix.library.history.HistoryFragmentAction.SearchDismissed /** @@ -20,7 +20,7 @@ class BrowserToolbarSyncToHistoryMiddleware( private val historyStore: HistoryFragmentStore, ) : Middleware<BrowserToolbarState, BrowserToolbarAction> { override fun invoke( - context: MiddlewareContext<BrowserToolbarState, BrowserToolbarAction>, + store: Store<BrowserToolbarState, BrowserToolbarAction>, next: (BrowserToolbarAction) -> Unit, action: BrowserToolbarAction, ) { diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/library/history/state/HistoryTelemetryMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/library/history/state/HistoryTelemetryMiddleware.kt @@ -5,7 +5,7 @@ package org.mozilla.fenix.library.history.state import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store import mozilla.telemetry.glean.private.NoExtras import org.mozilla.fenix.library.history.History import org.mozilla.fenix.library.history.HistoryFragmentAction @@ -23,11 +23,11 @@ class HistoryTelemetryMiddleware( private val isInPrivateMode: Boolean, ) : Middleware<HistoryFragmentState, HistoryFragmentAction> { override fun invoke( - context: MiddlewareContext<HistoryFragmentState, HistoryFragmentAction>, + store: Store<HistoryFragmentState, HistoryFragmentAction>, next: (HistoryFragmentAction) -> Unit, action: HistoryFragmentAction, ) { - val currentState = context.store.state + val currentState = store.state next(action) when (action) { is HistoryFragmentAction.HistoryItemClicked -> { diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/messaging/state/MessagingMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/messaging/state/MessagingMiddleware.kt @@ -8,7 +8,7 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store import mozilla.components.service.nimbus.messaging.Message import mozilla.components.service.nimbus.messaging.NimbusMessagingControllerInterface import org.mozilla.fenix.components.appstate.AppAction @@ -23,7 +23,7 @@ import org.mozilla.fenix.components.appstate.AppAction.MessagingAction.UpdateMes import org.mozilla.fenix.components.appstate.AppState import org.mozilla.fenix.utils.Settings -typealias AppStoreMiddlewareContext = MiddlewareContext<AppState, AppAction> +typealias AppStoreMiddlewareContext = Store<AppState, AppAction> class MessagingMiddleware( private val controller: NimbusMessagingControllerInterface, @@ -32,7 +32,7 @@ class MessagingMiddleware( ) : Middleware<AppState, AppAction> { override fun invoke( - context: AppStoreMiddlewareContext, + store: AppStoreMiddlewareContext, next: (AppAction) -> Unit, action: AppAction, ) { @@ -40,40 +40,40 @@ class MessagingMiddleware( is Restore -> { coroutineScope.launch { val messages = controller.getMessages() - context.store.dispatch(UpdateMessages(messages)) + store.dispatch(UpdateMessages(messages)) } } is Evaluate -> { val message = controller.getNextMessage( action.surface, - context.store.state.messaging.messages, + store.state.messaging.messages, ) if (message != null) { - context.store.dispatch(UpdateMessageToShow(message)) - onMessagedDisplayed(message, context) + store.dispatch(UpdateMessageToShow(message)) + onMessagedDisplayed(message, store) } else { - context.store.dispatch(ConsumeMessageToShow(action.surface)) + store.dispatch(ConsumeMessageToShow(action.surface)) } } - is MessageClicked -> onMessageClicked(action.message, context) + is MessageClicked -> onMessageClicked(action.message, store) - is MessageDismissed -> onMessageDismissed(context, action.message) + is MessageDismissed -> onMessageDismissed(store, action.message) is MicrosurveyAction.Shown -> onMicrosurveyShown(action.id) is MicrosurveyAction.OnPrivacyNoticeTapped -> onPrivacyNoticeTapped(action.id) is MicrosurveyAction.Dismissed -> { - context.store.state.messaging.messages.find { it.id == action.id }?.let { message -> - onMicrosurveyDismissed(context, message) + store.state.messaging.messages.find { it.id == action.id }?.let { message -> + onMicrosurveyDismissed(store, message) } } is MicrosurveyAction.Completed -> { - context.store.state.messaging.messages.find { it.id == action.id }?.let { message -> - onMicrosurveyCompleted(context, message, action.answer) + store.state.messaging.messages.find { it.id == action.id }?.let { message -> + onMicrosurveyCompleted(store, message, action.answer) } } @@ -89,13 +89,13 @@ class MessagingMiddleware( } private fun onMicrosurveyCompleted( - context: AppStoreMiddlewareContext, + store: AppStoreMiddlewareContext, message: Message, answer: String, ) { - val newMessages = removeMessage(context, message) - context.store.dispatch(UpdateMessages(newMessages)) - consumeMessageToShowIfNeeded(context, message) + val newMessages = removeMessage(store, message) + store.dispatch(UpdateMessages(newMessages)) + consumeMessageToShowIfNeeded(store, message) coroutineScope.launch { controller.onMicrosurveyCompleted(message, answer) } @@ -108,12 +108,12 @@ class MessagingMiddleware( } private fun onMicrosurveyDismissed( - context: AppStoreMiddlewareContext, + store: AppStoreMiddlewareContext, message: Message, ) { - val newMessages = removeMessage(context, message) - context.store.dispatch(UpdateMessages(newMessages)) - consumeMessageToShowIfNeeded(context, message) + val newMessages = removeMessage(store, message) + store.dispatch(UpdateMessages(newMessages)) + consumeMessageToShowIfNeeded(store, message) coroutineScope.launch { controller.onMicrosurveyDismissed(message) } @@ -133,29 +133,29 @@ class MessagingMiddleware( private fun onMessagedDisplayed( oldMessage: Message, - context: AppStoreMiddlewareContext, + store: AppStoreMiddlewareContext, ) { coroutineScope.launch { val newMessage = controller.onMessageDisplayed(oldMessage) val newMessages = if (!newMessage.isExpired) { - updateMessage(context, oldMessage, newMessage) + updateMessage(store, oldMessage, newMessage) } else { if (newMessage.isMicrosurvey()) settings.shouldShowMicrosurveyPrompt = false - removeMessage(context, oldMessage) + removeMessage(store, oldMessage) } - context.store.dispatch(UpdateMessages(newMessages)) + store.dispatch(UpdateMessages(newMessages)) } } private fun Message.isMicrosurvey() = surface == "microsurvey" private fun onMessageDismissed( - context: AppStoreMiddlewareContext, + store: AppStoreMiddlewareContext, message: Message, ) { - val newMessages = removeMessage(context, message) - context.store.dispatch(UpdateMessages(newMessages)) - consumeMessageToShowIfNeeded(context, message) + val newMessages = removeMessage(store, message) + store.dispatch(UpdateMessages(newMessages)) + consumeMessageToShowIfNeeded(store, message) coroutineScope.launch { controller.onMessageDismissed(message) } @@ -163,16 +163,16 @@ class MessagingMiddleware( private fun onMessageClicked( message: Message, - context: AppStoreMiddlewareContext, + store: AppStoreMiddlewareContext, ) { // Update Nimbus storage. coroutineScope.launch { controller.onMessageClicked(message) } // Update app state. - val newMessages = removeMessage(context, message) - context.store.dispatch(UpdateMessages(newMessages)) - consumeMessageToShowIfNeeded(context, message) + val newMessages = removeMessage(store, message) + store.dispatch(UpdateMessages(newMessages)) + consumeMessageToShowIfNeeded(store, message) } private fun onMicrosurveyStarted( @@ -184,42 +184,42 @@ class MessagingMiddleware( } private fun consumeMessageToShowIfNeeded( - context: AppStoreMiddlewareContext, + store: AppStoreMiddlewareContext, message: Message, ) { - val current = context.store.state.messaging.messageToShow[message.surface] + val current = store.state.messaging.messageToShow[message.surface] if (current?.id == message.id) { - context.store.dispatch(ConsumeMessageToShow(message.surface)) + store.dispatch(ConsumeMessageToShow(message.surface)) } } private fun removeMessage( - context: AppStoreMiddlewareContext, + store: AppStoreMiddlewareContext, message: Message, ): List<Message> { - return context.store.state.messaging.messages.filter { it.id != message.id } + return store.state.messaging.messages.filter { it.id != message.id } } private fun updateMessage( - context: AppStoreMiddlewareContext, + store: AppStoreMiddlewareContext, oldMessage: Message, updatedMessage: Message, ): List<Message> { - val actualMessageToShow = context.store.state.messaging.messageToShow[updatedMessage.surface] + val actualMessageToShow = store.state.messaging.messageToShow[updatedMessage.surface] if (actualMessageToShow?.id == oldMessage.id) { - context.store.dispatch(UpdateMessageToShow(updatedMessage)) + store.dispatch(UpdateMessageToShow(updatedMessage)) } - val oldMessageIndex = context.store.state.messaging.messages.indexOfFirst { it.id == updatedMessage.id } + val oldMessageIndex = store.state.messaging.messages.indexOfFirst { it.id == updatedMessage.id } return if (oldMessageIndex != -1) { - val newList = context.store.state.messaging.messages.toMutableList() + val newList = store.state.messaging.messages.toMutableList() newList[oldMessageIndex] = updatedMessage newList } else { // No need to update the message, it was removed. This is due to a race condition, see: // https://bugzilla.mozilla.org/show_bug.cgi?id=1897485 - context.store.state.messaging.messages + store.state.messaging.messages } } } diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/onboarding/store/OnboardingPreferencesMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/onboarding/store/OnboardingPreferencesMiddleware.kt @@ -8,7 +8,7 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store import org.mozilla.fenix.onboarding.store.OnboardingPreferencesRepository.OnboardingPreference import org.mozilla.fenix.onboarding.view.ThemeOptionType import org.mozilla.fenix.onboarding.view.ToolbarOptionType @@ -24,7 +24,7 @@ class OnboardingPreferencesMiddleware( private val coroutineScope: CoroutineScope = CoroutineScope(Dispatchers.Main), ) : Middleware<OnboardingState, OnboardingAction> { override fun invoke( - context: MiddlewareContext<OnboardingState, OnboardingAction>, + store: Store<OnboardingState, OnboardingAction>, next: (OnboardingAction) -> Unit, action: OnboardingAction, ) { @@ -38,7 +38,7 @@ class OnboardingPreferencesMiddleware( if (preferenceUpdate.value) { val updateAction = mapOnboardingPreferenceUpdateToStoreAction(preferenceUpdate) - context.store.dispatch(updateAction) + store.dispatch(updateAction) } } } diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/onboarding/store/PrivacyPreferencesMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/onboarding/store/PrivacyPreferencesMiddleware.kt @@ -5,7 +5,7 @@ package org.mozilla.fenix.onboarding.store import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store /** * [Middleware] that reacts to various [PrivacyPreferencesAction]s and updates any corresponding preferences. @@ -17,7 +17,7 @@ class PrivacyPreferencesMiddleware( ) : Middleware<PrivacyPreferencesState, PrivacyPreferencesAction> { override fun invoke( - context: MiddlewareContext<PrivacyPreferencesState, PrivacyPreferencesAction>, + store: Store<PrivacyPreferencesState, PrivacyPreferencesAction>, next: (PrivacyPreferencesAction) -> Unit, action: PrivacyPreferencesAction, ) { diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/onboarding/store/PrivacyPreferencesTelemetryMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/onboarding/store/PrivacyPreferencesTelemetryMiddleware.kt @@ -5,7 +5,7 @@ package org.mozilla.fenix.onboarding.store import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store import org.mozilla.fenix.GleanMetrics.Onboarding /** @@ -14,7 +14,7 @@ import org.mozilla.fenix.GleanMetrics.Onboarding class PrivacyPreferencesTelemetryMiddleware : Middleware<PrivacyPreferencesState, PrivacyPreferencesAction> { override fun invoke( - context: MiddlewareContext<PrivacyPreferencesState, PrivacyPreferencesAction>, + store: Store<PrivacyPreferencesState, PrivacyPreferencesAction>, next: (PrivacyPreferencesAction) -> Unit, action: PrivacyPreferencesAction, ) { diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/reviewprompt/CustomReviewPromptNavigationMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/reviewprompt/CustomReviewPromptNavigationMiddleware.kt @@ -7,7 +7,7 @@ package org.mozilla.fenix.reviewprompt import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store import org.mozilla.fenix.settings.SupportUtils /** @@ -19,11 +19,11 @@ class CustomReviewPromptNavigationMiddleware( ) : Middleware<CustomReviewPromptState, CustomReviewPromptAction> { override fun invoke( - context: MiddlewareContext<CustomReviewPromptState, CustomReviewPromptAction>, + store: Store<CustomReviewPromptState, CustomReviewPromptAction>, next: (CustomReviewPromptAction) -> Unit, action: CustomReviewPromptAction, ) { - val events = (context.store as CustomReviewPromptStore).navigationEvents + val events = (store as CustomReviewPromptStore).navigationEvents when (action) { CustomReviewPromptAction.RateButtonClicked -> { scope.launch { diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/reviewprompt/CustomReviewPromptTelemetryMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/reviewprompt/CustomReviewPromptTelemetryMiddleware.kt @@ -5,7 +5,7 @@ package org.mozilla.fenix.reviewprompt import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store import mozilla.telemetry.glean.private.NoExtras import org.mozilla.fenix.GleanMetrics.CustomReviewPrompt @@ -13,7 +13,7 @@ internal class CustomReviewPromptTelemetryMiddleware : Middleware<CustomReviewPromptState, CustomReviewPromptAction> { override fun invoke( - context: MiddlewareContext<CustomReviewPromptState, CustomReviewPromptAction>, + store: Store<CustomReviewPromptState, CustomReviewPromptAction>, next: (CustomReviewPromptAction) -> Unit, action: CustomReviewPromptAction, ) { diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/reviewprompt/ReviewPromptMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/reviewprompt/ReviewPromptMiddleware.kt @@ -6,7 +6,7 @@ package org.mozilla.fenix.reviewprompt import androidx.annotation.VisibleForTesting import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store import mozilla.components.service.nimbus.evalJexlSafe import mozilla.components.service.nimbus.messaging.use import org.mozilla.experiments.nimbus.NimbusEventStore @@ -74,7 +74,7 @@ class ReviewPromptMiddleware( } override fun invoke( - context: MiddlewareContext<AppState, AppAction>, + store: Store<AppState, AppAction>, next: (AppAction) -> Unit, action: AppAction, ) { @@ -84,7 +84,7 @@ class ReviewPromptMiddleware( } when (action) { - CheckIfEligibleForReviewPrompt -> handleReviewPromptCheck(context) + CheckIfEligibleForReviewPrompt -> handleReviewPromptCheck(store) ReviewPromptShown -> nimbusEventStore.recordEvent(REVIEW_PROMPT_SHOWN_NIMBUS_EVENT_ID) DoNotShowReviewPrompt -> Unit ShowCustomReviewPrompt -> Unit @@ -95,8 +95,8 @@ class ReviewPromptMiddleware( } @Suppress("CognitiveComplexMethod") - private fun handleReviewPromptCheck(context: MiddlewareContext<AppState, AppAction>) { - if (context.store.state.reviewPrompt != ReviewPromptState.Unknown) { + private fun handleReviewPromptCheck(store: Store<AppState, AppAction>) { + if (store.state.reviewPrompt != ReviewPromptState.Unknown) { // We only want to try to show it once to avoid unnecessary disk reads. return } @@ -123,12 +123,12 @@ class ReviewPromptMiddleware( if (isTelemetryEnabled()) { // This is a temporary change while investigating repeated custom review prompts as // filed in https://bugzilla.mozilla.org/show_bug.cgi?id=2001801. - context.store.dispatch(ShowPlayStorePrompt) + store.dispatch(ShowPlayStorePrompt) } else { - context.store.dispatch(ShowPlayStorePrompt) + store.dispatch(ShowPlayStorePrompt) } } else { - context.store.dispatch(DoNotShowReviewPrompt) + store.dispatch(DoNotShowReviewPrompt) } } } diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/search/BrowserStoreToFenixSearchMapperMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/search/BrowserStoreToFenixSearchMapperMiddleware.kt @@ -13,7 +13,6 @@ import kotlinx.coroutines.flow.map import kotlinx.coroutines.launch import mozilla.components.browser.state.store.BrowserStore import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext import mozilla.components.lib.state.State import mozilla.components.lib.state.Store import mozilla.components.lib.state.ext.flow @@ -37,23 +36,23 @@ class BrowserStoreToFenixSearchMapperMiddleware( private var observeBrowserSearchStateJob: Job? = null override fun invoke( - context: MiddlewareContext<SearchFragmentState, SearchFragmentAction>, + store: Store<SearchFragmentState, SearchFragmentAction>, next: (SearchFragmentAction) -> Unit, action: SearchFragmentAction, ) { next(action) if (action is Init) { - observeBrowserSearchState(context) + observeBrowserSearchState(store) } } - private fun observeBrowserSearchState(context: MiddlewareContext<SearchFragmentState, SearchFragmentAction>) { + private fun observeBrowserSearchState(store: Store<SearchFragmentState, SearchFragmentAction>) { observeBrowserSearchStateJob = browserStore.observeWhileActive { map { it.search } .distinctUntilChanged() .collect { searchState -> - context.store.dispatch( + store.dispatch( UpdateSearchState(searchState, true), ) } diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/search/BrowserToolbarSearchMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/search/BrowserToolbarSearchMiddleware.kt @@ -56,7 +56,6 @@ import mozilla.components.concept.engine.EngineSession import mozilla.components.concept.toolbar.AutocompleteProvider import mozilla.components.concept.toolbar.AutocompleteResult import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext import mozilla.components.lib.state.State import mozilla.components.lib.state.Store import mozilla.components.lib.state.ext.flow @@ -165,7 +164,7 @@ class BrowserToolbarSearchMiddleware( @Suppress("CyclomaticComplexMethod", "LongMethod") override fun invoke( - context: MiddlewareContext<BrowserToolbarState, BrowserToolbarAction>, + store: Store<BrowserToolbarState, BrowserToolbarAction>, next: (BrowserToolbarAction) -> Unit, action: BrowserToolbarAction, ) { @@ -175,20 +174,20 @@ class BrowserToolbarSearchMiddleware( when (action) { is Init -> { - if (context.store.state.isEditMode()) { - syncCurrentSearchEngine(context) + if (store.state.isEditMode()) { + syncCurrentSearchEngine(store) } } is EnterEditMode -> { refreshConfigurationAfterSearchEngineChange( - context = context, - searchEngine = reconcileSelectedEngine(), + store = store, + searchEngine = this.reconcileSelectedEngine(), ) - observeVoiceInputResults(context) - syncCurrentSearchEngine(context) - syncAvailableEngines(context) - updateSearchEndPageActions(context) + observeVoiceInputResults(store) + syncCurrentSearchEngine(store) + syncAvailableEngines(store) + updateSearchEndPageActions(store) } is ExitEditMode -> { @@ -212,7 +211,7 @@ class BrowserToolbarSearchMiddleware( } is SearchSettingsItemClicked -> { - context.store.dispatch(SearchQueryUpdated(BrowserToolbarQuery(""))) + store.dispatch(SearchQueryUpdated(BrowserToolbarQuery(""))) appStore.dispatch(SearchEnded) browserStore.dispatch(EngagementFinished(abandoned = true)) navController.navigate( @@ -223,8 +222,8 @@ class BrowserToolbarSearchMiddleware( is SearchSelectorItemClicked -> { appStore.dispatch(SearchEngineSelected(action.searchEngine, true)) appStore.dispatch(SearchStarted()) - refreshConfigurationAfterSearchEngineChange(context, action.searchEngine) - updateSearchEndPageActions(context) // to update the visibility of the qr scanner button + refreshConfigurationAfterSearchEngineChange(store, action.searchEngine) + updateSearchEndPageActions(store) // to update the visibility of the qr scanner button } is CommitUrl -> { @@ -272,19 +271,19 @@ class BrowserToolbarSearchMiddleware( Toolbar.buttonTapped.record( Toolbar.ButtonTappedExtra(source = SOURCE_ADDRESS_BAR, item = ACTION_CLEAR_CLICKED), ) - context.store.dispatch(SearchQueryUpdated(BrowserToolbarQuery(""))) + store.dispatch(SearchQueryUpdated(BrowserToolbarQuery(""))) } is SearchQueryUpdated -> { - updateAutocompletions(context, action.query) - updateSearchEndPageActions(context) + updateAutocompletions(store, action.query) + updateSearchEndPageActions(store) } is QrScannerClicked -> { Toolbar.buttonTapped.record( Toolbar.ButtonTappedExtra(source = SOURCE_ADDRESS_BAR, item = ACTION_QR_CLICKED), ) - observeQrScannerInput(context) + observeQrScannerInput(store) appStore.dispatch(QrScannerRequested) } @@ -342,28 +341,28 @@ class BrowserToolbarSearchMiddleware( } private fun refreshConfigurationAfterSearchEngineChange( - context: MiddlewareContext<BrowserToolbarState, BrowserToolbarAction>, + store: Store<BrowserToolbarState, BrowserToolbarAction>, searchEngine: SearchEngine?, ) { - updateSearchSelectorMenu(context, searchEngine, browserStore.state.search.searchEngineShortcuts) - updateAutocompletions(context, context.store.state.editState.query) - updateToolbarHint(context, searchEngine) + updateSearchSelectorMenu(store, searchEngine, browserStore.state.search.searchEngineShortcuts) + updateAutocompletions(store, store.state.editState.query) + updateToolbarHint(store, searchEngine) } private fun updateToolbarHint( - context: MiddlewareContext<BrowserToolbarState, BrowserToolbarAction>, + store: Store<BrowserToolbarState, BrowserToolbarAction>, engine: SearchEngine?, ) { val defaultEngine = browserStore.state.search.selectedOrDefaultSearchEngine val hintRes = engine.toolbarHintRes(defaultEngine) - context.store.dispatch(HintUpdated(hintRes)) + store.dispatch(HintUpdated(hintRes)) } /** * Synchronously update the toolbar with a new search selector. */ private fun updateSearchSelectorMenu( - context: MiddlewareContext<BrowserToolbarState, BrowserToolbarAction>, + store: Store<BrowserToolbarState, BrowserToolbarAction>, selectedSearchEngine: SearchEngine?, searchEngineShortcuts: List<SearchEngine>, ) { @@ -372,7 +371,7 @@ class BrowserToolbarSearchMiddleware( searchEngineShortcuts, uiContext.resources, ) - context.store.dispatch( + store.dispatch( SearchActionsStartUpdated( when (searchSelector == null) { true -> emptyList() @@ -412,7 +411,7 @@ class BrowserToolbarSearchMiddleware( } private fun updateAutocompletions( - context: MiddlewareContext<BrowserToolbarState, BrowserToolbarAction>, + store: Store<BrowserToolbarState, BrowserToolbarAction>, query: BrowserToolbarQuery, ) { updateAutocompleteJob?.cancelChildren() @@ -423,12 +422,12 @@ class BrowserToolbarSearchMiddleware( query.previous?.length == query.current.length + 1 if (shouldCheckForSuggestions && !isBackspacing) { updateAutocompleteJob = scope.launch { - context.store.dispatch( + store.dispatch( BrowserEditToolbarAction.AutocompleteSuggestionUpdated( withContext(autocompleteDispatcher) { fetchAutocomplete( buildAutocompleteProvidersList(reconcileSelectedEngine()), - context.store.state.editState.query.current, + store.state.editState.query.current, )?.also { components.core.engine.speculativeConnect(it.url) } @@ -437,7 +436,7 @@ class BrowserToolbarSearchMiddleware( ) } } else { - context.store.dispatch(BrowserEditToolbarAction.AutocompleteSuggestionUpdated(null)) + store.dispatch(BrowserEditToolbarAction.AutocompleteSuggestionUpdated(null)) } } @@ -451,25 +450,25 @@ class BrowserToolbarSearchMiddleware( return autocompleteProviders.firstNotNullOfOrNull { it.getAutocompleteSuggestion(input) } } - private fun syncCurrentSearchEngine(context: MiddlewareContext<BrowserToolbarState, BrowserToolbarAction>) { + private fun syncCurrentSearchEngine(store: Store<BrowserToolbarState, BrowserToolbarAction>) { syncCurrentSearchEngineJob?.cancel() syncCurrentSearchEngineJob = appStore.observeWhileActive { distinctUntilChangedBy { it.searchState.selectedSearchEngine?.searchEngine } .collect { it.searchState.selectedSearchEngine?.let { - refreshConfigurationAfterSearchEngineChange(context, it.searchEngine) + refreshConfigurationAfterSearchEngineChange(store, it.searchEngine) } } } } - private fun syncAvailableEngines(context: MiddlewareContext<BrowserToolbarState, BrowserToolbarAction>) { + private fun syncAvailableEngines(store: Store<BrowserToolbarState, BrowserToolbarAction>) { syncAvailableSearchEnginesJob?.cancel() syncAvailableSearchEnginesJob = browserStore.observeWhileActive { distinctUntilChangedBy { it.search.searchEngineShortcuts } .collect { refreshConfigurationAfterSearchEngineChange( - context = context, + store = store, searchEngine = reconcileSelectedEngine(), ) } @@ -481,12 +480,12 @@ class BrowserToolbarSearchMiddleware( ?: browserStore.state.search.selectedOrDefaultSearchEngine private fun updateSearchEndPageActions( - context: MiddlewareContext<BrowserToolbarState, BrowserToolbarAction>, + store: Store<BrowserToolbarState, BrowserToolbarAction>, selectedSearchEngine: SearchEngine? = reconcileSelectedEngine(), - ) = context.store.dispatch( + ) = store.dispatch( SearchActionsEndUpdated( buildSearchEndPageActions( - context.store.state.editState.query.current, + store.state.editState.query.current, selectedSearchEngine, ), ), @@ -529,7 +528,7 @@ class BrowserToolbarSearchMiddleware( } } - private fun observeQrScannerInput(context: MiddlewareContext<BrowserToolbarState, BrowserToolbarAction>) { + private fun observeQrScannerInput(store: Store<BrowserToolbarState, BrowserToolbarAction>) { observeQRScannerInputJob = null observeQRScannerInputJob = appStore.observeWhileActive { distinctUntilChangedBy { it.qrScannerState.lastScanData } @@ -538,7 +537,7 @@ class BrowserToolbarSearchMiddleware( observeQRScannerInputJob?.cancel() appStore.dispatch(AppAction.QrScannerAction.QrScannerInputConsumed) - context.store.dispatch( + store.dispatch( SearchQueryUpdated( BrowserToolbarQuery(it.qrScannerState.lastScanData), ), @@ -556,7 +555,7 @@ class BrowserToolbarSearchMiddleware( } private fun observeVoiceInputResults( - context: MiddlewareContext<BrowserToolbarState, BrowserToolbarAction>, + store: Store<BrowserToolbarState, BrowserToolbarAction>, ) { observeVoiceInputJob?.cancel() observeVoiceInputJob = appStore.observeWhileActive { @@ -564,7 +563,7 @@ class BrowserToolbarSearchMiddleware( .distinctUntilChanged() .collect { voiceInputResult -> if (!voiceInputResult.isNullOrEmpty()) { - context.store.dispatch( + store.dispatch( SearchQueryUpdated( query = BrowserToolbarQuery(voiceInputResult), isQueryPrefilled = true, diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/search/BrowserToolbarSearchStatusSyncMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/search/BrowserToolbarSearchStatusSyncMiddleware.kt @@ -15,7 +15,7 @@ import mozilla.components.compose.browser.toolbar.store.BrowserToolbarAction.Ini import mozilla.components.compose.browser.toolbar.store.BrowserToolbarState import mozilla.components.compose.browser.toolbar.store.BrowserToolbarStore import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store import mozilla.components.lib.state.ext.flow import org.mozilla.fenix.browser.browsingmode.BrowsingModeManager import org.mozilla.fenix.components.AppStore @@ -36,14 +36,14 @@ class BrowserToolbarSearchStatusSyncMiddleware( private var syncSearchActiveJob: Job? = null override fun invoke( - context: MiddlewareContext<BrowserToolbarState, BrowserToolbarAction>, + store: Store<BrowserToolbarState, BrowserToolbarAction>, next: (BrowserToolbarAction) -> Unit, action: BrowserToolbarAction, ) { next(action) if (action is Init) { - syncSearchActive(context) + syncSearchActive(store) } if (action is ExitEditMode) { @@ -54,15 +54,15 @@ class BrowserToolbarSearchStatusSyncMiddleware( } } - private fun syncSearchActive(context: MiddlewareContext<BrowserToolbarState, BrowserToolbarAction>) { + private fun syncSearchActive(store: Store<BrowserToolbarState, BrowserToolbarAction>) { syncSearchActiveJob = scope.launch { appStore.flow() .distinctUntilChangedBy { it.searchState.isSearchActive } .collect { if (it.searchState.isSearchActive) { - context.store.dispatch(EnterEditMode(browsingModeManager.mode.isPrivate)) + store.dispatch(EnterEditMode(browsingModeManager.mode.isPrivate)) } else { - context.store.dispatch(ExitEditMode) + store.dispatch(ExitEditMode) } } } diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/search/BrowserToolbarToFenixSearchMapperMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/search/BrowserToolbarToFenixSearchMapperMiddleware.kt @@ -15,7 +15,7 @@ import mozilla.components.browser.state.store.BrowserStore import mozilla.components.compose.browser.toolbar.store.BrowserToolbarStore import mozilla.components.compose.browser.toolbar.store.Mode import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store import mozilla.components.lib.state.ext.flow import org.mozilla.fenix.browser.browsingmode.BrowsingModeManager import org.mozilla.fenix.search.SearchFragmentAction.Init @@ -39,30 +39,29 @@ class BrowserToolbarToFenixSearchMapperMiddleware( private var syncSearchQueryJob: Job? = null override fun invoke( - context: MiddlewareContext<SearchFragmentState, SearchFragmentAction>, + store: Store<SearchFragmentState, SearchFragmentAction>, next: (SearchFragmentAction) -> Unit, action: SearchFragmentAction, ) { if (action is Init) { - syncSearchStatus(context) + syncSearchStatus(store) if (toolbarStore.state.isEditMode()) { - syncUserQuery(context) + syncUserQuery(store) } } next(action) } - private fun syncSearchStatus(context: MiddlewareContext<SearchFragmentState, SearchFragmentAction>) { - syncSearchStartedJob?.cancel() + private fun syncSearchStatus(store: Store<SearchFragmentState, SearchFragmentAction>) { syncSearchStartedJob = scope.launch { toolbarStore.flow() .distinctUntilChangedBy { it.mode } .collect { if (it.mode == Mode.EDIT) { val editState = toolbarStore.state.editState - context.store.dispatch( + store.dispatch( SearchStarted( selectedSearchEngine = null, isUserSelected = true, @@ -72,7 +71,7 @@ class BrowserToolbarToFenixSearchMapperMiddleware( ), ) - syncUserQuery(context) + syncUserQuery(store) } else { stopSyncingUserQuery() } @@ -80,16 +79,16 @@ class BrowserToolbarToFenixSearchMapperMiddleware( } } - private fun syncUserQuery(context: MiddlewareContext<SearchFragmentState, SearchFragmentAction>) { + private fun syncUserQuery(store: Store<SearchFragmentState, SearchFragmentAction>) { syncSearchQueryJob?.cancel() syncSearchQueryJob = scope.launch { toolbarStore.flow() .map { it.editState.query } .distinctUntilChanged() .collect { query -> - val isSearchStartedForCurrentUrl = context.store.state.searchStartedForCurrentUrl + val isSearchStartedForCurrentUrl = store.state.searchStartedForCurrentUrl val isQueryPrefilled = toolbarStore.state.editState.isQueryPrefilled - context.store.dispatch( + store.dispatch( SearchFragmentAction.UpdateQuery( when (isSearchStartedForCurrentUrl && isQueryPrefilled) { true -> "" // consider a prefilled query for the current URL as not entered by user diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/search/FenixSearchMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/search/FenixSearchMiddleware.kt @@ -28,7 +28,6 @@ import mozilla.components.feature.search.SearchUseCases.SearchUseCase import mozilla.components.feature.session.SessionUseCases.LoadUrlUseCase import mozilla.components.feature.tabs.TabsUseCases.SelectTabUseCase import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext import mozilla.components.lib.state.State import mozilla.components.lib.state.Store import mozilla.components.lib.state.ext.flow @@ -103,7 +102,7 @@ class FenixSearchMiddleware( internal var suggestionsProvidersBuilder: SearchSuggestionsProvidersBuilder? = null override fun invoke( - context: MiddlewareContext<SearchFragmentState, SearchFragmentAction>, + store: Store<SearchFragmentState, SearchFragmentAction>, next: (SearchFragmentAction) -> Unit, action: SearchFragmentAction, ) { @@ -111,12 +110,12 @@ class FenixSearchMiddleware( is Init -> { next(action) - suggestionsProvidersBuilder = buildSearchSuggestionsProvider(context) - updateSearchProviders(context) + suggestionsProvidersBuilder = buildSearchSuggestionsProvider(store) + updateSearchProviders(store) - setupSuggestionsProvidersCleanup(context) + setupSuggestionsProvidersCleanup(store) - context.store.dispatch( + store.dispatch( SearchFragmentAction.UpdateSearchState( browserStore.state.search, true, @@ -128,29 +127,29 @@ class FenixSearchMiddleware( next(action) engine.speculativeCreateSession(action.inPrivateMode) - suggestionsProvidersBuilder = buildSearchSuggestionsProvider(context) - setSearchEngine(context, action.selectedSearchEngine, action.isUserSelected) - observeSearchEngineSelection(context) + suggestionsProvidersBuilder = buildSearchSuggestionsProvider(store) + setSearchEngine(store, action.selectedSearchEngine, action.isUserSelected) + observeSearchEngineSelection(store) } is UpdateQuery -> { next(action) - maybeShowSearchSuggestions(context, action.query) + maybeShowSearchSuggestions(store, action.query) } is SearchEnginesSelectedActions -> { next(action) - updateSearchProviders(context) - maybeShowSearchSuggestions(context, context.store.state.query) + updateSearchProviders(store) + maybeShowSearchSuggestions(store, store.state.query) } is SearchProvidersUpdated -> { next(action) if (action.providers.isNotEmpty()) { - maybeShowSearchSuggestions(context, context.store.state.query) + maybeShowSearchSuggestions(store, store.state.query) } } @@ -176,7 +175,7 @@ class FenixSearchMiddleware( } is PrivateSuggestionsCardAccepted -> { - updateSearchProviders(context) + updateSearchProviders(store) } else -> next(action) @@ -187,15 +186,15 @@ class FenixSearchMiddleware( * Observe when the user changes the search engine to use for the current in-progress search * and update the suggestions providers used and shown suggestions accordingly. */ - private fun observeSearchEngineSelection(context: MiddlewareContext<SearchFragmentState, SearchFragmentAction>) { + private fun observeSearchEngineSelection(store: Store<SearchFragmentState, SearchFragmentAction>) { observeSearchEnginesChangeJob?.cancel() observeSearchEnginesChangeJob = appStore.observeWhileActive { distinctUntilChangedBy { it.searchState.selectedSearchEngine?.searchEngine } .collect { it.searchState.selectedSearchEngine?.let { when (it.isUserSelected) { - true -> handleSearchShortcutEngineSelectedByUser(context, it.searchEngine) - false -> handleSearchShortcutEngineSelected(context, it.searchEngine) + true -> handleSearchShortcutEngineSelectedByUser(store, it.searchEngine) + false -> handleSearchShortcutEngineSelected(store, it.searchEngine) } } } @@ -205,49 +204,49 @@ class FenixSearchMiddleware( /** * Update the search engine to the one selected by the user or fallback to the default search engine. * - * @param context The current [MiddlewareContext] allowing to read and update the search state. + * @param store The current [Store] allowing to read and update the search state. * @param searchEngine The new [SearchEngine] to be used for new searches or `null` to fallback to * fallback to the default search engine. * @param isSelectedByUser isUserSelected Whether or not the search engine was selected by the user. */ private fun setSearchEngine( - context: MiddlewareContext<SearchFragmentState, SearchFragmentAction>, + store: Store<SearchFragmentState, SearchFragmentAction>, searchEngine: SearchEngine?, isSelectedByUser: Boolean, ) { searchEngine?.let { when (isSelectedByUser) { - true -> handleSearchShortcutEngineSelectedByUser(context, it) - false -> handleSearchShortcutEngineSelected(context, it) + true -> handleSearchShortcutEngineSelectedByUser(store, it) + false -> handleSearchShortcutEngineSelected(store, it) } - } ?: context.store.state.defaultEngine?.let { handleSearchShortcutEngineSelected(context, it) } + } ?: store.state.defaultEngine?.let { handleSearchShortcutEngineSelected(store, it) } } /** * Check if new search suggestions should be shown based on the current search query. */ private fun maybeShowSearchSuggestions( - context: MiddlewareContext<SearchFragmentState, SearchFragmentAction>, + store: Store<SearchFragmentState, SearchFragmentAction>, query: String, ) { - val shouldShowTrendingSearches = context.store.state.run { + val shouldShowTrendingSearches = store.state.run { (showTrendingSearches || showRecentSearches) && (searchStartedForCurrentUrl || FxNimbus.features.searchSuggestionsOnHomepage.value().enabled) } - val shouldShowSearchSuggestions = with(context.store.state) { + val shouldShowSearchSuggestions = with(store.state) { ((url != query && query.isNotBlank()) || showSearchShortcuts) } val shouldShowSuggestions = shouldShowTrendingSearches || shouldShowSearchSuggestions - context.store.dispatch(SearchSuggestionsVisibilityUpdated(shouldShowSuggestions)) + store.dispatch(SearchSuggestionsVisibilityUpdated(shouldShowSuggestions)) - val showPrivatePrompt = with(context.store.state) { + val showPrivatePrompt = with(store.state) { !settings.showSearchSuggestionsInPrivateOnboardingFinished && browsingModeManager.mode.isPrivate && !isSearchSuggestionsFeatureEnabled() && !showSearchShortcuts && url != query } - context.store.dispatch( + store.dispatch( SearchFragmentAction.AllowSearchSuggestionsInPrivateModePrompt( showPrivatePrompt, ), @@ -257,15 +256,15 @@ class FenixSearchMiddleware( /** * Update the search providers used and shown suggestions based on the current search state. */ - private fun updateSearchProviders(context: MiddlewareContext<SearchFragmentState, SearchFragmentAction>) { + private fun updateSearchProviders(store: Store<SearchFragmentState, SearchFragmentAction>) { val suggestionsProvidersBuilder = suggestionsProvidersBuilder ?: return - context.store.dispatch( + store.dispatch( SearchProvidersUpdated( buildList { - if (context.store.state.showSearchShortcuts) { + if (store.state.showSearchShortcuts) { add(suggestionsProvidersBuilder.shortcutsEnginePickerProvider) } - addAll((suggestionsProvidersBuilder.getProvidersToAdd(context.store.state.toSearchProviderState()))) + addAll((suggestionsProvidersBuilder.getProvidersToAdd(store.state.toSearchProviderState()))) }, ), ) @@ -273,16 +272,16 @@ class FenixSearchMiddleware( @VisibleForTesting internal fun buildSearchSuggestionsProvider( - context: MiddlewareContext<SearchFragmentState, SearchFragmentAction>, + store: Store<SearchFragmentState, SearchFragmentAction>, ): SearchSuggestionsProvidersBuilder? { val uiContext = fragment.context ?: return null return SearchSuggestionsProvidersBuilder( components = uiContext.components, browsingModeManager = browsingModeManager, - includeSelectedTab = context.store.state.tabId == null, - loadUrlUseCase = loadUrlUseCase(context), - searchUseCase = searchUseCase(context), + includeSelectedTab = store.state.tabId == null, + loadUrlUseCase = loadUrlUseCase(store), + searchUseCase = searchUseCase(store), selectTabUseCase = selectTabUseCase(), suggestionsStringsProvider = DefaultSuggestionsStringsProvider( uiContext, @@ -297,7 +296,7 @@ class FenixSearchMiddleware( @VisibleForTesting internal fun loadUrlUseCase( - context: MiddlewareContext<SearchFragmentState, SearchFragmentAction>, + store: Store<SearchFragmentState, SearchFragmentAction>, ) = object : LoadUrlUseCase { override fun invoke( url: String, @@ -310,7 +309,7 @@ class FenixSearchMiddleware( createNewTab = if (settings.enableHomepageAsNewTab) { false } else { - context.store.state.tabId == null + store.state.tabId == null }, usePrivateMode = browsingModeManager.mode.isPrivate, flags = flags, @@ -324,36 +323,36 @@ class FenixSearchMiddleware( @VisibleForTesting internal fun searchUseCase( - context: MiddlewareContext<SearchFragmentState, SearchFragmentAction>, + store: Store<SearchFragmentState, SearchFragmentAction>, ) = object : SearchUseCase { override fun invoke( searchTerms: String, searchEngine: SearchEngine?, parentSessionId: String?, ) { - val searchEngine = context.store.state.searchEngineSource.searchEngine + val searchEngine = store.state.searchEngineSource.searchEngine openToBrowserAndLoad( url = searchTerms, createNewTab = if (settings.enableHomepageAsNewTab) { false } else { - context.store.state.tabId == null + store.state.tabId == null }, usePrivateMode = browsingModeManager.mode.isPrivate, forceSearch = true, searchEngine = searchEngine, ) - val searchAccessPoint = when (context.store.state.searchAccessPoint) { + val searchAccessPoint = when (store.state.searchAccessPoint) { MetricsUtils.Source.NONE -> MetricsUtils.Source.SUGGESTION - else -> context.store.state.searchAccessPoint + else -> store.state.searchAccessPoint } if (searchEngine != null) { MetricsUtils.recordSearchMetrics( searchEngine, - searchEngine == context.store.state.defaultEngine, + searchEngine == store.state.defaultEngine, searchAccessPoint, nimbusComponents.events, ) @@ -399,15 +398,15 @@ class FenixSearchMiddleware( * The difference between this and [handleSearchShortcutEngineSelected] is that this also * records the appropriate telemetry for the user interaction. * - * @param context The store which will provide the state and environment dependencies needed. + * @param store The store which will provide the state and environment dependencies needed. * @param searchEngine The [SearchEngine] to be used for the current in-progress search. */ @VisibleForTesting internal fun handleSearchShortcutEngineSelectedByUser( - context: MiddlewareContext<SearchFragmentState, SearchFragmentAction>, + store: Store<SearchFragmentState, SearchFragmentAction>, searchEngine: SearchEngine, ) { - handleSearchShortcutEngineSelected(context, searchEngine) + handleSearchShortcutEngineSelected(store, searchEngine) Toolbar.buttonTapped.record( Toolbar.ButtonTappedExtra( @@ -422,25 +421,25 @@ class FenixSearchMiddleware( * Update what search engine to use for the current in-progress search. * This will result in using a different set of suggestions providers and showing different search suggestions. * - * @param context The current [MiddlewareContext] allowing to read and update the search state. + * @param store The current [Store] allowing to read and update the search state. * @param searchEngine The [SearchEngine] to be used for the current in-progress search. */ private fun handleSearchShortcutEngineSelected( - context: MiddlewareContext<SearchFragmentState, SearchFragmentAction>, + store: Store<SearchFragmentState, SearchFragmentAction>, searchEngine: SearchEngine, ) { when { searchEngine.type == SearchEngine.Type.APPLICATION && searchEngine.id == HISTORY_SEARCH_ENGINE_ID -> { - context.store.dispatch(SearchFragmentAction.SearchHistoryEngineSelected(searchEngine)) + store.dispatch(SearchFragmentAction.SearchHistoryEngineSelected(searchEngine)) } searchEngine.type == SearchEngine.Type.APPLICATION && searchEngine.id == BOOKMARKS_SEARCH_ENGINE_ID -> { - context.store.dispatch(SearchFragmentAction.SearchBookmarksEngineSelected(searchEngine)) + store.dispatch(SearchFragmentAction.SearchBookmarksEngineSelected(searchEngine)) } searchEngine.type == SearchEngine.Type.APPLICATION && searchEngine.id == TABS_SEARCH_ENGINE_ID -> { - context.store.dispatch(SearchFragmentAction.SearchTabsEngineSelected(searchEngine)) + store.dispatch(SearchFragmentAction.SearchTabsEngineSelected(searchEngine)) } - searchEngine == context.store.state.defaultEngine -> { - context.store.dispatch( + searchEngine == store.state.defaultEngine -> { + store.dispatch( SearchFragmentAction.SearchDefaultEngineSelected( engine = searchEngine, browsingMode = browsingModeManager.mode, @@ -449,7 +448,7 @@ class FenixSearchMiddleware( ) } else -> { - context.store.dispatch( + store.dispatch( SearchFragmentAction.SearchShortcutEngineSelected( engine = searchEngine, browsingMode = browsingModeManager.mode, @@ -476,14 +475,14 @@ class FenixSearchMiddleware( ): Job = fragment.viewLifecycleOwner.lifecycle.coroutineScope.launch { flow().observe() } private fun setupSuggestionsProvidersCleanup( - context: MiddlewareContext<SearchFragmentState, SearchFragmentAction>, + store: Store<SearchFragmentState, SearchFragmentAction>, ) { fragment.viewLifecycleOwner.lifecycle.addObserver( object : DefaultLifecycleObserver { override fun onDestroy(owner: LifecycleOwner) { // Search providers may keep hard references to lifecycle dependent objects // so we need to reset them when the environment is cleared. - context.store.dispatch(SearchProvidersUpdated(emptyList())) + store.dispatch(SearchProvidersUpdated(emptyList())) } }, ) 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 @@ -11,7 +11,7 @@ import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store import org.mozilla.fenix.GleanMetrics.Addresses /** @@ -29,23 +29,23 @@ class AddressMiddleware( private val ioDispatcher: CoroutineDispatcher = IO, ) : Middleware<AddressState, AddressAction> { override fun invoke( - context: MiddlewareContext<AddressState, AddressAction>, + store: Store<AddressState, AddressAction>, next: (AddressAction) -> Unit, action: AddressAction, ) { next(action) when (action) { is SaveTapped -> runAndNavigateBack { - context.store.state.guidToUpdate?.let { - environment.updateAddress(it, context.store.state.address) + store.state.guidToUpdate?.let { + environment.updateAddress(it, store.state.address) Addresses.updated.add() } ?: run { - environment.createAddress(context.store.state.address) + environment.createAddress(store.state.address) Addresses.saved.add() } } is DeleteDialogAction.DeleteTapped -> runAndNavigateBack { - context.store.state.guidToUpdate?.also { + store.state.guidToUpdate?.also { environment.deleteAddress(it) Addresses.deleted.add() } 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 @@ -10,7 +10,6 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import mozilla.components.concept.engine.autofill.AddressStructure import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext import mozilla.components.lib.state.Store /** @@ -48,17 +47,17 @@ class AddressStructureMiddleware( private val ioDispatcher: CoroutineDispatcher = Dispatchers.IO, ) : Middleware<AddressState, AddressAction> { override fun invoke( - context: MiddlewareContext<AddressState, AddressAction>, + store: Store<AddressState, AddressAction>, next: (AddressAction) -> Unit, action: AddressAction, ) { - val preReductionCountry = context.store.state.address.country + val preReductionCountry = store.state.address.country next(action) when (action) { - is ViewAppeared -> loadAddressStructure(context.store, true) - is FormChange.Country -> if (preReductionCountry != context.store.state.address.country) { - loadAddressStructure(context.store, false) + is ViewAppeared -> loadAddressStructure(store, true) + is FormChange.Country -> if (preReductionCountry != store.state.address.country) { + loadAddressStructure(store, false) } else -> { /* noop */ } } diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/autofill/ui/AutofillSettingsMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/autofill/ui/AutofillSettingsMiddleware.kt @@ -12,7 +12,6 @@ import mozilla.components.concept.sync.AccountObserver import mozilla.components.concept.sync.AuthType import mozilla.components.concept.sync.OAuthAccount import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext import mozilla.components.lib.state.Store import mozilla.components.service.fxa.manager.FxaAccountManager import mozilla.components.service.sync.autofill.AutofillCreditCardsAddressesStorage @@ -44,7 +43,7 @@ internal class AutofillSettingsMiddleware( private lateinit var observer: AccountObserver override fun invoke( - context: MiddlewareContext<AutofillSettingsState, AutofillSettingsAction>, + store: Store<AutofillSettingsState, AutofillSettingsAction>, next: (AutofillSettingsAction) -> Unit, action: AutofillSettingsAction, ) { @@ -52,8 +51,8 @@ internal class AutofillSettingsMiddleware( when (action) { is InitializeAddressesAndCreditCards -> { - context.store.registerObserverForAccountChanges(accountManager) - context.store.loadAddressesAndCreditCards() + store.registerObserverForAccountChanges(accountManager) + store.loadAddressesAndCreditCards() } is AddAddressClicked -> { goToScreen(AutofillScreenDestination.ADD_ADDRESS) diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/creditcards/ui/CreditCardEditorMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/creditcards/ui/CreditCardEditorMiddleware.kt @@ -15,7 +15,7 @@ import mozilla.components.concept.storage.CreditCardsAddressesStorage import mozilla.components.concept.storage.NewCreditCardFields import mozilla.components.concept.storage.UpdatableCreditCardFields import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store import mozilla.components.support.utils.creditCardIIN import mozilla.telemetry.glean.private.NoExtras import org.mozilla.fenix.GleanMetrics.CreditCards @@ -42,16 +42,16 @@ internal class CreditCardEditorMiddleware( ) : Middleware<CreditCardEditorState, CreditCardEditorAction> { override fun invoke( - context: MiddlewareContext<CreditCardEditorState, CreditCardEditorAction>, + store: Store<CreditCardEditorState, CreditCardEditorAction>, next: (CreditCardEditorAction) -> Unit, action: CreditCardEditorAction, ) { next(action) when (action) { - is CreditCardEditorAction.Initialization -> action.handleInitAction(context) - is DeleteDialogAction -> action.handleDeleteDialog(context) + is CreditCardEditorAction.Initialization -> action.handleInitAction(store) + is DeleteDialogAction -> action.handleDeleteDialog(store) - is CreditCardEditorAction.Save -> handleSaveAction(context) + is CreditCardEditorAction.Save -> handleSaveAction(store) is CreditCardEditorAction.NavigateBack, is CreditCardEditorAction.Cancel, -> navigateBack() @@ -61,12 +61,12 @@ internal class CreditCardEditorMiddleware( } private fun DeleteDialogAction.handleDeleteDialog( - context: MiddlewareContext<CreditCardEditorState, CreditCardEditorAction>, + store: Store<CreditCardEditorState, CreditCardEditorAction>, ) { when (this) { DeleteDialogAction.Confirm -> { coroutineScope.launch(ioDispatcher) { - storage.deleteCreditCard(context.store.state.guid) + storage.deleteCreditCard(store.state.guid) withContext(mainDispatcher) { navigateBack() @@ -84,9 +84,9 @@ internal class CreditCardEditorMiddleware( } private fun handleSaveAction( - context: MiddlewareContext<CreditCardEditorState, CreditCardEditorAction>, + store: Store<CreditCardEditorState, CreditCardEditorAction>, ) { - val state = context.store.state + val state = store.state if (!state.showCardNumberError && !state.showNameOnCardError) { addOrUpdateCard(state) @@ -142,14 +142,14 @@ internal class CreditCardEditorMiddleware( } private fun CreditCardEditorAction.Initialization.handleInitAction( - context: MiddlewareContext<CreditCardEditorState, CreditCardEditorAction>, + store: Store<CreditCardEditorState, CreditCardEditorAction>, ) { when (this) { is CreditCardEditorAction.Initialization.InitStarted -> { if (creditCard != null) { - initializeFromCard(context, creditCard) + initializeFromCard(store, creditCard) } else { - initializeFromScratch(context) + initializeFromScratch(store) } } @@ -158,10 +158,10 @@ internal class CreditCardEditorMiddleware( } private fun initializeFromScratch( - context: MiddlewareContext<CreditCardEditorState, CreditCardEditorAction>, + store: Store<CreditCardEditorState, CreditCardEditorAction>, ) { - val state = context.store.state - context.store.dispatch( + val state = store.state + store.dispatch( CreditCardEditorAction.Initialization.InitCompleted( state = state.copy( expiryMonths = calendarDataProvider.months(), @@ -176,11 +176,11 @@ internal class CreditCardEditorMiddleware( } private fun initializeFromCard( - context: MiddlewareContext<CreditCardEditorState, CreditCardEditorAction>, + store: Store<CreditCardEditorState, CreditCardEditorAction>, creditCard: CreditCard, ) { coroutineScope.launch(ioDispatcher) { - val state = context.store.state + val state = store.state val crypto = storage.getCreditCardCrypto() val plainTextCardNumber = crypto.decrypt( @@ -190,7 +190,7 @@ internal class CreditCardEditorMiddleware( val years = calendarDataProvider.years(creditCard.expiryYear) - context.store.dispatch( + store.dispatch( CreditCardEditorAction.Initialization.InitCompleted( state = state.copy( guid = creditCard.guid, diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/datachoices/DataChoicesMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/datachoices/DataChoicesMiddleware.kt @@ -11,7 +11,7 @@ import kotlinx.coroutines.launch import mozilla.components.concept.engine.Engine import mozilla.components.lib.crash.store.CrashReportOption import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store import mozilla.components.service.nimbus.NimbusApi import org.mozilla.fenix.R import org.mozilla.fenix.components.metrics.MetricController @@ -33,7 +33,7 @@ internal class DataChoicesMiddleware( ) : Middleware<DataChoicesState, DataChoicesAction> { override fun invoke( - context: MiddlewareContext<DataChoicesState, DataChoicesAction>, + store: Store<DataChoicesState, DataChoicesAction>, next: (DataChoicesAction) -> Unit, action: DataChoicesAction, ) { @@ -41,7 +41,7 @@ internal class DataChoicesMiddleware( when (action) { is ViewCreated -> scope.launch { - context.store.dispatch( + store.dispatch( SettingsLoaded( telemetryEnabled = settings.isTelemetryEnabled, usagePingEnabled = settings.isDailyUsagePingEnabled, @@ -54,7 +54,7 @@ internal class DataChoicesMiddleware( } is ChoiceAction.TelemetryClicked -> { updateTelemetryChoice() - context.store.dispatch(StudiesLoaded(settings.isExperimentationEnabled)) + store.dispatch(StudiesLoaded(settings.isExperimentationEnabled)) } is ChoiceAction.MeasurementDataClicked -> { updateMarketingDataChoice() diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/doh/DohSettingsMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/doh/DohSettingsMiddleware.kt @@ -6,7 +6,7 @@ package org.mozilla.fenix.settings.doh import androidx.navigation.NavController import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store import org.mozilla.fenix.BrowserDirection import org.mozilla.fenix.HomeActivity @@ -18,7 +18,7 @@ internal class DohSettingsMiddleware( ) : Middleware<DohSettingsState, DohSettingsAction> { override fun invoke( - context: MiddlewareContext<DohSettingsState, DohSettingsAction>, + store: Store<DohSettingsState, DohSettingsAction>, next: (DohSettingsAction) -> Unit, action: DohSettingsAction, ) { @@ -27,7 +27,7 @@ internal class DohSettingsMiddleware( when (action) { Init -> { // we dispatch another action that the reducer can handle - context.store.dispatch( + store.dispatch( DohSettingsRootAction.DohSettingsLoaded( allProtectionLevels = getSettingsProvider().getProtectionLevels(), selectedProtectionLevel = getSettingsProvider().getSelectedProtectionLevel(), @@ -61,7 +61,7 @@ internal class DohSettingsMiddleware( } is DohSettingsRootAction.DohCustomProviderDialogAction.AddCustomClicked -> { - handleAddCustomProvider(context, action) + handleAddCustomProvider(store, action) } is DohSettingsRootAction.DefaultInfoClicked -> { @@ -81,12 +81,12 @@ internal class DohSettingsMiddleware( } is ExceptionsAction.RemoveClicked -> { - handleRemoveException(context, action) + handleRemoveException(store, action) } is ExceptionsAction.RemoveAllClicked -> { getSettingsProvider().setExceptions(emptyList()) - context.store.dispatch( + store.dispatch( ExceptionsAction.ExceptionsUpdated( emptyList(), ), @@ -94,7 +94,7 @@ internal class DohSettingsMiddleware( } is ExceptionsAction.SaveClicked -> { - handleSaveException(context, action) + handleSaveException(store, action) } else -> {} @@ -102,37 +102,37 @@ internal class DohSettingsMiddleware( } private fun handleAddCustomProvider( - context: MiddlewareContext<DohSettingsState, DohSettingsAction>, + store: Store<DohSettingsState, DohSettingsAction>, action: DohSettingsRootAction.DohCustomProviderDialogAction.AddCustomClicked, ) { try { val normalizedUrl = DohUrlValidator.validate(action.url) getSettingsProvider().setCustomProvider(normalizedUrl) - context.store.dispatch( + store.dispatch( DohSettingsRootAction.DohCustomProviderDialogAction.ValidUrlDetected( action.customProvider, normalizedUrl, ), ) } catch (e: UrlValidationException.NonHttpsUrlException) { - context.store.dispatch( + store.dispatch( DohSettingsRootAction.DohCustomProviderDialogAction.NonHttpsUrlDetected, ) } catch (e: UrlValidationException.InvalidUrlException) { - context.store.dispatch( + store.dispatch( DohSettingsRootAction.DohCustomProviderDialogAction.InvalidUrlDetected, ) } } private fun handleRemoveException( - context: MiddlewareContext<DohSettingsState, DohSettingsAction>, + store: Store<DohSettingsState, DohSettingsAction>, action: ExceptionsAction.RemoveClicked, ) { val updatedExceptions = getSettingsProvider().getExceptions().filter { it != action.url } getSettingsProvider().setExceptions(updatedExceptions) - context.store.dispatch( + store.dispatch( ExceptionsAction.ExceptionsUpdated( updatedExceptions, ), @@ -140,7 +140,7 @@ internal class DohSettingsMiddleware( } private fun handleSaveException( - context: MiddlewareContext<DohSettingsState, DohSettingsAction>, + store: Store<DohSettingsState, DohSettingsAction>, action: ExceptionsAction.SaveClicked, ) { val url = DohUrlValidator.dropScheme(action.url) @@ -148,7 +148,7 @@ internal class DohSettingsMiddleware( // If the url is already in the list, just exit AddExceptionScreen if (currExceptions.contains(url)) { - context.store.dispatch( + store.dispatch( BackClicked, ) return @@ -158,14 +158,14 @@ internal class DohSettingsMiddleware( DohUrlValidator.validate("https://$url") val updatedExceptions = currExceptions + url getSettingsProvider().setExceptions(updatedExceptions) - context.store.dispatch( + store.dispatch( ExceptionsAction.ExceptionsUpdated(updatedExceptions), ) - context.store.dispatch( + store.dispatch( BackClicked, ) } catch (e: UrlValidationException.InvalidUrlException) { - context.store.dispatch(ExceptionsAction.InvalidUrlDetected) + store.dispatch(ExceptionsAction.InvalidUrlDetected) } } } diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/logins/ui/LoginsMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/logins/ui/LoginsMiddleware.kt @@ -17,7 +17,6 @@ import mozilla.appservices.logins.LoginsApiException import mozilla.components.concept.storage.LoginEntry import mozilla.components.concept.storage.LoginsStorage import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext import mozilla.components.lib.state.Store import org.mozilla.fenix.settings.SupportUtils @@ -48,19 +47,19 @@ internal class LoginsMiddleware( @Suppress("LongMethod", "CyclomaticComplexMethod") override fun invoke( - context: MiddlewareContext<LoginsState, LoginsAction>, + store: Store<LoginsState, LoginsAction>, next: (LoginsAction) -> Unit, action: LoginsAction, ) { - val preReductionState = context.store.state + val preReductionState = store.state next(action) when (action) { is LoginsListAppeared -> { - context.store.loadLoginsList() + store.loadLoginsList() } is SearchLogins -> { - context.store.loadLoginsList() + store.loadLoginsList() } is LoginsListBackClicked -> { exitLogins() @@ -86,7 +85,7 @@ internal class LoginsMiddleware( } } is LoginsListSortMenuAction -> ioScope.launch { - persistLoginsSortOrder(context.store.state.sortOrder) + persistLoginsSortOrder(store.state.sortOrder) } is LearnMoreAboutSync -> { openTab( @@ -113,13 +112,13 @@ internal class LoginsMiddleware( getNavController().navigate(LoginsDestinations.LIST) } is AddLoginAction.AddLoginSaveClicked -> { - context.store.handleAddLogin() + store.handleAddLogin() } is EditLoginBackClicked -> { getNavController().navigate(LoginsDestinations.LOGIN_DETAILS) } is EditLoginAction.SaveEditClicked -> { - context.store.handleEditLogin(loginItem = action.login) + store.handleEditLogin(loginItem = action.login) } is LoginsLoaded, is EditLoginAction.UsernameChanged, diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/settingssearch/SettingsSearchMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/settingssearch/SettingsSearchMiddleware.kt @@ -11,7 +11,7 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store /** * [Middleware] for the settings search screen. @@ -30,11 +30,10 @@ class SettingsSearchMiddleware( private val dispatcher: CoroutineDispatcher = Dispatchers.IO, ) : Middleware<SettingsSearchState, SettingsSearchAction> { override fun invoke( - context: MiddlewareContext<SettingsSearchState, SettingsSearchAction>, + store: Store<SettingsSearchState, SettingsSearchAction>, next: (SettingsSearchAction) -> Unit, action: SettingsSearchAction, ) { - val store = context.store as SettingsSearchStore when (action) { is SettingsSearchAction.Init -> { next(action) @@ -90,7 +89,7 @@ class SettingsSearchMiddleware( * * @param store The [SettingsSearchStore] to dispatch the updates to. */ - private fun observeRecentSearches(store: SettingsSearchStore) { + private fun observeRecentSearches(store: Store<SettingsSearchState, SettingsSearchAction>) { scope.launch { recentSettingsSearchesRepository.recentSearches.collect { recents -> store.dispatch(SettingsSearchAction.RecentSearchesUpdated(recents)) diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/trustpanel/middleware/TrustPanelMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/trustpanel/middleware/TrustPanelMiddleware.kt @@ -16,7 +16,6 @@ import mozilla.components.feature.session.SessionUseCases import mozilla.components.feature.session.TrackingProtectionUseCases import mozilla.components.lib.publicsuffixlist.PublicSuffixList import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext import mozilla.components.lib.state.Store import mozilla.components.support.ktx.kotlin.getOrigin import org.mozilla.fenix.components.PermissionStorage @@ -60,12 +59,11 @@ class TrustPanelMiddleware( ) : Middleware<TrustPanelState, TrustPanelAction> { override fun invoke( - context: MiddlewareContext<TrustPanelState, TrustPanelAction>, + store: Store<TrustPanelState, TrustPanelAction>, next: (TrustPanelAction) -> Unit, action: TrustPanelAction, ) { - val currentState = context.store.state - val store = context.store + val currentState = store.state when (action) { is TrustPanelAction.ClearSiteData -> clearSiteData(currentState) diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/trustpanel/middleware/TrustPanelNavigationMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/trustpanel/middleware/TrustPanelNavigationMiddleware.kt @@ -9,7 +9,7 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store import org.mozilla.fenix.R import org.mozilla.fenix.ext.nav import org.mozilla.fenix.settings.trustpanel.TrustPanelFragmentDirections @@ -33,7 +33,7 @@ class TrustPanelNavigationMiddleware( @Suppress("CyclomaticComplexMethod") override fun invoke( - context: MiddlewareContext<TrustPanelState, TrustPanelAction>, + store: Store<TrustPanelState, TrustPanelAction>, next: (TrustPanelAction) -> Unit, action: TrustPanelAction, ) { diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/trustpanel/middleware/TrustPanelTelemetryMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/settings/trustpanel/middleware/TrustPanelTelemetryMiddleware.kt @@ -5,7 +5,7 @@ package org.mozilla.fenix.settings.trustpanel.middleware import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store import mozilla.telemetry.glean.private.NoExtras import org.mozilla.fenix.GleanMetrics.TrackingProtection import org.mozilla.fenix.settings.trustpanel.store.TrustPanelAction @@ -19,11 +19,11 @@ import org.mozilla.fenix.settings.trustpanel.store.TrustPanelStore class TrustPanelTelemetryMiddleware : Middleware<TrustPanelState, TrustPanelAction> { override fun invoke( - context: MiddlewareContext<TrustPanelState, TrustPanelAction>, + store: Store<TrustPanelState, TrustPanelAction>, next: (TrustPanelAction) -> Unit, action: TrustPanelAction, ) { - val currentState = context.store.state + val currentState = store.state next(action) diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/share/SaveToPDFMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/share/SaveToPDFMiddleware.kt @@ -16,7 +16,7 @@ import mozilla.components.browser.state.state.BrowserState import mozilla.components.browser.state.state.TabSessionState import mozilla.components.lib.state.Action import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store import org.mozilla.fenix.GleanMetrics.Events import org.mozilla.fenix.R import org.mozilla.fenix.browser.StandardSnackbarError @@ -44,19 +44,19 @@ class SaveToPDFMiddleware( ) : Middleware<BrowserState, BrowserAction> { override fun invoke( - ctx: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, next: (BrowserAction) -> Unit, action: BrowserAction, ) { when (action) { is EngineAction.SaveToPdfAction -> { - postTelemetryTapped(ctx.store.state.findTab(action.tabId), isPrint = false) + postTelemetryTapped(store.state.findTab(action.tabId), isPrint = false) // Continue to generate the PDF, passing through here to add telemetry next(action) } is EngineAction.SaveToPdfCompleteAction -> { - postTelemetryCompleted(ctx.store.state.findTab(action.tabId), isPrint = false) + postTelemetryCompleted(store.state.findTab(action.tabId), isPrint = false) } is EngineAction.SaveToPdfExceptionAction -> { @@ -67,16 +67,16 @@ class SaveToPDFMiddleware( ), ), ) - postTelemetryFailed(ctx.store.state.findTab(action.tabId), action.throwable, isPrint = false) + postTelemetryFailed(store.state.findTab(action.tabId), action.throwable, isPrint = false) } is EngineAction.PrintContentAction -> { - postTelemetryTapped(ctx.store.state.findTab(action.tabId), isPrint = true) + postTelemetryTapped(store.state.findTab(action.tabId), isPrint = true) // Continue to print, passing through here to add telemetry next(action) } is EngineAction.PrintContentCompletedAction -> { - postTelemetryCompleted(ctx.store.state.findTab(action.tabId), isPrint = true) + postTelemetryCompleted(store.state.findTab(action.tabId), isPrint = true) } is EngineAction.PrintContentExceptionAction -> { context.components.appStore.dispatch( @@ -86,7 +86,7 @@ class SaveToPDFMiddleware( ), ), ) - postTelemetryFailed(ctx.store.state.findTab(action.tabId), action.throwable, isPrint = true) + postTelemetryFailed(store.state.findTab(action.tabId), action.throwable, isPrint = true) } else -> { next(action) diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/startupCrash/StartupCrashMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/startupCrash/StartupCrashMiddleware.kt @@ -13,7 +13,6 @@ import mozilla.components.lib.crash.CrashReporter import mozilla.components.lib.crash.store.CrashReportCache import mozilla.components.lib.crash.store.TimeInMillis import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext import mozilla.components.lib.state.Store import org.mozilla.fenix.crashes.SettingsCrashReportCache import org.mozilla.fenix.utils.Settings @@ -30,7 +29,7 @@ internal class StartupCrashMiddleware( ) : Middleware<StartupCrashState, StartupCrashAction> { override fun invoke( - context: MiddlewareContext<StartupCrashState, StartupCrashAction>, + store: Store<StartupCrashState, StartupCrashAction>, next: (StartupCrashAction) -> Unit, action: StartupCrashAction, ) { @@ -39,7 +38,7 @@ internal class StartupCrashMiddleware( when (action) { ReportTapped -> { scope.launch { - sendUnsentCrashReports(context.store) + sendUnsentCrashReports(store) } } ReopenTapped -> restartHandler() diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/tabstray/TabsTrayTelemetryMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/tabstray/TabsTrayTelemetryMiddleware.kt @@ -5,7 +5,7 @@ package org.mozilla.fenix.tabstray import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store import mozilla.telemetry.glean.private.NoExtras import org.mozilla.experiments.nimbus.NimbusEventStore import org.mozilla.fenix.GleanMetrics.Metrics @@ -25,7 +25,7 @@ class TabsTrayTelemetryMiddleware( private var shouldReportInactiveTabMetrics: Boolean = true override fun invoke( - context: MiddlewareContext<TabsTrayState, TabsTrayAction>, + store: Store<TabsTrayState, TabsTrayAction>, next: (TabsTrayAction) -> Unit, action: TabsTrayAction, ) { diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/telemetry/TelemetryMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/telemetry/TelemetryMiddleware.kt @@ -22,7 +22,7 @@ import mozilla.components.browser.state.state.SessionState import mozilla.components.concept.base.crash.CrashReporting import mozilla.components.concept.engine.translate.TranslationOperation import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store import mozilla.components.support.base.log.logger.Logger import mozilla.telemetry.glean.private.NoExtras import org.mozilla.fenix.Config @@ -56,7 +56,7 @@ class TelemetryMiddleware( @Suppress("TooGenericExceptionCaught", "CognitiveComplexMethod", "NestedBlockDepth", "LongMethod", "CyclomaticComplexMethod") override fun invoke( - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, next: (BrowserAction) -> Unit, action: BrowserAction, ) { @@ -64,7 +64,7 @@ class TelemetryMiddleware( when (action) { is ContentAction.UpdateLoadingStateAction -> { - context.store.state.findTab(action.sessionId)?.let { tab -> + store.state.findTab(action.sessionId)?.let { tab -> val hasFinishedLoading = tab.content.loading && !action.loading // Record UriOpened event when a non-private page finishes loading @@ -75,12 +75,12 @@ class TelemetryMiddleware( } is DownloadAction.AddDownloadAction -> { /* NOOP */ } is EngineAction.KillEngineSessionAction -> { - val tab = context.store.state.findTabOrCustomTab(action.tabId) - onEngineSessionKilled(context.store.state, tab) + val tab = store.state.findTabOrCustomTab(action.tabId) + onEngineSessionKilled(store.state, tab) } is EngineAction.CreateEngineSessionAction -> { - val tab = context.store.state.findTabOrCustomTab(action.tabId) - onEngineSessionCreated(context.store.state, tab) + val tab = store.state.findTabOrCustomTab(action.tabId) + onEngineSessionCreated(store.state, tab) } is ContentAction.CheckForFormDataExceptionAction -> { Events.formDataFailure.record(NoExtras()) @@ -109,9 +109,9 @@ class TelemetryMiddleware( is TabListAction.RestoreAction, -> { // Update/Persist tabs count whenever it changes - settings.openTabsCount = context.store.state.normalTabs.count() - settings.openPrivateTabsCount = context.store.state.privateTabs.count() - if (context.store.state.normalTabs.isNotEmpty()) { + settings.openTabsCount = store.state.normalTabs.count() + settings.openPrivateTabsCount = store.state.privateTabs.count() + if (store.state.normalTabs.isNotEmpty()) { Metrics.hasOpenTabs.set(true) } else { Metrics.hasOpenTabs.set(false) diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/termsofuse/store/PrivacyNoticeBannerMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/termsofuse/store/PrivacyNoticeBannerMiddleware.kt @@ -5,7 +5,7 @@ package org.mozilla.fenix.termsofuse.store import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store /** * [Middleware] that reacts to various [PrivacyNoticeBannerAction]s @@ -17,7 +17,7 @@ class PrivacyNoticeBannerMiddleware( ) : Middleware<PrivacyNoticeBannerState, PrivacyNoticeBannerAction> { override fun invoke( - context: MiddlewareContext<PrivacyNoticeBannerState, PrivacyNoticeBannerAction>, + store: Store<PrivacyNoticeBannerState, PrivacyNoticeBannerAction>, next: (PrivacyNoticeBannerAction) -> Unit, action: PrivacyNoticeBannerAction, ) { diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/termsofuse/store/PrivacyNoticeBannerTelemetryMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/termsofuse/store/PrivacyNoticeBannerTelemetryMiddleware.kt @@ -5,7 +5,7 @@ package org.mozilla.fenix.termsofuse.store import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store import org.mozilla.fenix.GleanMetrics.PrivacyNoticeBanner /** @@ -15,7 +15,7 @@ class PrivacyNoticeBannerTelemetryMiddleware : Middleware<PrivacyNoticeBannerState, PrivacyNoticeBannerAction> { override fun invoke( - context: MiddlewareContext<PrivacyNoticeBannerState, PrivacyNoticeBannerAction>, + store: Store<PrivacyNoticeBannerState, PrivacyNoticeBannerAction>, next: (PrivacyNoticeBannerAction) -> Unit, action: PrivacyNoticeBannerAction, ) { diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/termsofuse/store/TermsOfUsePromptPreferencesMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/termsofuse/store/TermsOfUsePromptPreferencesMiddleware.kt @@ -5,7 +5,7 @@ package org.mozilla.fenix.termsofuse.store import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store /** * [Middleware] that reacts to various [TermsOfUsePromptAction]s @@ -16,7 +16,7 @@ class TermsOfUsePromptPreferencesMiddleware( private val repository: TermsOfUsePromptRepository, ) : Middleware<TermsOfUsePromptState, TermsOfUsePromptAction> { override fun invoke( - context: MiddlewareContext<TermsOfUsePromptState, TermsOfUsePromptAction>, + store: Store<TermsOfUsePromptState, TermsOfUsePromptAction>, next: (TermsOfUsePromptAction) -> Unit, action: TermsOfUsePromptAction, ) { diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/termsofuse/store/TermsOfUsePromptTelemetryMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/termsofuse/store/TermsOfUsePromptTelemetryMiddleware.kt @@ -5,14 +5,14 @@ package org.mozilla.fenix.termsofuse.store import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store import org.mozilla.fenix.GleanMetrics.TermsOfUse import org.mozilla.fenix.termsofuse.TOU_VERSION internal class TermsOfUsePromptTelemetryMiddleware : Middleware<TermsOfUsePromptState, TermsOfUsePromptAction> { override fun invoke( - context: MiddlewareContext<TermsOfUsePromptState, TermsOfUsePromptAction>, + store: Store<TermsOfUsePromptState, TermsOfUsePromptAction>, next: (TermsOfUsePromptAction) -> Unit, action: TermsOfUsePromptAction, ) { diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/translations/TranslationsDialogMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/translations/TranslationsDialogMiddleware.kt @@ -10,7 +10,7 @@ import mozilla.components.browser.state.store.BrowserStore import mozilla.components.concept.engine.translate.TranslationOperation import mozilla.components.concept.engine.translate.TranslationPageSettingOperation import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store import org.mozilla.fenix.utils.Settings /** @@ -23,7 +23,7 @@ class TranslationsDialogMiddleware( @Suppress("LongMethod", "CyclomaticComplexMethod") override fun invoke( - context: MiddlewareContext<TranslationsDialogState, TranslationsDialogAction>, + store: Store<TranslationsDialogState, TranslationsDialogAction>, next: (TranslationsDialogAction) -> Unit, action: TranslationsDialogAction, ) { @@ -74,8 +74,8 @@ class TranslationsDialogMiddleware( } is TranslationsDialogAction.TranslateAction -> { - context.store.state.initialFrom?.code?.let { fromLanguage -> - context.store.state.initialTo?.code?.let { toLanguage -> + store.state.initialFrom?.code?.let { fromLanguage -> + store.state.initialTo?.code?.let { toLanguage -> TranslationsAction.TranslateAction( tabId = sessionId, fromLanguage = fromLanguage, diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/webcompat/middleware/WebCompatReporterNavigationMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/webcompat/middleware/WebCompatReporterNavigationMiddleware.kt @@ -5,7 +5,7 @@ package org.mozilla.fenix.webcompat.middleware import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store import org.mozilla.fenix.webcompat.store.WebCompatReporterAction import org.mozilla.fenix.webcompat.store.WebCompatReporterState import org.mozilla.fenix.webcompat.store.WebCompatReporterStore @@ -16,7 +16,7 @@ import org.mozilla.fenix.webcompat.store.WebCompatReporterStore class WebCompatReporterNavigationMiddleware : Middleware<WebCompatReporterState, WebCompatReporterAction> { override fun invoke( - context: MiddlewareContext<WebCompatReporterState, WebCompatReporterAction>, + store: Store<WebCompatReporterState, WebCompatReporterAction>, next: (WebCompatReporterAction) -> Unit, action: WebCompatReporterAction, ) { @@ -24,7 +24,7 @@ class WebCompatReporterNavigationMiddleware : Middleware<WebCompatReporterState, when (action) { is WebCompatReporterAction.NavigationAction -> - (context.store as WebCompatReporterStore).emitNavAction( + (store as WebCompatReporterStore).emitNavAction( action = action, ) else -> {} diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/webcompat/middleware/WebCompatReporterStorageMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/webcompat/middleware/WebCompatReporterStorageMiddleware.kt @@ -6,7 +6,6 @@ package org.mozilla.fenix.webcompat.middleware import androidx.annotation.VisibleForTesting import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext import mozilla.components.lib.state.Store import org.mozilla.fenix.components.AppStore import org.mozilla.fenix.components.appstate.AppAction.WebCompatAction @@ -25,14 +24,14 @@ class WebCompatReporterStorageMiddleware( ) : Middleware<WebCompatReporterState, WebCompatReporterAction> { override fun invoke( - context: MiddlewareContext<WebCompatReporterState, WebCompatReporterAction>, + store: Store<WebCompatReporterState, WebCompatReporterAction>, next: (WebCompatReporterAction) -> Unit, action: WebCompatReporterAction, ) { next(action) when (action) { - is WebCompatReporterStorageAction -> processStorageAction(store = context.store, action = action) + is WebCompatReporterStorageAction -> processStorageAction(store = store, action = action) else -> {} // no-op } } diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/webcompat/middleware/WebCompatReporterSubmissionMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/webcompat/middleware/WebCompatReporterSubmissionMiddleware.kt @@ -11,7 +11,7 @@ import mozilla.components.browser.state.selector.selectedTab import mozilla.components.browser.state.state.BrowserState import mozilla.components.browser.state.store.BrowserStore import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store import org.json.JSONObject import org.mozilla.fenix.GleanMetrics.BrokenSiteReport import org.mozilla.fenix.GleanMetrics.BrokenSiteReportBrowserInfo @@ -50,7 +50,7 @@ class WebCompatReporterSubmissionMiddleware( ) : Middleware<WebCompatReporterState, WebCompatReporterAction> { override fun invoke( - context: MiddlewareContext<WebCompatReporterState, WebCompatReporterAction>, + store: Store<WebCompatReporterState, WebCompatReporterAction>, next: (WebCompatReporterAction) -> Unit, action: WebCompatReporterAction, ) { @@ -59,32 +59,32 @@ class WebCompatReporterSubmissionMiddleware( when (action) { is WebCompatReporterAction.SendReportClicked -> { scope.launch { - handleSendReport(context) + handleSendReport(store) } } is WebCompatReporterAction.OpenPreviewClicked -> { scope.launch { - handleOpenPreviewClicked(context) + handleOpenPreviewClicked(store) } } is WebCompatReporterAction.AddMoreInfoClicked -> { scope.launch { - handleSendMoreInfoClicked(context) + handleSendMoreInfoClicked(store) } } else -> {} } } - private suspend fun handleSendReport(context: MiddlewareContext<WebCompatReporterState, WebCompatReporterAction>) { + private suspend fun handleSendReport(store: Store<WebCompatReporterState, WebCompatReporterAction>) { val webCompatInfo = webCompatReporterRetrievalService.retrieveInfo() webCompatInfo?.let { - val enteredUrlMatchesTabUrl = context.store.state.enteredUrl == webCompatInfo.url + val enteredUrlMatchesTabUrl = store.state.enteredUrl == webCompatInfo.url if (enteredUrlMatchesTabUrl) { setTabAntiTrackingMetrics( antiTracking = webCompatInfo.antitracking, - sendBlockedUrls = context.store.state.includeEtpBlockedUrls, + sendBlockedUrls = store.state.includeEtpBlockedUrls, ) setTabFrameworksMetrics(frameworks = webCompatInfo.frameworks) setTabLanguageMetrics(languages = webCompatInfo.languages) @@ -94,24 +94,24 @@ class WebCompatReporterSubmissionMiddleware( setBrowserInfoMetrics(browserInfo = webCompatInfo.browser) setDevicePixelRatioMetrics(devicePixelRatio = webCompatInfo.devicePixelRatio) } - setUrlMetrics(url = context.store.state.enteredUrl) - setReasonMetrics(reason = context.store.state.reason) - setDescriptionMetrics(description = context.store.state.problemDescription) + setUrlMetrics(url = store.state.enteredUrl) + setReasonMetrics(reason = store.state.reason) + setDescriptionMetrics(description = store.state.problemDescription) setExperimentMetrics() Pings.brokenSiteReport.submit() - context.store.dispatch(WebCompatReporterAction.ReportSubmitted) + store.dispatch(WebCompatReporterAction.ReportSubmitted) appStore.dispatch(AppAction.WebCompatAction.WebCompatReportSent) } private suspend fun handleOpenPreviewClicked( - context: MiddlewareContext<WebCompatReporterState, WebCompatReporterAction>, + store: Store<WebCompatReporterState, WebCompatReporterAction>, ) { val webCompatInfo = webCompatReporterRetrievalService.retrieveInfo() - val webCompatJSON = generatePreviewJSON(context.store.state, webCompatInfo) + val webCompatJSON = generatePreviewJSON(store.state, webCompatInfo) - context.store.dispatch(WebCompatReporterAction.PreviewJSONUpdated(webCompatJSON.toString())) + store.dispatch(WebCompatReporterAction.PreviewJSONUpdated(webCompatJSON.toString())) } private fun generatePreviewJSON( @@ -152,17 +152,17 @@ class WebCompatReporterSubmissionMiddleware( } private suspend fun handleSendMoreInfoClicked( - context: MiddlewareContext<WebCompatReporterState, WebCompatReporterAction>, + store: Store<WebCompatReporterState, WebCompatReporterAction>, ) { webCompatReporterMoreInfoSender.sendMoreWebCompatInfo( - reason = context.store.state.reason, - problemDescription = context.store.state.problemDescription, - enteredUrl = context.store.state.enteredUrl, - tabUrl = context.store.state.tabUrl, + reason = store.state.reason, + problemDescription = store.state.problemDescription, + enteredUrl = store.state.enteredUrl, + tabUrl = store.state.tabUrl, engineSession = browserStore.state.selectedTab?.engineState?.engineSession, ) - context.store.dispatch(WebCompatReporterAction.SendMoreInfoSubmitted) + store.dispatch(WebCompatReporterAction.SendMoreInfoSubmitted) } private fun setTabAntiTrackingMetrics( diff --git a/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/webcompat/middleware/WebCompatReporterTelemetryMiddleware.kt b/mobile/android/fenix/app/src/main/java/org/mozilla/fenix/webcompat/middleware/WebCompatReporterTelemetryMiddleware.kt @@ -5,7 +5,7 @@ package org.mozilla.fenix.webcompat.middleware import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store import mozilla.telemetry.glean.private.NoExtras import org.mozilla.fenix.GleanMetrics.Webcompatreporting import org.mozilla.fenix.webcompat.store.WebCompatReporterAction @@ -20,7 +20,7 @@ class WebCompatReporterTelemetryMiddleware : Middleware<WebCompatReporterState, WebCompatReporterAction> { override fun invoke( - context: MiddlewareContext<WebCompatReporterState, WebCompatReporterAction>, + store: Store<WebCompatReporterState, WebCompatReporterAction>, next: (WebCompatReporterAction) -> Unit, action: WebCompatReporterAction, ) { @@ -37,7 +37,7 @@ class WebCompatReporterTelemetryMiddleware : WebCompatReporterAction.SendReportClicked -> { Webcompatreporting.send.record( - Webcompatreporting.SendExtra(sentWithBlockedTrackers = context.store.state.includeEtpBlockedUrls), + Webcompatreporting.SendExtra(sentWithBlockedTrackers = store.state.includeEtpBlockedUrls), ) } diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/bookmarks/PrivateBrowsingLockMiddlewareTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/bookmarks/PrivateBrowsingLockMiddlewareTest.kt @@ -6,7 +6,7 @@ package org.mozilla.fenix.bookmarks import androidx.test.ext.junit.runners.AndroidJUnit4 import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store import mozilla.components.support.test.rule.MainCoroutineRule import org.junit.Assert.assertFalse import org.junit.Assert.assertNotNull @@ -261,7 +261,7 @@ private class TestMiddleware( private val onExpectedActionProcessed: () -> Unit, ) : Middleware<BookmarksState, BookmarksAction> { override fun invoke( - context: MiddlewareContext<BookmarksState, BookmarksAction>, + store: Store<BookmarksState, BookmarksAction>, next: (BookmarksAction) -> Unit, action: BookmarksAction, ) { diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/components/search/ApplicationSearchMiddlewareTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/components/search/ApplicationSearchMiddlewareTest.kt @@ -4,7 +4,6 @@ package org.mozilla.fenix.components.search -import io.mockk.every import io.mockk.mockk import io.mockk.slot import io.mockk.verify @@ -15,7 +14,6 @@ import mozilla.components.browser.state.action.BrowserAction import mozilla.components.browser.state.action.InitAction import mozilla.components.browser.state.action.SearchAction import mozilla.components.browser.state.state.BrowserState -import mozilla.components.lib.state.MiddlewareContext import mozilla.components.lib.state.Store import org.junit.Assert.assertEquals import org.junit.Test @@ -31,10 +29,8 @@ class ApplicationSearchMiddlewareTest { this, ) val store: Store<BrowserState, BrowserAction> = mockk(relaxed = true) - val context: MiddlewareContext<BrowserState, BrowserAction> = mockk() - every { context.store } returns store - middleware.invoke(context, { _ -> }, InitAction) + middleware.invoke(store, { _ -> }, InitAction) this.advanceUntilIdle() val slot = slot<SearchAction.ApplicationSearchEnginesLoaded>() diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/setup/store/SetupChecklistPreferencesMiddlewareTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/setup/store/SetupChecklistPreferencesMiddlewareTest.kt @@ -4,11 +4,9 @@ package org.mozilla.fenix.home.setup.store -import io.mockk.every import io.mockk.mockk import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flowOf -import mozilla.components.lib.state.MiddlewareContext import mozilla.components.lib.state.Store import mozilla.components.support.test.rule.MainCoroutineRule import org.junit.Assert.assertEquals @@ -28,8 +26,6 @@ class SetupChecklistPreferencesMiddlewareTest { @get:Rule val mainCoroutineTestRule = MainCoroutineRule() - private val context: MiddlewareContext<AppState, AppAction> = mockk(relaxed = true) - // tests for invoke action @Test fun `GIVEN init action WHEN invoked the repository is initialised`() { @@ -37,8 +33,7 @@ class SetupChecklistPreferencesMiddlewareTest { val middleware = SetupChecklistPreferencesMiddleware(repository) val store: Store<AppState, AppAction> = mockk(relaxed = true) - every { context.store } returns store - middleware.invoke(context, {}, AppAction.SetupChecklistAction.Init) + middleware.invoke(store, {}, AppAction.SetupChecklistAction.Init) assertTrue(repository.initInvoked) } @@ -50,7 +45,7 @@ class SetupChecklistPreferencesMiddlewareTest { val middleware = SetupChecklistPreferencesMiddleware(repository) val task = buildTask(type = it) middleware.invoke( - context, + mockk(), {}, AppAction.SetupChecklistAction.ChecklistItemClicked(task), ) @@ -74,7 +69,7 @@ class SetupChecklistPreferencesMiddlewareTest { val repository = FakeRepository() val middleware = SetupChecklistPreferencesMiddleware(repository) middleware.invoke( - context, + mockk(), {}, AppAction.SetupChecklistAction.ChecklistItemClicked(buildGroup()), ) diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/setup/store/SetupChecklistTelemetryMiddlewareTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/home/setup/store/SetupChecklistTelemetryMiddlewareTest.kt @@ -8,7 +8,7 @@ import junit.framework.TestCase.assertEquals import junit.framework.TestCase.assertNotNull import junit.framework.TestCase.assertNull import junit.framework.TestCase.assertTrue -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store import mozilla.components.support.test.mock import mozilla.components.support.test.robolectric.testContext import mozilla.telemetry.glean.testing.GleanTestRule @@ -144,9 +144,9 @@ class SetupChecklistTelemetryMiddlewareTest { isCompleted = false, ) - val context = mock<MiddlewareContext<AppState, AppAction>>() + val store = mock<Store<AppState, AppAction>>() middleware.invoke( - context = context, + store = store, next = {}, action = AppAction.SetupChecklistAction.ChecklistItemClicked(task), ) diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/onboarding/store/OnboardingPreferencesMiddlewareTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/onboarding/store/OnboardingPreferencesMiddlewareTest.kt @@ -6,7 +6,6 @@ package org.mozilla.fenix.onboarding.store import androidx.test.ext.junit.runners.AndroidJUnit4 import kotlinx.coroutines.flow.emptyFlow -import mozilla.components.lib.state.MiddlewareContext import mozilla.components.support.test.mock import mozilla.components.support.test.rule.MainCoroutineRule import mozilla.components.support.test.rule.runTestOnMain @@ -31,9 +30,6 @@ class OnboardingPreferencesMiddlewareTest { @Mock private lateinit var repository: OnboardingPreferencesRepository - @Mock - private lateinit var context: MiddlewareContext<OnboardingState, OnboardingAction> - private lateinit var middleware: OnboardingPreferencesMiddleware @Before @@ -47,7 +43,7 @@ class OnboardingPreferencesMiddlewareTest { fun `GIVEN init action WHEN middleware is invoked THEN the repo is initialized`() = runTestOnMain { `when`(repository.onboardingPreferenceUpdates).thenReturn(emptyFlow()) - middleware.invoke(context = context, next = {}, action = OnboardingAction.Init) + middleware.invoke(store = mock(), next = {}, action = OnboardingAction.Init) verify(repository).init() verify(repository).onboardingPreferenceUpdates @@ -58,7 +54,7 @@ class OnboardingPreferencesMiddlewareTest { fun `GIVEN update selected theme action with WHEN middleware is invoked THEN the repo update function is called with the selected theme`() = runTestOnMain { middleware.invoke( - context = context, + store = mock(), next = {}, action = OnboardingAction.OnboardingThemeAction.UpdateSelected(ThemeOptionType.THEME_DARK), ) @@ -75,7 +71,7 @@ class OnboardingPreferencesMiddlewareTest { fun `GIVEN update selected toolbar action with WHEN middleware is invoked THEN the repo update function is called with the selected toolbar`() = runTestOnMain { middleware.invoke( - context = context, + store = mock(), next = {}, action = OnboardingAction.OnboardingToolbarAction.UpdateSelected(ToolbarOptionType.TOOLBAR_BOTTOM), ) diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/onboarding/store/PrivacyPreferencesMiddlewareTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/onboarding/store/PrivacyPreferencesMiddlewareTest.kt @@ -6,7 +6,6 @@ package org.mozilla.fenix.onboarding.store import androidx.test.ext.junit.runners.AndroidJUnit4 import junit.framework.TestCase.assertEquals -import mozilla.components.lib.state.MiddlewareContext import mozilla.components.support.test.mock import org.junit.Before import org.junit.Test @@ -21,9 +20,6 @@ class PrivacyPreferencesMiddlewareTest { @Mock private lateinit var repository: PrivacyPreferencesRepository - @Mock - private lateinit var context: MiddlewareContext<PrivacyPreferencesState, PrivacyPreferencesAction> - private lateinit var middleware: PrivacyPreferencesMiddleware @Before @@ -47,7 +43,7 @@ class PrivacyPreferencesMiddlewareTest { ) val updatedDataUsageEnabled = !dataUsageEnabled - middleware.invoke(context, {}, PrivacyPreferencesAction.UsageDataPreferenceUpdatedTo(enabled = updatedDataUsageEnabled)) + middleware.invoke(store = mock(), {}, PrivacyPreferencesAction.UsageDataPreferenceUpdatedTo(enabled = updatedDataUsageEnabled)) assertEquals(updatedDataUsageEnabled, dataUsageEnabled) } @@ -66,7 +62,7 @@ class PrivacyPreferencesMiddlewareTest { ) val updatedCrashReportEnabled = !crashReportEnabled - middleware.invoke(context, {}, PrivacyPreferencesAction.UsageDataPreferenceUpdatedTo(enabled = updatedCrashReportEnabled)) + middleware.invoke(store = mock(), {}, PrivacyPreferencesAction.UsageDataPreferenceUpdatedTo(enabled = updatedCrashReportEnabled)) assertEquals(updatedCrashReportEnabled, crashReportEnabled) } @@ -74,7 +70,7 @@ class PrivacyPreferencesMiddlewareTest { @Test fun `GIVEN usage data learn more called WHEN middleware is invoked THEN the repo is unchanged`() { val action = PrivacyPreferencesAction.UsageDataUserLearnMore - middleware.invoke(context, {}, action) + middleware.invoke(store = mock(), {}, action) verifyNoInteractions(repository) } @@ -82,7 +78,7 @@ class PrivacyPreferencesMiddlewareTest { @Test fun `GIVEN crash reporting learn more called WHEN middleware is invoked THEN the repo is unchanged`() { val action = PrivacyPreferencesAction.CrashReportingLearnMore - middleware.invoke(context, {}, action) + middleware.invoke(store = mock(), {}, action) verifyNoInteractions(repository) } diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/onboarding/store/PrivacyPreferencesTelemetryMiddlewareTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/onboarding/store/PrivacyPreferencesTelemetryMiddlewareTest.kt @@ -5,7 +5,7 @@ package org.mozilla.fenix.onboarding.store import androidx.test.ext.junit.runners.AndroidJUnit4 -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.support.test.mock import mozilla.components.support.test.robolectric.testContext import mozilla.telemetry.glean.testing.GleanTestRule import org.junit.Assert.assertEquals @@ -26,9 +26,6 @@ class PrivacyPreferencesTelemetryMiddlewareTest { @get:Rule val gleanTestRule = GleanTestRule(testContext) - @Mock - private lateinit var context: MiddlewareContext<PrivacyPreferencesState, PrivacyPreferencesAction> - private lateinit var middleware: PrivacyPreferencesTelemetryMiddleware @Before @@ -42,7 +39,7 @@ class PrivacyPreferencesTelemetryMiddlewareTest { assertNull(Onboarding.privacyPreferencesModalCrashReportingEnabled.testGetValue()) middleware.invoke( - context, + store = mock(), {}, PrivacyPreferencesAction.CrashReportingPreferenceUpdatedTo(true), ) @@ -59,7 +56,7 @@ class PrivacyPreferencesTelemetryMiddlewareTest { assertNull(Onboarding.privacyPreferencesModalUsageDataEnabled.testGetValue()) middleware.invoke( - context, + store = mock(), {}, PrivacyPreferencesAction.UsageDataPreferenceUpdatedTo(true), ) @@ -76,7 +73,7 @@ class PrivacyPreferencesTelemetryMiddlewareTest { assertNull(Onboarding.privacyPreferencesModalCrashReportingLearnMore.testGetValue()) middleware.invoke( - context, + store = mock(), {}, PrivacyPreferencesAction.CrashReportingLearnMore, ) @@ -91,7 +88,7 @@ class PrivacyPreferencesTelemetryMiddlewareTest { assertNull(Onboarding.privacyPreferencesModalUsageDataLearnMore.testGetValue()) middleware.invoke( - context, + store = mock(), {}, PrivacyPreferencesAction.UsageDataUserLearnMore, ) diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/search/FenixSearchMiddlewareTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/search/FenixSearchMiddlewareTest.kt @@ -34,8 +34,6 @@ import mozilla.components.concept.awesomebar.AwesomeBar.SuggestionProvider import mozilla.components.concept.engine.Engine import mozilla.components.concept.engine.EngineSession.LoadUrlFlags import mozilla.components.feature.tabs.TabsUseCases -import mozilla.components.lib.state.MiddlewareContext -import mozilla.components.lib.state.Store import mozilla.components.support.test.middleware.CaptureActionsMiddleware import mozilla.components.support.test.robolectric.testContext import mozilla.components.support.test.rule.MainLooperTestRule @@ -332,9 +330,8 @@ class FenixSearchMiddlewareTest { every { settings.enableHomepageAsNewTab } returns true val middleware = buildMiddleware(useCases = useCases) val store = buildStore(middleware) - val context = buildContext(store) - middleware.loadUrlUseCase(context).invoke(url, flags, null, null) + middleware.loadUrlUseCase(store).invoke(url, flags, null, null) verify { navController.navigate(R.id.browserFragment) } verify { @@ -363,9 +360,8 @@ class FenixSearchMiddlewareTest { every { nimbusComponents.events } returns nimbusEventsStore val middleware = buildMiddleware() val store = buildStore(middleware) - val context = buildContext(store) - middleware.searchUseCase(context).invoke(searchTerm, null, null) + middleware.searchUseCase(store).invoke(searchTerm, null, null) verify { navController.navigate(R.id.browserFragment) } verify { @@ -393,7 +389,6 @@ class FenixSearchMiddlewareTest { val tabsUseCases: TabsUseCases = mockk(relaxed = true) every { useCases.tabsUseCases } returns tabsUseCases val middleware = buildMiddleware(useCases = useCases) - val store = buildStore(middleware) middleware.selectTabUseCase().invoke(selectedTabId) @@ -557,13 +552,6 @@ class FenixSearchMiddlewareTest { middleware = listOf(middleware, searchActionsCaptor), ) - private fun buildContext( - store: SearchFragmentStore, - ) = object : MiddlewareContext<SearchFragmentState, SearchFragmentAction> { - - override val store: Store<SearchFragmentState, SearchFragmentAction> = store - } - private fun buildEmptySearchState( searchEngineSource: SearchEngineSource = SearchEngineSource.Default(searchEngine = mockk()), defaultEngine: SearchEngine? = mockk(), diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/termsofuse/store/PrivacyNoticeBannerMiddlewareTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/termsofuse/store/PrivacyNoticeBannerMiddlewareTest.kt @@ -7,7 +7,7 @@ package org.mozilla.fenix.termsofuse.store import io.mockk.mockk import junit.framework.TestCase.assertFalse import junit.framework.TestCase.assertTrue -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store import org.junit.Before import org.junit.Test @@ -15,8 +15,8 @@ class PrivacyNoticeBannerMiddlewareTest { private lateinit var repository: FakePrivacyNoticeBannerRepository - private val context = - mockk<MiddlewareContext<PrivacyNoticeBannerState, PrivacyNoticeBannerAction>>( + private val store = + mockk<Store<PrivacyNoticeBannerState, PrivacyNoticeBannerAction>>( relaxed = true, ) @@ -31,7 +31,7 @@ class PrivacyNoticeBannerMiddlewareTest { @Test fun `WHEN the action OnBannerDisplayed is received THEN we update the privacy notice banner preference`() { middleware.invoke( - context = context, + store = store, next = {}, action = PrivacyNoticeBannerAction.OnBannerDisplayed, ) @@ -42,25 +42,25 @@ class PrivacyNoticeBannerMiddlewareTest { @Test fun `WHEN a no-op action is received THEN we do not update the privacy notice banner preference`() { middleware.invoke( - context = context, + store = store, next = {}, action = PrivacyNoticeBannerAction.OnPrivacyNoticeClicked, ) middleware.invoke( - context = context, + store = store, next = {}, action = PrivacyNoticeBannerAction.OnLearnMoreClicked, ) middleware.invoke( - context = context, + store = store, next = {}, action = PrivacyNoticeBannerAction.OnCloseClicked, ) middleware.invoke( - context = context, + store = store, next = {}, action = PrivacyNoticeBannerAction.OnFragmentStopped, ) diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/termsofuse/store/PrivacyNoticeBannerTelemetryMiddlewareTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/termsofuse/store/PrivacyNoticeBannerTelemetryMiddlewareTest.kt @@ -7,7 +7,7 @@ package org.mozilla.fenix.termsofuse.store import io.mockk.mockk import junit.framework.TestCase.assertNotNull import junit.framework.TestCase.assertNull -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store import mozilla.components.support.test.robolectric.testContext import org.junit.Rule import org.junit.Test @@ -22,8 +22,8 @@ class PrivacyNoticeBannerTelemetryMiddlewareTest { @get:Rule val gleanTestRule = FenixGleanTestRule(testContext) - private val context = - mockk<MiddlewareContext<PrivacyNoticeBannerState, PrivacyNoticeBannerAction>>( + private val store = + mockk<Store<PrivacyNoticeBannerState, PrivacyNoticeBannerAction>>( relaxed = true, ) @@ -67,7 +67,7 @@ class PrivacyNoticeBannerTelemetryMiddlewareTest { private fun invokeMiddlewareWith(action: PrivacyNoticeBannerAction) { PrivacyNoticeBannerTelemetryMiddleware()( - context = context, + store = store, next = {}, action = action, ) diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/termsofuse/store/TermsOfUsePromptPreferencesMiddlewareTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/termsofuse/store/TermsOfUsePromptPreferencesMiddlewareTest.kt @@ -8,7 +8,6 @@ import io.mockk.mockk import junit.framework.TestCase.assertEquals import junit.framework.TestCase.assertFalse import junit.framework.TestCase.assertTrue -import mozilla.components.lib.state.MiddlewareContext import mozilla.components.support.test.robolectric.testContext import org.junit.Before import org.junit.Test @@ -23,10 +22,6 @@ class TermsOfUsePromptPreferencesMiddlewareTest { private lateinit var repository: DefaultTermsOfUsePromptRepository - private val context = mockk<MiddlewareContext<TermsOfUsePromptState, TermsOfUsePromptAction>>( - relaxed = true, - ) - private lateinit var middleware: TermsOfUsePromptPreferencesMiddleware @Before @@ -41,7 +36,7 @@ class TermsOfUsePromptPreferencesMiddlewareTest { assertAllPrefsDefault() middleware.invoke( - context = context, + store = mockk(), next = {}, action = TermsOfUsePromptAction.OnAcceptClicked(Surface.HOMEPAGE_NEW_TAB), ) @@ -57,7 +52,7 @@ class TermsOfUsePromptPreferencesMiddlewareTest { assertAllPrefsDefault() middleware.invoke( - context = context, + store = mockk(), next = {}, action = TermsOfUsePromptAction.OnRemindMeLaterClicked(Surface.HOMEPAGE_NEW_TAB), ) @@ -73,7 +68,7 @@ class TermsOfUsePromptPreferencesMiddlewareTest { assertAllPrefsDefault() middleware.invoke( - context = context, + store = mockk(), next = {}, action = TermsOfUsePromptAction.OnPromptManuallyDismissed(Surface.HOMEPAGE_NEW_TAB), ) @@ -89,7 +84,7 @@ class TermsOfUsePromptPreferencesMiddlewareTest { assertAllPrefsDefault() middleware.invoke( - context = context, + store = mockk(), next = {}, action = TermsOfUsePromptAction.OnPromptDismissed, ) @@ -105,7 +100,7 @@ class TermsOfUsePromptPreferencesMiddlewareTest { assertAllPrefsDefault() middleware.invoke( - context = context, + store = mockk(), next = {}, action = TermsOfUsePromptAction.OnImpression(Surface.HOMEPAGE_NEW_TAB), ) @@ -134,7 +129,7 @@ class TermsOfUsePromptPreferencesMiddlewareTest { assertAllPrefsDefault() middleware.invoke( - context = context, + store = mockk(), next = {}, action = action, ) diff --git a/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/termsofuse/store/TermsOfUsePromptTelemetryMiddlewareTest.kt b/mobile/android/fenix/app/src/test/java/org/mozilla/fenix/termsofuse/store/TermsOfUsePromptTelemetryMiddlewareTest.kt @@ -1,7 +1,5 @@ package org.mozilla.fenix.termsofuse.store -import io.mockk.mockk -import mozilla.components.lib.state.MiddlewareContext import mozilla.components.support.test.robolectric.testContext import org.junit.Assert.assertEquals import org.junit.Assert.assertNotNull @@ -9,6 +7,7 @@ import org.junit.Assert.assertNull import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith +import org.mockito.Mockito.mock import org.mozilla.fenix.GleanMetrics.TermsOfUse import org.mozilla.fenix.helpers.FenixGleanTestRule import org.robolectric.RobolectricTestRunner @@ -21,9 +20,6 @@ class TermsOfUsePromptTelemetryMiddlewareTest { @get:Rule val gleanTestRule = FenixGleanTestRule(testContext) - private val middlewareContext = - mockk<MiddlewareContext<TermsOfUsePromptState, TermsOfUsePromptAction>>(relaxed = true) - @Test fun `WHEN the OnAcceptClicked action THEN the expected telemetry is recorded`() { assertNull(TermsOfUse.accepted.testGetValue()) @@ -111,7 +107,7 @@ class TermsOfUsePromptTelemetryMiddlewareTest { private fun invokeMiddlewareWith(action: TermsOfUsePromptAction) { TermsOfUsePromptTelemetryMiddleware()( - context = middlewareContext, + store = mock(), next = {}, action = action, ) diff --git a/mobile/android/focus-android/app/src/main/java/org/mozilla/focus/browser/BlockedTrackersMiddleware.kt b/mobile/android/focus-android/app/src/main/java/org/mozilla/focus/browser/BlockedTrackersMiddleware.kt @@ -11,7 +11,7 @@ import mozilla.components.browser.state.action.BrowserAction import mozilla.components.browser.state.action.TrackingProtectionAction import mozilla.components.browser.state.state.BrowserState import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store import org.mozilla.focus.R import org.mozilla.focus.ext.settings @@ -27,7 +27,7 @@ class BlockedTrackersMiddleware( private val preferences = PreferenceManager.getDefaultSharedPreferences(context) override fun invoke( - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, next: (BrowserAction) -> Unit, action: BrowserAction, ) { diff --git a/mobile/android/focus-android/app/src/main/java/org/mozilla/focus/cfr/CfrMiddleware.kt b/mobile/android/focus-android/app/src/main/java/org/mozilla/focus/cfr/CfrMiddleware.kt @@ -13,7 +13,7 @@ import mozilla.components.browser.state.selector.findTabOrCustomTabOrSelectedTab import mozilla.components.browser.state.state.BrowserState import mozilla.components.concept.engine.EngineSession import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store import mozilla.telemetry.glean.private.NoExtras import org.mozilla.experiments.nimbus.internal.FeatureHolder import org.mozilla.focus.GleanMetrics.CookieBanner @@ -38,7 +38,7 @@ class CfrMiddleware( private var tpExposureAlreadyRecorded = false override fun invoke( - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, next: (BrowserAction) -> Unit, action: BrowserAction, ) { @@ -46,7 +46,7 @@ class CfrMiddleware( if (onboardingProvider().value().isCfrEnabled) { showCookieBannerCfr(action) - showTrackingProtectionCfr(action, context.store.state) + showTrackingProtectionCfr(action, store.state) } } diff --git a/mobile/android/focus-android/app/src/main/java/org/mozilla/focus/cookiebannerreducer/CookieBannerReducerMiddleware.kt b/mobile/android/focus-android/app/src/main/java/org/mozilla/focus/cookiebannerreducer/CookieBannerReducerMiddleware.kt @@ -14,7 +14,7 @@ import mozilla.components.browser.state.state.SessionState import mozilla.components.concept.engine.Engine import mozilla.components.concept.engine.cookiehandling.CookieBannersStorage import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store import mozilla.telemetry.glean.private.NoExtras import org.mozilla.focus.GleanMetrics.CookieBanner import org.mozilla.focus.GleanMetrics.Pings @@ -34,22 +34,22 @@ class CookieBannerReducerMiddleware( Middleware<CookieBannerReducerState, CookieBannerReducerAction> { override fun invoke( - context: MiddlewareContext<CookieBannerReducerState, CookieBannerReducerAction>, + store: Store<CookieBannerReducerState, CookieBannerReducerAction>, next: (CookieBannerReducerAction) -> Unit, action: CookieBannerReducerAction, ) { when (action) { is CookieBannerReducerAction.InitCookieBannerReducer -> { // The initial CookieBannerReducerState when the user enters first in the screen - initCookieBannerReducer(context) + initCookieBannerReducer(store) } is CookieBannerReducerAction.ToggleCookieBannerException -> { - handleCookieBannerToggle(action, context) + handleCookieBannerToggle(action, store) next(action) } is CookieBannerReducerAction.RequestReportSite -> { - reportSite(action, context) + reportSite(action, store) next(action) } else -> { @@ -60,13 +60,13 @@ class CookieBannerReducerMiddleware( private fun handleCookieBannerToggle( action: CookieBannerReducerAction.ToggleCookieBannerException, - context: MiddlewareContext<CookieBannerReducerState, CookieBannerReducerAction>, + store: Store<CookieBannerReducerState, CookieBannerReducerAction>, ) { ioScope.launch { if (action.isCookieBannerHandlingExceptionEnabled) { cookieBannersStorage.removeException(currentTab.content.url, true) CookieBanner.exceptionRemoved.record(NoExtras()) - context.store.dispatch( + store.dispatch( CookieBannerReducerAction.UpdateCookieBannerReducerStatus( CookieBannerReducerStatus.NoException, ), @@ -75,7 +75,7 @@ class CookieBannerReducerMiddleware( clearSiteData() cookieBannersStorage.addPersistentExceptionInPrivateMode(currentTab.content.url) CookieBanner.exceptionAdded.record(NoExtras()) - context.store.dispatch( + store.dispatch( CookieBannerReducerAction.UpdateCookieBannerReducerStatus( CookieBannerReducerStatus.HasException, ), @@ -87,16 +87,16 @@ class CookieBannerReducerMiddleware( private fun reportSite( action: CookieBannerReducerAction.RequestReportSite, - context: MiddlewareContext<CookieBannerReducerState, CookieBannerReducerAction>, + store: Store<CookieBannerReducerState, CookieBannerReducerAction>, ) { CookieBanner.reportSiteDomain.set(action.siteToReport) Pings.cookieBannerReportSite.submit() - context.store.dispatch( + store.dispatch( CookieBannerReducerAction.ShowSnackBarForSiteToReport( true, ), ) - context.store.dispatch( + store.dispatch( CookieBannerReducerAction.UpdateCookieBannerReducerStatus( CookieBannerReducerStatus.CookieBannerUnsupportedSiteRequestWasSubmitted, ), @@ -105,10 +105,10 @@ class CookieBannerReducerMiddleware( } private fun initCookieBannerReducer( - context: MiddlewareContext<CookieBannerReducerState, CookieBannerReducerAction>, + store: Store<CookieBannerReducerState, CookieBannerReducerAction>, ) { val shouldShowCookieBannerItem = shouldShowCookieBannerReducerItem() - context.store.dispatch( + store.dispatch( CookieBannerReducerAction.UpdateCookieBannerReducerVisibility( shouldShowCookieBannerItem = shouldShowCookieBannerItem, ), @@ -116,7 +116,7 @@ class CookieBannerReducerMiddleware( if (shouldShowCookieBannerItem) { ioScope.launch { - if (isSiteDomainReported(context)) { + if (isSiteDomainReported(store)) { return@launch } val hasException = @@ -124,16 +124,16 @@ class CookieBannerReducerMiddleware( withContext(Dispatchers.Main) { if (hasException == null) { // An error occurred while querying the exception, let's hide the item. - context.store.dispatch( + store.dispatch( CookieBannerReducerAction.UpdateCookieBannerReducerStatus( null, ), ) return@withContext } else if (hasException) { - showExceptionStatus(context, true) + showExceptionStatus(store, true) } else { - showUnsupportedSiteIfNeeded(context) + showUnsupportedSiteIfNeeded(store) } } } @@ -141,14 +141,14 @@ class CookieBannerReducerMiddleware( } private fun showUnsupportedSiteIfNeeded( - context: MiddlewareContext<CookieBannerReducerState, CookieBannerReducerAction>, + store: Store<CookieBannerReducerState, CookieBannerReducerAction>, ) { currentTab.engineState.engineSession?.hasCookieBannerRuleForSession( onResult = { result -> if (result) { - showExceptionStatus(context, false) + showExceptionStatus(store, false) } else { - context.store.dispatch( + store.dispatch( CookieBannerReducerAction.UpdateCookieBannerReducerStatus( CookieBannerReducerStatus.CookieBannerSiteNotSupported, ), @@ -156,7 +156,7 @@ class CookieBannerReducerMiddleware( } }, onException = { - context.store.dispatch( + store.dispatch( CookieBannerReducerAction.UpdateCookieBannerReducerVisibility( shouldShowCookieBannerItem = false, ), @@ -166,17 +166,17 @@ class CookieBannerReducerMiddleware( } private fun showExceptionStatus( - context: MiddlewareContext<CookieBannerReducerState, CookieBannerReducerAction>, + store: Store<CookieBannerReducerState, CookieBannerReducerAction>, hasException: Boolean, ) { if (hasException) { - context.store.dispatch( + store.dispatch( CookieBannerReducerAction.UpdateCookieBannerReducerStatus( CookieBannerReducerStatus.HasException, ), ) } else { - context.store.dispatch( + store.dispatch( CookieBannerReducerAction.UpdateCookieBannerReducerStatus( CookieBannerReducerStatus.NoException, ), @@ -195,13 +195,13 @@ class CookieBannerReducerMiddleware( } private suspend fun isSiteDomainReported( - context: MiddlewareContext<CookieBannerReducerState, CookieBannerReducerAction>, + store: Store<CookieBannerReducerState, CookieBannerReducerAction>, ): Boolean { val host = currentTab.content.url.toUri().host.orEmpty() val siteDomain = appContext.components.publicSuffixList.getPublicSuffixPlusOne(host).await() if (siteDomain != null && cookieBannersStorage.isSiteDomainReported(siteDomain)) { - context.store.dispatch( + store.dispatch( CookieBannerReducerAction.UpdateCookieBannerReducerStatus( CookieBannerReducerStatus.CookieBannerUnsupportedSiteRequestWasSubmitted, ), diff --git a/mobile/android/focus-android/app/src/main/java/org/mozilla/focus/engine/SanityCheckMiddleware.kt b/mobile/android/focus-android/app/src/main/java/org/mozilla/focus/engine/SanityCheckMiddleware.kt @@ -10,21 +10,21 @@ import mozilla.components.browser.state.action.TabListAction import mozilla.components.browser.state.selector.normalTabs import mozilla.components.browser.state.state.BrowserState import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store /** * Middleware preventing creating non-private tabs. */ class SanityCheckMiddleware : Middleware<BrowserState, BrowserAction> { override fun invoke( - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, next: (BrowserAction) -> Unit, action: BrowserAction, ) { next(action) if (action is TabListAction || action is InitAction) { - verifyNoNonPrivateTabs(context.store.state) + verifyNoNonPrivateTabs(store.state) } } diff --git a/mobile/android/focus-android/app/src/main/java/org/mozilla/focus/locale/screen/LanguageMiddleware.kt b/mobile/android/focus-android/app/src/main/java/org/mozilla/focus/locale/screen/LanguageMiddleware.kt @@ -7,7 +7,7 @@ package org.mozilla.focus.locale.screen import android.app.Activity import androidx.annotation.VisibleForTesting import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store import mozilla.components.support.locale.LocaleManager import mozilla.components.support.locale.LocaleUseCases import org.mozilla.focus.locale.Locales @@ -37,7 +37,7 @@ class LanguageMiddleware( ) : Middleware<LanguageScreenState, LanguageScreenAction> { override fun invoke( - context: MiddlewareContext<LanguageScreenState, LanguageScreenAction>, + store: Store<LanguageScreenState, LanguageScreenAction>, next: (LanguageScreenAction) -> Unit, action: LanguageScreenAction, ) { @@ -49,7 +49,7 @@ class LanguageMiddleware( } is LanguageScreenAction.InitLanguages -> { // The initial LanguageScreenState when the user enters first in the screen - context.store.dispatch( + store.dispatch( LanguageScreenAction.UpdateLanguages( storage.languages, storage.selectedLanguage, diff --git a/mobile/android/focus-android/app/src/main/java/org/mozilla/focus/search/SearchFilterMiddleware.kt b/mobile/android/focus-android/app/src/main/java/org/mozilla/focus/search/SearchFilterMiddleware.kt @@ -9,14 +9,14 @@ import mozilla.components.browser.state.action.SearchAction import mozilla.components.browser.state.search.SearchEngine import mozilla.components.browser.state.state.BrowserState import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store /** * [Middleware] for modifying the loaded list of [SearchEngine]s. */ class SearchFilterMiddleware : Middleware<BrowserState, BrowserAction> { override fun invoke( - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, next: (BrowserAction) -> Unit, action: BrowserAction, ) { diff --git a/mobile/android/focus-android/app/src/main/java/org/mozilla/focus/settings/permissions/permissionoptions/SitePermissionOptionsStorageMiddleware.kt b/mobile/android/focus-android/app/src/main/java/org/mozilla/focus/settings/permissions/permissionoptions/SitePermissionOptionsStorageMiddleware.kt @@ -5,7 +5,7 @@ package org.mozilla.focus.settings.permissions.permissionoptions import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store class SitePermissionOptionsStorageMiddleware( val sitePermission: SitePermission, @@ -14,7 +14,7 @@ class SitePermissionOptionsStorageMiddleware( Middleware<SitePermissionOptionsScreenState, SitePermissionOptionsScreenAction> { override fun invoke( - context: MiddlewareContext<SitePermissionOptionsScreenState, SitePermissionOptionsScreenAction>, + store: Store<SitePermissionOptionsScreenState, SitePermissionOptionsScreenAction>, next: (SitePermissionOptionsScreenAction) -> Unit, action: SitePermissionOptionsScreenAction, ) { @@ -27,7 +27,7 @@ class SitePermissionOptionsStorageMiddleware( next(action) } is SitePermissionOptionsScreenAction.InitSitePermissionOptions -> { - context.store.dispatch( + store.dispatch( SitePermissionOptionsScreenAction.UpdateSitePermissionOptions( storage.getSitePermissionOptions(sitePermission), storage.permissionSelectedOption(sitePermission), diff --git a/mobile/android/focus-android/app/src/main/java/org/mozilla/focus/telemetry/TelemetryMiddleware.kt b/mobile/android/focus-android/app/src/main/java/org/mozilla/focus/telemetry/TelemetryMiddleware.kt @@ -16,7 +16,7 @@ import mozilla.components.browser.state.state.TabSessionState import mozilla.components.browser.state.state.content.DownloadState import mozilla.components.concept.engine.window.WindowRequest import mozilla.components.lib.state.Middleware -import mozilla.components.lib.state.MiddlewareContext +import mozilla.components.lib.state.Store import mozilla.telemetry.glean.private.NoExtras import org.mozilla.focus.GleanMetrics.AppOpened import org.mozilla.focus.GleanMetrics.Browser @@ -26,7 +26,7 @@ import kotlin.collections.forEach as withEach class TelemetryMiddleware : Middleware<BrowserState, BrowserAction> { override fun invoke( - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, next: (BrowserAction) -> Unit, action: BrowserAction, ) { @@ -34,20 +34,20 @@ class TelemetryMiddleware : Middleware<BrowserState, BrowserAction> { when (action) { is TabListAction.AddTabAction -> { - collectTelemetry(action.tab, context) + collectTelemetry(action.tab, store) } is TabListAction.AddMultipleTabsAction -> action.tabs.withEach { - collectTelemetry(it, context) + collectTelemetry(it, store) } is CustomTabListAction.TurnCustomTabIntoNormalTabAction -> { TabCount.newTabOpened.record( - TabCount.NewTabOpenedExtra(context.store.state.tabs.size, "custom tab"), + TabCount.NewTabOpenedExtra(store.state.tabs.size, "custom tab"), ) } is ContentAction.UpdateLoadingStateAction -> { - context.store.state.findTab(action.sessionId)?.let { tab -> + store.state.findTab(action.sessionId)?.let { tab -> // Record UriOpened event when a page finishes loading if (tab.content.loading || action.loading) { // tab is still loading @@ -72,9 +72,9 @@ class TelemetryMiddleware : Middleware<BrowserState, BrowserAction> { private fun collectTelemetry( tab: SessionState, - context: MiddlewareContext<BrowserState, BrowserAction>, + store: Store<BrowserState, BrowserAction>, ) { - val tabCount = context.store.state.tabs.size + val tabCount = store.state.tabs.size when (tab.source) { is SessionState.Source.External.ActionView -> { @@ -92,7 +92,7 @@ class TelemetryMiddleware : Middleware<BrowserState, BrowserAction> { AppOpened.fromLauncherSiteShortcut.record(NoExtras()) } SessionState.Source.Internal.NewTab -> { - val parentTab = (tab as TabSessionState).parentId?.let { context.store.state.findTab(it) } + val parentTab = (tab as TabSessionState).parentId?.let { store.state.findTab(it) } if (parentTab?.content?.windowRequest?.type == WindowRequest.Type.OPEN) { TabCount.newTabOpened.record( TabCount.NewTabOpenedExtra(tabCount, "Window.open()"), diff --git a/mobile/android/focus-android/app/src/test/java/org/mozilla/focus/locale/screen/LanguageMiddlewareTest.kt b/mobile/android/focus-android/app/src/test/java/org/mozilla/focus/locale/screen/LanguageMiddlewareTest.kt @@ -9,7 +9,6 @@ import android.content.Context import android.content.res.Configuration import android.content.res.Resources import kotlinx.coroutines.test.runTest -import mozilla.components.lib.state.MiddlewareContext import mozilla.components.lib.state.Store import mozilla.components.support.locale.LocaleUseCases import mozilla.components.support.test.any @@ -43,14 +42,14 @@ class LanguageMiddlewareTest { private lateinit var mockLocaleUseCases: LocaleUseCases @Mock - private lateinit var mockMiddlewareContext: MiddlewareContext<LanguageScreenState, LanguageScreenAction> - - @Mock private lateinit var mockNext: (LanguageScreenAction) -> Unit @Mock private lateinit var mockStorage: LanguageStorage + @Mock + private lateinit var mockStore: Store<LanguageScreenState, LanguageScreenAction> + private lateinit var middleware: LanguageMiddleware private val context: Context = mock() @@ -80,7 +79,7 @@ class LanguageMiddlewareTest { val selectedLanguage = Language("es-ES", "Español (España)", 0) val action = LanguageScreenAction.Select(selectedLanguage) - middleware.invoke(mockMiddlewareContext, mockNext, action) + middleware.invoke(mockStore, mockNext, action) verify(mockStorage).saveCurrentLanguageInSharePref(selectedLanguage.tag) @Suppress("DEPRECATION") @@ -94,7 +93,7 @@ class LanguageMiddlewareTest { val selectedLanguage = Language("System Default", LanguageStorage.LOCALE_SYSTEM_DEFAULT, 0) val action = LanguageScreenAction.Select(selectedLanguage) - middleware.invoke(mockMiddlewareContext, mockNext, action) + middleware.invoke(mockStore, mockNext, action) verify(mockStorage).saveCurrentLanguageInSharePref(LanguageStorage.LOCALE_SYSTEM_DEFAULT) @Suppress("DEPRECATION") @@ -112,8 +111,7 @@ class LanguageMiddlewareTest { `when`(mockStorage.languages).thenReturn(languages) `when`(mockStorage.selectedLanguage).thenReturn(selectedLanguage) val mockStore = mock<Store<LanguageScreenState, LanguageScreenAction>>() - `when`(mockMiddlewareContext.store).thenReturn(mockStore) - middleware.invoke(mockMiddlewareContext, mockNext, action) + middleware.invoke(mockStore, mockNext, action) val dispatchedActionCaptor = argumentCaptor<LanguageScreenAction>() verify(mockStore).dispatch(dispatchedActionCaptor.capture()) @@ -129,7 +127,7 @@ class LanguageMiddlewareTest { val action = LanguageScreenAction.UpdateLanguages(emptyList(), Language("en-US", "English (US)", 0)) - middleware.invoke(mockMiddlewareContext, mockNext, action) + middleware.invoke(mockStore, mockNext, action) verify(mockNext).invoke(action) }