Răsfoiți Sursa

[优化] 优化代码

HapeLee 7 luni în urmă
părinte
comite
23f4e01bba

+ 68 - 60
app/src/main/java/io/legado/app/ui/main/bookshelf/BookItem.kt

@@ -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(),

+ 0 - 22
app/src/main/java/io/legado/app/ui/main/bookshelf/BookShelfItem.kt

@@ -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
-    )
-}

+ 22 - 21
app/src/main/java/io/legado/app/ui/widget/components/cover/BookCover.kt

@@ -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
-            )
-        }
     }
 }
 

+ 19 - 3
app/src/main/java/io/legado/app/ui/widget/components/cover/BookCoverWithProgress.kt → app/src/main/java/io/legado/app/ui/widget/components/cover/BookshelfCover.kt

@@ -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
app/version.properties

@@ -1,5 +1,5 @@
 VERSION_MAJOR=3
 VERSION_MINOR=26
 VERSION_PATCH=8
-VERSION_SUFFIX=1
+VERSION_SUFFIX=0
 # 1 = Pre, 0 = Release