소스 검색

feat: 封面垂直居中相关选项

HapeLee 3 달 전
부모
커밋
a32734ec2d

+ 1 - 0
app/src/main/java/io/legado/app/constant/PreferKey.kt

@@ -57,6 +57,7 @@ object PreferKey {
     const val bookshelfLayoutModePortrait = "bookshelfLayoutPortrait"
     const val bookshelfLayoutModeLandscape = "bookshelf_layout_landscape"
     const val bookshelfLayoutCompact = "bookshelfLayoutCompact"
+    const val bookshelfListCoverCenter = "bookshelfListCoverCenter"
     const val bookshelfListIntroBelowContent = "bookshelfListIntroBelowContent"
     const val bookshelfShowDivider = "bookshelfShowDivider"
     const val bookshelfGridLayout = "bookshelfGridLayout"

+ 2 - 0
app/src/main/java/io/legado/app/data/repository/BookshelfSettingsRepository.kt

@@ -63,6 +63,7 @@ internal fun Preferences.toBookshelfSettings() = BookshelfSettings(
     bookshelfFolderLayoutListLandscape = compatDsInt(PreferKey.bookshelfFolderLayoutListLandscape) ?: 1,
     bookshelfGridLayout = compatDsInt(PreferKey.bookshelfGridLayout) ?: 0,
     bookshelfLayoutCompact = compatDsBoolean(PreferKey.bookshelfLayoutCompact) ?: false,
+    bookshelfListCoverCenter = compatDsBoolean(PreferKey.bookshelfListCoverCenter) ?: true,
     bookshelfListIntroBelowContent = compatDsBoolean(PreferKey.bookshelfListIntroBelowContent)
         ?: false,
     bookshelfShowDivider = compatDsBoolean(PreferKey.bookshelfShowDivider) ?: true,
@@ -114,6 +115,7 @@ internal fun BookshelfSettings.toPrefMap(): Map<String, Any?> = mapOf(
     PreferKey.bookshelfFolderLayoutListLandscape to bookshelfFolderLayoutListLandscape,
     PreferKey.bookshelfGridLayout to bookshelfGridLayout,
     PreferKey.bookshelfLayoutCompact to bookshelfLayoutCompact,
+    PreferKey.bookshelfListCoverCenter to bookshelfListCoverCenter,
     PreferKey.bookshelfListIntroBelowContent to bookshelfListIntroBelowContent,
     PreferKey.bookshelfShowDivider to bookshelfShowDivider,
     PreferKey.bookshelfTitleSmallFont to bookshelfTitleSmallFont,

+ 1 - 0
app/src/main/java/io/legado/app/domain/model/settings/BookshelfSettings.kt

@@ -35,6 +35,7 @@ data class BookshelfSettings(
     val bookshelfFolderLayoutListLandscape: Int = 1,
     val bookshelfGridLayout: Int = 0,
     val bookshelfLayoutCompact: Boolean = false,
+    val bookshelfListCoverCenter: Boolean = true,
     val bookshelfListIntroBelowContent: Boolean = false,
     val bookshelfShowDivider: Boolean = true,
     val bookshelfTitleSmallFont: Boolean = false,

+ 1 - 0
app/src/main/java/io/legado/app/help/storage/BackupConfig.kt

@@ -306,6 +306,7 @@ object BackupConfig {
         PreferKey.bookshelfLayoutModePortrait,
         PreferKey.bookshelfLayoutModeLandscape,
         PreferKey.bookshelfLayoutCompact,
+        PreferKey.bookshelfListCoverCenter,
         PreferKey.bookshelfListIntroBelowContent,
         PreferKey.bookshelfShowDivider,
         PreferKey.bookshelfGridLayout,

+ 1 - 0
app/src/main/java/io/legado/app/ui/config/bookshelfConfig/BookshelfConfig.kt

@@ -37,6 +37,7 @@ object BookshelfConfig {
     val bookshelfFolderLayoutListLandscape get() = settings.bookshelfFolderLayoutListLandscape
     val bookshelfGridLayout get() = settings.bookshelfGridLayout
     val bookshelfLayoutCompact get() = settings.bookshelfLayoutCompact
+    val bookshelfListCoverCenter get() = settings.bookshelfListCoverCenter
     val bookshelfListIntroBelowContent get() = settings.bookshelfListIntroBelowContent
     val bookshelfShowDivider get() = settings.bookshelfShowDivider
     val bookshelfTitleSmallFont get() = settings.bookshelfTitleSmallFont

+ 11 - 3
app/src/main/java/io/legado/app/ui/main/bookshelf/BookItem.kt

@@ -179,9 +179,17 @@ fun BookshelfListItem(
             onLongClick = onLongClick
         ) {
             Row(Modifier.fillMaxWidth(), verticalAlignment = Alignment.CenterVertically) {
-                Box(Modifier
-                    .align(Alignment.CenterVertically)
-                    .width(coverWidth.dp)) {
+                Box(
+                    Modifier
+                        .align(
+                            if (settings.bookshelfListCoverCenter) {
+                                Alignment.CenterVertically
+                            } else {
+                                Alignment.Top
+                            }
+                        )
+                        .width(coverWidth.dp)
+                ) {
                     BookshelfItemCover(coverShadow = coverShadow, cover = cover)
                 }
                 Column(

+ 9 - 0
app/src/main/java/io/legado/app/ui/main/bookshelf/BookshelfConfigSheet.kt

@@ -431,6 +431,15 @@ fun BookshelfConfigSheet(
                         Column(
                             verticalArrangement = Arrangement.spacedBy(8.dp)
                         ) {
+                            CompactSwitchSettingItem(
+                                title = stringResource(R.string.center_cover_vertically),
+                                description = stringResource(R.string.center_cover_vertically_description),
+                                checked = settings.bookshelfListCoverCenter,
+                                color = LegadoTheme.colorScheme.surface,
+                                onCheckedChange = { value ->
+                                    onUpdate { it.copy(bookshelfListCoverCenter = value) }
+                                }
+                            )
                             CompactSwitchSettingItem(
                                 title = stringResource(R.string.show_latest_chapter),
                                 checked = settings.bookshelfShowLatestChapter,

+ 2 - 0
app/src/main/res/values-zh-rCN/strings.xml

@@ -2330,6 +2330,8 @@
     <string name="night_card_bg_color">夜间卡片背景颜色</string>
     <string name="compact_details">精简详情</string>
     <string name="show_more_info">显示更多信息</string>
+    <string name="center_cover_vertically">封面垂直居中</string>
+    <string name="center_cover_vertically_description">关闭时,封面顶部对齐。</string>
     <string name="show_synopsis_below_content">简介显示在封面和信息下方</string>
     <string name="show_latest_chapter">显示最新章节</string>
     <string name="show_synopsis">显示简介</string>

+ 2 - 0
app/src/main/res/values-zh-rHK/strings.xml

@@ -2106,6 +2106,8 @@
     <string name="show_lines_synopsis">顯示簡介 %1$d 行</string>
     <string name="show_menu_icon">顯示選單項目圖標</string>
     <string name="show_more_info">顯示更多資訊</string>
+    <string name="center_cover_vertically">封面垂直置中</string>
+    <string name="center_cover_vertically_description">關閉時,封面頂部對齊。</string>
     <string name="show_synopsis_below_content">簡介顯示在封面和資訊下方</string>
     <string name="show_original">顯示原文</string>
     <string name="show_password">顯示密碼</string>

+ 2 - 0
app/src/main/res/values-zh-rTW/strings.xml

@@ -2244,6 +2244,8 @@
     <string name="night_card_bg_color">夜間卡片背景色</string>
     <string name="compact_details">精簡詳情</string>
     <string name="show_more_info">顯示更多資訊</string>
+    <string name="center_cover_vertically">封面垂直置中</string>
+    <string name="center_cover_vertically_description">關閉時,封面頂部對齊。</string>
     <string name="show_synopsis_below_content">簡介顯示在封面和資訊下方</string>
     <string name="show_latest_chapter">顯示最新章節</string>
     <string name="show_synopsis">顯示簡介</string>

+ 2 - 0
app/src/main/res/values/strings.xml

@@ -2354,6 +2354,8 @@
     <string name="night_card_bg_color">Night Card Background Color</string>
     <string name="compact_details">Compact Details</string>
     <string name="show_more_info">Show More Info</string>
+    <string name="center_cover_vertically">Center Cover Vertically</string>
+    <string name="center_cover_vertically_description">When disabled, the cover is aligned to the top.</string>
     <string name="show_synopsis_below_content">Show Synopsis Below Cover and Details</string>
     <string name="show_latest_chapter">Show Latest Chapter</string>
     <string name="show_synopsis">Show Synopsis</string>

+ 5 - 2
app/src/test/java/io/legado/app/data/repository/BookshelfSettingsMappingTest.kt

@@ -8,8 +8,8 @@ import org.junit.Test
 class BookshelfSettingsMappingTest {
 
     @Test
-    fun `Bookshelf 47 键写读映射逐字段对应`() {
-        assertEquals(47, BookshelfSettings().toPrefMap().size)
+    fun `Bookshelf 48 键写读映射逐字段对应`() {
+        assertEquals(48, BookshelfSettings().toPrefMap().size)
         bookshelfMappingSamples().forEach { expected ->
             assertEquals(expected.expectedPrefMap(), expected.toPrefMap())
             assertEquals(
@@ -66,6 +66,7 @@ private fun bookshelfMappingSamples(): List<BookshelfSettings> {
         bookshelfFolderLayoutListLandscape = 117,
         bookshelfGridLayout = 118,
         bookshelfLayoutCompact = false,
+        bookshelfListCoverCenter = false,
         bookshelfListIntroBelowContent = false,
         bookshelfShowDivider = false,
         bookshelfTitleSmallFont = false,
@@ -98,6 +99,7 @@ private fun bookshelfMappingSamples(): List<BookshelfSettings> {
         base.copy(showBookshelfFastScroller = true),
         base.copy(shouldShowExpandButton = true),
         base.copy(bookshelfLayoutCompact = true),
+        base.copy(bookshelfListCoverCenter = true),
         base.copy(bookshelfListIntroBelowContent = true),
         base.copy(bookshelfShowDivider = true),
         base.copy(bookshelfTitleSmallFont = true),
@@ -141,6 +143,7 @@ private fun BookshelfSettings.expectedPrefMap(): Map<String, Any?> = mapOf(
     PreferKey.bookshelfFolderLayoutListLandscape to bookshelfFolderLayoutListLandscape,
     PreferKey.bookshelfGridLayout to bookshelfGridLayout,
     PreferKey.bookshelfLayoutCompact to bookshelfLayoutCompact,
+    PreferKey.bookshelfListCoverCenter to bookshelfListCoverCenter,
     PreferKey.bookshelfListIntroBelowContent to bookshelfListIntroBelowContent,
     PreferKey.bookshelfShowDivider to bookshelfShowDivider,
     PreferKey.bookshelfTitleSmallFont to bookshelfTitleSmallFont,