Hopefully fix crash with page previews

This commit is contained in:
Jobobby04 2023-12-23 18:11:43 -05:00
parent f59036a082
commit 86837a6c47

View File

@ -3,12 +3,11 @@ package eu.kanade.presentation.manga.components
import androidx.compose.foundation.clickable import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.BoxWithConstraints
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.heightIn
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.material3.CircularProgressIndicator import androidx.compose.material3.CircularProgressIndicator
@ -18,11 +17,17 @@ import androidx.compose.material3.TextButton
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.clip
import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.layout.onGloballyPositioned
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import coil.compose.SubcomposeAsyncImage import coil.compose.SubcomposeAsyncImage
import coil.compose.SubcomposeAsyncImageContent import coil.compose.SubcomposeAsyncImageContent
@ -40,12 +45,25 @@ fun PagePreviews(
) { ) {
when (pagePreviewState) { when (pagePreviewState) {
PagePreviewState.Loading -> { PagePreviewState.Loading -> {
Box(modifier = Modifier.height(60.dp).fillMaxWidth(), contentAlignment = Alignment.Center) { Box(modifier = Modifier
.height(60.dp)
.fillMaxWidth(), contentAlignment = Alignment.Center) {
CircularProgressIndicator() CircularProgressIndicator()
} }
} }
is PagePreviewState.Success -> { is PagePreviewState.Success -> {
BoxWithConstraints(Modifier.fillMaxWidth()) { var maxWidth by remember {
mutableStateOf(Dp.Hairline)
}
val density = LocalDensity.current
Box(
Modifier
.fillMaxWidth()
.onGloballyPositioned {
maxWidth = with(density) { it.size.width.toDp() }
},
) {
if (maxWidth == Dp.Hairline) return@Box
val itemPerRowCount = (maxWidth / 120.dp).floor() val itemPerRowCount = (maxWidth / 120.dp).floor()
Column( Column(
modifier = Modifier.fillMaxWidth(), modifier = Modifier.fillMaxWidth(),
@ -54,7 +72,9 @@ fun PagePreviews(
) { ) {
pagePreviewState.pagePreviews.take(4 * itemPerRowCount).chunked(itemPerRowCount).forEach { pagePreviewState.pagePreviews.take(4 * itemPerRowCount).chunked(itemPerRowCount).forEach {
Row( Row(
modifier = Modifier.fillMaxWidth().padding(horizontal = 8.dp), modifier = Modifier
.fillMaxWidth()
.padding(horizontal = 8.dp),
verticalAlignment = Alignment.CenterVertically, verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.medium), horizontalArrangement = Arrangement.spacedBy(MaterialTheme.padding.medium),
) { ) {
@ -94,23 +114,27 @@ fun PagePreview(
model = page, model = page,
contentDescription = null, contentDescription = null,
loading = { loading = {
val progress by page.progress.collectAsState() Box(Modifier.fillMaxSize(), contentAlignment = Alignment.Center) {
if (progress < 0) { val progress by page.progress.collectAsState()
CircularProgressIndicator() if (progress < 0) {
} else { CircularProgressIndicator()
CircularProgressIndicator(progress / 0.01F) } else {
CircularProgressIndicator(progress / 0.01F)
}
} }
}, },
success = { success = {
SubcomposeAsyncImageContent( SubcomposeAsyncImageContent(
contentDescription = null, contentDescription = null,
modifier = Modifier modifier = Modifier
.width(120.dp) .fillMaxSize()
.heightIn(max = 200.dp)
.clip(MaterialTheme.shapes.small), .clip(MaterialTheme.shapes.small),
contentScale = ContentScale.FillWidth, contentScale = ContentScale.FillWidth,
) )
}, },
modifier = Modifier
.height(200.dp)
.width(120.dp),
) )
Text(page.index.toString()) Text(page.index.toString())
} }