From d353115ae77fcd1ab571173afcf2aeb5cf202aa9 Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Fri, 27 Jun 2025 14:32:41 +0800 Subject: [PATCH] compose: details: Add preview for reviews Signed-off-by: Aayush Gupta --- .../composables/details/ReviewComposable.kt | 14 +++------- .../com/aurora/store/compose/preview/App.kt | 1 - .../aurora/store/compose/preview/Review.kt | 26 +++++++++++++++++++ .../compose/ui/details/DetailsReviewScreen.kt | 21 ++++++++++----- 4 files changed, 45 insertions(+), 17 deletions(-) create mode 100644 app/src/main/java/com/aurora/store/compose/preview/Review.kt diff --git a/app/src/main/java/com/aurora/store/compose/composables/details/ReviewComposable.kt b/app/src/main/java/com/aurora/store/compose/composables/details/ReviewComposable.kt index 81387e8f8..34f7a4772 100644 --- a/app/src/main/java/com/aurora/store/compose/composables/details/ReviewComposable.kt +++ b/app/src/main/java/com/aurora/store/compose/composables/details/ReviewComposable.kt @@ -24,7 +24,7 @@ import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.dimensionResource import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.tooling.preview.Preview -import androidx.compose.ui.tooling.preview.datasource.LoremIpsum +import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.viewinterop.AndroidView import coil3.annotation.ExperimentalCoilApi import coil3.compose.AsyncImage @@ -33,6 +33,7 @@ import coil3.request.ImageRequest import coil3.request.crossfade import com.aurora.gplayapi.data.models.Review import com.aurora.store.R +import com.aurora.store.compose.preview.ReviewPreviewProvider import com.aurora.store.compose.preview.coilPreviewProvider /** @@ -98,15 +99,8 @@ fun ReviewComposable(modifier: Modifier = Modifier, review: Review) { @Preview(showBackground = true) @Composable @OptIn(ExperimentalCoilApi::class) -private fun ReviewComposablePreview() { +private fun ReviewComposablePreview(@PreviewParameter(ReviewPreviewProvider::class) review: Review) { CompositionLocalProvider(LocalAsyncImagePreviewHandler provides coilPreviewProvider) { - ReviewComposable( - review = Review( - userName = "Rahul Kumar Patel", - timeStamp = 1745750879, - comment = LoremIpsum(40).values.first(), - rating = 4 - ) - ) + ReviewComposable(review = review) } } diff --git a/app/src/main/java/com/aurora/store/compose/preview/App.kt b/app/src/main/java/com/aurora/store/compose/preview/App.kt index 0d34f0685..a6e34e64c 100644 --- a/app/src/main/java/com/aurora/store/compose/preview/App.kt +++ b/app/src/main/java/com/aurora/store/compose/preview/App.kt @@ -10,7 +10,6 @@ import androidx.compose.ui.tooling.preview.PreviewParameterProvider import com.aurora.gplayapi.data.models.App import com.aurora.gplayapi.data.models.Artwork import com.aurora.gplayapi.data.models.Rating -import com.aurora.gplayapi.data.models.Support import com.aurora.gplayapi.data.models.details.TestingProgram import com.aurora.store.BuildConfig diff --git a/app/src/main/java/com/aurora/store/compose/preview/Review.kt b/app/src/main/java/com/aurora/store/compose/preview/Review.kt new file mode 100644 index 000000000..e863323c3 --- /dev/null +++ b/app/src/main/java/com/aurora/store/compose/preview/Review.kt @@ -0,0 +1,26 @@ +/* + * SPDX-FileCopyrightText: 2025 The Calyx Institute + * SPDX-License-Identifier: GPL-3.0-or-later + */ + +package com.aurora.store.compose.preview + +import androidx.compose.ui.tooling.preview.PreviewParameterProvider +import androidx.compose.ui.tooling.preview.datasource.LoremIpsum +import com.aurora.gplayapi.data.models.Review + +/** + * Preview provider for composable working with [Review] + */ +class ReviewPreviewProvider : PreviewParameterProvider { + + override val values: Sequence + get() = sequenceOf( + Review( + userName = "Rahul Kumar Patel", + timeStamp = 1745750879, + rating = 4, + comment = LoremIpsum(40).values.first() + ) + ) +} diff --git a/app/src/main/java/com/aurora/store/compose/ui/details/DetailsReviewScreen.kt b/app/src/main/java/com/aurora/store/compose/ui/details/DetailsReviewScreen.kt index 244b5fa8e..2f9b9b94b 100644 --- a/app/src/main/java/com/aurora/store/compose/ui/details/DetailsReviewScreen.kt +++ b/app/src/main/java/com/aurora/store/compose/ui/details/DetailsReviewScreen.kt @@ -19,6 +19,7 @@ import androidx.compose.material3.Text import androidx.compose.material3.adaptive.WindowAdaptiveInfo import androidx.compose.material3.adaptive.currentWindowAdaptiveInfo import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.saveable.rememberSaveable @@ -28,6 +29,7 @@ import androidx.compose.ui.res.dimensionResource import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.paging.LoadState @@ -36,14 +38,19 @@ import androidx.paging.compose.LazyPagingItems import androidx.paging.compose.collectAsLazyPagingItems import androidx.paging.compose.itemKey import androidx.window.core.layout.WindowWidthSizeClass +import coil3.annotation.ExperimentalCoilApi +import coil3.compose.LocalAsyncImagePreviewHandler import com.aurora.extensions.adaptiveNavigationIcon import com.aurora.gplayapi.data.models.Review import com.aurora.store.R import com.aurora.store.compose.composables.TopAppBarComposable import com.aurora.store.compose.composables.details.ReviewComposable +import com.aurora.store.compose.preview.ReviewPreviewProvider +import com.aurora.store.compose.preview.coilPreviewProvider import com.aurora.store.viewmodel.details.AppDetailsViewModel import com.aurora.store.viewmodel.review.DetailsReviewViewModel -import kotlinx.coroutines.flow.flowOf +import kotlinx.coroutines.flow.MutableStateFlow +import kotlin.random.Random @Composable fun DetailsReviewScreen( @@ -165,10 +172,12 @@ private fun FilterHeader(onClick: (filter: Review.Filter) -> Unit) { @Preview @Composable -private fun DetailsReviewScreenPreview() { - val reviews = flowOf(PagingData.empty()).collectAsLazyPagingItems() +@OptIn(ExperimentalCoilApi::class) +private fun DetailsReviewScreenPreview(@PreviewParameter(ReviewPreviewProvider::class) review: Review) { + val reviews = List(10) { review.copy(commentId = Random.nextInt().toString()) } + val reviewsFlow = MutableStateFlow(PagingData.from(reviews)).collectAsLazyPagingItems() - ScreenContent( - reviews = reviews - ) + CompositionLocalProvider(LocalAsyncImagePreviewHandler provides coilPreviewProvider) { + ScreenContent(reviews = reviewsFlow) + } }