diff --git a/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserToolbarCFRPresenter.kt b/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserToolbarCFRPresenter.kt index 7baa2911d4..7542154f56 100644 --- a/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserToolbarCFRPresenter.kt +++ b/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserToolbarCFRPresenter.kt @@ -64,6 +64,7 @@ private const val CFR_MINIMUM_NUMBER_OPENED_TABS = 5 * @param settings used to read and write persistent user settings * @param toolbar will serve as anchor for the CFRs * @param sessionId optional custom tab id used to identify the custom tab in which to show a CFR. + * @param onShoppingCfrActionClicked Triggered when the user taps on the shopping CFR action. * @param shoppingExperienceFeature Used to determine if [ShoppingExperienceFeature] is enabled. */ class BrowserToolbarCFRPresenter( @@ -73,6 +74,7 @@ class BrowserToolbarCFRPresenter( private val toolbar: BrowserToolbar, private val isPrivate: Boolean, private val sessionId: String? = null, + private val onShoppingCfrActionClicked: () -> Unit, private val shoppingExperienceFeature: ShoppingExperienceFeature = DefaultShoppingExperienceFeature( context.settings(), ), @@ -338,6 +340,26 @@ class BrowserToolbarCFRPresenter( ) } }, + action = { + FirefoxTheme { + Text( + text = if (shouldShowOptedInCFR) { + stringResource(id = R.string.review_quality_check_second_cfr_action) + } else { + stringResource(id = R.string.review_quality_check_first_cfr_action) + }, + color = FirefoxTheme.colors.textOnColorPrimary, + modifier = Modifier + .clickable { + onShoppingCfrActionClicked() + popup?.dismiss() + }, + style = FirefoxTheme.typography.body2.copy( + textDecoration = TextDecoration.Underline, + ), + ) + } + }, ).run { popup = this show() diff --git a/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserToolbarController.kt b/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserToolbarController.kt index 979afddb33..0797a93c97 100644 --- a/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserToolbarController.kt +++ b/app/src/main/java/org/mozilla/fenix/components/toolbar/BrowserToolbarController.kt @@ -53,6 +53,11 @@ interface BrowserToolbarController { * @see [BrowserToolbarInteractor.onEraseButtonClicked] */ fun handleEraseButtonClick() + + /** + * @see [BrowserToolbarInteractor.onShoppingCfrActionClicked] + */ + fun handleShoppingCfrActionClick() } @Suppress("LongParameterList") @@ -192,6 +197,13 @@ class DefaultBrowserToolbarController( navController.navigate(directions) } + override fun handleShoppingCfrActionClick() { + activity.settings().shouldShowReviewQualityCheckCFR = false + navController.navigate( + BrowserFragmentDirections.actionBrowserFragmentToReviewQualityCheckDialogFragment(), + ) + } + companion object { internal const val TELEMETRY_BROWSER_IDENTIFIER = "browserMenu" } diff --git a/app/src/main/java/org/mozilla/fenix/components/toolbar/ToolbarIntegration.kt b/app/src/main/java/org/mozilla/fenix/components/toolbar/ToolbarIntegration.kt index d37346e9a4..eb8f2e9ed4 100644 --- a/app/src/main/java/org/mozilla/fenix/components/toolbar/ToolbarIntegration.kt +++ b/app/src/main/java/org/mozilla/fenix/components/toolbar/ToolbarIntegration.kt @@ -76,6 +76,7 @@ abstract class ToolbarIntegration( } } +@Suppress("LongParameterList") class DefaultToolbarIntegration( context: Context, toolbar: BrowserToolbar, @@ -101,6 +102,7 @@ class DefaultToolbarIntegration( toolbar = toolbar, isPrivate = isPrivate, sessionId = sessionId, + onShoppingCfrActionClicked = interactor::onShoppingCfrActionClicked, ) init { diff --git a/app/src/main/java/org/mozilla/fenix/components/toolbar/interactor/BrowserToolbarInteractor.kt b/app/src/main/java/org/mozilla/fenix/components/toolbar/interactor/BrowserToolbarInteractor.kt index 6bd6358c34..de1b296fee 100644 --- a/app/src/main/java/org/mozilla/fenix/components/toolbar/interactor/BrowserToolbarInteractor.kt +++ b/app/src/main/java/org/mozilla/fenix/components/toolbar/interactor/BrowserToolbarInteractor.kt @@ -32,6 +32,11 @@ interface BrowserToolbarInteractor { * Deletes all tabs and navigates to the Home screen. Called when a user taps on the erase button. */ fun onEraseButtonClicked() + + /** + * Opens the shopping bottom sheet. Called when the user interacts with the shopping cfr action. + */ + fun onShoppingCfrActionClicked() } /** @@ -86,4 +91,8 @@ class DefaultBrowserToolbarInteractor( override fun onEraseButtonClicked() { browserToolbarController.handleEraseButtonClick() } + + override fun onShoppingCfrActionClicked() { + browserToolbarController.handleShoppingCfrActionClick() + } } diff --git a/app/src/test/java/org/mozilla/fenix/components/toolbar/BrowserToolbarCFRPresenterTest.kt b/app/src/test/java/org/mozilla/fenix/components/toolbar/BrowserToolbarCFRPresenterTest.kt index a1b4790489..909b0adb77 100644 --- a/app/src/test/java/org/mozilla/fenix/components/toolbar/BrowserToolbarCFRPresenterTest.kt +++ b/app/src/test/java/org/mozilla/fenix/components/toolbar/BrowserToolbarCFRPresenterTest.kt @@ -348,6 +348,7 @@ class BrowserToolbarCFRPresenterTest { toolbar = toolbar, sessionId = sessionId, isPrivate = isPrivate, + onShoppingCfrActionClicked = {}, shoppingExperienceFeature = shoppingExperienceFeature, ), ) diff --git a/app/src/test/java/org/mozilla/fenix/components/toolbar/DefaultBrowserToolbarControllerTest.kt b/app/src/test/java/org/mozilla/fenix/components/toolbar/DefaultBrowserToolbarControllerTest.kt index 0d3376590a..f38b643fb8 100644 --- a/app/src/test/java/org/mozilla/fenix/components/toolbar/DefaultBrowserToolbarControllerTest.kt +++ b/app/src/test/java/org/mozilla/fenix/components/toolbar/DefaultBrowserToolbarControllerTest.kt @@ -378,6 +378,17 @@ class DefaultBrowserToolbarControllerTest { } } + @Test + fun handleShoppingCfrActionClick() { + val controller = createController() + controller.handleShoppingCfrActionClick() + + verify { + activity.settings().shouldShowReviewQualityCheckCFR = false + navController.navigate(BrowserFragmentDirections.actionBrowserFragmentToReviewQualityCheckDialogFragment()) + } + } + private fun createController( activity: HomeActivity = this.activity, customTabSessionId: String? = null, diff --git a/app/src/test/java/org/mozilla/fenix/components/toolbar/DefaultBrowserToolbarInteractorTest.kt b/app/src/test/java/org/mozilla/fenix/components/toolbar/DefaultBrowserToolbarInteractorTest.kt index f6a4107dbd..e7bc2f0bbe 100644 --- a/app/src/test/java/org/mozilla/fenix/components/toolbar/DefaultBrowserToolbarInteractorTest.kt +++ b/app/src/test/java/org/mozilla/fenix/components/toolbar/DefaultBrowserToolbarInteractorTest.kt @@ -87,4 +87,11 @@ class DefaultBrowserToolbarInteractorTest { verify { browserToolbarController.handleEraseButtonClick() } } + + @Test + fun onShoppingCfrActionClicked() { + interactor.onShoppingCfrActionClicked() + + verify { browserToolbarController.handleShoppingCfrActionClick() } + } }