compose: Fix previews for every screen

Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
Aayush Gupta
2025-11-10 11:10:01 +08:00
parent b3f2d3ed9c
commit 1f69ecc9de
7 changed files with 75 additions and 9 deletions

View File

@@ -45,7 +45,8 @@ fun ScreenshotListItem(modifier: Modifier = Modifier, url: String) {
)
val state by painter.state.collectAsStateWithLifecycle()
val aspectRatioModifier = state.painter?.intrinsicSize?.let { intrinsicSize ->
Modifier.aspectRatio(ratio = intrinsicSize.width / intrinsicSize.height)
val ratio = intrinsicSize.width / intrinsicSize.height
if (ratio.isNaN()) null else Modifier.aspectRatio(ratio = ratio)
}
Image(

View File

@@ -0,0 +1,28 @@
/*
* 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 com.aurora.store.BuildConfig
import com.aurora.store.data.room.favourite.Favourite
import com.aurora.store.data.room.favourite.Favourite.Mode
/**
* Preview provider for composable working with [Favourite]
*/
class FavouritePreviewProvider() : PreviewParameterProvider<Favourite> {
override val values: Sequence<Favourite>
get() = sequenceOf(
Favourite(
packageName = BuildConfig.APPLICATION_ID,
displayName = "Aurora Store",
iconURL = "",
added = 0L,
mode = Mode.MANUAL
)
)
}

View File

@@ -53,6 +53,7 @@ import com.aurora.extensions.requiresObbDir
import com.aurora.extensions.share
import com.aurora.extensions.toast
import com.aurora.gplayapi.data.models.App
import com.aurora.gplayapi.data.models.Artwork
import com.aurora.gplayapi.data.models.Review
import com.aurora.store.R
import com.aurora.store.compose.composable.Error

View File

@@ -38,7 +38,7 @@ import com.aurora.store.compose.preview.AppPreviewProvider
import com.aurora.store.compose.preview.coilPreviewProvider
import com.aurora.store.viewmodel.details.DevProfileViewModel
import com.aurora.store.viewmodel.search.SearchViewModel
import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.flow.MutableStateFlow
import kotlin.random.Random
/**
@@ -132,7 +132,7 @@ private fun ScreenContent(
private fun DevProfileScreenPreview(@PreviewParameter(AppPreviewProvider::class) app: App) {
CompositionLocalProvider(LocalAsyncImagePreviewHandler provides coilPreviewProvider) {
val apps = List(10) { app.copy(id = Random.nextInt()) }
val pagedApps = flowOf(PagingData.from(apps)).collectAsLazyPagingItems()
val pagedApps = MutableStateFlow(PagingData.from(apps)).collectAsLazyPagingItems()
ScreenContent(
topAppBarTitle = app.developerName,

View File

@@ -13,6 +13,7 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.material3.Scaffold
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
@@ -23,11 +24,14 @@ 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.lifecycle.viewmodel.compose.hiltViewModel
import androidx.paging.LoadState
import androidx.paging.PagingData
import androidx.paging.compose.LazyPagingItems
import androidx.paging.compose.collectAsLazyPagingItems
import androidx.paging.compose.itemKey
import coil3.compose.LocalAsyncImagePreviewHandler
import com.aurora.extensions.toast
import com.aurora.store.R
import com.aurora.store.compose.composable.DownloadListItem
@@ -35,10 +39,16 @@ import com.aurora.store.compose.composable.Error
import com.aurora.store.compose.composable.ContainedLoadingIndicator
import com.aurora.store.compose.composable.TopAppBar
import com.aurora.extensions.emptyPagingItems
import com.aurora.gplayapi.data.models.App
import com.aurora.store.compose.preview.AppPreviewProvider
import com.aurora.store.compose.preview.coilPreviewProvider
import com.aurora.store.compose.ui.downloads.menu.DownloadsMenu
import com.aurora.store.compose.ui.downloads.menu.MenuItem
import com.aurora.store.data.model.DownloadStatus
import com.aurora.store.data.room.download.Download
import com.aurora.store.viewmodel.downloads.DownloadsViewModel
import kotlinx.coroutines.flow.MutableStateFlow
import kotlin.random.Random
@Composable
fun DownloadsScreen(
@@ -171,6 +181,15 @@ private fun ScreenContent(
@Preview
@Composable
private fun DownloadsScreenPreview() {
ScreenContent()
private fun DownloadsScreenPreview(@PreviewParameter(AppPreviewProvider::class) app: App) {
CompositionLocalProvider(LocalAsyncImagePreviewHandler provides coilPreviewProvider) {
val downloads = List(10) {
Download.fromApp(app).copy(
packageName = Random.nextInt().toString(),
status = DownloadStatus.entries.random()
)
}
val pagedDownloads = MutableStateFlow(PagingData.from(downloads)).collectAsLazyPagingItems()
ScreenContent(downloads = pagedDownloads)
}
}

View File

@@ -13,6 +13,7 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.material3.Scaffold
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
@@ -23,11 +24,14 @@ 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.lifecycle.viewmodel.compose.hiltViewModel
import androidx.paging.LoadState
import androidx.paging.PagingData
import androidx.paging.compose.LazyPagingItems
import androidx.paging.compose.collectAsLazyPagingItems
import androidx.paging.compose.itemKey
import coil3.compose.LocalAsyncImagePreviewHandler
import com.aurora.Constants.JSON_MIME_TYPE
import com.aurora.extensions.toast
import com.aurora.store.R
@@ -36,11 +40,15 @@ import com.aurora.store.compose.composable.FavouriteListItem
import com.aurora.store.compose.composable.ContainedLoadingIndicator
import com.aurora.store.compose.composable.TopAppBar
import com.aurora.extensions.emptyPagingItems
import com.aurora.store.compose.preview.FavouritePreviewProvider
import com.aurora.store.compose.preview.coilPreviewProvider
import com.aurora.store.compose.ui.favourite.menu.FavouriteMenu
import com.aurora.store.compose.ui.favourite.menu.MenuItem
import com.aurora.store.data.room.favourite.Favourite
import com.aurora.store.viewmodel.all.FavouriteViewModel
import kotlinx.coroutines.flow.MutableStateFlow
import java.util.Calendar
import kotlin.random.Random
@Composable
fun FavouriteScreen(
@@ -172,6 +180,15 @@ private fun ScreenContent(
@Preview
@Composable
private fun FavouriteScreenPreview() {
ScreenContent()
private fun FavouriteScreenPreview(
@PreviewParameter(FavouritePreviewProvider ::class) favourite: Favourite
) {
CompositionLocalProvider(LocalAsyncImagePreviewHandler provides coilPreviewProvider) {
val favourites = List(10) {
favourite.copy(packageName = "${favourite.packageName}.${Random.nextInt()}")
}
val flow = MutableStateFlow(PagingData.from(favourites)).collectAsLazyPagingItems()
ScreenContent(favourites = flow)
}
}

View File

@@ -76,8 +76,8 @@ import com.aurora.store.compose.ui.details.AppDetailsScreen
import com.aurora.store.data.model.SearchFilter
import com.aurora.store.viewmodel.search.SearchViewModel
import kotlinx.coroutines.android.awaitFrame
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.flow.flowOf
import kotlinx.coroutines.launch
import kotlin.random.Random
@@ -417,7 +417,7 @@ private fun FilterHeader(
@Composable
private fun SearchScreenPreview(@PreviewParameter(AppPreviewProvider::class) app: App) {
val apps = List(10) { app.copy(id = Random.nextInt()) }
val results = flowOf(PagingData.from(apps)).collectAsLazyPagingItems()
val results = MutableStateFlow(PagingData.from(apps)).collectAsLazyPagingItems()
CompositionLocalProvider(LocalAsyncImagePreviewHandler provides coilPreviewProvider) {
ScreenContent(results = results)