compose: Fix previews for every screen
Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
@@ -45,7 +45,8 @@ fun ScreenshotListItem(modifier: Modifier = Modifier, url: String) {
|
|||||||
)
|
)
|
||||||
val state by painter.state.collectAsStateWithLifecycle()
|
val state by painter.state.collectAsStateWithLifecycle()
|
||||||
val aspectRatioModifier = state.painter?.intrinsicSize?.let { intrinsicSize ->
|
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(
|
Image(
|
||||||
|
|||||||
@@ -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
|
||||||
|
)
|
||||||
|
)
|
||||||
|
}
|
||||||
@@ -53,6 +53,7 @@ import com.aurora.extensions.requiresObbDir
|
|||||||
import com.aurora.extensions.share
|
import com.aurora.extensions.share
|
||||||
import com.aurora.extensions.toast
|
import com.aurora.extensions.toast
|
||||||
import com.aurora.gplayapi.data.models.App
|
import com.aurora.gplayapi.data.models.App
|
||||||
|
import com.aurora.gplayapi.data.models.Artwork
|
||||||
import com.aurora.gplayapi.data.models.Review
|
import com.aurora.gplayapi.data.models.Review
|
||||||
import com.aurora.store.R
|
import com.aurora.store.R
|
||||||
import com.aurora.store.compose.composable.Error
|
import com.aurora.store.compose.composable.Error
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ import com.aurora.store.compose.preview.AppPreviewProvider
|
|||||||
import com.aurora.store.compose.preview.coilPreviewProvider
|
import com.aurora.store.compose.preview.coilPreviewProvider
|
||||||
import com.aurora.store.viewmodel.details.DevProfileViewModel
|
import com.aurora.store.viewmodel.details.DevProfileViewModel
|
||||||
import com.aurora.store.viewmodel.search.SearchViewModel
|
import com.aurora.store.viewmodel.search.SearchViewModel
|
||||||
import kotlinx.coroutines.flow.flowOf
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
import kotlin.random.Random
|
import kotlin.random.Random
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -132,7 +132,7 @@ private fun ScreenContent(
|
|||||||
private fun DevProfileScreenPreview(@PreviewParameter(AppPreviewProvider::class) app: App) {
|
private fun DevProfileScreenPreview(@PreviewParameter(AppPreviewProvider::class) app: App) {
|
||||||
CompositionLocalProvider(LocalAsyncImagePreviewHandler provides coilPreviewProvider) {
|
CompositionLocalProvider(LocalAsyncImagePreviewHandler provides coilPreviewProvider) {
|
||||||
val apps = List(10) { app.copy(id = Random.nextInt()) }
|
val apps = List(10) { app.copy(id = Random.nextInt()) }
|
||||||
val pagedApps = flowOf(PagingData.from(apps)).collectAsLazyPagingItems()
|
val pagedApps = MutableStateFlow(PagingData.from(apps)).collectAsLazyPagingItems()
|
||||||
|
|
||||||
ScreenContent(
|
ScreenContent(
|
||||||
topAppBarTitle = app.developerName,
|
topAppBarTitle = app.developerName,
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ import androidx.compose.foundation.layout.padding
|
|||||||
import androidx.compose.foundation.lazy.LazyColumn
|
import androidx.compose.foundation.lazy.LazyColumn
|
||||||
import androidx.compose.material3.Scaffold
|
import androidx.compose.material3.Scaffold
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.runtime.CompositionLocalProvider
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.mutableStateOf
|
import androidx.compose.runtime.mutableStateOf
|
||||||
import androidx.compose.runtime.saveable.rememberSaveable
|
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.painterResource
|
||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
import androidx.compose.ui.tooling.preview.Preview
|
import androidx.compose.ui.tooling.preview.Preview
|
||||||
|
import androidx.compose.ui.tooling.preview.PreviewParameter
|
||||||
import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
|
import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
|
||||||
import androidx.paging.LoadState
|
import androidx.paging.LoadState
|
||||||
|
import androidx.paging.PagingData
|
||||||
import androidx.paging.compose.LazyPagingItems
|
import androidx.paging.compose.LazyPagingItems
|
||||||
import androidx.paging.compose.collectAsLazyPagingItems
|
import androidx.paging.compose.collectAsLazyPagingItems
|
||||||
import androidx.paging.compose.itemKey
|
import androidx.paging.compose.itemKey
|
||||||
|
import coil3.compose.LocalAsyncImagePreviewHandler
|
||||||
import com.aurora.extensions.toast
|
import com.aurora.extensions.toast
|
||||||
import com.aurora.store.R
|
import com.aurora.store.R
|
||||||
import com.aurora.store.compose.composable.DownloadListItem
|
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.ContainedLoadingIndicator
|
||||||
import com.aurora.store.compose.composable.TopAppBar
|
import com.aurora.store.compose.composable.TopAppBar
|
||||||
import com.aurora.extensions.emptyPagingItems
|
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.DownloadsMenu
|
||||||
import com.aurora.store.compose.ui.downloads.menu.MenuItem
|
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.data.room.download.Download
|
||||||
import com.aurora.store.viewmodel.downloads.DownloadsViewModel
|
import com.aurora.store.viewmodel.downloads.DownloadsViewModel
|
||||||
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
|
import kotlin.random.Random
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun DownloadsScreen(
|
fun DownloadsScreen(
|
||||||
@@ -171,6 +181,15 @@ private fun ScreenContent(
|
|||||||
|
|
||||||
@Preview
|
@Preview
|
||||||
@Composable
|
@Composable
|
||||||
private fun DownloadsScreenPreview() {
|
private fun DownloadsScreenPreview(@PreviewParameter(AppPreviewProvider::class) app: App) {
|
||||||
ScreenContent()
|
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)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ import androidx.compose.foundation.layout.padding
|
|||||||
import androidx.compose.foundation.lazy.LazyColumn
|
import androidx.compose.foundation.lazy.LazyColumn
|
||||||
import androidx.compose.material3.Scaffold
|
import androidx.compose.material3.Scaffold
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.runtime.CompositionLocalProvider
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.mutableStateOf
|
import androidx.compose.runtime.mutableStateOf
|
||||||
import androidx.compose.runtime.saveable.rememberSaveable
|
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.painterResource
|
||||||
import androidx.compose.ui.res.stringResource
|
import androidx.compose.ui.res.stringResource
|
||||||
import androidx.compose.ui.tooling.preview.Preview
|
import androidx.compose.ui.tooling.preview.Preview
|
||||||
|
import androidx.compose.ui.tooling.preview.PreviewParameter
|
||||||
import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
|
import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
|
||||||
import androidx.paging.LoadState
|
import androidx.paging.LoadState
|
||||||
|
import androidx.paging.PagingData
|
||||||
import androidx.paging.compose.LazyPagingItems
|
import androidx.paging.compose.LazyPagingItems
|
||||||
import androidx.paging.compose.collectAsLazyPagingItems
|
import androidx.paging.compose.collectAsLazyPagingItems
|
||||||
import androidx.paging.compose.itemKey
|
import androidx.paging.compose.itemKey
|
||||||
|
import coil3.compose.LocalAsyncImagePreviewHandler
|
||||||
import com.aurora.Constants.JSON_MIME_TYPE
|
import com.aurora.Constants.JSON_MIME_TYPE
|
||||||
import com.aurora.extensions.toast
|
import com.aurora.extensions.toast
|
||||||
import com.aurora.store.R
|
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.ContainedLoadingIndicator
|
||||||
import com.aurora.store.compose.composable.TopAppBar
|
import com.aurora.store.compose.composable.TopAppBar
|
||||||
import com.aurora.extensions.emptyPagingItems
|
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.FavouriteMenu
|
||||||
import com.aurora.store.compose.ui.favourite.menu.MenuItem
|
import com.aurora.store.compose.ui.favourite.menu.MenuItem
|
||||||
import com.aurora.store.data.room.favourite.Favourite
|
import com.aurora.store.data.room.favourite.Favourite
|
||||||
import com.aurora.store.viewmodel.all.FavouriteViewModel
|
import com.aurora.store.viewmodel.all.FavouriteViewModel
|
||||||
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
import java.util.Calendar
|
import java.util.Calendar
|
||||||
|
import kotlin.random.Random
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun FavouriteScreen(
|
fun FavouriteScreen(
|
||||||
@@ -172,6 +180,15 @@ private fun ScreenContent(
|
|||||||
|
|
||||||
@Preview
|
@Preview
|
||||||
@Composable
|
@Composable
|
||||||
private fun FavouriteScreenPreview() {
|
private fun FavouriteScreenPreview(
|
||||||
ScreenContent()
|
@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)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -76,8 +76,8 @@ import com.aurora.store.compose.ui.details.AppDetailsScreen
|
|||||||
import com.aurora.store.data.model.SearchFilter
|
import com.aurora.store.data.model.SearchFilter
|
||||||
import com.aurora.store.viewmodel.search.SearchViewModel
|
import com.aurora.store.viewmodel.search.SearchViewModel
|
||||||
import kotlinx.coroutines.android.awaitFrame
|
import kotlinx.coroutines.android.awaitFrame
|
||||||
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
import kotlinx.coroutines.flow.collectLatest
|
import kotlinx.coroutines.flow.collectLatest
|
||||||
import kotlinx.coroutines.flow.flowOf
|
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import kotlin.random.Random
|
import kotlin.random.Random
|
||||||
|
|
||||||
@@ -417,7 +417,7 @@ private fun FilterHeader(
|
|||||||
@Composable
|
@Composable
|
||||||
private fun SearchScreenPreview(@PreviewParameter(AppPreviewProvider::class) app: App) {
|
private fun SearchScreenPreview(@PreviewParameter(AppPreviewProvider::class) app: App) {
|
||||||
val apps = List(10) { app.copy(id = Random.nextInt()) }
|
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) {
|
CompositionLocalProvider(LocalAsyncImagePreviewHandler provides coilPreviewProvider) {
|
||||||
ScreenContent(results = results)
|
ScreenContent(results = results)
|
||||||
|
|||||||
Reference in New Issue
Block a user