From f8a39f1a24a62c32f72cd4d5127974d470bdbd1f Mon Sep 17 00:00:00 2001 From: HapeLee <1321903405@qq.com> Date: Wed, 11 Jun 2025 22:36:33 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=95=8C=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../io/legato/kazusa/base/BaseActivity.kt | 3 + .../kazusa/lib/prefs/ThemeCardPreference.kt | 3 + .../ui/book/read/config/ReadStyleDialog.kt | 48 ++- .../legato/kazusa/ui/widget/DetailSeekBar.kt | 17 +- .../kazusa/ui/widget/text/AccentBgTextView.kt | 23 +- app/src/main/res/drawable/font_bold.xml | 4 + app/src/main/res/drawable/font_style.xml | 4 + app/src/main/res/drawable/ic_padding.xml | 4 + app/src/main/res/drawable/ic_segment.xml | 4 + .../res/layout/dialog_read_book_style.xml | 364 ++++++++++-------- app/src/main/res/layout/item_import_book.xml | 8 +- .../main/res/layout/view_detail_seek_bar.xml | 99 +++-- app/src/main/res/values-night/colors.xml | 144 +++++++ app/src/main/res/values/array_values.xml | 3 + app/src/main/res/values/arrays.xml | 3 + app/src/main/res/values/colors.xml | 147 +++++++ app/src/main/res/values/themes.xml | 150 ++++++++ 17 files changed, 795 insertions(+), 233 deletions(-) create mode 100644 app/src/main/res/drawable/font_bold.xml create mode 100644 app/src/main/res/drawable/font_style.xml create mode 100644 app/src/main/res/drawable/ic_padding.xml create mode 100644 app/src/main/res/drawable/ic_segment.xml diff --git a/app/src/main/java/io/legato/kazusa/base/BaseActivity.kt b/app/src/main/java/io/legato/kazusa/base/BaseActivity.kt index 41af0c070..d26847237 100644 --- a/app/src/main/java/io/legato/kazusa/base/BaseActivity.kt +++ b/app/src/main/java/io/legato/kazusa/base/BaseActivity.kt @@ -141,6 +141,9 @@ abstract class BaseActivity( "1" -> setTheme(R.style.Theme_Base_GR) "2" -> setTheme(R.style.Theme_Base_Lemon) "3" -> setTheme(R.style.Theme_Base_WH) + "4" -> setTheme(R.style.Theme_Base_Koharu) + "5" -> setTheme(R.style.Theme_Base_Yuuka) + "6" -> setTheme(R.style.Theme_Base_Phoebe) } } diff --git a/app/src/main/java/io/legato/kazusa/lib/prefs/ThemeCardPreference.kt b/app/src/main/java/io/legato/kazusa/lib/prefs/ThemeCardPreference.kt index 5451297e3..9643cf644 100644 --- a/app/src/main/java/io/legato/kazusa/lib/prefs/ThemeCardPreference.kt +++ b/app/src/main/java/io/legato/kazusa/lib/prefs/ThemeCardPreference.kt @@ -92,6 +92,9 @@ class ThemeCardPreference(context: Context, attrs: AttributeSet) : Preference(co "1" to R.style.Theme_Base_GR, "2" to R.style.Theme_Base_Lemon, "3" to R.style.Theme_Base_WH, + "4" to R.style.Theme_Base_Koharu, + "5" to R.style.Theme_Base_Yuuka, + "6" to R.style.Theme_Base_Phoebe ) private fun getThemeColors(value: String): List { diff --git a/app/src/main/java/io/legato/kazusa/ui/book/read/config/ReadStyleDialog.kt b/app/src/main/java/io/legato/kazusa/ui/book/read/config/ReadStyleDialog.kt index 963dbebc8..b3db152f5 100644 --- a/app/src/main/java/io/legato/kazusa/ui/book/read/config/ReadStyleDialog.kt +++ b/app/src/main/java/io/legato/kazusa/ui/book/read/config/ReadStyleDialog.kt @@ -1,6 +1,7 @@ package io.legato.kazusa.ui.book.read.config import android.content.DialogInterface +import android.graphics.Color import android.os.Bundle import android.view.View import android.view.ViewGroup @@ -16,17 +17,17 @@ import io.legato.kazusa.databinding.ItemReadStyleBinding import io.legato.kazusa.help.config.AppConfig import io.legato.kazusa.help.config.ReadBookConfig import io.legato.kazusa.lib.dialogs.selector -//import io.legado.app.lib.theme.accentColor -//import io.legado.app.lib.theme.bottomBackground -//import io.legado.app.lib.theme.getPrimaryTextColor import io.legato.kazusa.model.ReadBook import io.legato.kazusa.ui.book.read.ReadBookActivity import io.legato.kazusa.ui.font.FontSelectDialog +import io.legato.kazusa.ui.widget.DetailSeekBar import io.legato.kazusa.utils.ChineseUtils import io.legato.kazusa.utils.postEvent import io.legato.kazusa.utils.showDialogFragment import io.legato.kazusa.utils.viewbindingdelegate.viewBinding import splitties.views.onLongClick +import androidx.core.graphics.drawable.toDrawable +import androidx.transition.TransitionManager class ReadStyleDialog : BaseBottomSheetDialogFragment(R.layout.dialog_read_book_style), FontSelectDialog.CallBack { @@ -35,6 +36,9 @@ class ReadStyleDialog : BaseBottomSheetDialogFragment(R.layout.dialog_read_book_ private val callBack get() = activity as? ReadBookActivity private lateinit var styleAdapter: StyleAdapter + private lateinit var allSliders: List + + override fun onStart() { super.onStart() // dialog?.window?.run { @@ -154,6 +158,23 @@ class ReadStyleDialog : BaseBottomSheetDialogFragment(R.layout.dialog_read_book_ upView() postEvent(EventBus.UP_CONFIG, arrayListOf(1, 2, 5)) } + + allSliders = listOf( + dsbTextSize, + dsbTextLetterSpacing, + dsbLineSize, + dsbParagraphSpacing + ) + + allSliders.forEach { seekBar -> + seekBar.onStartTracking = { + setOnlyActiveSeekBarVisible(seekBar, true) + } + seekBar.onStopTracking = { + setOnlyActiveSeekBarVisible(seekBar, false) + } + } + dsbTextSize.onChanged = { ReadBookConfig.textSize = it + 5 postEvent(EventBus.UP_CONFIG, arrayListOf(8, 5)) @@ -172,6 +193,27 @@ class ReadStyleDialog : BaseBottomSheetDialogFragment(R.layout.dialog_read_book_ } } + private fun setOnlyActiveSeekBarVisible(activeSeekBar: DetailSeekBar, visible: Boolean) { + if (visible == true) { + TransitionManager.beginDelayedTransition(binding.setBar) + TransitionManager.beginDelayedTransition(binding.setBottomBar) + binding.setBar.visibility = View.GONE + binding.setBottomBar.visibility = View.GONE + }else{ + TransitionManager.beginDelayedTransition(binding.setBar) + TransitionManager.beginDelayedTransition(binding.setBottomBar) + binding.setBar.visibility = View.VISIBLE + binding.setBottomBar.visibility = View.VISIBLE + } + allSliders.forEach { seekBar -> + if (seekBar != activeSeekBar) { + seekBar.visibility = if (visible) View.GONE else View.VISIBLE + } + } + } + + + private fun changeBgTextConfig(index: Int) { val oldIndex = ReadBookConfig.styleSelect if (index != oldIndex) { diff --git a/app/src/main/java/io/legato/kazusa/ui/widget/DetailSeekBar.kt b/app/src/main/java/io/legato/kazusa/ui/widget/DetailSeekBar.kt index f4a262cdf..db06c4a24 100644 --- a/app/src/main/java/io/legato/kazusa/ui/widget/DetailSeekBar.kt +++ b/app/src/main/java/io/legato/kazusa/ui/widget/DetailSeekBar.kt @@ -24,7 +24,9 @@ class DetailSeekBar @JvmOverloads constructor( private val isBottomBackground: Boolean var valueFormat: ((progress: Int) -> String)? = null + var onStartTracking: (() -> Unit)? = null var onChanged: ((progress: Int) -> Unit)? = null + var onStopTracking: (() -> Unit)? = null var progress: Int get() = binding.slider.value.toInt() @@ -50,14 +52,6 @@ class DetailSeekBar @JvmOverloads constructor( } binding.slider.valueTo = typedArray.getInteger(R.styleable.DetailSeekBar_max, 0).toFloat() typedArray.recycle() - if (isBottomBackground && !isInEditMode) { -// val isLight = ColorUtils.isColorLight(context.bottomBackground) -// val textColor = context.getPrimaryTextColor(isLight) -// binding.tvSeekTitle.setTextColor(textColor) -// binding.ivSeekPlus.setColorFilter(textColor, PorterDuff.Mode.SRC_IN) -// binding.ivSeekReduce.setColorFilter(textColor, PorterDuff.Mode.SRC_IN) -// binding.tvSeekValue.setTextColor(textColor) - } binding.ivSeekPlus.setOnClickListener { val newValue = (binding.slider.value + 1).coerceAtMost(binding.slider.valueTo) binding.slider.value = newValue @@ -72,14 +66,19 @@ class DetailSeekBar @JvmOverloads constructor( binding.slider.addOnChangeListener { _, value, fromUser -> upValue(value.toInt()) + + if (fromUser) { + onChanged?.invoke(value.toInt()) + } } binding.slider.addOnSliderTouchListener(object : Slider.OnSliderTouchListener { override fun onStartTrackingTouch(slider: Slider) { - // 可以添加开始拖动时的逻辑 + onStartTracking?.invoke() } override fun onStopTrackingTouch(slider: Slider) { + onStopTracking?.invoke() onChanged?.invoke(slider.value.toInt()) } }) diff --git a/app/src/main/java/io/legato/kazusa/ui/widget/text/AccentBgTextView.kt b/app/src/main/java/io/legato/kazusa/ui/widget/text/AccentBgTextView.kt index d9ec41c27..c21eb91ca 100644 --- a/app/src/main/java/io/legato/kazusa/ui/widget/text/AccentBgTextView.kt +++ b/app/src/main/java/io/legato/kazusa/ui/widget/text/AccentBgTextView.kt @@ -9,19 +9,20 @@ import io.legato.kazusa.lib.theme.Selector import io.legato.kazusa.utils.ColorUtils import io.legato.kazusa.utils.dpToPx import androidx.core.content.withStyledAttributes +import io.legato.kazusa.utils.themeColor class AccentBgTextView @JvmOverloads constructor( context: Context, attrs: AttributeSet? = null ) : MaterialTextView(context, attrs) { - private var radiusPx = 0 + private var radiusPx = 32 init { - context.withStyledAttributes(attrs, R.styleable.AccentBgTextView) { - val radiusDp = getDimensionPixelOffset(R.styleable.AccentBgTextView_radius, 0) - radiusPx = radiusDp - } +// context.withStyledAttributes(attrs, R.styleable.AccentBgTextView) { +// val radiusDp = getDimensionPixelOffset(R.styleable.AccentBgTextView_radius, 0) +// radiusPx = radiusDp +// } updateBackground() } @@ -31,16 +32,8 @@ class AccentBgTextView @JvmOverloads constructor( } private fun updateBackground() { - val backgroundColor = MaterialColors.getColor( - this, - com.google.android.material.R.attr.colorPrimaryContainer, - //context.getColorCompat(R.color.fallback_bg) - ) - val textColor = MaterialColors.getColor( - this, - com.google.android.material.R.attr.colorOnPrimaryContainer, - //context.getColorCompat(R.color.fallback_text) - ) + val backgroundColor = context.themeColor(com.google.android.material.R.attr.colorPrimaryContainer) + val textColor = context.themeColor(com.google.android.material.R.attr.colorOnPrimaryContainer) background = Selector.shapeBuild() .setCornerRadius(radiusPx) diff --git a/app/src/main/res/drawable/font_bold.xml b/app/src/main/res/drawable/font_bold.xml new file mode 100644 index 000000000..d80b13131 --- /dev/null +++ b/app/src/main/res/drawable/font_bold.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/font_style.xml b/app/src/main/res/drawable/font_style.xml new file mode 100644 index 000000000..2be39af49 --- /dev/null +++ b/app/src/main/res/drawable/font_style.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_padding.xml b/app/src/main/res/drawable/ic_padding.xml new file mode 100644 index 000000000..42227c874 --- /dev/null +++ b/app/src/main/res/drawable/ic_padding.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_segment.xml b/app/src/main/res/drawable/ic_segment.xml new file mode 100644 index 000000000..4ca22ef43 --- /dev/null +++ b/app/src/main/res/drawable/ic_segment.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_read_book_style.xml b/app/src/main/res/layout/dialog_read_book_style.xml index e96d10625..885a5a231 100644 --- a/app/src/main/res/layout/dialog_read_book_style.xml +++ b/app/src/main/res/layout/dialog_read_book_style.xml @@ -33,66 +33,94 @@ - - + + android:gravity="center_vertical" + android:orientation="horizontal" + android:layout_marginHorizontal="12dp" > - + + + + + + + + + + + + + + + + + android:layout_marginTop="8dp" + android:gravity="center_vertical" + android:orientation="horizontal" + android:layout_marginHorizontal="12dp" > - + - - - - - - - - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - + android:orientation="vertical"> - + android:scrollbars="none"> - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - \ No newline at end of file diff --git a/app/src/main/res/layout/item_import_book.xml b/app/src/main/res/layout/item_import_book.xml index 9d3c3f502..92a6937af 100644 --- a/app/src/main/res/layout/item_import_book.xml +++ b/app/src/main/res/layout/item_import_book.xml @@ -61,9 +61,9 @@ android:id="@+id/tv_tag" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginRight="15dp" - android:paddingStart="5dp" - android:paddingEnd="5dp" + android:layout_marginEnd="16dp" + android:paddingStart="8dp" + android:paddingEnd="8dp" android:text="TXT" android:maxLines="1" android:maxWidth="50dp" @@ -74,7 +74,7 @@ android:id="@+id/tv_size" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginRight="15dp" + android:layout_marginEnd="16dp" tools:ignore="RtlHardcoded" tools:text="324kb" /> diff --git a/app/src/main/res/layout/view_detail_seek_bar.xml b/app/src/main/res/layout/view_detail_seek_bar.xml index cd0a19256..50ec680a8 100644 --- a/app/src/main/res/layout/view_detail_seek_bar.xml +++ b/app/src/main/res/layout/view_detail_seek_bar.xml @@ -3,49 +3,74 @@ xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="wrap_content" - android:orientation="horizontal" - android:gravity="center"> + xmlns:app="http://schemas.android.com/apk/res-auto" + android:layout_marginVertical="4dp" + android:orientation="vertical"> - + android:orientation="horizontal" + android:gravity="center_vertical" + android:padding="4dp"> - + - + - + + + - + + + android:orientation="horizontal" + android:gravity="center"> + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-night/colors.xml b/app/src/main/res/values-night/colors.xml index 7af4c031a..49154730a 100644 --- a/app/src/main/res/values-night/colors.xml +++ b/app/src/main/res/values-night/colors.xml @@ -145,6 +145,150 @@ #2D2A21 #38352B + #FFB3B4 + #561D22 + #733337 + #FFDADA + #E6BDBD + #44292A + #5D3F40 + #FFDADA + #E6C18D + #422C05 + #5B421A + #FFDDB0 + #FFB4AB + #690005 + #93000A + #FFDAD6 + #1A1111 + #F0DEDE + #1A1111 + #F0DEDE + #524343 + #D7C1C1 + #9F8C8C + #524343 + #000000 + #F0DEDE + #382E2E + #8F4A4D + #FFDADA + #3B080E + #FFB3B4 + #733337 + #FFDADA + #2C1516 + #E6BDBD + #5D3F40 + #FFDDB0 + #291800 + #E6C18D + #5B421A + #1A1111 + #413737 + #140C0C + #221919 + #271D1D + #322828 + #3D3232 + + #BFC2FF + #272B60 + #3E4278 + #E0E0FF + #C5C4DD + #2E2F42 + #444559 + #E1E0F9 + #E8B9D5 + #46263B + #5E3C52 + #FFD8EE + #FFB4AB + #690005 + #93000A + #FFDAD6 + #131318 + #E4E1E9 + #131318 + #E4E1E9 + #46464F + #C7C5D0 + #918F9A + #46464F + #000000 + #E4E1E9 + #303036 + #565992 + #E0E0FF + #11144B + #BFC2FF + #3E4278 + #E1E0F9 + #191A2C + #C5C4DD + #444559 + #FFD8EE + #2E1126 + #E8B9D5 + #5E3C52 + #131318 + #39393F + #0E0E13 + #1B1B21 + #1F1F25 + #2A292F + #34343A + + #D9C76F + #383000 + #524700 + #F6E388 + #B1C5FF + #162E60 + #2F4578 + #D9E2FF + #86D1EA + #003642 + #004E5F + #B3EBFF + #FFB4AB + #690005 + #93000A + #FFDAD6 + #15130C + #E8E2D4 + #15130C + #E8E2D4 + #4A4739 + #CCC6B4 + #969180 + #4A4739 + #000000 + #E8E2D4 + #333027 + #6B5E10 + #F6E388 + #211B00 + #D9C76F + #524700 + #D9E2FF + #001946 + #B1C5FF + #2F4578 + #B3EBFF + #001F27 + #86D1EA + #004E5F + #15130C + #3C3930 + #100E07 + #1E1C13 + #222017 + #2C2A21 + #37352B + @color/md_dark_disabled #10303030 diff --git a/app/src/main/res/values/array_values.xml b/app/src/main/res/values/array_values.xml index 7d6588075..6decee726 100644 --- a/app/src/main/res/values/array_values.xml +++ b/app/src/main/res/values/array_values.xml @@ -30,6 +30,9 @@ 1 2 3 + 4 + 5 + 6 diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml index 33acde327..9bdd2d108 100644 --- a/app/src/main/res/values/arrays.xml +++ b/app/src/main/res/values/arrays.xml @@ -58,6 +58,9 @@ 草野 柠檬 黑白 + Koharu + Yuuka + Phoebe diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 1669d1ec1..8e6cb4bdd 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -148,6 +148,153 @@ #EEE8DA #E8E2D4 + + #8F4A4D + #FFFFFF + #FFDADA + #733337 + #765657 + #FFFFFF + #FFDADA + #5D3F40 + #755A2F + #FFFFFF + #FFDDB0 + #5B421A + #BA1A1A + #FFFFFF + #FFDAD6 + #93000A + #FFF8F7 + #221919 + #FFF8F7 + #221919 + #F4DDDD + #524343 + #857373 + #D7C1C1 + #000000 + #382E2E + #FFEDEC + #FFB3B4 + #FFDADA + #3B080E + #FFB3B4 + #733337 + #FFDADA + #2C1516 + #E6BDBD + #5D3F40 + #FFDDB0 + #291800 + #E6C18D + #5B421A + #E8D6D6 + #FFF8F7 + #FFFFFF + #FFF0F0 + #FCEAE9 + #F6E4E4 + #F0DEDE + + + #565992 + #FFFFFF + #E0E0FF + #3E4278 + #5C5D72 + #FFFFFF + #E1E0F9 + #444559 + #78536B + #FFFFFF + #FFD8EE + #5E3C52 + #BA1A1A + #FFFFFF + #FFDAD6 + #93000A + #FBF8FF + #1B1B21 + #FBF8FF + #1B1B21 + #E4E1EC + #46464F + #777680 + #C7C5D0 + #000000 + #303036 + #F2EFF7 + #BFC2FF + #E0E0FF + #11144B + #BFC2FF + #3E4278 + #E1E0F9 + #191A2C + #C5C4DD + #444559 + #FFD8EE + #2E1126 + #E8B9D5 + #5E3C52 + #DBD9E0 + #FBF8FF + #FFFFFF + #F5F2FA + #F0ECF4 + #EAE7EF + #E4E1E9 + + + #6B5E10 + #FFFFFF + #F6E388 + #524700 + #475D92 + #FFFFFF + #D9E2FF + #2F4578 + #01677D + #FFFFFF + #B3EBFF + #004E5F + #BA1A1A + #FFFFFF + #FFDAD6 + #93000A + #FFF9EC + #1E1C13 + #FFF9EC + #1E1C13 + #E9E2D0 + #4A4739 + #7C7768 + #CCC6B4 + #000000 + #333027 + #F6F0E2 + #D9C76F + #F6E388 + #211B00 + #D9C76F + #524700 + #D9E2FF + #001946 + #B1C5FF + #2F4578 + #B3EBFF + #001F27 + #86D1EA + #004E5F + #DFDACC + #FFF9EC + #FFFFFF + #F9F3E5 + #F4EDDF + #EEE8DA + #E8E2D4 + @color/md_light_disabled #66666666 diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index 4cfe47d61..db4f01604 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -185,4 +185,154 @@ @color/lemon_theme_surfaceContainerHighest + + + + + +