From c35177715c61aa797ed2052c70949cd7341944b2 Mon Sep 17 00:00:00 2001 From: HapeLee <1321903405@qq.com> Date: Mon, 14 Jul 2025 02:23:23 +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 --- .../java/io/legato/kazusa/model/BookCover.kt | 3 +- .../kazusa/ui/book/manga/ReadMangaActivity.kt | 139 ++++----- .../manga/config/MangaColorFilterConfig.kt | 3 +- .../manga/config/MangaColorFilterDialog.kt | 61 +++- .../ui/book/manga/config/MangaEpaperDialog.kt | 49 ---- .../manga/config/MangaFooterSettingDialog.kt | 195 +++++++++---- .../manga/entities/EpaperTransformation.kt | 5 +- .../book/manga/recyclerview/MangaAdapter.kt | 10 +- .../legato/kazusa/ui/book/read/MangaMenu.kt | 54 +++- .../kazusa/ui/widget/SimpleCounterView.kt | 10 +- app/src/main/res/anim/popup_enter.xml | 6 +- app/src/main/res/anim/popup_exit.xml | 6 +- app/src/main/res/drawable/ic_align_center.xml | 11 + app/src/main/res/drawable/ic_align_left.xml | 11 + .../res/layout/dialog_manga_color_filter.xml | 149 ++++++++-- .../layout/dialog_manga_footer_setting.xml | 274 ++++++++++-------- app/src/main/res/layout/item_text.xml | 2 +- app/src/main/res/layout/view_manga_menu.xml | 171 +++++++---- app/src/main/res/layout/view_read_menu.xml | 3 - app/src/main/res/menu/book_manga.xml | 44 --- app/src/main/res/values-zh/strings.xml | 8 +- 21 files changed, 745 insertions(+), 469 deletions(-) delete mode 100644 app/src/main/java/io/legato/kazusa/ui/book/manga/config/MangaEpaperDialog.kt create mode 100644 app/src/main/res/drawable/ic_align_center.xml create mode 100644 app/src/main/res/drawable/ic_align_left.xml diff --git a/app/src/main/java/io/legato/kazusa/model/BookCover.kt b/app/src/main/java/io/legato/kazusa/model/BookCover.kt index 27af20416..2feaca24e 100644 --- a/app/src/main/java/io/legato/kazusa/model/BookCover.kt +++ b/app/src/main/java/io/legato/kazusa/model/BookCover.kt @@ -76,7 +76,7 @@ object BookCover { return } defaultDrawable = kotlin.runCatching { - BitmapUtils.decodeBitmap(path, 600, 900).toDrawable(appCtx.resources) + BitmapUtils.decodeBitmap(path, 600, 900)!!.toDrawable(appCtx.resources) }.getOrDefault(appCtx.resources.getDrawable(R.drawable.image_cover_default, null)) } @@ -158,6 +158,7 @@ object BookCover { } it } + .transition(DrawableTransitionOptions.withCrossFade()) } fun preloadManga( diff --git a/app/src/main/java/io/legato/kazusa/ui/book/manga/ReadMangaActivity.kt b/app/src/main/java/io/legato/kazusa/ui/book/manga/ReadMangaActivity.kt index 3a1aa7f8b..1ed13d4bb 100644 --- a/app/src/main/java/io/legato/kazusa/ui/book/manga/ReadMangaActivity.kt +++ b/app/src/main/java/io/legato/kazusa/ui/book/manga/ReadMangaActivity.kt @@ -43,7 +43,6 @@ import io.legato.kazusa.ui.book.changesource.ChangeBookSourceDialog import io.legato.kazusa.ui.book.info.BookInfoActivity import io.legato.kazusa.ui.book.manga.config.MangaColorFilterConfig import io.legato.kazusa.ui.book.manga.config.MangaColorFilterDialog -import io.legato.kazusa.ui.book.manga.config.MangaEpaperDialog import io.legato.kazusa.ui.book.manga.config.MangaFooterConfig import io.legato.kazusa.ui.book.manga.config.MangaFooterSettingDialog import io.legato.kazusa.ui.book.manga.entities.BaseMangaPage @@ -78,7 +77,7 @@ import kotlin.math.ceil class ReadMangaActivity : VMBaseActivity(), ReadManga.Callback, ChangeBookSourceDialog.CallBack, MangaMenu.CallBack, - MangaColorFilterDialog.Callback, ScrollTimer.ScrollCallback, MangaEpaperDialog.Callback { + MangaColorFilterDialog.Callback, ScrollTimer.ScrollCallback, MangaFooterSettingDialog.Callback { private val mLayoutManager by lazy { MangaLayoutManager(this) @@ -253,7 +252,7 @@ class ReadMangaActivity : VMBaseActivity { - ReadManga.book?.let { - tocActivity.launch(it.bookUrl) - } - } - R.id.menu_refresh -> { binding.flLoading.isVisible = true ReadManga.book?.let { @@ -510,35 +507,6 @@ class ReadMangaActivity : VMBaseActivity { - item.isChecked = !item.isChecked - val menuMangaAutoPageSpeed = mMenu?.findItem(R.id.menu_manga_auto_page_speed) - mScrollTimer.isEnabledPage = item.isChecked - menuMangaAutoPageSpeed?.isVisible = item.isChecked - enableAutoScrollPage = item.isChecked - enableAutoScroll = false - mScrollTimer.isEnabled = false - mMenu?.findItem(R.id.menu_enable_auto_scroll)?.isChecked = false - } - - R.id.menu_manga_auto_page_speed -> { - showNumberPickerDialog( - 1, getString(R.string.setting_manga_auto_page_speed), - AppConfig.mangaAutoPageSpeed - ) { - AppConfig.mangaAutoPageSpeed = it - item.title = getString(R.string.manga_auto_page_speed, it) - mScrollTimer.setSpeed(it) - if (enableAutoScrollPage) { - mScrollTimer.isEnabledPage = true - } - } - } - - R.id.menu_manga_footer_config -> { - showDialogFragment(MangaFooterSettingDialog()) - } - R.id.menu_enable_horizontal_scroll -> { item.isChecked = !item.isChecked AppConfig.enableMangaHorizontalScroll = item.isChecked @@ -555,11 +523,11 @@ class ReadMangaActivity : VMBaseActivity { item.isChecked = !item.isChecked mScrollTimer.isEnabled = item.isChecked - mMenu?.findItem(R.id.menu_enable_auto_page)?.isChecked = false + enableAutoScroll = item.isChecked enableAutoScrollPage = false mScrollTimer.isEnabledPage = false - mMenu?.findItem(R.id.menu_manga_auto_page_speed)?.isVisible = item.isChecked + if (enableAutoScroll) { mPagerSnapHelper.attachToRecyclerView(null) } else if (AppConfig.enableMangaHorizontalScroll) { @@ -573,18 +541,7 @@ class ReadMangaActivity : VMBaseActivity { - item.isChecked = !item.isChecked - AppConfig.enableMangaEInk = item.isChecked - mMenu?.findItem(R.id.menu_gray_manga)?.isChecked = false - AppConfig.enableMangaGray = false - mMenu?.findItem(R.id.menu_epaper_manga_setting)?.isVisible = item.isChecked - mAdapter.enableMangaEInk(item.isChecked, AppConfig.mangaEInkThreshold) - } - R.id.menu_epaper_manga_setting -> { - showDialogFragment(MangaEpaperDialog()) - } R.id.menu_disable_horizontal_animation -> { item.isChecked = !item.isChecked @@ -596,18 +553,44 @@ class ReadMangaActivity : VMBaseActivity { - item.isChecked = !item.isChecked - AppConfig.enableMangaGray = item.isChecked - mMenu?.findItem(R.id.menu_epaper_manga)?.isChecked = false - AppConfig.enableMangaEInk = false - mMenu?.findItem(R.id.menu_epaper_manga_setting)?.isVisible = false - mAdapter.enableGray(item.isChecked) - } + } return super.onCompatOptionsItemSelected(item) } + override fun openCatalog() { + ReadManga.book?.let { + tocActivity.launch(it.bookUrl) + } + } + + override fun showFooterConfig() { + showDialogFragment(MangaFooterSettingDialog().apply { + initialAutoPageEnabled = enableAutoScrollPage + initialAutoPageSpeed = AppConfig.mangaAutoPageSpeed + callback = this@ReadMangaActivity + }) + } + + override fun showColorFilterConfig() { + binding.mangaMenu.runMenuOut() + showDialogFragment(MangaColorFilterDialog()) + } + + override fun updateEpaperMode(enabled: Boolean, threshold: Int) { + AppConfig.enableMangaEInk = enabled + AppConfig.enableMangaGray = false + AppConfig.mangaEInkThreshold = threshold + mAdapter.enableMangaEInk(enabled, threshold) + } + + override fun updateGrayMode(enabled: Boolean) { + AppConfig.enableMangaGray = enabled + AppConfig.enableMangaEInk = false + mAdapter.enableGray(enabled) + } + + override fun openBookInfoActivity() { ReadManga.book?.let { bookInfoActivity.launch { @@ -617,6 +600,26 @@ class ReadMangaActivity : VMBaseActivity(AppConfig.mangaColorFilter).getOrNull() ?: MangaColorFilterConfig() - private val callback get() = activity as? Callback + private val callback: Callback? get() = activity as? Callback + + private var mMangaEInkThreshold = AppConfig.mangaEInkThreshold + override fun onStart() { super.onStart() dialog?.window?.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND) - setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT) +// setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT) } override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) { @@ -34,6 +38,17 @@ class MangaColorFilterDialog : BaseDialogFragment(R.layout.dialog_manga_color_fi private fun initData() { binding.run { + chipAutoBrightness.isChecked = mConfig.autoBrightness + + if (AppConfig.enableMangaEInk) dsbEpaper.visible() + else dsbEpaper.invisible() + + dsbEpaper.progress = mMangaEInkThreshold + + cpEpaper.isChecked = AppConfig.enableMangaEInk + cpEnableGray.isChecked = AppConfig.enableMangaGray + + dsbBrightness.isEnabled = !mConfig.autoBrightness dsbBrightness.progress = mConfig.l dsbR.progress = mConfig.r dsbG.progress = mConfig.g @@ -44,6 +59,37 @@ class MangaColorFilterDialog : BaseDialogFragment(R.layout.dialog_manga_color_fi private fun initView() { binding.run { + chipAutoBrightness.setOnCheckedChangeListener { _, isChecked -> + mConfig.autoBrightness = isChecked + dsbBrightness.isEnabled = !isChecked + callback?.updateColorFilter(mConfig) + } + + cpEpaper.setOnCheckedChangeListener { _, isChecked -> + binding.dsbEpaper.isVisible = isChecked + if (isChecked) { + cpEnableGray.isChecked = false + callback?.updateGrayMode(false) + dsbEpaper.visible() + } else dsbEpaper.invisible() + callback?.updateEpaperMode(isChecked, mMangaEInkThreshold) + } + + cpEnableGray.setOnCheckedChangeListener { _, isChecked -> + if (isChecked) { + binding.dsbEpaper.isVisible = false + cpEpaper.isChecked = false + callback?.updateEpaperMode(false, mMangaEInkThreshold) + } + dsbEpaper.invisible() + callback?.updateGrayMode(isChecked) + } + + dsbEpaper.onChanged = { + mMangaEInkThreshold = it + callback?.updateEpaperMode(true, it) + } + dsbBrightness.onChanged = { mConfig.l = it callback?.updateColorFilter(mConfig) @@ -70,10 +116,13 @@ class MangaColorFilterDialog : BaseDialogFragment(R.layout.dialog_manga_color_fi override fun onDismiss(dialog: DialogInterface) { super.onDismiss(dialog) AppConfig.mangaColorFilter = mConfig.toJson() + AppConfig.mangaEInkThreshold = mMangaEInkThreshold } interface Callback { fun updateColorFilter(config: MangaColorFilterConfig) + fun updateEpaperMode(enabled: Boolean, threshold: Int) + fun updateGrayMode(enabled: Boolean) } } \ No newline at end of file diff --git a/app/src/main/java/io/legato/kazusa/ui/book/manga/config/MangaEpaperDialog.kt b/app/src/main/java/io/legato/kazusa/ui/book/manga/config/MangaEpaperDialog.kt deleted file mode 100644 index bdeee6619..000000000 --- a/app/src/main/java/io/legato/kazusa/ui/book/manga/config/MangaEpaperDialog.kt +++ /dev/null @@ -1,49 +0,0 @@ -package io.legato.kazusa.ui.book.manga.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.databinding.DialogMangaEpaperBinding -import io.legato.kazusa.help.config.AppConfig -import io.legato.kazusa.utils.viewbindingdelegate.viewBinding - - -class MangaEpaperDialog : BaseBottomSheetDialogFragment(R.layout.dialog_manga_epaper) { - private val binding by viewBinding(DialogMangaEpaperBinding::bind) - private val callback get() = activity as? Callback - private var mMangaEInkThreshold = 150 - -// 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?) { - initData() - initView() - } - - private fun initData() { - binding.dsbEpaper.progress = AppConfig.mangaEInkThreshold - } - - private fun initView() { - binding.dsbEpaper.onChanged = { - mMangaEInkThreshold = it - callback?.updateEepaper(it) - } - } - - override fun onDismiss(dialog: DialogInterface) { - super.onDismiss(dialog) - AppConfig.mangaEInkThreshold = mMangaEInkThreshold - } - - interface Callback { - fun updateEepaper(value: Int) - } - -} \ No newline at end of file diff --git a/app/src/main/java/io/legato/kazusa/ui/book/manga/config/MangaFooterSettingDialog.kt b/app/src/main/java/io/legato/kazusa/ui/book/manga/config/MangaFooterSettingDialog.kt index 16fbc4f1b..d555a56dc 100644 --- a/app/src/main/java/io/legato/kazusa/ui/book/manga/config/MangaFooterSettingDialog.kt +++ b/app/src/main/java/io/legato/kazusa/ui/book/manga/config/MangaFooterSettingDialog.kt @@ -3,9 +3,9 @@ package io.legato.kazusa.ui.book.manga.config import android.content.DialogInterface import android.os.Bundle import android.view.View -import android.view.ViewGroup +import androidx.transition.TransitionManager import io.legato.kazusa.R -import io.legato.kazusa.base.BaseDialogFragment +import io.legato.kazusa.base.BaseBottomSheetDialogFragment import io.legato.kazusa.constant.EventBus import io.legato.kazusa.databinding.DialogMangaFooterSettingBinding import io.legato.kazusa.help.config.AppConfig @@ -13,100 +13,187 @@ import io.legato.kazusa.ui.widget.ReaderInfoBarView import io.legato.kazusa.utils.GSON import io.legato.kazusa.utils.fromJsonObject import io.legato.kazusa.utils.postEvent -import io.legato.kazusa.utils.setLayout import io.legato.kazusa.utils.viewbindingdelegate.viewBinding -class MangaFooterSettingDialog : BaseDialogFragment(R.layout.dialog_manga_footer_setting) { +class MangaFooterSettingDialog : + BaseBottomSheetDialogFragment(R.layout.dialog_manga_footer_setting) { + val config = GSON.fromJsonObject(AppConfig.mangaFooterConfig).getOrNull() ?: MangaFooterConfig() + + var callback: Callback? = null + + var initialAutoPageEnabled: Boolean = false + var initialAutoPageSpeed: Int = 3 + private val binding by viewBinding(DialogMangaFooterSettingBinding::bind) override fun onStart() { super.onStart() - setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT) + } override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) { + binding.cbChapterLabel.run { - isChecked = config.hideChapterLabel + isChecked = !config.hideChapterLabel setOnCheckedChangeListener { _, isChecked -> - config.hideChapterLabel = isChecked + config.hideChapterLabel = !isChecked postEvent(EventBus.UP_MANGA_CONFIG, config) + updateChapterText() + if (isChecked) binding.cbChapter.isChecked = true } } + binding.cbChapter.run { - isChecked = config.hideChapter + isChecked = !config.hideChapter setOnCheckedChangeListener { _, isChecked -> - config.hideChapter = isChecked - postEvent(EventBus.UP_MANGA_CONFIG, config) - } - } - binding.cbPageNumberLabel.run { - isChecked = config.hidePageNumberLabel - setOnCheckedChangeListener { _, isChecked -> - config.hidePageNumberLabel = isChecked - postEvent(EventBus.UP_MANGA_CONFIG, config) - } - } - binding.cbPageNumber.run { - isChecked = config.hidePageNumber - setOnCheckedChangeListener { _, isChecked -> - config.hidePageNumber = isChecked - postEvent(EventBus.UP_MANGA_CONFIG, config) - } - } - binding.cbProgressRatioLabel.run { - isChecked = config.hideProgressRatioLabel - setOnCheckedChangeListener { _, isChecked -> - config.hideProgressRatioLabel = isChecked - postEvent(EventBus.UP_MANGA_CONFIG, config) - } - } - binding.cbProgressRatio.run { - isChecked = config.hideProgressRatio - setOnCheckedChangeListener { _, isChecked -> - config.hideProgressRatio = isChecked + config.hideChapter = !isChecked postEvent(EventBus.UP_MANGA_CONFIG, config) + updateChapterText() + if (!isChecked) binding.cbChapterLabel.isChecked = false } } + binding.cbChapterName.run { - isChecked = config.hideChapterName + isChecked = !config.hideChapterName setOnCheckedChangeListener { _, isChecked -> - config.hideChapterName = isChecked + config.hideChapterName = !isChecked postEvent(EventBus.UP_MANGA_CONFIG, config) + updateChapterText() } } - binding.rgFooterOrientation.check(if (config.footerOrientation == ReaderInfoBarView.ALIGN_CENTER) R.id.rb_center else R.id.rb_left) - binding.rgFooterOrientation.setOnCheckedChangeListener { _, checkedId -> - when (checkedId) { + + binding.cbPageNumberLabel.run { + isChecked = !config.hidePageNumberLabel + setOnCheckedChangeListener { _, isChecked -> + config.hidePageNumberLabel = !isChecked + postEvent(EventBus.UP_MANGA_CONFIG, config) + updateChapterText() + if (isChecked) binding.cbPageNumber.isChecked = true + } + } + + binding.cbPageNumber.run { + isChecked = !config.hidePageNumber + setOnCheckedChangeListener { _, isChecked -> + config.hidePageNumber = !isChecked + postEvent(EventBus.UP_MANGA_CONFIG, config) + updateChapterText() + if (!isChecked) binding.cbPageNumberLabel.isChecked = false + } + } + + binding.cbProgressRatioLabel.run { + isChecked = !config.hideProgressRatioLabel + setOnCheckedChangeListener { _, isChecked -> + config.hideProgressRatioLabel = !isChecked + postEvent(EventBus.UP_MANGA_CONFIG, config) + updateChapterText() + if (isChecked) binding.cbProgressRatio.isChecked = true + } + } + + binding.cbProgressRatio.run { + isChecked = !config.hideProgressRatio + setOnCheckedChangeListener { _, isChecked -> + config.hideProgressRatio = !isChecked + postEvent(EventBus.UP_MANGA_CONFIG, config) + updateChapterText() + if (!isChecked) binding.cbProgressRatioLabel.isChecked = false + } + } + + binding.rgFooterOrientation.check( + when { + config.hideFooter -> R.id.rb_hide + config.footerOrientation == ReaderInfoBarView.ALIGN_CENTER -> R.id.rb_center + else -> R.id.rb_left + } + ) + + binding.rgFooterOrientation.setOnCheckedStateChangeListener { _, checkedIds -> + when (checkedIds.firstOrNull()) { R.id.rb_left -> { + config.hideFooter = false config.footerOrientation = ReaderInfoBarView.ALIGN_LEFT } - R.id.rb_center -> { + config.hideFooter = false config.footerOrientation = ReaderInfoBarView.ALIGN_CENTER } - } - postEvent(EventBus.UP_MANGA_CONFIG, config) - } - - binding.rgFooter.check(if (config.hideFooter) R.id.rb_hide else R.id.rb_show) - binding.rgFooter.setOnCheckedChangeListener { _, checkedId -> - when (checkedId) { - R.id.rb_show -> { - config.hideFooter = false - } - R.id.rb_hide -> { config.hideFooter = true } } postEvent(EventBus.UP_MANGA_CONFIG, config) } + + + binding.chipAutoPage.run { + isChecked = initialAutoPageEnabled + setOnCheckedChangeListener { _, isChecked -> + callback?.onAutoPageToggle(isChecked) + initAutoPageSpeed(isChecked) + } + } + + binding.btnColorFilter.setOnClickListener { + callback?.showColorFilterConfig() + dismiss() + } + + initAutoPageSpeed(initialAutoPageEnabled) + + updateChapterText() + } + + private fun initAutoPageSpeed(boolean: Boolean) { + TransitionManager.beginDelayedTransition(binding.rootView) + binding.scvAutoPageSpeed.run { + isEnabled = boolean + valueFormat = { "$it 秒" } + progress = initialAutoPageSpeed + + onChanged = { newValue -> + callback?.onAutoPageSpeedChanged(newValue) + } + } } override fun onDismiss(dialog: DialogInterface) { super.onDismiss(dialog) AppConfig.mangaFooterConfig = GSON.toJson(config) } + + private fun updateChapterText() { + val label = if (!config.hideChapterLabel) "章节" else "" + val chapter = if (!config.hideChapter) "1/45 " else "" + val name = if (!config.hideChapterName) "第三话 " else "" + + val progressLabel = if (!config.hideProgressRatioLabel) "总进度" else "" + val progress = if (!config.hideProgressRatio) "2.1%" else "" + + val pageLabel = if (!config.hidePageNumberLabel) "页数" else "" + val page = if (!config.hidePageNumber) "4/30 " else "" + + val parts = listOf( + name, + pageLabel, + page, + label, + chapter, + progressLabel, + progress + ).filter { it.isNotEmpty() } + TransitionManager.beginDelayedTransition(binding.rootView) + binding.tvChapter.text = parts.joinToString(" ") + } + + interface Callback { + fun onAutoPageToggle(enable: Boolean) + fun onAutoPageSpeedChanged(speed: Int) + fun showColorFilterConfig() + } + } \ No newline at end of file diff --git a/app/src/main/java/io/legato/kazusa/ui/book/manga/entities/EpaperTransformation.kt b/app/src/main/java/io/legato/kazusa/ui/book/manga/entities/EpaperTransformation.kt index c6bc81517..f4312c5ee 100644 --- a/app/src/main/java/io/legato/kazusa/ui/book/manga/entities/EpaperTransformation.kt +++ b/app/src/main/java/io/legato/kazusa/ui/book/manga/entities/EpaperTransformation.kt @@ -22,9 +22,8 @@ class EpaperTransformation( @IntRange(0, 255) private val threshold: Int = 128, ) : BitmapTransformation() { - private val ID = - "io.legado.app.model.EpaperTransformation.${threshold}" - private val ID_BYTES = ID.toByteArray(CHARSET) + private val ID get() = "io.legado.app.model.EpaperTransformation.$threshold" + private val ID_BYTES get() = ID.toByteArray(CHARSET) override fun transform( pool: BitmapPool, diff --git a/app/src/main/java/io/legato/kazusa/ui/book/manga/recyclerview/MangaAdapter.kt b/app/src/main/java/io/legato/kazusa/ui/book/manga/recyclerview/MangaAdapter.kt index a0b3b6cbd..4415df975 100644 --- a/app/src/main/java/io/legato/kazusa/ui/book/manga/recyclerview/MangaAdapter.kt +++ b/app/src/main/java/io/legato/kazusa/ui/book/manga/recyclerview/MangaAdapter.kt @@ -253,21 +253,13 @@ class MangaAdapter(private val context: Context) : fun enableMangaEInk(enable: Boolean, value: Int) { if (enable) { currentMangaEInkThreshold = value - mTransformation = EpaperTransformation(currentMangaEInkThreshold) + mTransformation = EpaperTransformation(value) } else { mTransformation = null } notifyItemRangeChanged(0, itemCount) } - fun updateThreshold(mangaEInkThreshold: Int) { - if (currentMangaEInkThreshold != mangaEInkThreshold) { - currentMangaEInkThreshold = mangaEInkThreshold - mTransformation = EpaperTransformation(currentMangaEInkThreshold) - notifyItemRangeChanged(0, itemCount) - } - } - //开启灰色图片 fun enableGray(enable: Boolean) { mTransformation = if (enable) { diff --git a/app/src/main/java/io/legato/kazusa/ui/book/read/MangaMenu.kt b/app/src/main/java/io/legato/kazusa/ui/book/read/MangaMenu.kt index dee11bb0e..b281a4f12 100644 --- a/app/src/main/java/io/legato/kazusa/ui/book/read/MangaMenu.kt +++ b/app/src/main/java/io/legato/kazusa/ui/book/read/MangaMenu.kt @@ -1,8 +1,8 @@ package io.legato.kazusa.ui.book.read +//import io.legado.app.lib.theme.bottomBackground import android.annotation.SuppressLint import android.content.Context -import android.graphics.drawable.GradientDrawable import android.util.AttributeSet import android.view.LayoutInflater import android.view.animation.Animation @@ -15,14 +15,12 @@ import io.legato.kazusa.databinding.ViewMangaMenuBinding import io.legato.kazusa.help.config.AppConfig import io.legato.kazusa.help.source.getSourceType import io.legato.kazusa.lib.dialogs.alert -//import io.legado.app.lib.theme.bottomBackground import io.legato.kazusa.model.ReadBook import io.legato.kazusa.model.ReadManga import io.legato.kazusa.ui.browser.WebViewActivity import io.legato.kazusa.utils.ConstraintModify import io.legato.kazusa.utils.activity import io.legato.kazusa.utils.applyNavigationBarPadding -import io.legato.kazusa.utils.dpToPx import io.legato.kazusa.utils.gone import io.legato.kazusa.utils.invisible import io.legato.kazusa.utils.loadAnimation @@ -95,15 +93,15 @@ class MangaMenu @JvmOverloads constructor( private fun initView() = binding.run { initAnimation() - val brightnessBackground = GradientDrawable() - brightnessBackground.cornerRadius = 5F.dpToPx() - //brightnessBackground.setColor(ColorUtils.adjustAlpha(bgColor, 0.5f)) - if (AppConfig.isEInkMode) { - titleBar.setBackgroundResource(R.drawable.bg_eink_border_bottom) - bottomMenu.setBackgroundResource(R.drawable.bg_eink_border_top) - } else { - //bottomMenu.setBackgroundColor(bgColor) - } +// val brightnessBackground = GradientDrawable() +// brightnessBackground.cornerRadius = 5F.dpToPx() +// //brightnessBackground.setColor(ColorUtils.adjustAlpha(bgColor, 0.5f)) +// if (AppConfig.isEInkMode) { +// titleBar.setBackgroundResource(R.drawable.bg_eink_border_bottom) +// bottomMenu.setBackgroundResource(R.drawable.bg_eink_border_top) +// } else { +// //bottomMenu.setBackgroundColor(bgColor) +// } if (AppConfig.showReadTitleBarAddition) { titleBarAddition.visible() } else { @@ -113,7 +111,7 @@ class MangaMenu @JvmOverloads constructor( /** * 确保视图不被导航栏遮挡 */ - bottomMenu.applyNavigationBarPadding() + bottomView.applyNavigationBarPadding() } private fun upBrightnessVwPos() { @@ -163,6 +161,18 @@ class MangaMenu @JvmOverloads constructor( } } + fun upBookView() { + binding.titleBar.title = " " + binding.tvBookName.text = ReadManga.book?.name + ReadManga.curMangaChapter?.let { + binding.tvChapterName.text = ReadManga.book?.durChapterTitle + binding.tvPre.isEnabled = ReadManga.durChapterIndex != 0 + binding.tvNext.isEnabled = + ReadManga.durChapterIndex != ReadManga.simulatedChapterSize - 1 + } ?: let { + binding.tvChapterUrl.gone() + } + } private fun bindEvent() = binding.run { vwMenuBg.setOnClickListener { runMenuOut() } @@ -224,14 +234,26 @@ class MangaMenu @JvmOverloads constructor( } }) + ivCatalog.setOnClickListener { + callBack.openCatalog() + } + + ivSetting.setOnClickListener { + callBack.showFooterConfig() + } + + btnAutoPage.setOnClickListener { + callBack.showFooterConfig() + } + } fun upSeekBar(value: Int, count: Int) { binding.seekReadPage.apply { valueFrom = 1f - valueTo = (count).toFloat() - this.value = value.toFloat().coerceIn(1f,valueFrom) + valueTo = count.toFloat() stepSize = 1f + this.value = value.toFloat().coerceIn(valueFrom, valueTo) } } @@ -239,6 +261,8 @@ class MangaMenu @JvmOverloads constructor( fun openBookInfoActivity() fun upSystemUiVisibility(menuIsVisible: Boolean) fun skipToPage(index: Int) + fun openCatalog() + fun showFooterConfig() } } \ No newline at end of file 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 caeae3f47..27c2b9483 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 @@ -143,8 +143,6 @@ class SimpleCounterView @JvmOverloads constructor( } } - - private fun updateValue() { binding.tvSeekValue.text = valueFormat?.invoke(_progress) ?: _progress.toString() } @@ -185,4 +183,12 @@ class SimpleCounterView @JvmOverloads constructor( super.onDetachedFromWindow() } + override fun setEnabled(enabled: Boolean) { + super.setEnabled(enabled) + binding.tvSeekTitle.isEnabled = enabled + binding.ivSeekPlus.isEnabled = enabled + binding.ivSeekReduce.isEnabled = enabled + binding.tvSeekValue.isEnabled = enabled + } + } diff --git a/app/src/main/res/anim/popup_enter.xml b/app/src/main/res/anim/popup_enter.xml index e9d19c5a0..f218d4b8e 100644 --- a/app/src/main/res/anim/popup_enter.xml +++ b/app/src/main/res/anim/popup_enter.xml @@ -2,11 +2,11 @@ + android:fromYDelta="8%" /> + android:duration="240" /> diff --git a/app/src/main/res/anim/popup_exit.xml b/app/src/main/res/anim/popup_exit.xml index 67de2a5a2..eec549a81 100644 --- a/app/src/main/res/anim/popup_exit.xml +++ b/app/src/main/res/anim/popup_exit.xml @@ -1,12 +1,8 @@ - + android:duration="240" /> diff --git a/app/src/main/res/drawable/ic_align_center.xml b/app/src/main/res/drawable/ic_align_center.xml new file mode 100644 index 000000000..86d0528a5 --- /dev/null +++ b/app/src/main/res/drawable/ic_align_center.xml @@ -0,0 +1,11 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_align_left.xml b/app/src/main/res/drawable/ic_align_left.xml new file mode 100644 index 000000000..4f20c1989 --- /dev/null +++ b/app/src/main/res/drawable/ic_align_left.xml @@ -0,0 +1,11 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/dialog_manga_color_filter.xml b/app/src/main/res/layout/dialog_manga_color_filter.xml index 1e3edd368..30a00ab79 100644 --- a/app/src/main/res/layout/dialog_manga_color_filter.xml +++ b/app/src/main/res/layout/dialog_manga_color_filter.xml @@ -3,54 +3,147 @@ xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" - android:padding="16dp"> + android:paddingHorizontal="16dp" + android:paddingVertical="8dp"> - - - + android:gravity="center" + android:orientation="vertical" + android:paddingHorizontal="16dp" + android:paddingVertical="8dp"> - + + + + + + + android:gravity="center_vertical"> - + + + + + + + + android:gravity="center_vertical" + android:orientation="horizontal"> - + + + + + + + + + + + + android:gravity="center_vertical"> - + + + + + + + + android:gravity="center_vertical"> + + + + + + + diff --git a/app/src/main/res/layout/dialog_manga_footer_setting.xml b/app/src/main/res/layout/dialog_manga_footer_setting.xml index f8a21af87..4003426a4 100644 --- a/app/src/main/res/layout/dialog_manga_footer_setting.xml +++ b/app/src/main/res/layout/dialog_manga_footer_setting.xml @@ -2,168 +2,202 @@ + xmlns:app="http://schemas.android.com/apk/res-auto" + android:paddingHorizontal="16dp" + android:paddingVertical="8dp"> - - - - + android:gravity="center" + android:orientation="vertical" + android:paddingHorizontal="16dp" + android:paddingVertical="8dp"> - + + + android:text="漫画设置" + android:textSize="18sp" + android:textStyle="bold" /> - - - - - + android:gravity="center_vertical" + android:orientation="horizontal"> - + + + + + + + + + + + + + + + + + + + + + + + + + - - + style="@style/Widget.Material3.Chip.Suggestion" + android:text="4/30" /> - + + + android:layout_height="wrap_content"> - + - + + - + style="@style/Widget.Material3.Chip.Suggestion" + android:text="2.1%" /> + + + + + + + + + + - + android:text="@string/manga_color_filter" /> - - - - - - - - - - - - - diff --git a/app/src/main/res/layout/item_text.xml b/app/src/main/res/layout/item_text.xml index 9ad6c0b61..28ab14fae 100644 --- a/app/src/main/res/layout/item_text.xml +++ b/app/src/main/res/layout/item_text.xml @@ -7,7 +7,7 @@ android:background="?attr/selectableItemBackground" android:ellipsize="end" android:gravity="center" - android:padding="5dp" + android:padding="8dp" android:maxLines="1" android:scrollbars="none" android:textSize="14sp" diff --git a/app/src/main/res/layout/view_manga_menu.xml b/app/src/main/res/layout/view_manga_menu.xml index d6b67e5bd..211be1836 100644 --- a/app/src/main/res/layout/view_manga_menu.xml +++ b/app/src/main/res/layout/view_manga_menu.xml @@ -19,64 +19,60 @@ android:id="@+id/title_bar" android:layout_width="match_parent" android:layout_height="wrap_content" - android:theme="?attr/actionBarStyle" + android:alpha="0.92" + android:background="?attr/colorSurfaceContainer" app:layout_constraintTop_toTopOf="parent"> - + android:layout_height="wrap_content" + android:orientation="vertical" + android:paddingHorizontal="16dp"> - - - - + android:layout_height="wrap_content" + android:singleLine="true" /> - + + + + + + + + + @@ -84,10 +80,8 @@ @@ -99,12 +93,20 @@ app:icon="@drawable/ic_previous" tools:ignore="TouchTargetSizeCheck" /> - + android:layout_height="wrap_content" + android:layout_weight="1" + app:cardBackgroundColor="?attr/colorSurfaceContainer" + app:cardCornerRadius="32dp" + app:strokeWidth="0dp"> + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/view_read_menu.xml b/app/src/main/res/layout/view_read_menu.xml index 3736df032..7c5576991 100644 --- a/app/src/main/res/layout/view_read_menu.xml +++ b/app/src/main/res/layout/view_read_menu.xml @@ -66,9 +66,6 @@ - - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index 4f6590f25..7a7c6c7da 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -1200,15 +1200,15 @@ 页数. %1$d/%2$d 章节. %3$d/%4$d -> %5$s%% 下载之后章节 下载全部章节 - 《章节和文案》隐藏 - 《章节.》文案 + 章节显示设置 + 章节 章节 章节名称 《页数和文案》隐藏 - 《页数.》文案 + 页数 页数 《总进度和文案》隐藏 - 《总进度.》文案 + 总进度 总进度 页脚 靠左