HapeLee 1 год назад
Родитель
Сommit
4004b2e386
57 измененных файлов с 480 добавлено и 343 удалено
  1. 12 0
      app/src/main/AndroidManifest.xml
  2. BIN
      app/src/main/ic_launcher-playstore.png
  3. 1 6
      app/src/main/java/io/legato/kazusa/help/LauncherIconHelp.kt
  4. 5 0
      app/src/main/java/io/legato/kazusa/ui/book/changesource/ChangeBookSourceAdapter.kt
  5. 15 10
      app/src/main/java/io/legato/kazusa/ui/book/changesource/ChangeBookSourceDialog.kt
  6. 3 3
      app/src/main/java/io/legato/kazusa/ui/book/manga/ReadMangaActivity.kt
  7. 0 1
      app/src/main/java/io/legato/kazusa/ui/book/manga/config/MangaColorFilterDialog.kt
  8. 60 0
      app/src/main/java/io/legato/kazusa/ui/book/manga/config/MangaFooterSettingDialog.kt
  9. 0 59
      app/src/main/java/io/legato/kazusa/ui/book/manga/config/MangaScrollModeDialog.kt
  10. 0 4
      app/src/main/res/anim/popup_enter.xml
  11. 0 6
      app/src/main/res/drawable/bg_bottom_sheet_handle.xml
  12. 38 0
      app/src/main/res/drawable/ic_launcher_foreground.xml
  13. 25 26
      app/src/main/res/layout/activity_about.xml
  14. 78 5
      app/src/main/res/layout/dialog_book_change_source.xml
  15. 5 7
      app/src/main/res/layout/dialog_cover_rule_config.xml
  16. 9 9
      app/src/main/res/layout/dialog_manga_color_filter.xml
  17. 99 19
      app/src/main/res/layout/dialog_manga_footer_setting.xml
  18. 1 80
      app/src/main/res/layout/dialog_manga_scroll_mode.xml
  19. 5 4
      app/src/main/res/layout/dialog_read_book_style.xml
  20. 5 7
      app/src/main/res/layout/dialog_read_padding.xml
  21. 5 8
      app/src/main/res/layout/dialog_text_view.xml
  22. 5 7
      app/src/main/res/layout/dialog_tip_config.xml
  23. 5 7
      app/src/main/res/layout/dialog_update.xml
  24. 72 63
      app/src/main/res/layout/item_change_source.xml
  25. 2 3
      app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
  26. 5 0
      app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
  27. 6 0
      app/src/main/res/mipmap-anydpi-v26/launcher0.xml
  28. BIN
      app/src/main/res/mipmap-hdpi/ic_launcher.png
  29. BIN
      app/src/main/res/mipmap-hdpi/ic_launcher.webp
  30. BIN
      app/src/main/res/mipmap-hdpi/ic_launcher_round.webp
  31. BIN
      app/src/main/res/mipmap-mdpi/ic_launcher.png
  32. BIN
      app/src/main/res/mipmap-mdpi/ic_launcher.webp
  33. BIN
      app/src/main/res/mipmap-mdpi/ic_launcher_round.webp
  34. BIN
      app/src/main/res/mipmap-xhdpi/ic_launcher.png
  35. BIN
      app/src/main/res/mipmap-xhdpi/ic_launcher.webp
  36. BIN
      app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp
  37. BIN
      app/src/main/res/mipmap-xxhdpi/ic_launcher.png
  38. BIN
      app/src/main/res/mipmap-xxhdpi/ic_launcher.webp
  39. BIN
      app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp
  40. BIN
      app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
  41. BIN
      app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp
  42. BIN
      app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp
  43. 1 0
      app/src/main/res/values-es-rES/arrays.xml
  44. 1 1
      app/src/main/res/values-es-rES/strings.xml
  45. 1 1
      app/src/main/res/values-ja-rJP/strings.xml
  46. 1 0
      app/src/main/res/values-pt-rBR/arrays.xml
  47. 1 1
      app/src/main/res/values-pt-rBR/strings.xml
  48. 1 1
      app/src/main/res/values-vi/strings.xml
  49. 1 1
      app/src/main/res/values-zh-rHK/strings.xml
  50. 1 0
      app/src/main/res/values-zh-rTW/arrays.xml
  51. 1 1
      app/src/main/res/values-zh-rTW/strings.xml
  52. 1 0
      app/src/main/res/values-zh/arrays.xml
  53. 2 2
      app/src/main/res/values-zh/strings.xml
  54. 1 0
      app/src/main/res/values/array_values.xml
  55. 1 0
      app/src/main/res/values/arrays.xml
  56. 4 0
      app/src/main/res/values/ic_launcher_background.xml
  57. 1 1
      app/src/main/res/values/strings.xml

+ 12 - 0
app/src/main/AndroidManifest.xml

@@ -32,6 +32,18 @@
         android:supportsRtl="true"
         android:theme="@style/Base.AppTheme"
         tools:ignore="AllowBackup,GoogleAppIndexingWarning,UnusedAttribute">
+        <!-- 图标0 -->
+        <activity-alias
+            android:name=".Launcher0"
+            android:enabled="false"
+            android:exported="true"
+            android:icon="@mipmap/launcher0"
+            android:targetActivity=".ui.main.MainActivity">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity-alias>
         <!-- 图标1 -->
         <activity-alias
             android:name=".Launcher1"

BIN
app/src/main/ic_launcher-playstore.png


+ 1 - 6
app/src/main/java/io/legato/kazusa/help/LauncherIconHelp.kt

@@ -2,9 +2,7 @@ package io.legato.kazusa.help
 
 import android.content.ComponentName
 import android.content.pm.PackageManager
-import android.os.Build
 import io.legato.kazusa.R
-import io.legato.kazusa.ui.welcome.*
 import io.legato.kazusa.utils.toastOnUi
 import splitties.init.appCtx
 
