From 863d8f59a2f2d02cac367e83bbcdcb9ecee81afe Mon Sep 17 00:00:00 2001
From: HapeLee <1321903405@qq.com>
Date: Thu, 4 Sep 2025 05:14:48 +0800
Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0Dialog=E7=95=8C=E9=9D=A2?=
=?UTF-8?q?=E4=B8=8ESCV=E6=8E=A7=E4=BB=B6?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../legato/kazusa/base/BaseDialogFragment.kt | 14 ++-
.../book/read/config/PaddingConfigDialog.kt | 10 +-
.../ui/book/read/config/ReadSpacingDialog.kt | 63 ++++++++++
.../ui/book/read/config/ReadStyleDialog.kt | 40 +++----
.../kazusa/ui/widget/SimpleCounterView.kt | 28 ++++-
app/src/main/res/drawable/ic_cn_convert.xml | 10 ++
.../res/layout/dialog_read_book_spacing.xml | 99 ++++++++++++++++
.../res/layout/dialog_read_book_style.xml | 81 +++++--------
.../main/res/layout/dialog_read_padding.xml | 18 +--
.../main/res/layout/view_simple_counter.xml | 111 +++++++++++-------
10 files changed, 332 insertions(+), 142 deletions(-)
create mode 100644 app/src/main/java/io/legato/kazusa/ui/book/read/config/ReadSpacingDialog.kt
create mode 100644 app/src/main/res/drawable/ic_cn_convert.xml
create mode 100644 app/src/main/res/layout/dialog_read_book_spacing.xml
diff --git a/app/src/main/java/io/legato/kazusa/base/BaseDialogFragment.kt b/app/src/main/java/io/legato/kazusa/base/BaseDialogFragment.kt
index 4a91640c3..438acefcc 100644
--- a/app/src/main/java/io/legato/kazusa/base/BaseDialogFragment.kt
+++ b/app/src/main/java/io/legato/kazusa/base/BaseDialogFragment.kt
@@ -1,5 +1,6 @@
package io.legato.kazusa.base
+import android.app.Dialog
import android.content.DialogInterface
import android.content.DialogInterface.OnDismissListener
import android.os.Bundle
@@ -8,11 +9,11 @@ import androidx.annotation.LayoutRes
import androidx.fragment.app.DialogFragment
import androidx.fragment.app.FragmentManager
import androidx.lifecycle.lifecycleScope
+import com.google.android.material.dialog.MaterialAlertDialogBuilder
import io.legato.kazusa.R
import io.legato.kazusa.constant.AppLog
import io.legato.kazusa.help.config.AppConfig
import io.legato.kazusa.help.coroutine.Coroutine
-import io.legato.kazusa.lib.theme.ThemeStore
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlin.coroutines.CoroutineContext
@@ -25,6 +26,17 @@ abstract class BaseDialogFragment(
private var onDismissListener: OnDismissListener? = null
+ private lateinit var dialogView: View
+
+ override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
+ dialogView = onCreateView(layoutInflater, null, savedInstanceState)!!
+ return MaterialAlertDialogBuilder(requireContext(), theme)
+ .setView(dialogView)
+ .create()
+ }
+
+ override fun getView(): View? = dialogView
+
fun setOnDismissListener(onDismissListener: OnDismissListener?) {
this.onDismissListener = onDismissListener
}
diff --git a/app/src/main/java/io/legato/kazusa/ui/book/read/config/PaddingConfigDialog.kt b/app/src/main/java/io/legato/kazusa/ui/book/read/config/PaddingConfigDialog.kt
index fdff69c03..cc10fc2ce 100644
--- a/app/src/main/java/io/legato/kazusa/ui/book/read/config/PaddingConfigDialog.kt
+++ b/app/src/main/java/io/legato/kazusa/ui/book/read/config/PaddingConfigDialog.kt
@@ -4,14 +4,15 @@ import android.content.DialogInterface
import android.os.Bundle
import android.view.View
import io.legato.kazusa.R
-import io.legato.kazusa.base.BaseBottomSheetDialogFragment
+import io.legato.kazusa.base.BaseDialogFragment
import io.legato.kazusa.constant.EventBus
import io.legato.kazusa.databinding.DialogReadPaddingBinding
import io.legato.kazusa.help.config.ReadBookConfig
import io.legato.kazusa.utils.postEvent
+import io.legato.kazusa.utils.setLayout
import io.legato.kazusa.utils.viewbindingdelegate.viewBinding
-class PaddingConfigDialog : BaseBottomSheetDialogFragment(R.layout.dialog_read_padding) {
+class PaddingConfigDialog : BaseDialogFragment(R.layout.dialog_read_padding) {
private val binding by viewBinding(DialogReadPaddingBinding::bind)
@@ -25,6 +26,11 @@ class PaddingConfigDialog : BaseBottomSheetDialogFragment(R.layout.dialog_read_p
ReadBookConfig.save()
}
+ override fun onStart() {
+ super.onStart()
+ setLayout(0.9f, 0.9f)
+ }
+
private fun initData() = binding.run {
//正文
dsbPaddingTop.progress = ReadBookConfig.paddingTop
diff --git a/app/src/main/java/io/legato/kazusa/ui/book/read/config/ReadSpacingDialog.kt b/app/src/main/java/io/legato/kazusa/ui/book/read/config/ReadSpacingDialog.kt
new file mode 100644
index 000000000..9be6733de
--- /dev/null
+++ b/app/src/main/java/io/legato/kazusa/ui/book/read/config/ReadSpacingDialog.kt
@@ -0,0 +1,63 @@
+package io.legato.kazusa.ui.book.read.config
+
+import android.content.DialogInterface
+import android.os.Bundle
+import android.view.View
+import io.legato.kazusa.R
+import io.legato.kazusa.base.BaseBottomSheetDialogFragment
+import io.legato.kazusa.constant.EventBus
+import io.legato.kazusa.databinding.DialogReadBookSpacingBinding
+import io.legato.kazusa.help.config.ReadBookConfig
+import io.legato.kazusa.ui.book.read.ReadBookActivity
+import io.legato.kazusa.utils.postEvent
+import io.legato.kazusa.utils.viewbindingdelegate.viewBinding
+
+class ReadSpacingDialog : BaseBottomSheetDialogFragment(R.layout.dialog_read_book_spacing) {
+
+ private val binding by viewBinding(DialogReadBookSpacingBinding::bind)
+ private val callBack get() = activity as? ReadBookActivity
+
+ override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) {
+ (activity as ReadBookActivity).bottomDialog++
+ initView()
+ upView()
+ initViewEvent()
+ }
+
+ override fun onDismiss(dialog: DialogInterface) {
+ super.onDismiss(dialog)
+ ReadBookConfig.save()
+ (activity as ReadBookActivity).bottomDialog--
+ }
+
+ private fun initView() = binding.run {
+ dsbTextLetterSpacing.valueFormat = {
+ ((it - 50) / 100f).toString()
+ }
+ dsbLineSize.valueFormat = { ((it - 10) / 10f).toString() }
+ dsbParagraphSpacing.valueFormat = { (it / 10f).toString() }
+ }
+
+ private fun initViewEvent() = binding.run {
+ dsbTextLetterSpacing.onChanged = {
+ ReadBookConfig.letterSpacing = (it - 50) / 100f
+ postEvent(EventBus.UP_CONFIG, arrayListOf(8, 5))
+ }
+ dsbLineSize.onChanged = {
+ ReadBookConfig.lineSpacingExtra = it
+ postEvent(EventBus.UP_CONFIG, arrayListOf(8, 5))
+ }
+ dsbParagraphSpacing.onChanged = {
+ ReadBookConfig.paragraphSpacing = it
+ postEvent(EventBus.UP_CONFIG, arrayListOf(8, 5))
+ }
+ }
+
+ private fun upView() = binding.run {
+ ReadBookConfig.let {
+ dsbTextLetterSpacing.progress = (it.letterSpacing * 100).toInt() + 50
+ dsbLineSize.progress = it.lineSpacingExtra
+ dsbParagraphSpacing.progress = it.paragraphSpacing
+ }
+ }
+}
\ No newline at end of file
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 d5642ec77..a10b596aa 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
@@ -17,6 +17,7 @@ import io.legato.kazusa.databinding.ItemReadStyleBinding
import io.legato.kazusa.help.config.AppConfig
import io.legato.kazusa.help.config.ReadBookConfig
import io.legato.kazusa.help.config.ThemeConfig
+import io.legato.kazusa.lib.dialogs.alert
import io.legato.kazusa.lib.dialogs.selector
import io.legato.kazusa.model.ReadBook
import io.legato.kazusa.ui.book.read.ReadBookActivity
@@ -56,11 +57,7 @@ class ReadStyleDialog : BaseBottomSheetDialogFragment(R.layout.dialog_read_book_
dsbTextSize.valueFormat = {
(it + 5).toString()
}
- dsbTextLetterSpacing.valueFormat = {
- ((it - 50) / 100f).toString()
- }
- dsbLineSize.valueFormat = { ((it - 10) / 10f).toString() }
- dsbParagraphSpacing.valueFormat = { (it / 10f).toString() }
+
styleAdapter = StyleAdapter()
rvStyle.adapter = styleAdapter
styleAdapter.addFooterView {
@@ -76,6 +73,8 @@ class ReadStyleDialog : BaseBottomSheetDialogFragment(R.layout.dialog_read_book_
}
}
}
+
+
}
private fun initData() {
@@ -85,10 +84,18 @@ class ReadStyleDialog : BaseBottomSheetDialogFragment(R.layout.dialog_read_book_
}
private fun initViewEvent() = binding.run {
- chineseConverter.onChanged {
- ChineseUtils.unLoad(*TransType.entries.toTypedArray())
- postEvent(EventBus.UP_CONFIG, arrayListOf(5))
+ btnChineseConverter.setOnClickListener {
+ alert(titleResource = R.string.chinese_converter) {
+ items(resources.getStringArray(R.array.chinese_mode).toList()) { _, i ->
+ AppConfig.chineseConverterType = i
+
+ // 不需要更新文字,也不需要切换图标
+ ChineseUtils.unLoad(*TransType.entries.toTypedArray())
+ postEvent(EventBus.UP_CONFIG, arrayListOf(5))
+ }
+ }
}
+
textFontWeightConverter.onChanged {
postEvent(EventBus.UP_CONFIG, arrayListOf(8, 9, 6))
}
@@ -149,17 +156,9 @@ class ReadStyleDialog : BaseBottomSheetDialogFragment(R.layout.dialog_read_book_
ReadBookConfig.textSize = it + 5
postEvent(EventBus.UP_CONFIG, arrayListOf(8, 5))
}
- dsbTextLetterSpacing.onChanged = {
- ReadBookConfig.letterSpacing = (it - 50) / 100f
- postEvent(EventBus.UP_CONFIG, arrayListOf(8, 5))
- }
- dsbLineSize.onChanged = {
- ReadBookConfig.lineSpacingExtra = it
- postEvent(EventBus.UP_CONFIG, arrayListOf(8, 5))
- }
- dsbParagraphSpacing.onChanged = {
- ReadBookConfig.paragraphSpacing = it
- postEvent(EventBus.UP_CONFIG, arrayListOf(8, 5))
+
+ btnSpacing.setOnClickListener {
+ callBack?.showSpacingDialog()
}
}
@@ -193,9 +192,6 @@ class ReadStyleDialog : BaseBottomSheetDialogFragment(R.layout.dialog_read_book_
}
ReadBookConfig.let {
dsbTextSize.progress = it.textSize - 5
- dsbTextLetterSpacing.progress = (it.letterSpacing * 100).toInt() + 50
- dsbLineSize.progress = it.lineSpacingExtra
- dsbParagraphSpacing.progress = it.paragraphSpacing
}
}
diff --git a/app/src/main/java/io/legato/kazusa/ui/widget/SimpleCounterView.kt b/app/src/main/java/io/legato/kazusa/ui/widget/SimpleCounterView.kt
index 5a6c2206c..ebad0f015 100644
--- a/app/src/main/java/io/legato/kazusa/ui/widget/SimpleCounterView.kt
+++ b/app/src/main/java/io/legato/kazusa/ui/widget/SimpleCounterView.kt
@@ -8,10 +8,13 @@ import android.util.AttributeSet
import android.view.LayoutInflater
import android.view.MotionEvent
import android.widget.FrameLayout
+import android.widget.TextView
import androidx.appcompat.widget.TooltipCompat
import io.legato.kazusa.R
import io.legato.kazusa.databinding.ViewSimpleCounterBinding
import io.legato.kazusa.lib.dialogs.alert
+import io.legato.kazusa.utils.gone
+import io.legato.kazusa.utils.visible
@SuppressLint("ViewConstructor", "ClickableViewAccessibility")
class SimpleCounterView @JvmOverloads constructor(
@@ -20,7 +23,7 @@ class SimpleCounterView @JvmOverloads constructor(
) : FrameLayout(context, attrs) {
private val binding = ViewSimpleCounterBinding.inflate(LayoutInflater.from(context), this)
-
+ private var _orientation: Int = 1
private var _progress = 0
private var _max = 100
private var _min = 0
@@ -36,6 +39,7 @@ class SimpleCounterView @JvmOverloads constructor(
private val longPressDelay = 400L
private val repeatInterval = 320L
+ private val tvTit: TextView
var progress: Int
get() = _progress
@@ -68,10 +72,24 @@ class SimpleCounterView @JvmOverloads constructor(
_min = typedArray.getInt(R.styleable.DetailSeekBar_min, 0)
_progress = _progress.coerceIn(_min, _max)
+ val ta = context.obtainStyledAttributes(attrs, R.styleable.SimpleCounterView)
+ _orientation = ta.getInt(R.styleable.SimpleCounterView_orientation, 1)
+ ta.recycle()
+
+ if (_orientation == 1) {
+ tvTit = binding.tvSeekTitleVertical
+ binding.tvSeekTitle.gone()
+ binding.tvSeekTitleVertical.visible()
+ } else {
+ tvTit = binding.tvSeekTitle
+ binding.tvSeekTitle.visible()
+ binding.tvSeekTitleVertical.gone()
+ }
+
typedArray.recycle()
- binding.tvSeekTitle.text = title
- TooltipCompat.setTooltipText(binding.tvSeekTitle, title)
+ tvTit.text = title
+ TooltipCompat.setTooltipText(tvTit, title)
binding.ivSeekPlus.setOnClickListener {
if (_progress < _max) {
@@ -134,7 +152,7 @@ class SimpleCounterView @JvmOverloads constructor(
min = _min
progress = _progress
valueFormat = this@SimpleCounterView.valueFormat
- setTitle(binding.tvSeekTitle.text)
+ setTitle(tvTit.text)
onChanged = {
_progress = it
updateValue()
@@ -198,7 +216,7 @@ class SimpleCounterView @JvmOverloads constructor(
override fun setEnabled(enabled: Boolean) {
super.setEnabled(enabled)
- binding.tvSeekTitle.isEnabled = enabled
+ tvTit.isEnabled = enabled
binding.ivSeekPlus.isEnabled = enabled
binding.ivSeekReduce.isEnabled = enabled
binding.tvSeekValue.isEnabled = enabled
diff --git a/app/src/main/res/drawable/ic_cn_convert.xml b/app/src/main/res/drawable/ic_cn_convert.xml
new file mode 100644
index 000000000..ada3be056
--- /dev/null
+++ b/app/src/main/res/drawable/ic_cn_convert.xml
@@ -0,0 +1,10 @@
+
+
+
diff --git a/app/src/main/res/layout/dialog_read_book_spacing.xml b/app/src/main/res/layout/dialog_read_book_spacing.xml
new file mode 100644
index 000000000..02f9136da
--- /dev/null
+++ b/app/src/main/res/layout/dialog_read_book_spacing.xml
@@ -0,0 +1,99 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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 9aa1e69a1..851fb72ea 100644
--- a/app/src/main/res/layout/dialog_read_book_style.xml
+++ b/app/src/main/res/layout/dialog_read_book_style.xml
@@ -144,18 +144,6 @@
android:orientation="horizontal"
android:layout_marginHorizontal="16dp">
-
-
-
-
+
+ android:layout_height="0dp"
+ android:layout_weight="1" />
-
+ style="@style/Widget.Material3Expressive.Button.IconButton.Outlined"
+ app:icon="@drawable/ic_cn_convert"
+ app:iconGravity="textStart"
+ app:iconSize="16dp" />
+
+
+
+
+
-
-
-
-
-
-
-
-
+ android:textSize="12sp"
+ android:textStyle="bold" />
-
-
-
-
+ android:padding="16dp">
-
-
+ android:orientation="horizontal">
-
+ android:orientation="vertical">
-
-
+ android:layout_marginVertical="4dp"
+ android:maxWidth="48sp"
+ android:maxLines="2"
+ android:text="@string/text"
+ android:textColor="?android:attr/textColorSecondary"
+ android:textSize="12sp"
+ android:textStyle="bold"
+ tools:ignore="RtlSymmetry" />
-
+
+
+ android:gravity="center_vertical"
+ android:orientation="horizontal">
-
-
-
+
+
+
+
+
+
+
+