You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
iceraven-browser/app/src/main/java/org/mozilla/fenix/shopping/di/ReviewQualityCheckMiddlewar...

97 lines
4.0 KiB
Kotlin

/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
package org.mozilla.fenix.shopping.di
import android.content.Context
import kotlinx.coroutines.CoroutineScope
import mozilla.components.browser.state.store.BrowserStore
import mozilla.components.feature.tabs.TabsUseCases
import org.mozilla.fenix.components.AppStore
import org.mozilla.fenix.shopping.DefaultShoppingExperienceFeature
import org.mozilla.fenix.shopping.middleware.DefaultNetworkChecker
import org.mozilla.fenix.shopping.middleware.DefaultReviewQualityCheckPreferences
import org.mozilla.fenix.shopping.middleware.DefaultReviewQualityCheckService
import org.mozilla.fenix.shopping.middleware.DefaultReviewQualityCheckTelemetryService
import org.mozilla.fenix.shopping.middleware.DefaultReviewQualityCheckVendorsService
import org.mozilla.fenix.shopping.middleware.GetReviewQualityCheckSumoUrl
import org.mozilla.fenix.shopping.middleware.ReviewQualityCheckNavigationMiddleware
import org.mozilla.fenix.shopping.middleware.ReviewQualityCheckNetworkMiddleware
import org.mozilla.fenix.shopping.middleware.ReviewQualityCheckPreferencesMiddleware
import org.mozilla.fenix.shopping.middleware.ReviewQualityCheckTelemetryMiddleware
import org.mozilla.fenix.shopping.store.ReviewQualityCheckMiddleware
import org.mozilla.fenix.utils.Settings
/**
* Provides middleware for review quality check store.
*/
object ReviewQualityCheckMiddlewareProvider {
/**
* Provides middlewares for review quality check feature.
*
* @param settings The [Settings] instance to use.
* @param browserStore The [BrowserStore] instance to access state.
* @param appStore The [AppStore] instance to access state.
* @param context The [Context] instance to use.
* @param scope The [CoroutineScope] to use for launching coroutines.
*/
fun provideMiddleware(
settings: Settings,
browserStore: BrowserStore,
appStore: AppStore,
context: Context,
scope: CoroutineScope,
): List<ReviewQualityCheckMiddleware> =
listOf(
providePreferencesMiddleware(settings, browserStore, appStore, scope),
provideNetworkMiddleware(browserStore, context, scope),
provideNavigationMiddleware(TabsUseCases.SelectOrAddUseCase(browserStore), context),
provideTelemetryMiddleware(browserStore, appStore, scope),
)
private fun providePreferencesMiddleware(
settings: Settings,
browserStore: BrowserStore,
appStore: AppStore,
scope: CoroutineScope,
) = ReviewQualityCheckPreferencesMiddleware(
reviewQualityCheckPreferences = DefaultReviewQualityCheckPreferences(settings),
reviewQualityCheckVendorsService = DefaultReviewQualityCheckVendorsService(browserStore),
appStore = appStore,
shoppingExperienceFeature = DefaultShoppingExperienceFeature(),
scope = scope,
)
private fun provideNetworkMiddleware(
browserStore: BrowserStore,
context: Context,
scope: CoroutineScope,
) = ReviewQualityCheckNetworkMiddleware(
reviewQualityCheckService = DefaultReviewQualityCheckService(browserStore),
networkChecker = DefaultNetworkChecker(context),
scope = scope,
)
private fun provideNavigationMiddleware(
selectOrAddUseCase: TabsUseCases.SelectOrAddUseCase,
context: Context,
) = ReviewQualityCheckNavigationMiddleware(
selectOrAddUseCase = selectOrAddUseCase,
GetReviewQualityCheckSumoUrl(context),
)
private fun provideTelemetryMiddleware(
browserStore: BrowserStore,
appStore: AppStore,
scope: CoroutineScope,
) =
ReviewQualityCheckTelemetryMiddleware(
telemetryService = DefaultReviewQualityCheckTelemetryService(browserStore),
browserStore = browserStore,
appStore = appStore,
scope = scope,
)
}