@@ -15,6 +13,7 @@ import splitties.init.appCtx
 object LauncherIconHelp {
     private val packageManager: PackageManager = appCtx.packageManager
     private val componentNames = arrayListOf(
+        ComponentName(appCtx.packageName, "${appCtx.packageName}.Launcher0"),
         ComponentName(appCtx.packageName, "${appCtx.packageName}.Launcher1"),
         ComponentName(appCtx.packageName, "${appCtx.packageName}.Launcher2"),
         ComponentName(appCtx.packageName, "${appCtx.packageName}.Launcher3"),
@@ -31,10 +30,6 @@ object LauncherIconHelp {
 
     fun changeIcon(icon: String?) {
         if (icon.isNullOrEmpty()) return
-        if (Build.VERSION.SDK_INT < 26) {
-            appCtx.toastOnUi(R.string.change_icon_error)
-            return
-        }
 
         try {
             // 首先禁用主Activity的启动器intent

+ 5 - 0
app/src/main/java/io/legato/kazusa/ui/book/changesource/ChangeBookSourceAdapter.kt

@@ -18,6 +18,7 @@ import io.legato.kazusa.lib.dialogs.alert
 import io.legato.kazusa.utils.getCompatColor
 import io.legato.kazusa.utils.gone
 import io.legato.kazusa.utils.invisible
+import io.legato.kazusa.utils.themeColor
 import io.legato.kazusa.utils.visible
 import splitties.init.appCtx
 import splitties.views.onLongClick
@@ -62,8 +63,10 @@ class ChangeBookSourceAdapter(
                 tvRespondTime.text = context.getString(R.string.respondTime, item.respondTime)
                 if (callBack.oldBookUrl == item.bookUrl) {
                     ivChecked.visible()
+                    root.setBackgroundColor(context.themeColor(com.google.android.material.R.attr.colorSurfaceContainerHighest))
                 } else {
                     ivChecked.invisible()
+                    root.setBackgroundColor(context.themeColor(com.google.android.material.R.attr.colorSurfaceContainerLow))
                 }
             } else {
                 for (i in payloads.indices) {
@@ -74,8 +77,10 @@ class ChangeBookSourceAdapter(
                             "latest" -> tvLast.text = item.getDisplayLastChapterTitle()
                             "upCurSource" -> if (callBack.oldBookUrl == item.bookUrl) {
                                 ivChecked.visible()
+                                root.setBackgroundColor(context.themeColor(com.google.android.material.R.attr.colorSurfaceContainer))
                             } else {
                                 ivChecked.invisible()
+                                root.setBackgroundColor(context.themeColor(com.google.android.material.R.attr.colorSurfaceContainerLow))
                             }
                         }
                     }

+ 15 - 10
app/src/main/java/io/legato/kazusa/ui/book/changesource/ChangeBookSourceDialog.kt

@@ -2,6 +2,7 @@ package io.legato.kazusa.ui.book.changesource
 
 //import io.legado.app.lib.theme.getPrimaryTextColor
 //import io.legado.app.lib.theme.primaryColor
+import android.annotation.SuppressLint
 import android.os.Bundle
 import android.view.Menu
 import android.view.MenuItem
@@ -41,6 +42,7 @@ import io.legato.kazusa.utils.observeEvent
 import io.legato.kazusa.utils.startActivity
 import io.legato.kazusa.utils.transaction
 import io.legato.kazusa.utils.viewbindingdelegate.viewBinding
+import io.legato.kazusa.utils.visible
 import kotlinx.coroutines.Dispatchers.IO
 import kotlinx.coroutines.delay
 import kotlinx.coroutines.flow.conflate
@@ -205,9 +207,11 @@ class ChangeBookSourceDialog() : BaseBottomSheetDialogFragment(R.layout.dialog_b
         }
     }
 
+    @SuppressLint("SetTextI18n")
     private fun initLiveData() {
         viewModel.searchStateData.observe(viewLifecycleOwner) {
             binding.refreshProgressBar.isVisible = it
+
             if (it) {
                 startStopMenuItem?.let { item ->
                     item.setIcon(R.drawable.ic_stop_black_24dp)
@@ -226,7 +230,7 @@ class ChangeBookSourceDialog() : BaseBottomSheetDialogFragment(R.layout.dialog_b
                 viewModel.searchDataFlow.conflate().collect {
                     adapter.setItems(it)
 
-                    binding.loadingIndicator.isVisible = it.isEmpty()
+                    binding.tvEmptyMsg.isVisible = it.isEmpty()
                     binding.recyclerView.isVisible = it.isNotEmpty()
 
                     delay(1000)
@@ -239,15 +243,16 @@ class ChangeBookSourceDialog() : BaseBottomSheetDialogFragment(R.layout.dialog_b
                 viewModel.changeSourceProgress
                     .drop(1)
                     .collect { (count, name) ->
-                        binding.tvDur.text =
-                            getString(
-                                R.string.change_source_progress,
-                                adapter.itemCount,
-                                count,
-                                viewModel.totalSourceCount,
-                                name
-                            )
-                        delay(500)
+                        val total = viewModel.totalSourceCount
+                        val progress = if (total > 0) (count * 100 / total) else 0
+
+                        binding.refreshProgressBar.isIndeterminate = false
+                        binding.refreshProgressBar.progress = progress
+                        binding.llInfo.visible()
+
+                        binding.tvProgress.text = "$count / $total"
+                        binding.tvResult.text =
+                            getString(R.string.change_source_progress, adapter.itemCount)
                     }
             }
         }

+ 3 - 3
app/src/main/java/io/legato/kazusa/ui/book/manga/ReadMangaActivity.kt

@@ -549,6 +549,8 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
 
     override fun showFooterConfig() {
         showDialogFragment(MangaFooterSettingDialog().apply {
+            initialScrollMode = viewModel.getEffectiveScrollMode()
+            initialWebtoonSidePadding = viewModel.getEffectiveWebtoonSidePadding()
             callback = this@ReadMangaActivity
         })
     }
@@ -565,8 +567,6 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
 
     override fun showScrollModeDialog() {
         showDialogFragment(MangaScrollModeDialog().apply {
-            initialScrollMode = viewModel.getEffectiveScrollMode()
-            initialWebtoonSidePadding = viewModel.getEffectiveWebtoonSidePadding()
             initialAutoPageEnabled = enableScroll
             callback = this@ReadMangaActivity
         })
@@ -574,7 +574,7 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
 
     //漫画模式
     override fun onScrollModeChanged(mode: Int) {
-        //AppConfig.mangaScrollMode = mode
+        onAutoPageToggle(false)
         viewModel.updateReadConfig {
             mangaScrollMode = mode
         }

+ 0 - 1
app/src/main/java/io/legato/kazusa/ui/book/manga/config/MangaColorFilterDialog.kt

@@ -28,7 +28,6 @@ class MangaColorFilterDialog : BaseBottomSheetDialogFragment(R.layout.dialog_man
     override fun onStart() {
         super.onStart()
         dialog?.window?.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND)
-//        setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
     }
 
     override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {

+ 60 - 0
app/src/main/java/io/legato/kazusa/ui/book/manga/config/MangaFooterSettingDialog.kt

@@ -4,6 +4,7 @@ import android.content.DialogInterface
 import android.os.Bundle
 import android.view.Gravity
 import android.view.View
+import com.google.android.material.chip.Chip
 import io.legato.kazusa.R
 import io.legato.kazusa.base.BaseBottomSheetDialogFragment
 import io.legato.kazusa.constant.EventBus
@@ -21,6 +22,9 @@ class MangaFooterSettingDialog :
     val config = GSON.fromJsonObject<MangaFooterConfig>(AppConfig.mangaFooterConfig).getOrNull()
         ?: MangaFooterConfig()
 
+    var initialWebtoonSidePadding: Int = 0
+    var initialScrollMode: Int = MangaScrollMode.PAGE_RIGHT_TO_LEFT
+
     var callback: Callback? = null
 
     private val binding by viewBinding(DialogMangaFooterSettingBinding::bind)
@@ -32,6 +36,56 @@ class MangaFooterSettingDialog :
 
     override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
 
+        binding.chipGroupScrollMode.removeAllViews()
+
+        MangaScrollMode.ALL.forEach { mode ->
+            binding.chipGroupScrollMode.addView(Chip(requireContext()).apply {
+                text = MangaScrollMode.labelOf(mode)
+                isCheckable = true
+                isChecked = (mode == initialScrollMode)
+
+                setOnClickListener {
+                    callback?.onScrollModeChanged(mode)
+                }
+            })
+        }
+
+        binding.scvPadding.apply {
+            valueFormat = { "$it %" }
+            progress = initialWebtoonSidePadding
+            onChanged = { newValue ->
+                callback?.upSidePadding(newValue)
+            }
+        }
+
+        binding.checkboxDisableClickScroll.apply {
+            isChecked = AppConfig.disableClickScroll
+            setOnCheckedChangeListener { _, isChecked ->
+                callback?.onClickScrollDisabledChanged(isChecked)
+            }
+        }
+
+        binding.checkboxDisableMangaScale.apply {
+            isChecked = AppConfig.disableMangaScale
+            setOnCheckedChangeListener { _, isChecked ->
+                callback?.onMangaScaleDisabledChanged(isChecked)
+            }
+        }
+
+        binding.checkboxHideMangaTitle.apply {
+            isChecked = AppConfig.hideMangaTitle
+            setOnCheckedChangeListener { _, isChecked ->
+                callback?.onHideMangaTitleChanged(isChecked)
+            }
+        }
+
+        binding.checkboxVolumeKeyPage.apply {
+            isChecked = AppConfig.MangaVolumeKeyPage
+            setOnCheckedChangeListener { _, isChecked ->
+                callback?.onVolumeKeyPageChanged(isChecked)
+            }
+        }
+
         binding.cbChapterLabel.run {
             isChecked = !config.hideChapterLabel
             setOnCheckedChangeListener { _, isChecked ->
@@ -187,6 +241,12 @@ class MangaFooterSettingDialog :
         fun onAutoPageSpeedChanged(speed: Int)
         fun showColorFilterConfig()
         fun showClickConfig()
+        fun onScrollModeChanged(mode: Int)
+        fun upSidePadding(padding: Int)
+        fun onClickScrollDisabledChanged(disabled: Boolean)
+        fun onMangaScaleDisabledChanged(disabled: Boolean)
+        fun onHideMangaTitleChanged(hide: Boolean)
+        fun onVolumeKeyPageChanged(enable: Boolean)
     }
 
 }

+ 0 - 59
app/src/main/java/io/legato/kazusa/ui/book/manga/config/MangaScrollModeDialog.kt

@@ -2,7 +2,6 @@ package io.legato.kazusa.ui.book.manga.config
 
 import android.os.Bundle
 import android.view.View
-import com.google.android.material.chip.Chip
 import io.legato.kazusa.R
 import io.legato.kazusa.base.BaseBottomSheetDialogFragment
 import io.legato.kazusa.databinding.DialogMangaScrollModeBinding
@@ -14,8 +13,6 @@ class MangaScrollModeDialog : BaseBottomSheetDialogFragment(R.layout.dialog_mang
     private val binding by viewBinding(DialogMangaScrollModeBinding::bind)
 
     var initialAutoPageEnabled: Boolean = false
-    var initialWebtoonSidePadding: Int = 0
-    var initialScrollMode: Int = MangaScrollMode.PAGE_RIGHT_TO_LEFT
 
     var callback: Callback? = null
 
@@ -24,20 +21,6 @@ class MangaScrollModeDialog : BaseBottomSheetDialogFragment(R.layout.dialog_mang
     }
 
     private fun initView() {
-        binding.chipGroupScrollMode.removeAllViews()
-
-        MangaScrollMode.ALL.forEach { mode ->
-            binding.chipGroupScrollMode.addView(Chip(requireContext()).apply {
-                text = MangaScrollMode.labelOf(mode)
-                isCheckable = true
-                isChecked = (mode == initialScrollMode)
-
-                setOnClickListener {
-                    callback?.onScrollModeChanged(mode)
-                    binding.chipAutoPage.isChecked = false
-                }
-            })
-        }
 
         binding.chipAutoPage.run {
             isChecked = initialAutoPageEnabled
@@ -47,42 +30,6 @@ class MangaScrollModeDialog : BaseBottomSheetDialogFragment(R.layout.dialog_mang
             }
         }
 
-        binding.checkboxDisableClickScroll.apply {
-            isChecked = AppConfig.disableClickScroll
-            setOnCheckedChangeListener { _, isChecked ->
-                callback?.onClickScrollDisabledChanged(isChecked)
-            }
-        }
-
-        binding.checkboxDisableMangaScale.apply {
-            isChecked = AppConfig.disableMangaScale
-            setOnCheckedChangeListener { _, isChecked ->
-                callback?.onMangaScaleDisabledChanged(isChecked)
-            }
-        }
-
-        binding.checkboxHideMangaTitle.apply {
-            isChecked = AppConfig.hideMangaTitle
-            setOnCheckedChangeListener { _, isChecked ->
-                callback?.onHideMangaTitleChanged(isChecked)
-            }
-        }
-
-        binding.checkboxVolumeKeyPage.apply {
-            isChecked = AppConfig.MangaVolumeKeyPage
-            setOnCheckedChangeListener { _, isChecked ->
-                callback?.onVolumeKeyPageChanged(isChecked)
-            }
-        }
-
-        binding.scvPadding.apply {
-            valueFormat = { "$it %" }
-            progress = initialWebtoonSidePadding
-            onChanged = { newValue ->
-                callback?.upSidePadding(newValue)
-            }
-        }
-
         initAutoPageSpeed(initialAutoPageEnabled)
     }
 
@@ -101,12 +48,6 @@ class MangaScrollModeDialog : BaseBottomSheetDialogFragment(R.layout.dialog_mang
     interface Callback {
         fun onAutoPageToggle(enable: Boolean)
         fun onAutoPageSpeedChanged(speed: Int)
-        fun onScrollModeChanged(mode: Int)
-        fun onClickScrollDisabledChanged(disabled: Boolean)
-        fun onMangaScaleDisabledChanged(disabled: Boolean)
-        fun upSidePadding(padding: Int)
-        fun onHideMangaTitleChanged(hide: Boolean)
-        fun onVolumeKeyPageChanged(enable: Boolean)
     }
 
 }

+ 0 - 4
app/src/main/res/anim/popup_enter.xml

@@ -1,10 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <set xmlns:android="http://schemas.android.com/apk/res/android"
     android:interpolator="@android:interpolator/decelerate_cubic">
-    <translate
-        android:duration="240"
-        android:toYDelta="0%"
-        android:fromYDelta="8%" />
     <alpha
         android:fromAlpha="0.0"
         android:toAlpha="1.0"

+ 0 - 6
app/src/main/res/drawable/bg_bottom_sheet_handle.xml

@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<shape xmlns:android="http://schemas.android.com/apk/res/android"
-    android:shape="rectangle">
-    <corners android:radius="2dp" />
-    <solid android:color="?attr/colorOnSurfaceVariant" />
-</shape>

+ 38 - 0
app/src/main/res/drawable/ic_launcher_foreground.xml

@@ -0,0 +1,38 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="108dp"
+    android:height="108dp"
+    android:viewportWidth="370"
+    android:viewportHeight="370">
+    <group
+        android:scaleX="0.5011111"
+        android:scaleY="0.5011111"
+        android:translateX="92.29444"
+        android:translateY="92.29444">
+        <path
+            android:fillColor="#EAEAEA"
+            android:pathData="M185,185m-155,0a155,155 0,1 1,310 0a155,155 0,1 1,-310 0" />
+        <path
+            android:fillColor="#656688"
+            android:pathData="M282.03,102.39C255.76,125.1 231.53,164.6 228.16,170.19C227.9,170.63 227.82,171.11 227.95,171.6C233,190.65 270.65,236.1 288.9,256.43C289.48,257.08 290.39,257.25 291.18,256.9L310.69,248.17C311.4,247.85 311.86,247.13 311.87,246.35C312.84,165.86 297.04,120.01 290.34,104.26C288.9,100.89 284.8,99.99 282.03,102.39Z" />
+        <path
+            android:fillColor="#656688"
+            android:pathData="M76.9,225.49C70.96,199.23 62.48,141.34 71.93,110.92C72.84,107.99 75.98,106.56 78.89,107.54C92.9,112.25 133.46,126.86 172.04,150.18C172.04,150.18 202.32,146.09 234.97,157.66C235.65,157.9 236.39,157.79 236.98,157.37C244.43,152.05 296.56,121.77 328.3,290.06C328.41,290.62 328.33,291.15 327.98,291.59C319.96,301.61 215.17,426.64 64.88,314.76C64.35,314.36 64.02,313.69 64.06,313.02C67.07,261.9 76.9,225.49 76.9,225.49Z" />
+        <path
+            android:fillColor="#554C64"
+            android:pathData="M281.66,102.07C254.7,125.39 231.56,164.87 228.37,170.41C228.13,170.84 228.05,171.32 228.18,171.79C232.93,190.12 265.7,230.56 284.23,251.64C285.37,252.94 287.49,252.24 287.67,250.51C293.77,189.2 291.81,129.68 290.62,106.11C290.39,101.44 285.19,99.02 281.66,102.07Z" />
+        <path
+            android:fillColor="#554C64"
+            android:pathData="M70.02,114.52C63.38,146.6 71.36,200.97 76.9,225.49C89.13,190.98 113.72,172.15 126.41,164.37L126.41,164.37C129.34,162.58 130.8,161.68 131.31,160.71C131.79,159.79 131.9,158.94 131.66,157.93C131.41,156.86 130.31,155.72 128.1,153.43C107.55,132.13 92.03,118.26 82.89,110.55C80.21,108.29 78.86,107.16 76.95,107.01C75.5,106.89 73.46,107.6 72.39,108.58C70.98,109.89 70.66,111.43 70.02,114.52Z" />
+        <path
+            android:fillColor="#EAEAEA"
+            android:pathData="M115,277.33V237.67C115,224.78 135,224.78 135,237.67V277.33C135,290.22 115,290.22 115,277.33Z" />
+        <path
+            android:fillColor="#EAEAEA"
+            android:pathData="M176,277.33V237.67C176,224.78 196,224.78 196,237.67V277.33C196,290.22 176,290.22 176,277.33Z" />
+        <path
+            android:fillColor="#00000000"
+            android:pathData="M185,185m-170,0a170,170 0,1 1,340 0a170,170 0,1 1,-340 0"
+            android:strokeWidth="30"
+            android:strokeColor="#D2487D" />
+    </group>
+</vector>

+ 25 - 26
app/src/main/res/layout/activity_about.xml

@@ -45,20 +45,15 @@
             android:orientation="vertical"
             app:layout_behavior="@string/appbar_scrolling_view_behavior">
 
-            <com.google.android.material.card.MaterialCardView
+            <ImageView
                 android:id="@+id/cd_about"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:layout_marginStart="16dp"
+                android:layout_width="160dp"
+                android:layout_height="120dp"
+                android:scaleType="centerCrop"
                 app:layout_constraintStart_toStartOf="parent"
+                android:src="@drawable/ic_launcher_foreground"
                 app:layout_constraintTop_toTopOf="parent"
-                app:strokeWidth="0dp">
-
-                <ImageView
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:src="@mipmap/ic_launcher" />
-            </com.google.android.material.card.MaterialCardView>
+                app:layout_constraintEnd_toEndOf="parent" />
 
             <TextView
                 android:id="@+id/tv_name"
@@ -69,18 +64,19 @@
                 android:layout_marginEnd="16dp"
                 android:textSize="24sp"
                 android:textStyle="bold"
-                app:layout_constraintStart_toEndOf="@id/cd_about"
-                app:layout_constraintTop_toTopOf="@id/cd_about" />
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toBottomOf="@id/cd_about" />
 
             <com.google.android.material.card.MaterialCardView
+                android:id="@+id/cd_ver"
                 android:layout_width="wrap_content"
                 android:layout_height="match_parent"
-                android:layout_marginStart="8dp"
-                android:layout_marginTop="2dp"
+                android:layout_marginTop="8dp"
                 app:cardBackgroundColor="?attr/colorTertiaryContainer"
-                app:layout_constraintBottom_toBottomOf="@id/tv_name"
-                app:layout_constraintStart_toEndOf="@id/tv_name"
-                app:layout_constraintTop_toTopOf="@id/tv_name"
+                app:layout_constraintEnd_toEndOf="parent"
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toBottomOf="@id/tv_name"
                 app:strokeWidth="0dp">
 
                 <TextView
@@ -92,29 +88,31 @@
                     android:text="@string/text"
                     android:textColor="?attr/colorTertiary"
                     android:textSize="10sp"
-                    android:textStyle="bold" />
+                    android:textStyle="bold"
+                    tools:ignore="SmallSp" />
             </com.google.android.material.card.MaterialCardView>
 
             <TextView
-                android:layout_width="0dp"
+                android:id="@+id/tv_detail"
+                android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
-                android:layout_marginStart="8dp"
-                android:layout_marginEnd="16dp"
+                android:layout_marginTop="8dp"
                 android:text="@string/about_description"
                 android:textSize="14sp"
+                android:textStyle="bold"
                 app:layout_constraintEnd_toEndOf="parent"
-                app:layout_constraintStart_toEndOf="@id/cd_about"
-                app:layout_constraintTop_toBottomOf="@id/tv_name" />
+                app:layout_constraintStart_toStartOf="parent"
+                app:layout_constraintTop_toBottomOf="@id/cd_ver" />
 
             <LinearLayout
                 android:id="@+id/ll_btn"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:layout_marginHorizontal="16dp"
-                android:layout_marginVertical="8dp"
+                android:layout_marginTop="16dp"
                 app:layout_constraintEnd_toEndOf="parent"
                 app:layout_constraintStart_toStartOf="parent"
-                app:layout_constraintTop_toBottomOf="@id/cd_about">
+                app:layout_constraintTop_toBottomOf="@id/tv_detail">
 
                 <com.google.android.material.card.MaterialCardView
                     android:layout_width="8dp"
@@ -157,6 +155,7 @@
                 android:id="@+id/ll_contributors"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
+                android:layout_marginTop="8dp"
                 android:background="?attr/selectableItemBackground"
                 android:clickable="true"
                 android:focusable="true"

+ 78 - 5
app/src/main/res/layout/dialog_book_change_source.xml

@@ -20,16 +20,88 @@
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:indeterminate="true"
+        android:visibility="gone"
         app:layout_constraintTop_toBottomOf="@+id/tool_bar" />
 
-    <com.google.android.material.loadingindicator.LoadingIndicator
-        android:id="@+id/loading_indicator"
-        style="@style/Widget.Material3.LoadingIndicator.Contained"
+    <LinearLayout
+        android:id="@+id/ll_info"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginVertical="4dp"
+        android:layout_marginStart="16dp"
+        android:orientation="horizontal"
+        android:visibility="gone">
+
+        <com.google.android.material.card.MaterialCardView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:scaleType="centerCrop"
+            app:cardBackgroundColor="?attr/colorTertiaryContainer"
+            app:cardCornerRadius="4dp"
+            app:strokeWidth="0dp">
+
+            <TextView
+                android:id="@+id/tv_progress"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:paddingHorizontal="4dp"
+                android:paddingVertical="2dp"
+                android:text="@string/text"
+                android:textColor="?attr/colorTertiary"
+                android:textSize="11sp"
+                android:textStyle="bold"
+                tools:ignore="SmallSp" />
+
+        </com.google.android.material.card.MaterialCardView>
+
+        <com.google.android.material.card.MaterialCardView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="4dp"
+            android:scaleType="centerCrop"
+            app:cardBackgroundColor="?attr/colorPrimary"
+            app:cardCornerRadius="4dp"
+            app:strokeWidth="0dp">
+
+            <TextView
+                android:id="@+id/tv_result"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:paddingHorizontal="4dp"
+                android:paddingVertical="2dp"
+                android:text="@string/text"
+                android:textColor="?attr/colorOnPrimary"
+                android:textSize="11sp"
+                android:textStyle="bold"
+                tools:ignore="SmallSp" />
+
+        </com.google.android.material.card.MaterialCardView>
+
+    </LinearLayout>
+
+
+    <LinearLayout
+        android:id="@+id/tv_empty_msg"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
+        android:layout_margin="16dp"
+        android:gravity="center"
         android:layout_gravity="center"
-        android:layout_margin="32dp"
-        android:visibility="visible" />
+        android:orientation="vertical"
+        android:visibility="gone">
+
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="(๑`^´๑)"
+            android:textSize="24sp" />
+
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_margin="8dp"
+            android:text="还没有源!" />
+    </LinearLayout>
 
     <androidx.recyclerview.widget.RecyclerView
         android:id="@+id/recycler_view"
@@ -52,6 +124,7 @@
             android:layout_height="match_parent"
             android:layout_weight="1"
             android:background="?attr/selectableItemBackgroundBorderless"
+            android:text="@string/text"
             android:ellipsize="end"
             android:gravity="center_vertical"
             android:singleLine="true"

+ 5 - 7
app/src/main/res/layout/dialog_cover_rule_config.xml

@@ -11,15 +11,13 @@
         android:layout_height="wrap_content"
         android:orientation="vertical"
         android:gravity="center"
-        android:paddingVertical="16dp"
+        android:paddingBottom="16dp"
         android:paddingHorizontal="16dp">
 
-        <View
-            android:layout_width="36dp"
-            android:layout_height="4dp"
-            android:layout_gravity="center_horizontal"
-            android:background="@drawable/bg_bottom_sheet_handle"
-            android:layout_marginBottom="16dp" />
+        <com.google.android.material.bottomsheet.BottomSheetDragHandleView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center_horizontal" />
 
         <TextView
             android:id="@+id/bottom_sheet_title"

+ 9 - 9
app/src/main/res/layout/dialog_manga_color_filter.xml

@@ -4,7 +4,7 @@
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:paddingHorizontal="16dp"
-    android:paddingVertical="8dp">
+    android:paddingBottom="8dp">
 
     <LinearLayout
         android:layout_width="match_parent"
@@ -17,14 +17,12 @@
             android:gravity="center"
             android:orientation="vertical"
             android:paddingHorizontal="16dp"
-            android:paddingVertical="8dp">
+            android:paddingBottom="8dp">
 
-            <View
-                android:layout_width="36dp"
-                android:layout_height="4dp"
-                android:layout_gravity="center_horizontal"
-                android:layout_marginBottom="16dp"
-                android:background="@drawable/bg_bottom_sheet_handle" />
+            <com.google.android.material.bottomsheet.BottomSheetDragHandleView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_gravity="center_horizontal" />
 
             <TextView
                 android:id="@+id/bottom_sheet_title"
@@ -57,6 +55,7 @@
                 android:id="@+id/chip_autoBrightness"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
+                android:checkable="true"
                 android:text="跟随系统" />
         </LinearLayout>
 
@@ -71,6 +70,7 @@
                 android:id="@+id/cp_epaper"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
+                android:checkable="true"
                 android:layout_marginEnd="8dp"
                 android:text="@string/manga_epaper" />
 
@@ -78,9 +78,9 @@
                 android:id="@+id/cp_enableGray"
                 android:layout_width="wrap_content"
                 android:layout_height="wrap_content"
+                android:checkable="true"
                 android:text="灰度" />
 
-
             <View
                 android:layout_width="0dp"
                 android:layout_height="match_parent"

+ 99 - 19
app/src/main/res/layout/dialog_manga_footer_setting.xml

@@ -3,8 +3,7 @@
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     xmlns:app="http://schemas.android.com/apk/res-auto"
-    android:paddingHorizontal="16dp"
-    android:paddingVertical="8dp">
+    android:paddingBottom="8dp">
 
     <LinearLayout
         android:id="@+id/root_view"
@@ -18,14 +17,12 @@
             android:gravity="center"
             android:orientation="vertical"
             android:paddingHorizontal="16dp"
-            android:paddingVertical="8dp">
+            android:paddingBottom="8dp">
 
-            <View
-                android:layout_width="36dp"
-                android:layout_height="4dp"
-                android:layout_gravity="center_horizontal"
-                android:layout_marginBottom="16dp"
-                android:background="@drawable/bg_bottom_sheet_handle" />
+            <com.google.android.material.bottomsheet.BottomSheetDragHandleView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_gravity="center_horizontal" />
 
             <TextView
                 android:id="@+id/bottom_sheet_title"
@@ -37,9 +34,52 @@
 
         </LinearLayout>
 
+        <TextView
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:paddingHorizontal="16dp"
+            android:paddingVertical="8dp"
+            android:text="阅读模式"
+            android:textStyle="bold" />
+
+        <com.google.android.material.chip.ChipGroup
+            android:id="@+id/chipGroupScrollMode"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="horizontal"
+            android:paddingHorizontal="16dp"
+            android:singleLine="false"
+            app:chipSpacingVertical="0dp"
+            app:selectionRequired="true"
+            app:singleSelection="true" />
+
+        <LinearLayout
+            android:id="@+id/ll_webtoon"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="vertical">
+
+            <TextView
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:paddingHorizontal="16dp"
+                android:paddingTop="8dp"
+                android:text="条漫"
+                android:textStyle="bold" />
+
+            <io.legato.kazusa.ui.widget.DetailSeekBar
+                android:id="@+id/scv_Padding"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                app:max="30"
+                app:title="侧边留白" />
+
+        </LinearLayout>
+
         <LinearLayout
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
+            android:paddingHorizontal="16dp"
             android:gravity="center_vertical"
             android:orientation="horizontal">
 
@@ -95,6 +135,7 @@
             android:layout_height="wrap_content"
             android:layout_marginVertical="8dp"
             app:cardBackgroundColor="?attr/colorSurfaceVariant"
+            android:layout_marginHorizontal="16dp"
             app:cardCornerRadius="8dp"
             app:strokeWidth="0dp">
 
@@ -107,7 +148,8 @@
 
         <com.google.android.material.chip.ChipGroup
             android:layout_width="match_parent"
-            android:layout_height="wrap_content">
+            android:layout_height="wrap_content"
+            android:paddingHorizontal="16dp">
 
             <com.google.android.material.chip.Chip
                 android:id="@+id/cb_chapter_name"
@@ -134,7 +176,8 @@
 
         <com.google.android.material.chip.ChipGroup
             android:layout_width="wrap_content"
-            android:layout_height="wrap_content">
+            android:layout_height="wrap_content"
+            android:paddingHorizontal="16dp">
 
             <com.google.android.material.chip.Chip
                 android:id="@+id/cb_chapter_label"
@@ -165,7 +208,43 @@
                 android:text="2.1%" />
         </com.google.android.material.chip.ChipGroup>
 
-        <com.google.android.material.button.MaterialButton
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="vertical"
+            android:paddingHorizontal="12dp">
+
+            <com.google.android.material.checkbox.MaterialCheckBox
+                android:id="@+id/checkboxDisableClickScroll"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:text="@string/disable_manga_click_scroll" />
+
+            <com.google.android.material.checkbox.MaterialCheckBox
+                android:id="@+id/checkboxDisableMangaScale"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:text="@string/disable_manga_scale" />
+
+            <com.google.android.material.checkbox.MaterialCheckBox
+                android:id="@+id/checkboxHideMangaTitle"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:text="@string/hide_manga_title" />
+
+            <com.google.android.material.checkbox.MaterialCheckBox
+                android:id="@+id/checkboxVolumeKeyPage"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:text="@string/volume_key_page" />
+        </LinearLayout>
+
+        <com.google.android.material.button.MaterialButtonGroup
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:paddingHorizontal="16dp">
+
+            <com.google.android.material.button.MaterialButton
             android:id="@+id/btn_color_filter"
             style="@style/Widget.Material3Expressive.Button.TonalButton"
             app:icon="@drawable/ic_filter"
@@ -173,14 +252,15 @@
             android:layout_height="wrap_content"
             android:text="@string/manga_color_filter" />
 
-        <com.google.android.material.button.MaterialButton
-            android:id="@+id/btn_click_set"
-            style="@style/Widget.Material3Expressive.Button.TonalButton"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:text="@string/click_regional_config"
-            app:icon="@drawable/ic_filter" />
+            <com.google.android.material.button.MaterialButton
+                android:id="@+id/btn_click_set"
+                style="@style/Widget.Material3Expressive.Button.TonalButton"
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:text="@string/click_regional_config"
+                app:icon="@drawable/ic_filter" />
 
+        </com.google.android.material.button.MaterialButtonGroup>
 
     </LinearLayout>
 

+ 1 - 80
app/src/main/res/layout/dialog_manga_scroll_mode.xml

@@ -24,7 +24,7 @@
             android:id="@+id/bottom_sheet_title"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
-            android:text="漫画设置"
+            android:text="自动阅读"
             android:textSize="18sp"
             android:textStyle="bold" />
 
@@ -36,30 +36,6 @@
         android:orientation="vertical"
         android:paddingHorizontal="16dp">
 
-        <TextView
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:paddingVertical="8dp"
-            android:text="阅读模式"
-            android:textStyle="bold" />
-
-        <com.google.android.material.chip.ChipGroup
-            android:id="@+id/chipGroupScrollMode"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:orientation="horizontal"
-            android:singleLine="false"
-            app:chipSpacingVertical="0dp"
-            app:selectionRequired="true"
-            app:singleSelection="true" />
-
-        <TextView
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:paddingVertical="8dp"
-            android:text="自动阅读"
-            android:textStyle="bold" />
-
         <LinearLayout
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
@@ -90,59 +66,4 @@
 
     </LinearLayout>
 
-    <LinearLayout
-        android:id="@+id/ll_webtoon"
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:orientation="vertical">
-
-        <TextView
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:paddingHorizontal="16dp"
-            android:paddingTop="8dp"
-            android:text="条漫"
-            android:textStyle="bold" />
-
-        <io.legato.kazusa.ui.widget.DetailSeekBar
-            android:id="@+id/scv_Padding"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            app:max="30"
-            app:title="侧边留白" />
-
-    </LinearLayout>
-
-    <LinearLayout
-        android:layout_width="match_parent"
-        android:layout_height="wrap_content"
-        android:orientation="vertical"
-        android:paddingHorizontal="12dp">
-
-        <com.google.android.material.checkbox.MaterialCheckBox
-            android:id="@+id/checkboxDisableClickScroll"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:text="@string/disable_manga_click_scroll" />
-
-        <com.google.android.material.checkbox.MaterialCheckBox
-            android:id="@+id/checkboxDisableMangaScale"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:text="@string/disable_manga_scale" />
-
-        <com.google.android.material.checkbox.MaterialCheckBox
-            android:id="@+id/checkboxHideMangaTitle"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:text="@string/hide_manga_title" />
-
-        <com.google.android.material.checkbox.MaterialCheckBox
-            android:id="@+id/checkboxVolumeKeyPage"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:text="@string/volume_key_page" />
-    </LinearLayout>
-
-
 </LinearLayout>

+ 5 - 4
app/src/main/res/layout/dialog_read_book_style.xml

@@ -63,7 +63,8 @@
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:orientation="vertical">
-            <LinearLayout
+
+            <com.google.android.material.button.MaterialButtonGroup
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:gravity="center_vertical"
@@ -133,9 +134,9 @@
                     android:textSize="10sp"
                     tool:ignore="SmallSp" />
 
-            </LinearLayout>
+            </com.google.android.material.button.MaterialButtonGroup>
 
-            <LinearLayout
+            <com.google.android.material.button.MaterialButtonGroup
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:layout_marginTop="8dp"
@@ -176,7 +177,7 @@
                     style="@style/Widget.Material3Expressive.Button.OutlinedButton"
                     android:text="@string/more_setting" />
 
-            </LinearLayout>
+            </com.google.android.material.button.MaterialButtonGroup>
 
         </LinearLayout>
 

+ 5 - 7
app/src/main/res/layout/dialog_read_padding.xml

@@ -15,15 +15,13 @@
             android:layout_height="wrap_content"
             android:orientation="vertical"
             android:gravity="center"
-            android:paddingVertical="16dp"
+            android:paddingBottom="16dp"
             android:paddingHorizontal="16dp">
 
-            <View
-                android:layout_width="36dp"
-                android:layout_height="4dp"
-                android:layout_gravity="center_horizontal"
-                android:background="@drawable/bg_bottom_sheet_handle"
-                android:layout_marginBottom="16dp" />
+            <com.google.android.material.bottomsheet.BottomSheetDragHandleView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_gravity="center_horizontal" />
 
             <TextView
                 android:id="@+id/bottom_sheet_title"

+ 5 - 8
app/src/main/res/layout/dialog_text_view.xml

@@ -1,6 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:orientation="vertical">
@@ -10,15 +9,13 @@
         android:layout_height="wrap_content"
         android:orientation="vertical"
         android:gravity="center"
-        android:paddingVertical="8dp"
+        android:paddingBottom="8dp"
         android:paddingHorizontal="16dp">
 
-        <View
-            android:layout_width="36dp"
-            android:layout_height="4dp"
-            android:layout_gravity="center_horizontal"
-            android:background="@drawable/bg_bottom_sheet_handle"
-            android:layout_marginBottom="16dp" />
+        <com.google.android.material.bottomsheet.BottomSheetDragHandleView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center_horizontal" />
 
         <TextView
             android:id="@+id/bottom_sheet_title"

+ 5 - 7
app/src/main/res/layout/dialog_tip_config.xml

@@ -16,15 +16,13 @@
             android:layout_height="wrap_content"
             android:orientation="vertical"
             android:gravity="center"
-            android:paddingVertical="16dp"
+            android:paddingBottom="16dp"
             android:paddingHorizontal="16dp">
 
-            <View
-                android:layout_width="36dp"
-                android:layout_height="4dp"
-                android:layout_gravity="center_horizontal"
-                android:background="@drawable/bg_bottom_sheet_handle"
-                android:layout_marginBottom="16dp" />
+            <com.google.android.material.bottomsheet.BottomSheetDragHandleView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_gravity="center_horizontal" />
 
             <TextView
                 android:id="@+id/bottom_sheet_title"

+ 5 - 7
app/src/main/res/layout/dialog_update.xml

@@ -11,14 +11,12 @@
         android:layout_height="wrap_content"
         android:orientation="vertical"
         android:gravity="center"
-        android:paddingVertical="16dp">
+        android:paddingBottom="16dp">
 
-        <View
-            android:layout_width="36dp"
-            android:layout_height="4dp"
-            android:layout_gravity="center_horizontal"
-            android:background="@drawable/bg_bottom_sheet_handle"
-            android:layout_marginBottom="16dp" />
+        <com.google.android.material.bottomsheet.BottomSheetDragHandleView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center_horizontal" />
 
         <LinearLayout
             android:layout_width="match_parent"

+ 72 - 63
app/src/main/res/layout/item_change_source.xml

@@ -4,110 +4,119 @@
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
-    android:background="?attr/selectableItemBackground"
-    tools:ignore="RtlHardcoded,RtlSymmetry"
-    android:paddingHorizontal="16dp">
+    android:background="@android:color/transparent"
+    android:foreground="?attr/selectableItemBackground"
+    android:paddingHorizontal="16dp"
+    android:paddingVertical="8dp">
 
     <androidx.appcompat.widget.AppCompatImageView
         android:id="@+id/iv_good"
-        android:layout_width="30dp"
-        android:layout_height="0dp"
-        android:layout_marginTop="5dp"
-        android:padding="5dp"
-        android:src="@drawable/ic_praise"
+        android:layout_width="24dp"
+        android:layout_height="24dp"
+        android:background="?attr/selectableItemBackgroundBorderless"
+        android:padding="4dp"
         android:contentDescription="@string/like_source"
-        app:layout_constraintBottom_toTopOf="@+id/iv_bad"
-        app:layout_constraintLeft_toLeftOf="parent"
+        android:src="@drawable/ic_praise"
+        app:layout_constraintStart_toStartOf="parent"
         app:layout_constraintTop_toTopOf="parent"
         app:tint="@color/md_red_A200" />
 
     <androidx.appcompat.widget.AppCompatImageView
         android:id="@+id/iv_bad"
-        android:layout_width="30dp"
-        android:layout_height="0dp"
-        android:layout_marginBottom="5dp"
-        android:padding="5dp"
+        android:layout_width="24dp"
+        android:layout_height="24dp"
+        android:background="?attr/selectableItemBackgroundBorderless"
+        android:padding="4dp"
         android:rotationX="180"
-        android:src="@drawable/ic_praise"
         android:contentDescription="@string/not_like_source"
-        app:layout_constraintBottom_toBottomOf="parent"
-        app:layout_constraintLeft_toLeftOf="parent"
-        app:layout_constraintTop_toBottomOf="@+id/iv_good"
+        android:src="@drawable/ic_praise"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@id/iv_good"
         app:tint="@color/md_blue_A200" />
 
+
+    <!-- 最新章节 -->
     <TextView
-        android:id="@+id/tv_origin"
+        android:id="@+id/tv_last"
         android:layout_width="0dp"
         android:layout_height="wrap_content"
-        android:layout_marginLeft="30dp"
-        android:layout_marginTop="10dp"
-        android:singleLine="true"
-        tools:text="bookSourceName"
-        app:layout_constraintLeft_toLeftOf="parent"
-        app:layout_constraintRight_toLeftOf="@+id/tv_author"
-        app:layout_constraintTop_toTopOf="parent" />
+        android:layout_marginStart="16dp"
+        android:ellipsize="end"
+        android:maxLines="1"
+        android:textColor="?attr/colorSecondary"
+        android:textSize="16sp"
+        android:textStyle="bold"
+        app:layout_constraintEnd_toStartOf="@id/tv_author"
+        app:layout_constraintStart_toEndOf="@id/iv_good"
+        app:layout_constraintTop_toTopOf="parent"
+        tools:text="latest chapter name" />
 
+    <!-- 作者 -->
     <TextView
         android:id="@+id/tv_author"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:layout_marginTop="10dp"
+        android:layout_marginEnd="8dp"
+        android:ellipsize="end"
+        android:maxLines="1"
         android:maxWidth="160dp"
-        android:singleLine="true"
-        tools:text="author"
-        app:layout_constraintRight_toLeftOf="@+id/iv_checked"
-        app:layout_constraintTop_toTopOf="parent" />
+        app:layout_constraintBaseline_toBaselineOf="@id/tv_last"
+        app:layout_constraintEnd_toStartOf="@id/iv_checked"
+        tools:text="author" />
 
+    <!-- 来源 -->
     <TextView
-        android:id="@+id/tv_last"
+        android:id="@+id/tv_origin"
         android:layout_width="0dp"
         android:layout_height="wrap_content"
-        android:layout_marginLeft="30dp"
-        android:layout_marginBottom="10dp"
-        android:singleLine="true"
-        tools:text="latest chapter name"
-        app:layout_constraintLeft_toLeftOf="parent"
-        app:layout_constraintRight_toLeftOf="@+id/iv_checked"
-        app:layout_constraintTop_toBottomOf="@+id/tv_origin" />
+        android:layout_marginStart="16dp"
+        android:ellipsize="end"
+        android:maxLines="1"
+        android:textSize="12sp"
+        app:layout_constraintBottom_toTopOf="@id/iv_bad"
+        app:layout_constraintEnd_toStartOf="@id/tv_author"
+        app:layout_constraintStart_toEndOf="@id/iv_bad"
+        app:layout_constraintTop_toBottomOf="@id/iv_bad"
+        tools:text="bookSourceName" />
 
+    <!-- 字数 -->
     <TextView
         android:id="@+id/tv_current_chapter_word_count"
         android:layout_width="0dp"
         android:layout_height="wrap_content"
-        android:layout_marginLeft="30dp"
-        android:layout_marginBottom="10dp"
-        android:singleLine="false"
-        tools:text="word count"
-        app:layout_constraintLeft_toLeftOf="parent"
-        app:layout_constraintRight_toLeftOf="@+id/iv_checked"
-        app:layout_constraintTop_toBottomOf="@+id/tv_last" />
+        android:layout_marginStart="16dp"
+        android:layout_marginTop="8dp"
+        android:textSize="12sp"
+        app:layout_constraintEnd_toStartOf="@id/tv_respond_time"
+        app:layout_constraintStart_toEndOf="@id/iv_good"
+        app:layout_constraintTop_toBottomOf="@id/tv_origin"
+        tools:text="word count" />
 
+    <!-- 响应时间 -->
     <TextView
         android:id="@+id/tv_respond_time"
-        android:layout_width="0dp"
+        android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:layout_marginLeft="30dp"
-        android:layout_marginBottom="10dp"
-        android:singleLine="false"
-        tools:text="respond time"
+        android:layout_marginStart="8dp"
+        android:layout_marginEnd="8dp"
+        android:textSize="12sp"
+        app:layout_constraintBaseline_toBaselineOf="@id/tv_current_chapter_word_count"
+        app:layout_constraintEnd_toStartOf="@id/iv_checked"
+        app:layout_constraintStart_toEndOf="@id/tv_current_chapter_word_count"
         app:layout_constraintBottom_toBottomOf="parent"
-        app:layout_constraintLeft_toLeftOf="parent"
-        app:layout_constraintRight_toLeftOf="@+id/iv_checked"
-        app:layout_constraintTop_toBottomOf="@+id/tv_current_chapter_word_count" />
+        tools:text="respond time" />
 
+    <!-- 选中状态 -->
     <androidx.appcompat.widget.AppCompatImageView
         android:id="@+id/iv_checked"
-        android:layout_width="40dp"
-        android:layout_height="40dp"
-        android:layout_marginTop="10dp"
-        android:layout_marginBottom="10dp"
-        android:padding="8dp"
+        android:layout_width="32dp"
+        android:layout_height="32dp"
+        android:paddingVertical="8dp"
         android:src="@drawable/ic_check"
-        android:visibility="invisible"
+        android:visibility="gone"
+        app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintBottom_toBottomOf="parent"
-        app:layout_constraintRight_toRightOf="parent"
         app:layout_constraintTop_toTopOf="parent"
         tools:visibility="visible" />
 
-
-</androidx.constraintlayout.widget.ConstraintLayout>
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 2 - 3
app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml

@@ -1,6 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
 <adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
-    <background android:drawable="@drawable/ic_launcher1_b" />
-    <foreground android:drawable="@drawable/ic_launcher1" />
-    <monochrome android:drawable="@drawable/ic_launcher4" />
+    <background android:drawable="@color/ic_launcher_background" />
+    <foreground android:drawable="@drawable/ic_launcher_foreground" />
 </adaptive-icon>

+ 5 - 0
app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
+    <background android:drawable="@color/ic_launcher_background" />
+    <foreground android:drawable="@drawable/ic_launcher_foreground" />
+</adaptive-icon>

+ 6 - 0
app/src/main/res/mipmap-anydpi-v26/launcher0.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
+    <background android:drawable="@drawable/ic_launcher1_b" />
+    <foreground android:drawable="@drawable/ic_launcher1" />
+    <monochrome android:drawable="@drawable/ic_launcher4" />
+</adaptive-icon>

BIN
app/src/main/res/mipmap-hdpi/ic_launcher.png


BIN
app/src/main/res/mipmap-hdpi/ic_launcher.webp


BIN
app/src/main/res/mipmap-hdpi/ic_launcher_round.webp


BIN
app/src/main/res/mipmap-mdpi/ic_launcher.png


BIN
app/src/main/res/mipmap-mdpi/ic_launcher.webp


BIN
app/src/main/res/mipmap-mdpi/ic_launcher_round.webp


BIN
app/src/main/res/mipmap-xhdpi/ic_launcher.png


BIN
app/src/main/res/mipmap-xhdpi/ic_launcher.webp


BIN
app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp


BIN
app/src/main/res/mipmap-xxhdpi/ic_launcher.png


BIN
app/src/main/res/mipmap-xxhdpi/ic_launcher.webp


BIN
app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp


BIN
app/src/main/res/mipmap-xxxhdpi/ic_launcher.png


BIN
app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp


BIN
app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp


+ 1 - 0
app/src/main/res/values-es-rES/arrays.xml

@@ -63,6 +63,7 @@
 
 	<string-array name="icon_names">
 		<item>íconePrincipal</item>
+        <item>ícone0</item>
 		<item>ícone1</item>
 		<item>ícone2</item>
 		<item>ícone3</item>

+ 1 - 1
app/src/main/res/values-es-rES/strings.xml

@@ -1142,7 +1142,7 @@
     <string name="export_book_notification_content">正在导出(%1$s),还有%2$d本待导出</string>
     <string name="export_md">导出(MD)</string>
     <string name="change_source_delay">换源间隔</string>
-    <string name="change_source_progress">结果 %1$d, 当前进度 %2$d / %3$d: %4$s</string>
+    <string name="change_source_progress">结果 %1$d</string>
     <string name="open_book_info_by_click_title">点击书名打开详情</string>
     <string name="export_wait">等待导出</string>
     <string name="default_home_page">默认主页</string>

+ 1 - 1
app/src/main/res/values-ja-rJP/strings.xml

@@ -1145,7 +1145,7 @@
     <string name="export_book_notification_content">正在导出(%1$s),还有%2$d本待导出</string>
     <string name="export_md">导出(MD)</string>
     <string name="change_source_delay">换源间隔</string>
-    <string name="change_source_progress">結果 %1$d、現在の進行状況 %2$d / %3$d: %4$s</string>
+    <string name="change_source_progress">結果 %1$d</string>
     <string name="open_book_info_by_click_title">点击书名打开详情</string>
     <string name="export_wait">等待导出</string>
     <string name="default_home_page">默认主页</string>

+ 1 - 0
app/src/main/res/values-pt-rBR/arrays.xml

@@ -63,6 +63,7 @@
 
 	<string-array name="icon_names">
 		<item>íconePrincipal</item>
+        <item>icone0</item>
 		<item>ícone1</item>
 		<item>ícone2</item>
 		<item>ícone3</item>

+ 1 - 1
app/src/main/res/values-pt-rBR/strings.xml

@@ -1145,7 +1145,7 @@
     <string name="export_book_notification_content">正在导出(%1$s),还有%2$d本待导出</string>
     <string name="export_md">导出(MD)</string>
     <string name="change_source_delay">换源间隔</string>
-    <string name="change_source_progress">" Resultado %1$d, progresso atual %2$d / %3$d: %4$s"</string>
+    <string name="change_source_progress">Resultado %1$d</string>
     <string name="open_book_info_by_click_title">点击书名打开详情</string>
     <string name="export_wait">等待导出</string>
     <string name="default_home_page">默认主页</string>

+ 1 - 1
app/src/main/res/values-vi/strings.xml

@@ -1141,7 +1141,7 @@ Còn </string>
     <string name="export_book_notification_content">正在导出(%1$s),还有%2$d本待导出</string>
     <string name="export_md">导出(MD)</string>
     <string name="change_source_delay">换源间隔</string>
-    <string name="change_source_progress">Kết quả %1$d, tiến trình hiện tại %2$d / %3$d: %4$s</string>
+    <string name="change_source_progress">Kết quả %1$d</string>
     <string name="open_book_info_by_click_title">点击书名打开详情</string>
     <string name="export_wait">等待导出</string>
     <string name="sync_book_progress_success">" Đồng bộ hóa tiến trình thành công"</string>

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

@@ -1137,7 +1137,7 @@
     <string name="export_book_notification_content">正在导出(%1$s),还有%2$d本待导出</string>
     <string name="export_md">导出(MD)</string>
     <string name="change_source_delay">换源间隔</string>
-    <string name="change_source_progress">" 結果 %1$d, 當前進度 %2$d / %3$d: %4$s"</string>
+    <string name="change_source_progress">結果 %1$d</string>
     <string name="open_book_info_by_click_title">点击书名打开详情</string>
     <string name="export_wait">等待导出</string>
     <string name="sync_book_progress_success">進度同步成功</string>

+ 1 - 0
app/src/main/res/values-zh-rTW/arrays.xml

@@ -61,6 +61,7 @@
 
     <string-array name="icon_names">
         <item>iconMain</item>
+        <item>icon0</item>
         <item>icon1</item>
         <item>icon2</item>
         <item>icon3</item>

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

@@ -1139,7 +1139,7 @@
     <string name="export_book_notification_content">正在导出(%1$s),还有%2$d本待导出</string>
     <string name="export_md">导出(MD)</string>
     <string name="change_source_delay">换源间隔</string>
-    <string name="change_source_progress">" 結果 %1$d, 當前進度 %2$d / %3$d: %4$s"</string>
+    <string name="change_source_progress">結果 %1$d</string>
     <string name="open_book_info_by_click_title">点击书名打开详情</string>
     <string name="export_wait">等待导出</string>
     <string name="sync_book_progress_success">進度同步成功</string>

+ 1 - 0
app/src/main/res/values-zh/arrays.xml

@@ -49,6 +49,7 @@
 
     <string-array name="icon_names">
         <item>iconMain</item>
+        <item>icon0</item>
         <item>icon1</item>
         <item>icon2</item>
         <item>icon3</item>

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

@@ -97,7 +97,7 @@
     <string name="offline_cache_s">缓存选择的章节到本地</string>
     <string name="change_origin">换源</string>
     <string name="about_description">
-        \u3000\u3000这是一款使用 Kotlin 全新开发的开源的阅读软件,欢迎您的加入。
+        全新设计的阅读 3.0
     </string>
     <string name="app_share_description">
         阅读 3.0 下载地址:\nhttps://github.com/gedoor/legado/releases
@@ -1144,7 +1144,7 @@
     <string name="export_book_notification_content">正在导出 (%1$s) ,还有 %2$d 本待导出</string>
     <string name="export_md">导出(MD)</string>
     <string name="change_source_delay">换源间隔</string>
-    <string name="change_source_progress">结果 %1$d, 当前进度 %2$d / %3$d: %4$s</string>
+    <string name="change_source_progress">结果 %1$d</string>
     <string name="open_book_info_by_click_title">点击书名打开详情</string>
     <string name="export_wait">等待导出</string>
     <string name="sync_book_progress_success">进度同步成功</string>

+ 1 - 0
app/src/main/res/values/array_values.xml

@@ -3,6 +3,7 @@
 
     <string-array name="icons">
         <item>ic_launcher</item>
+        <item>launcher0</item>
         <item>launcher1</item>
         <item>launcher2</item>
         <item>launcher3</item>

+ 1 - 0
app/src/main/res/values/arrays.xml

@@ -103,6 +103,7 @@
 
 	<string-array name="icon_names" tools:ignore="Typos">
 		<item>iconMain</item>
+        <item>icon0</item>
 		<item>icon1</item>
 		<item>icon2</item>
 		<item>icon3</item>

+ 4 - 0
app/src/main/res/values/ic_launcher_background.xml

@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <color name="ic_launcher_background">#3C3B4D</color>
+</resources>

+ 1 - 1
app/src/main/res/values/strings.xml

@@ -1147,7 +1147,7 @@
     <string name="export_book_notification_content">Exporting (%1$s), with %2$d to be exported.</string>
     <string name="export_md">Export(MD)</string>
     <string name="change_source_delay">Change source delay</string>
-    <string name="change_source_progress">Result %1$d, Progress %2$d / %3$d: %4$s</string>
+    <string name="change_source_progress">Result %1$d</string>
     <string name="open_book_info_by_click_title">Click on the book title to open details</string>
     <string name="export_wait">Waiting for export</string>
     <string name="show_bookshelf_fast_scroller">Show quick scroll bar</string>