Bug 1861475 - Add trigger for product recommendation impression

fenix/121.0
Noah Bond 8 months ago committed by mergify[bot]
parent 07c754a0c8
commit d657ddee05

@ -44,6 +44,7 @@ import org.mozilla.fenix.compose.Divider
import org.mozilla.fenix.compose.Image import org.mozilla.fenix.compose.Image
import org.mozilla.fenix.compose.annotation.LightDarkPreview import org.mozilla.fenix.compose.annotation.LightDarkPreview
import org.mozilla.fenix.compose.button.SecondaryButton import org.mozilla.fenix.compose.button.SecondaryButton
import org.mozilla.fenix.compose.ext.onShown
import org.mozilla.fenix.shopping.store.ReviewQualityCheckState import org.mozilla.fenix.shopping.store.ReviewQualityCheckState
import org.mozilla.fenix.shopping.store.ReviewQualityCheckState.HighlightType import org.mozilla.fenix.shopping.store.ReviewQualityCheckState.HighlightType
import org.mozilla.fenix.shopping.store.ReviewQualityCheckState.OptedIn.ProductReviewState.AnalysisPresent import org.mozilla.fenix.shopping.store.ReviewQualityCheckState.OptedIn.ProductReviewState.AnalysisPresent
@ -56,6 +57,9 @@ import java.util.SortedMap
private val combinedParentHorizontalPadding = 32.dp private val combinedParentHorizontalPadding = 32.dp
private val productRecommendationImageSize = 60.dp private val productRecommendationImageSize = 60.dp
private const val PRODUCT_RECOMMENDATION_SETTLE_TIME_MS = 1500
private const val PRODUCT_RECOMMENDATION_IMPRESSION_THRESHOLD = 0.5f
/** /**
* UI for review quality check content displaying product analysis. * UI for review quality check content displaying product analysis.
* *
@ -74,6 +78,7 @@ private val productRecommendationImageSize = 60.dp
* @param onSettingsExpandToggleClick Invoked when the user expands or collapses the settings card. * @param onSettingsExpandToggleClick Invoked when the user expands or collapses the settings card.
* @param onInfoExpandToggleClick Invoked when the user expands or collapses the info card. * @param onInfoExpandToggleClick Invoked when the user expands or collapses the info card.
* @param onRecommendedProductClick Invoked when the user clicks on the product recommendation. * @param onRecommendedProductClick Invoked when the user clicks on the product recommendation.
* @param onRecommendedProductImpression Invoked when the user has seen the product recommendation.
* @param modifier The modifier to be applied to the Composable. * @param modifier The modifier to be applied to the Composable.
*/ */
@Composable @Composable
@ -93,6 +98,7 @@ fun ProductAnalysis(
onSettingsExpandToggleClick: () -> Unit, onSettingsExpandToggleClick: () -> Unit,
onInfoExpandToggleClick: () -> Unit, onInfoExpandToggleClick: () -> Unit,
onRecommendedProductClick: (aid: String, url: String) -> Unit, onRecommendedProductClick: (aid: String, url: String) -> Unit,
onRecommendedProductImpression: (String) -> Unit,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
) { ) {
Column( Column(
@ -148,12 +154,8 @@ fun ProductAnalysis(
if (productAnalysis.recommendedProductState is RecommendedProductState.Product) { if (productAnalysis.recommendedProductState is RecommendedProductState.Product) {
ProductRecommendation( ProductRecommendation(
product = productAnalysis.recommendedProductState, product = productAnalysis.recommendedProductState,
onClick = { onClick = onRecommendedProductClick,
onRecommendedProductClick( onImpression = onRecommendedProductImpression,
productAnalysis.recommendedProductState.aid,
productAnalysis.recommendedProductState.productUrl,
)
},
) )
} }
@ -436,13 +438,21 @@ private enum class Highlight(
@Composable @Composable
private fun ProductRecommendation( private fun ProductRecommendation(
product: RecommendedProductState.Product, product: RecommendedProductState.Product,
onClick: () -> Unit, onClick: (String, String) -> Unit,
onImpression: (String) -> Unit,
) { ) {
Column(verticalArrangement = Arrangement.spacedBy(8.dp)) { Column(verticalArrangement = Arrangement.spacedBy(8.dp)) {
ReviewQualityCheckCard( ReviewQualityCheckCard(
modifier = Modifier modifier = Modifier
.fillMaxWidth() .fillMaxWidth()
.clickable(onClick = onClick), .clickable {
onClick(product.aid, product.productUrl)
}
.onShown(
threshold = PRODUCT_RECOMMENDATION_IMPRESSION_THRESHOLD,
settleTime = PRODUCT_RECOMMENDATION_SETTLE_TIME_MS,
onVisible = { onImpression(product.aid) },
),
) { ) {
Column(verticalArrangement = Arrangement.spacedBy(8.dp)) { Column(verticalArrangement = Arrangement.spacedBy(8.dp)) {
Text( Text(
@ -621,6 +631,7 @@ private fun ProductAnalysisPreview(
onSettingsExpandToggleClick = { isSettingsExpanded = !isSettingsExpanded }, onSettingsExpandToggleClick = { isSettingsExpanded = !isSettingsExpanded },
onInfoExpandToggleClick = { isInfoExpanded = !isInfoExpanded }, onInfoExpandToggleClick = { isInfoExpanded = !isInfoExpanded },
onRecommendedProductClick = { _, _ -> }, onRecommendedProductClick = { _, _ -> },
onRecommendedProductImpression = {},
) )
} }
} }

@ -109,6 +109,9 @@ fun ReviewQualityCheckBottomSheet(
onRequestDismiss(BottomSheetDismissSource.LINK_OPENED) onRequestDismiss(BottomSheetDismissSource.LINK_OPENED)
store.dispatch(ReviewQualityCheckAction.RecommendedProductClick(aid, url)) store.dispatch(ReviewQualityCheckAction.RecommendedProductClick(aid, url))
}, },
onProductRecommendationImpression = { aid ->
store.dispatch(ReviewQualityCheckAction.RecommendedProductImpression(productAid = aid))
},
) )
} }
@ -138,6 +141,7 @@ private fun ProductReview(
onReviewGradeLearnMoreClick: () -> Unit, onReviewGradeLearnMoreClick: () -> Unit,
onFooterLinkClick: () -> Unit, onFooterLinkClick: () -> Unit,
onRecommendedProductClick: (aid: String, url: String) -> Unit, onRecommendedProductClick: (aid: String, url: String) -> Unit,
onProductRecommendationImpression: (aid: String) -> Unit,
) { ) {
Crossfade( Crossfade(
targetState = state.productReviewState, targetState = state.productReviewState,
@ -160,6 +164,7 @@ private fun ProductReview(
onReviewGradeLearnMoreClick = onReviewGradeLearnMoreClick, onReviewGradeLearnMoreClick = onReviewGradeLearnMoreClick,
onFooterLinkClick = onFooterLinkClick, onFooterLinkClick = onFooterLinkClick,
onRecommendedProductClick = onRecommendedProductClick, onRecommendedProductClick = onRecommendedProductClick,
onRecommendedProductImpression = onProductRecommendationImpression,
) )
} }

Loading…
Cancel
Save