Bug 1852074 - Add actions to the shopping CFRs

fenix/120.0
Alexandru2909 9 months ago committed by mergify[bot]
parent 585e29def3
commit 5df74fbfab

@ -64,6 +64,7 @@ private const val CFR_MINIMUM_NUMBER_OPENED_TABS = 5
* @param settings used to read and write persistent user settings * @param settings used to read and write persistent user settings
* @param toolbar will serve as anchor for the CFRs * @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 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. * @param shoppingExperienceFeature Used to determine if [ShoppingExperienceFeature] is enabled.
*/ */
class BrowserToolbarCFRPresenter( class BrowserToolbarCFRPresenter(
@ -73,6 +74,7 @@ class BrowserToolbarCFRPresenter(
private val toolbar: BrowserToolbar, private val toolbar: BrowserToolbar,
private val isPrivate: Boolean, private val isPrivate: Boolean,
private val sessionId: String? = null, private val sessionId: String? = null,
private val onShoppingCfrActionClicked: () -> Unit,
private val shoppingExperienceFeature: ShoppingExperienceFeature = DefaultShoppingExperienceFeature( private val shoppingExperienceFeature: ShoppingExperienceFeature = DefaultShoppingExperienceFeature(
context.settings(), 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 { ).run {
popup = this popup = this
show() show()

@ -53,6 +53,11 @@ interface BrowserToolbarController {
* @see [BrowserToolbarInteractor.onEraseButtonClicked] * @see [BrowserToolbarInteractor.onEraseButtonClicked]
*/ */
fun handleEraseButtonClick() fun handleEraseButtonClick()
/**
* @see [BrowserToolbarInteractor.onShoppingCfrActionClicked]
*/
fun handleShoppingCfrActionClick()
} }
@Suppress("LongParameterList") @Suppress("LongParameterList")
@ -192,6 +197,13 @@ class DefaultBrowserToolbarController(
navController.navigate(directions) navController.navigate(directions)
} }
override fun handleShoppingCfrActionClick() {
activity.settings().shouldShowReviewQualityCheckCFR = false
navController.navigate(
BrowserFragmentDirections.actionBrowserFragmentToReviewQualityCheckDialogFragment(),
)
}
companion object { companion object {
internal const val TELEMETRY_BROWSER_IDENTIFIER = "browserMenu" internal const val TELEMETRY_BROWSER_IDENTIFIER = "browserMenu"
} }

@ -76,6 +76,7 @@ abstract class ToolbarIntegration(
} }
} }
@Suppress("LongParameterList")
class DefaultToolbarIntegration( class DefaultToolbarIntegration(
context: Context, context: Context,
toolbar: BrowserToolbar, toolbar: BrowserToolbar,
@ -101,6 +102,7 @@ class DefaultToolbarIntegration(
toolbar = toolbar, toolbar = toolbar,
isPrivate = isPrivate, isPrivate = isPrivate,
sessionId = sessionId, sessionId = sessionId,
onShoppingCfrActionClicked = interactor::onShoppingCfrActionClicked,
) )
init { init {

@ -32,6 +32,11 @@ interface BrowserToolbarInteractor {
* Deletes all tabs and navigates to the Home screen. Called when a user taps on the erase button. * Deletes all tabs and navigates to the Home screen. Called when a user taps on the erase button.
*/ */
fun onEraseButtonClicked() 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() { override fun onEraseButtonClicked() {
browserToolbarController.handleEraseButtonClick() browserToolbarController.handleEraseButtonClick()
} }
override fun onShoppingCfrActionClicked() {
browserToolbarController.handleShoppingCfrActionClick()
}
} }

@ -348,6 +348,7 @@ class BrowserToolbarCFRPresenterTest {
toolbar = toolbar, toolbar = toolbar,
sessionId = sessionId, sessionId = sessionId,
isPrivate = isPrivate, isPrivate = isPrivate,
onShoppingCfrActionClicked = {},
shoppingExperienceFeature = shoppingExperienceFeature, shoppingExperienceFeature = shoppingExperienceFeature,
), ),
) )

@ -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( private fun createController(
activity: HomeActivity = this.activity, activity: HomeActivity = this.activity,
customTabSessionId: String? = null, customTabSessionId: String? = null,

@ -87,4 +87,11 @@ class DefaultBrowserToolbarInteractorTest {
verify { browserToolbarController.handleEraseButtonClick() } verify { browserToolbarController.handleEraseButtonClick() }
} }
@Test
fun onShoppingCfrActionClicked() {
interactor.onShoppingCfrActionClicked()
verify { browserToolbarController.handleShoppingCfrActionClick() }
}
} }

Loading…
Cancel
Save