[优化] 优化代码

This commit is contained in:
HapeLee
2026-03-27 12:59:55 +08:00
parent b799e008c6
commit 23f4e01bba
5 changed files with 111 additions and 108 deletions
@@ -35,7 +35,8 @@ import io.legado.app.R
import io.legado.app.data.entities.BookGroup
import io.legado.app.ui.config.bookshelfConfig.BookshelfConfig
import io.legado.app.ui.widget.components.cover.BookCover
import io.legado.app.ui.widget.components.cover.BookCoverWithProgress
import io.legado.app.ui.widget.components.cover.BookshelfCover
import io.legado.app.ui.widget.components.cover.Cover
import io.legado.app.utils.toTimeAgo
/**
@@ -207,68 +208,75 @@ fun BookGroupCover(
.clip(RoundedCornerShape(4.dp))
.background(MaterialTheme.colorScheme.surfaceContainer)
) {
Column(modifier = Modifier.fillMaxSize()) {
Row(modifier = Modifier.weight(1f)) {
Box(
modifier = Modifier
.weight(1f)
.fillMaxHeight()
.padding(1.dp)
) {
books.getOrNull(0)?.let {
BookCover(
name = it.name,
author = it.author,
path = it.getDisplayCover(),
modifier = Modifier.fillMaxSize()
)
if (!coverPath.isNullOrBlank()) {
Cover(
path = coverPath,
modifier = Modifier.fillMaxSize()
)
} else {
Column(modifier = Modifier.fillMaxSize()) {
Row(modifier = Modifier.weight(1f)) {
Box(
modifier = Modifier
.weight(1f)
.fillMaxHeight()
.padding(1.dp)
) {
books.getOrNull(0)?.let {
BookCover(
name = it.name,
author = it.author,
path = it.getDisplayCover(),
modifier = Modifier.fillMaxSize()
)
}
}
Box(
modifier = Modifier
.weight(1f)
.fillMaxHeight()
.padding(1.dp)
) {
books.getOrNull(1)?.let {
BookCover(
name = it.name,
author = it.author,
path = it.getDisplayCover(),
modifier = Modifier.fillMaxSize()
)
}
}
}
Box(
modifier = Modifier
.weight(1f)
.fillMaxHeight()
.padding(1.dp)
) {
books.getOrNull(1)?.let {
BookCover(
name = it.name,
author = it.author,
path = it.getDisplayCover(),
modifier = Modifier.fillMaxSize()
)
Row(modifier = Modifier.weight(1f)) {
Box(
modifier = Modifier
.weight(1f)
.fillMaxHeight()
.padding(1.dp)
) {
books.getOrNull(2)?.let {
BookCover(
name = it.name,
author = it.author,
path = it.getDisplayCover(),
modifier = Modifier.fillMaxSize()
)
}
}
}
}
Row(modifier = Modifier.weight(1f)) {
Box(
modifier = Modifier
.weight(1f)
.fillMaxHeight()
.padding(1.dp)
) {
books.getOrNull(2)?.let {
BookCover(
name = it.name,
author = it.author,
path = it.getDisplayCover(),
modifier = Modifier.fillMaxSize()
)
}
}
Box(
modifier = Modifier
.weight(1f)
.fillMaxHeight()
.padding(1.dp)
) {
books.getOrNull(3)?.let {
BookCover(
name = it.name,
author = it.author,
path = it.getDisplayCover(),
modifier = Modifier.fillMaxSize()
)
Box(
modifier = Modifier
.weight(1f)
.fillMaxHeight()
.padding(1.dp)
) {
books.getOrNull(3)?.let {
BookCover(
name = it.name,
author = it.author,
path = it.getDisplayCover(),
modifier = Modifier.fillMaxSize()
)
}
}
}
}
@@ -357,7 +365,7 @@ fun BookItem(
gridStyle = gridStyle,
isCompact = isCompact,
cover = { modifier ->
BookCoverWithProgress(
BookshelfCover(
name = book.name,
author = book.author,
path = book.getDisplayCover(),
@@ -2,7 +2,6 @@ package io.legado.app.ui.main.bookshelf
import androidx.compose.runtime.Stable
import io.legado.app.constant.BookType
import io.legado.app.data.entities.Book
import kotlin.math.max
@Stable
@@ -36,24 +35,3 @@ data class BookShelfItem(
fun getUnreadChapterNum() = max(totalChapterNum - durChapterIndex - 1, 0)
}
fun Book.toBookShelfItem(): BookShelfItem {
return BookShelfItem(
bookUrl = bookUrl,
name = name,
author = author,
coverUrl = coverUrl,
customCoverUrl = customCoverUrl,
durChapterTitle = durChapterTitle,
durChapterTime = durChapterTime,
durChapterPos = durChapterPos,
latestChapterTitle = latestChapterTitle,
latestChapterTime = latestChapterTime,
totalChapterNum = totalChapterNum,
durChapterIndex = durChapterIndex,
type = type,
group = group,
order = order,
canUpdate = canUpdate
)
}
@@ -9,14 +9,15 @@ import android.text.TextUtils
import androidx.compose.foundation.Canvas
import androidx.compose.foundation.background
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.BoxWithConstraints
import androidx.compose.foundation.layout.aspectRatio
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Update
import androidx.compose.material.icons.filled.Book
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
@@ -34,12 +35,12 @@ import androidx.compose.ui.graphics.nativeCanvas
import androidx.compose.ui.graphics.toArgb
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.unit.dp
import androidx.core.graphics.withSave
import coil.compose.AsyncImage
import coil.request.ImageRequest
import io.legado.app.ui.config.coverConfig.CoverConfig
import io.legado.app.ui.widget.components.card.TextCard
import org.koin.compose.koinInject
import io.legado.app.model.BookCover as BookCoverModel
@@ -49,8 +50,6 @@ fun BookCover(
author: String?,
path: String?,
modifier: Modifier = Modifier.width(64.dp),
badgeText: String? = null,
showBadgeDot: Boolean = false,
sourceOrigin: String? = null,
onLoadFinish: (() -> Unit)? = null,
ignoreUseDefaultCover: Boolean = false
@@ -79,7 +78,7 @@ fun BookCover(
isOnlineCoverLoaded = false
}
Box(
BoxWithConstraints(
modifier = modifier
.aspectRatio(5f / 7f)
.then(
@@ -94,6 +93,11 @@ fun BookCover(
} else Modifier
)
) {
val density = LocalDensity.current
val iconSizeDp = with(density) {
(minOf(maxWidth, maxHeight).toPx() / 3f).toDp()
}
if (hasCustomDefault) {
AsyncImage(
model = ImageRequest.Builder(context)
@@ -134,6 +138,17 @@ fun BookCover(
}
}
if (!hasCustomDefault && !isOnlineCoverLoaded) {
Icon(
Icons.Default.Book,
contentDescription = null,
tint = MaterialTheme.colorScheme.secondary,
modifier = Modifier
.size(iconSizeDp)
.align(Alignment.Center)
)
}
if (!isOnlineCoverLoaded) {
CoverTextOverlay(
name = name,
@@ -142,20 +157,6 @@ fun BookCover(
)
}
if (!badgeText.isNullOrEmpty()) {
TextCard(
text = badgeText,
icon = if (showBadgeDot) Icons.Default.Update else null,
modifier = Modifier
.align(Alignment.TopEnd)
.padding(2.dp),
backgroundColor = MaterialTheme.colorScheme.secondaryContainer,
contentColor = MaterialTheme.colorScheme.onSecondaryContainer,
cornerRadius = 4.dp,
horizontalPadding = 4.dp,
verticalPadding = 0.dp
)
}
}
}
@@ -4,6 +4,8 @@ import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Update
import androidx.compose.material3.LinearProgressIndicator
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
@@ -11,9 +13,10 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.StrokeCap
import androidx.compose.ui.unit.dp
import io.legado.app.ui.widget.components.card.TextCard
@Composable
fun BookCoverWithProgress(
fun BookshelfCover(
name: String?,
author: String?,
path: String?,
@@ -30,12 +33,25 @@ fun BookCoverWithProgress(
author = author,
path = path,
modifier = Modifier.fillMaxWidth(),
badgeText = badgeText,
showBadgeDot = showBadgeDot,
sourceOrigin = sourceOrigin,
onLoadFinish = onLoadFinish
)
if (!badgeText.isNullOrEmpty()) {
TextCard(
text = badgeText,
icon = if (showBadgeDot) Icons.Default.Update else null,
modifier = Modifier
.align(Alignment.TopEnd)
.padding(2.dp),
backgroundColor = MaterialTheme.colorScheme.secondaryContainer,
contentColor = MaterialTheme.colorScheme.onSecondaryContainer,
cornerRadius = 4.dp,
horizontalPadding = 4.dp,
verticalPadding = 0.dp
)
}
if (isUpdating) {
LinearProgressIndicator(
modifier = Modifier
+1 -1
View File
@@ -1,5 +1,5 @@
VERSION_MAJOR=3
VERSION_MINOR=26
VERSION_PATCH=8
VERSION_SUFFIX=1
VERSION_SUFFIX=0
# 1 = Pre, 0 = Release