From 2bc4b7a5648070f8c57f8d628d0a100e99107717 Mon Sep 17 00:00:00 2001 From: Cathy Lu Date: Tue, 15 Aug 2023 22:20:18 -0500 Subject: [PATCH] Bug 1847024 - Create update analysis card component --- .../fenix/shopping/ui/ProductAnalysis.kt | 48 +++++++++++++++++++ .../ui/ReviewQualityCheckBottomSheet.kt | 3 ++ .../shopping/ui/ReviewQualityCheckInfoCard.kt | 5 ++ 3 files changed, 56 insertions(+) diff --git a/app/src/main/java/org/mozilla/fenix/shopping/ui/ProductAnalysis.kt b/app/src/main/java/org/mozilla/fenix/shopping/ui/ProductAnalysis.kt index 82a0703d41..04ca96e10a 100644 --- a/app/src/main/java/org/mozilla/fenix/shopping/ui/ProductAnalysis.kt +++ b/app/src/main/java/org/mozilla/fenix/shopping/ui/ProductAnalysis.kt @@ -18,6 +18,7 @@ import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width import androidx.compose.material.Icon import androidx.compose.material.Text @@ -59,10 +60,12 @@ import org.mozilla.fenix.theme.FirefoxTheme * @param modifier The modifier to be applied to the Composable. */ @Composable +@Suppress("LongParameterList") fun ProductAnalysis( productRecommendationsEnabled: Boolean, productAnalysis: AnalysisPresent, onOptOutClick: () -> Unit, + onReanalyzeClick: () -> Unit, onProductRecommendationsEnabledStateChange: (Boolean) -> Unit, onReviewGradeLearnMoreClick: (String) -> Unit, modifier: Modifier = Modifier, @@ -71,6 +74,12 @@ fun ProductAnalysis( modifier = modifier, verticalArrangement = Arrangement.spacedBy(16.dp), ) { + if (productAnalysis.needsAnalysis) { + ReanalyzeCard( + onReanalyzeClick = onReanalyzeClick, + ) + } + if (productAnalysis.reviewGrade != null) { ReviewGradeCard( reviewGrade = productAnalysis.reviewGrade, @@ -111,6 +120,27 @@ fun ProductAnalysis( } } +@Composable +private fun ReanalyzeCard( + onReanalyzeClick: () -> Unit, +) { + ReviewQualityCheckInfoCard( + title = stringResource(R.string.review_quality_check_outdated_analysis_warning_title), + type = ReviewQualityCheckInfoType.AnalysisUpdate, + modifier = Modifier.fillMaxWidth(), + buttonText = stringResource(R.string.review_quality_check_outdated_analysis_warning_action), + onButtonClick = onReanalyzeClick, + icon = { + Icon( + painter = painterResource(id = R.drawable.mozac_ic_information_fill_24), + contentDescription = null, + modifier = Modifier.size(24.dp), + tint = FirefoxTheme.colors.iconPrimary, + ) + }, + ) +} + @Composable private fun ReviewGradeCard( reviewGrade: ReviewQualityCheckState.Grade, @@ -504,6 +534,7 @@ private fun ProductAnalysisPreview() { ), ), onOptOutClick = {}, + onReanalyzeClick = {}, onProductRecommendationsEnabledStateChange = { productRecommendationsEnabled.value = it }, @@ -530,3 +561,20 @@ private fun ReviewQualityInfoPreview() { } } } + +@Composable +@LightDarkPreview +private fun ReanalyzeCardPreview() { + FirefoxTheme { + Box( + modifier = Modifier + .fillMaxWidth() + .background(color = FirefoxTheme.colors.layer1) + .padding(all = 16.dp), + ) { + ReanalyzeCard( + onReanalyzeClick = {}, + ) + } + } +} diff --git a/app/src/main/java/org/mozilla/fenix/shopping/ui/ReviewQualityCheckBottomSheet.kt b/app/src/main/java/org/mozilla/fenix/shopping/ui/ReviewQualityCheckBottomSheet.kt index fbff0c37f4..04a263cf10 100644 --- a/app/src/main/java/org/mozilla/fenix/shopping/ui/ReviewQualityCheckBottomSheet.kt +++ b/app/src/main/java/org/mozilla/fenix/shopping/ui/ReviewQualityCheckBottomSheet.kt @@ -55,6 +55,7 @@ fun ReviewQualityCheckBottomSheet( onRequestDismiss() store.dispatch(ReviewQualityCheckAction.OptOut) }, + onReanalyzeClick = {}, onProductRecommendationsEnabledStateChange = { store.dispatch(ReviewQualityCheckAction.ToggleProductRecommendation) }, @@ -83,6 +84,7 @@ fun ReviewQualityCheckBottomSheet( private fun ProductReview( state: ReviewQualityCheckState.OptedIn, onOptOutClick: () -> Unit, + onReanalyzeClick: () -> Unit, onProductRecommendationsEnabledStateChange: (Boolean) -> Unit, onReviewGradeLearnMoreClick: (String) -> Unit, ) { @@ -96,6 +98,7 @@ private fun ProductReview( productRecommendationsEnabled = state.productRecommendationsPreference, productAnalysis = productReviewState, onOptOutClick = onOptOutClick, + onReanalyzeClick = onReanalyzeClick, onProductRecommendationsEnabledStateChange = onProductRecommendationsEnabledStateChange, onReviewGradeLearnMoreClick = onReviewGradeLearnMoreClick, ) diff --git a/app/src/main/java/org/mozilla/fenix/shopping/ui/ReviewQualityCheckInfoCard.kt b/app/src/main/java/org/mozilla/fenix/shopping/ui/ReviewQualityCheckInfoCard.kt index 356e055f41..2cae0d0886 100644 --- a/app/src/main/java/org/mozilla/fenix/shopping/ui/ReviewQualityCheckInfoCard.kt +++ b/app/src/main/java/org/mozilla/fenix/shopping/ui/ReviewQualityCheckInfoCard.kt @@ -137,6 +137,7 @@ enum class ReviewQualityCheckInfoType { Confirmation, Error, Info, + AnalysisUpdate, ; val cardBackgroundColor: Color @@ -146,6 +147,7 @@ enum class ReviewQualityCheckInfoType { Confirmation -> FirefoxTheme.colors.layerConfirmation Error -> FirefoxTheme.colors.layerError Info -> FirefoxTheme.colors.layerInfo + AnalysisUpdate -> Color.Transparent } val buttonBackgroundColor: Color @@ -155,12 +157,14 @@ enum class ReviewQualityCheckInfoType { Confirmation -> FirefoxTheme.colors.actionConfirmation Error -> FirefoxTheme.colors.actionError Info -> FirefoxTheme.colors.actionInfo + AnalysisUpdate -> FirefoxTheme.colors.actionSecondary } val buttonTextColor: Color @Composable get() = when { this == Info && !isSystemInDarkTheme() -> FirefoxTheme.colors.textOnColorPrimary + this == AnalysisUpdate -> FirefoxTheme.colors.textActionSecondary else -> FirefoxTheme.colors.textPrimary } } @@ -177,6 +181,7 @@ private class PreviewModelParameterProvider : PreviewParameterProvider