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"> - - - + + + + + + + +