Bug 1847569 - Add reanalysis loading card

Co-authored-by: Noah Bond <nbond@mozilla.com>
fenix/119.0
rahulsainani 9 months ago committed by mergify[bot]
parent c61d117002
commit 72c16d0880

@ -33,6 +33,8 @@ import androidx.compose.ui.graphics.Brush
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.semantics.semantics
import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import androidx.compose.ui.unit.dp
import org.mozilla.fenix.R
import org.mozilla.fenix.compose.annotation.LightDarkPreview
@ -43,6 +45,7 @@ import org.mozilla.fenix.shopping.store.ReviewQualityCheckState.OptedIn.ProductR
import org.mozilla.fenix.shopping.store.ReviewQualityCheckState.OptedIn.ProductReviewState.AnalysisPresent.AnalysisStatus
import org.mozilla.fenix.shopping.store.forCompactMode
import org.mozilla.fenix.theme.FirefoxTheme
import java.util.SortedMap
/**
* UI for review quality check content displaying product analysis.
@ -78,7 +81,7 @@ fun ProductAnalysis(
}
AnalysisStatus.REANALYZING -> {
// TBD
ReanalysisInProgressCard()
}
AnalysisStatus.COMPLETED -> {
@ -152,6 +155,20 @@ private fun ReanalyzeCard(
)
}
@Composable
private fun ReanalysisInProgressCard() {
ReviewQualityCheckInfoCard(
title = stringResource(R.string.review_quality_check_reanalysis_in_progress_warning_title),
type = ReviewQualityCheckInfoType.AnalysisUpdate,
modifier = Modifier.fillMaxWidth(),
icon = {
IndeterminateProgressIndicator(
modifier = Modifier.size(24.dp),
)
},
)
}
@Composable
private fun ReviewGradeCard(
reviewGrade: ReviewQualityCheckState.Grade,
@ -366,24 +383,18 @@ private enum class Highlight(
),
}
@Composable
@LightDarkPreview
private fun ProductAnalysisPreview() {
FirefoxTheme {
ReviewQualityCheckScaffold(
onRequestDismiss = {},
private class ProductAnalysisPreviewModel(
val productRecommendationsEnabled: Boolean?,
val productAnalysis: AnalysisPresent,
) {
val productRecommendationsEnabled = remember { mutableStateOf(false) }
ProductAnalysis(
productRecommendationsEnabled = productRecommendationsEnabled.value,
productAnalysis = AnalysisPresent(
productId = "123",
reviewGrade = ReviewQualityCheckState.Grade.B,
analysisStatus = AnalysisStatus.UP_TO_DATE,
adjustedRating = 3.6f,
productUrl = "123",
highlights = sortedMapOf(
constructor(
productRecommendationsEnabled: Boolean? = false,
productId: String = "123",
reviewGrade: ReviewQualityCheckState.Grade? = ReviewQualityCheckState.Grade.B,
analysisStatus: AnalysisStatus = AnalysisStatus.UP_TO_DATE,
adjustedRating: Float? = 3.6f,
productUrl: String = "",
highlights: SortedMap<HighlightType, List<String>>? = sortedMapOf(
HighlightType.QUALITY to listOf(
"High quality",
"Excellent craftsmanship",
@ -410,31 +421,71 @@ private fun ProductAnalysisPreview() {
"Unbeatable deals",
),
),
recommendedProductState: ReviewQualityCheckState.RecommendedProductState =
ReviewQualityCheckState.RecommendedProductState.Initial,
) : this(
productRecommendationsEnabled = productRecommendationsEnabled,
productAnalysis = AnalysisPresent(
productId = productId,
reviewGrade = reviewGrade,
analysisStatus = analysisStatus,
adjustedRating = adjustedRating,
productUrl = productUrl,
highlights = highlights,
recommendedProductState = recommendedProductState,
),
onOptOutClick = {},
onReanalyzeClick = {},
onProductRecommendationsEnabledStateChange = {
productRecommendationsEnabled.value = it
},
onReviewGradeLearnMoreClick = {},
onFooterLinkClick = {},
)
}
}
private class ProductAnalysisPreviewModelParameterProvider :
PreviewParameterProvider<ProductAnalysisPreviewModel> {
override val values: Sequence<ProductAnalysisPreviewModel>
get() = sequenceOf(
ProductAnalysisPreviewModel(),
ProductAnalysisPreviewModel(
analysisStatus = AnalysisStatus.NEEDS_ANALYSIS,
),
ProductAnalysisPreviewModel(
analysisStatus = AnalysisStatus.REANALYZING,
),
ProductAnalysisPreviewModel(
analysisStatus = AnalysisStatus.COMPLETED,
),
ProductAnalysisPreviewModel(
reviewGrade = null,
),
ProductAnalysisPreviewModel(
highlights = sortedMapOf(
HighlightType.QUALITY to listOf(
"High quality",
"Excellent craftsmanship",
),
),
),
)
}
@Composable
@LightDarkPreview
private fun ReanalyzeCardPreview() {
private fun ProductAnalysisPreview(
@PreviewParameter(ProductAnalysisPreviewModelParameterProvider::class) model: ProductAnalysisPreviewModel,
) {
FirefoxTheme {
Box(
modifier = Modifier
.fillMaxWidth()
.background(color = FirefoxTheme.colors.layer1)
.padding(all = 16.dp),
ReviewQualityCheckScaffold(
onRequestDismiss = {},
) {
ReanalyzeCard(
var productRecommendationsEnabled by remember { mutableStateOf(model.productRecommendationsEnabled) }
ProductAnalysis(
productRecommendationsEnabled = productRecommendationsEnabled,
productAnalysis = model.productAnalysis,
onOptOutClick = {},
onReanalyzeClick = {},
onProductRecommendationsEnabledStateChange = {
productRecommendationsEnabled = it
},
onReviewGradeLearnMoreClick = {},
onFooterLinkClick = {},
)
}
}

@ -2173,7 +2173,7 @@
<!-- Clickable text for warning card informing the user that the current product is currently not available. Clicking this should inform the server that the product is available. -->
<string name="review_quality_check_product_availability_warning_action" tools:ignore="UnusedResources">Report this product is back in stock</string>
<!-- Title for warning card informing the user that the current product's re-analysis is still processing. -->
<string name="review_quality_check_reanalysis_in_progress_warning_title" tools:ignore="UnusedResources">Checking review quality</string>
<string name="review_quality_check_reanalysis_in_progress_warning_title">Checking review quality</string>
<!-- Title for warning card informing the user that the current product's analysis is still processing. -->
<string name="review_quality_check_analysis_in_progress_warning_title">Checking review quality</string>
<!-- Text for body of warning card informing the user that the current product's analysis is still processing. -->

Loading…
Cancel
Save