From 5df74fbfab3fb9767b4944510abf753c7fbe5cda Mon Sep 17 00:00:00 2001 From: Alexandru2909 Date: Tue, 26 Sep 2023 15:17:20 +0300 Subject: [PATCH] Bug 1852074 - Add actions to the shopping CFRs --- .../toolbar/BrowserToolbarCFRPresenter.kt | 22 +++++++++++++++++++ .../toolbar/BrowserToolbarController.kt | 12 ++++++++++ .../components/toolbar/ToolbarIntegration.kt | 2 ++ .../interactor/BrowserToolbarInteractor.kt | 9 ++++++++ .../toolbar/BrowserToolbarCFRPresenterTest.kt | 1 + .../DefaultBrowserToolbarControllerTest.kt | 11 ++++++++++ .../DefaultBrowserToolbarInteractorTest.kt | 7 ++++++ 7 files changed, 64 insertions(+) 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 7baa2911d..7542154f5 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 979afddb3..0797a93c9 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 d37346e9a..eb8f2e9ed 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 6bd6358c3..de1b296fe 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 a1b479048..909b0adb7 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 0d3376590..f38b643fb 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 f6a4107db..e7bc2f0bb 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() } + } }