更新界面

This commit is contained in:
HapeLee
2025-07-14 02:23:23 +08:00
parent 06dd2ac2c1
commit c35177715c
21 changed files with 745 additions and 469 deletions
@@ -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(
@@ -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<ActivityMangaBinding, ReadMangaViewModel>(),
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<ActivityMangaBinding, ReadMangaViewMode
override fun upContent() {
lifecycleScope.launch {
setTitle(ReadManga.book?.name)
binding.mangaMenu.upBookView()
val data = withContext(IO) { ReadManga.mangaContents }
val pos = data.pos
val list = data.items
@@ -450,7 +449,11 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
override fun updateColorFilter(config: MangaColorFilterConfig) {
mAdapter.setMangaImageColorFilter(config)
updateWindowBrightness(config.l)
if (config.autoBrightness) {
resetWindowToSystemBrightness()
} else {
updateWindowBrightness(config.l)
}
}
@SuppressLint("StringFormatMatches")
@@ -473,12 +476,6 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
}
}
R.id.menu_catalog -> {
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<ActivityMangaBinding, ReadMangaViewMode
setDisableClickScroll(item.isChecked)
}
R.id.menu_enable_auto_page -> {
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<ActivityMangaBinding, ReadMangaViewMode
R.id.menu_enable_auto_scroll -> {
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<ActivityMangaBinding, ReadMangaViewMode
ReadManga.loadContent()
}
R.id.menu_epaper_manga -> {
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<ActivityMangaBinding, ReadMangaViewMode
}
}
R.id.menu_gray_manga -> {
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<ActivityMangaBinding, ReadMangaViewMode
}
}
override fun onAutoPageToggle(enabled: Boolean) {
mScrollTimer.isEnabledPage = enabled
mScrollTimer.isEnabled = false
enableAutoScrollPage = enabled
enableAutoScroll = false
mMenu?.findItem(R.id.menu_enable_auto_scroll)?.isChecked = false
}
override fun onAutoPageSpeedChanged(speed: Int) {
AppConfig.mangaAutoPageSpeed = speed
mScrollTimer.setSpeed(speed)
if (enableAutoScrollPage) {
mScrollTimer.isEnabledPage = true
}
}
override fun upSystemUiVisibility(menuIsVisible: Boolean) {
toggleSystemBar(menuIsVisible)
if (enableAutoScroll) {
@@ -680,19 +683,16 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
getString(R.string.pre_download_m, AppConfig.mangaPreDownloadNum)
menu.findItem(R.id.menu_disable_manga_scale).isChecked = AppConfig.disableMangaScale
menu.findItem(R.id.menu_disable_click_scroll).isChecked = AppConfig.disableClickScroll
menu.findItem(R.id.menu_manga_auto_page_speed).title =
getString(R.string.manga_auto_page_speed, AppConfig.mangaAutoPageSpeed)
menu.findItem(R.id.menu_enable_horizontal_scroll).isChecked =
AppConfig.enableMangaHorizontalScroll
menu.findItem(R.id.menu_hide_manga_title).isChecked = AppConfig.hideMangaTitle
menu.findItem(R.id.menu_epaper_manga).isChecked = AppConfig.enableMangaEInk
menu.findItem(R.id.menu_epaper_manga_setting).isVisible = AppConfig.enableMangaEInk
menu.findItem(R.id.menu_disable_horizontal_animation).run {
isVisible =
AppConfig.enableMangaHorizontalScroll
isChecked = AppConfig.disableHorizontalAnimator
}
menu.findItem(R.id.menu_gray_manga).isChecked = AppConfig.enableMangaGray
}
private fun setDisableMangaScale(disable: Boolean) {
@@ -782,6 +782,11 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
}
}
}
fun resetWindowToSystemBrightness() {
val layoutParams = window.attributes
layoutParams.screenBrightness = WindowManager.LayoutParams.BRIGHTNESS_OVERRIDE_NONE
window.attributes = layoutParams
}
fun updateWindowBrightness(brightness: Int) {
val layoutParams = window.attributes
@@ -832,7 +837,5 @@ class ReadMangaActivity : VMBaseActivity<ActivityMangaBinding, ReadMangaViewMode
return super.onKeyDown(keyCode, event)
}
override fun updateEepaper(value: Int) {
mAdapter.updateThreshold(value)
}
}
@@ -7,7 +7,8 @@ data class MangaColorFilterConfig(
var g: Int = 0,
var b: Int = 0,
var a: Int = 0,
var l: Int = 0
var l: Int = 0,
var autoBrightness: Boolean = true
) {
fun toJson(): String {
if (r == 0 && g == 0 && b == 0 && a == 0 && l == 0) {
@@ -3,28 +3,32 @@ 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 android.view.WindowManager
import androidx.core.view.isVisible
import io.legato.kazusa.R
import io.legato.kazusa.base.BaseDialogFragment
import io.legato.kazusa.base.BaseBottomSheetDialogFragment
import io.legato.kazusa.databinding.DialogMangaColorFilterBinding
import io.legato.kazusa.help.config.AppConfig
import io.legato.kazusa.utils.GSON
import io.legato.kazusa.utils.fromJsonObject
import io.legato.kazusa.utils.setLayout
import io.legato.kazusa.utils.invisible
import io.legato.kazusa.utils.viewbindingdelegate.viewBinding
import io.legato.kazusa.utils.visible
class MangaColorFilterDialog : BaseDialogFragment(R.layout.dialog_manga_color_filter) {
class MangaColorFilterDialog : BaseBottomSheetDialogFragment(R.layout.dialog_manga_color_filter) {
private val binding by viewBinding(DialogMangaColorFilterBinding::bind)
private val mConfig =
GSON.fromJsonObject<MangaColorFilterConfig>(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)
}
}
@@ -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)
}
}
@@ -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<MangaFooterConfig>(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()
}
}
@@ -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,
@@ -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) {
@@ -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()
}
}
@@ -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
}
}
+3 -3
View File
@@ -2,11 +2,11 @@
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:interpolator/decelerate_cubic">
<translate
android:fromYDelta="100%"
android:duration="240"
android:toYDelta="0%"
android:duration="280"/>
android:fromYDelta="8%" />
<alpha
android:fromAlpha="0.0"
android:toAlpha="1.0"
android:duration="280"/>
android:duration="240" />
</set>
+1 -5
View File
@@ -1,12 +1,8 @@
<?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:fromYDelta="0%"
android:toYDelta="100%"
android:duration="280"/>
<alpha
android:fromAlpha="1.0"
android:toAlpha="0.0"
android:duration="280"/>
android:duration="240" />
</set>
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:tint="?attr/colorControlNormal"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="@android:color/white"
android:pathData="M80,520L80,440L880,440L880,520L80,520ZM280,400L280,280L680,280L680,400L280,400ZM280,680L280,560L680,560L680,680L280,680Z" />
</vector>
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:tint="?attr/colorControlNormal"
android:viewportWidth="960"
android:viewportHeight="960">
<path
android:fillColor="@android:color/white"
android:pathData="M80,880L80,80L160,80L160,880L80,880ZM520,680L520,280L640,280L640,680L520,680ZM280,680L280,280L400,280L400,680L280,680Z" />
</vector>
@@ -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">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<io.legato.kazusa.ui.widget.text.AccentTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingBottom="8dp"
android:text="@string/manga_color_filter"
android:textSize="18sp" />
<io.legato.kazusa.ui.widget.DetailSeekBar
android:id="@+id/dsb_brightness"
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:max="255"
app:title="@string/brightness" />
android:gravity="center"
android:orientation="vertical"
android:paddingHorizontal="16dp"
android:paddingVertical="8dp">
<io.legato.kazusa.ui.widget.DetailSeekBar
android:id="@+id/dsb_r"
<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" />
<TextView
android:id="@+id/bottom_sheet_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/manga_color_filter"
android:textSize="18sp"
android:textStyle="bold" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:max="255"
app:title="R" />
android:gravity="center_vertical">
<io.legato.kazusa.ui.widget.DetailSeekBar
android:id="@+id/dsb_g"
<io.legato.kazusa.ui.widget.SimpleCounterView
android:id="@+id/dsb_brightness"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:max="255"
app:title="@string/brightness" />
<View
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1" />
<com.google.android.material.chip.Chip
android:id="@+id/chip_autoBrightness"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="跟随系统" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:max="255"
app:title="G" />
android:gravity="center_vertical"
android:orientation="horizontal">
<io.legato.kazusa.ui.widget.DetailSeekBar
android:id="@+id/dsb_b"
<com.google.android.material.chip.Chip
android:id="@+id/cp_epaper"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:text="@string/manga_epaper" />
<com.google.android.material.chip.Chip
android:id="@+id/cp_enableGray"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="灰度" />
<View
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1" />
<io.legato.kazusa.ui.widget.SimpleCounterView
android:id="@+id/dsbEpaper"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:max="255"
app:title="阈值" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:max="255"
app:title="B" />
android:gravity="center_vertical">
<io.legato.kazusa.ui.widget.DetailSeekBar
android:id="@+id/dsb_a"
<io.legato.kazusa.ui.widget.SimpleCounterView
android:id="@+id/dsb_r"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:max="255"
app:title="R" />
<View
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1" />
<io.legato.kazusa.ui.widget.SimpleCounterView
android:id="@+id/dsb_g"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:max="255"
app:title="G" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:max="255"
app:title="A" />
android:gravity="center_vertical">
<io.legato.kazusa.ui.widget.SimpleCounterView
android:id="@+id/dsb_b"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:max="255"
app:title="B" />
<View
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1" />
<io.legato.kazusa.ui.widget.SimpleCounterView
android:id="@+id/dsb_a"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:max="255"
app:title="A" />
</LinearLayout>
</LinearLayout>
@@ -2,168 +2,202 @@
<androidx.core.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="16dp">
xmlns:app="http://schemas.android.com/apk/res-auto"
android:paddingHorizontal="16dp"
android:paddingVertical="8dp">
<LinearLayout
android:id="@+id/root_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<io.legato.kazusa.ui.widget.text.AccentTextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/manga_footer_config"
android:textSize="18sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="@string/manga_header_chapter"
android:textSize="14sp" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="8dp">
android:gravity="center"
android:orientation="vertical"
android:paddingHorizontal="16dp"
android:paddingVertical="8dp">
<io.legato.kazusa.lib.theme.view.ThemeCheckBox
android:id="@+id/cb_chapter_label"
<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" />
<TextView
android:id="@+id/bottom_sheet_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:text="@string/manga_check_chapter_label" />
android:text="漫画设置"
android:textSize="18sp"
android:textStyle="bold" />
<io.legato.kazusa.lib.theme.view.ThemeCheckBox
android:id="@+id/cb_chapter"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:gravity="center"
android:text="@string/manga_check_chapter" />
<io.legato.kazusa.lib.theme.view.ThemeCheckBox
android:id="@+id/cb_chapter_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:gravity="center"
android:text="@string/manga_check_chapter_name" />
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="@string/manga_header_page"
android:textSize="14sp" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="8dp">
android:gravity="center_vertical"
android:orientation="horizontal">
<io.legato.kazusa.lib.theme.view.ThemeCheckBox
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:text="@string/footer"
android:textSize="14sp" />
<View
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1" />
<com.google.android.material.chip.ChipGroup
android:id="@+id/rg_footer_orientation"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:selectionRequired="true"
app:singleSelection="true">
<com.google.android.material.chip.Chip
android:id="@+id/rb_left"
style="@style/Widget.Material3.Chip.Suggestion"
android:layout_width="34dp"
android:layout_height="wrap_content"
app:chipIcon="@drawable/ic_align_left"
app:chipIconEnabled="true" />
<com.google.android.material.chip.Chip
android:id="@+id/rb_center"
style="@style/Widget.Material3.Chip.Suggestion"
android:layout_width="34dp"
android:layout_height="wrap_content"
app:chipIcon="@drawable/ic_align_center"
app:chipIconEnabled="true" />
<com.google.android.material.chip.Chip
android:id="@+id/rb_hide"
style="@style/Widget.Material3.Chip.Suggestion"
android:layout_width="34dp"
android:layout_height="wrap_content"
app:chipIcon="@drawable/ic_visibility_off"
app:chipIconEnabled="true" />
</com.google.android.material.chip.ChipGroup>
</LinearLayout>
<com.google.android.material.card.MaterialCardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginVertical="8dp"
app:cardBackgroundColor="?attr/colorSurfaceVariant"
app:cardCornerRadius="8dp"
app:strokeWidth="0dp">
<TextView
android:id="@+id/tv_chapter"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="8dp" />
</com.google.android.material.card.MaterialCardView>
<com.google.android.material.chip.ChipGroup
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.google.android.material.chip.Chip
android:id="@+id/cb_chapter_name"
style="@style/Widget.Material3.Chip.Suggestion"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="第三话" />
<com.google.android.material.chip.Chip
android:id="@+id/cb_page_number_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
style="@style/Widget.Material3.Chip.Suggestion"
android:text="@string/manga_check_page_label" />
<io.legato.kazusa.lib.theme.view.ThemeCheckBox
<com.google.android.material.chip.Chip
android:id="@+id/cb_page_number"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:gravity="center"
android:text="@string/manga_check_page_number" />
</LinearLayout>
style="@style/Widget.Material3.Chip.Suggestion"
android:text="4/30" />
<TextView
</com.google.android.material.chip.ChipGroup>
<com.google.android.material.chip.ChipGroup
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="@string/manga_header_progress"
android:textSize="14sp" />
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="8dp">
<com.google.android.material.chip.Chip
android:id="@+id/cb_chapter_label"
style="@style/Widget.Material3.Chip.Suggestion"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/manga_check_chapter_label" />
<io.legato.kazusa.lib.theme.view.ThemeCheckBox
<com.google.android.material.chip.Chip
android:id="@+id/cb_chapter"
style="@style/Widget.Material3.Chip.Suggestion"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="1 / 45" />
<com.google.android.material.chip.Chip
android:id="@+id/cb_progress_ratio_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
style="@style/Widget.Material3.Chip.Suggestion"
android:text="@string/manga_check_progress_label" />
<io.legato.kazusa.lib.theme.view.ThemeCheckBox
<com.google.android.material.chip.Chip
android:id="@+id/cb_progress_ratio"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:gravity="center"
android:text="@string/manga_check_progress" />
style="@style/Widget.Material3.Chip.Suggestion"
android:text="2.1%" />
</com.google.android.material.chip.ChipGroup>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:orientation="horizontal">
<com.google.android.material.chip.Chip
android:id="@+id/chip_autoPage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/enable_auto_page_scroll" />
<View
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1" />
<io.legato.kazusa.ui.widget.SimpleCounterView
android:id="@+id/scv_autoPageSpeed"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:max="100"
app:title="翻页速度" />
</LinearLayout>
<TextView
<com.google.android.material.button.MaterialButton
android:id="@+id/btn_color_filter"
style="@style/Widget.Material3.Button.IconButton.Filled.Tonal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="@string/manga_header_footer"
android:textSize="14sp" />
android:text="@string/manga_color_filter" />
<RadioGroup
android:id="@+id/rg_footer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="8dp"
android:orientation="horizontal">
<io.legato.kazusa.lib.theme.view.ThemeRadioButton
android:id="@+id/rb_show"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:text="@string/show" />
<io.legato.kazusa.lib.theme.view.ThemeRadioButton
android:id="@+id/rb_hide"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:gravity="center"
android:text="@string/hide" />
</RadioGroup>
<RadioGroup
android:id="@+id/rg_footer_orientation"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginTop="8dp"
android:orientation="horizontal">
<io.legato.kazusa.lib.theme.view.ThemeRadioButton
android:id="@+id/rb_left"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:text="@string/manga_radio_left" />
<io.legato.kazusa.lib.theme.view.ThemeRadioButton
android:id="@+id/rb_center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="10dp"
android:gravity="center"
android:text="@string/manga_radio_center" />
</RadioGroup>
</LinearLayout>
+1 -1
View File
@@ -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"
+118 -53
View File
@@ -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">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/title_bar_addition"
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingHorizontal="16dp">
<TextView
android:id="@+id/tv_chapter_name"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:singleLine="true"
android:visibility="gone"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toLeftOf="@+id/tv_source_action"
app:layout_constraintTop_toTopOf="parent"
tools:visibility="visible" />
<TextView
android:id="@+id/tv_chapter_url"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:singleLine="true"
android:visibility="gone"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toLeftOf="@+id/tv_source_action"
app:layout_constraintTop_toBottomOf="@+id/tv_chapter_name"
tools:visibility="visible" />
<io.legato.kazusa.ui.widget.text.AccentBgTextView
android:id="@+id/tv_source_action"
android:id="@+id/tv_book_name"
style="@style/TextAppearance.Material3.TitleLarge"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_margin="1dp"
android:gravity="center"
android:maxWidth="120dp"
android:paddingLeft="6dp"
android:paddingRight="6dp"
android:text="@string/book_source"
app:layout_constraintBottom_toBottomOf="@+id/tv_chapter_url"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:radius="2dp"
tools:visibility="visible" />
android:layout_height="wrap_content"
android:singleLine="true" />
</androidx.constraintlayout.widget.ConstraintLayout>
<LinearLayout
android:id="@+id/title_bar_addition"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:id="@+id/tv_chapter_name"
style="@style/TextAppearance.Material3.BodyMedium"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:singleLine="true" />
<TextView
android:id="@+id/tv_chapter_url"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:singleLine="true"
android:visibility="gone" />
<TextView
android:id="@+id/tv_source_action"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingVertical="8dp"
android:text="@string/book_source" />
</LinearLayout>
</LinearLayout>
</io.legato.kazusa.ui.widget.TitleBar>
<LinearLayout
android:id="@+id/bottom_menu"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:alpha="0.92"
android:importantForAccessibility="no"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent">
@@ -84,10 +80,8 @@
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:layout_marginTop="10dp"
android:layout_marginRight="20dp"
android:layout_marginBottom="10dp"
android:layout_marginHorizontal="16dp"
android:layout_marginVertical="8dp"
android:importantForAccessibility="no"
android:orientation="horizontal">
@@ -99,12 +93,20 @@
app:icon="@drawable/ic_previous"
tools:ignore="TouchTargetSizeCheck" />
<com.google.android.material.slider.Slider
android:id="@+id/seek_read_page"
<com.google.android.material.card.MaterialCardView
android:layout_width="0dp"
android:layout_height="25dp"
android:layout_gravity="center_vertical"
android:layout_weight="1" />
android:layout_height="wrap_content"
android:layout_weight="1"
app:cardBackgroundColor="?attr/colorSurfaceContainer"
app:cardCornerRadius="32dp"
app:strokeWidth="0dp">
<com.google.android.material.slider.Slider
android:id="@+id/seek_read_page"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical" />
</com.google.android.material.card.MaterialCardView>
<com.google.android.material.button.MaterialButton
android:id="@+id/tv_next"
@@ -114,6 +116,69 @@
app:icon="@drawable/ic_next"
tools:ignore="TouchTargetSizeCheck" />
</LinearLayout>
<LinearLayout
android:id="@+id/bottom_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?attr/colorSurfaceContainer"
android:importantForAccessibility="no"
android:orientation="horizontal"
android:paddingHorizontal="16dp"
android:paddingVertical="8dp">
<com.google.android.material.button.MaterialButton
android:id="@+id/iv_catalog"
style="@style/Widget.Material3.Button.IconButton.Filled.Tonal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:backgroundTint="@android:color/transparent"
android:contentDescription="@string/chapter_list"
android:maxHeight="24dp"
android:tooltipText="@string/chapter_list"
app:icon="@drawable/ic_toc"
app:iconGravity="textStart"
tools:ignore="NestedWeights" />
<View
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:importantForAccessibility="no" />
<com.google.android.material.button.MaterialButton
android:id="@+id/btn_autoPage"
style="@style/Widget.Material3.Button.IconButton.Filled.Tonal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:backgroundTint="@android:color/transparent"
android:contentDescription="@string/auto_next_page"
android:tooltipText="@string/auto_next_page"
app:icon="@drawable/ic_auto_page"
app:iconGravity="textStart"
tools:ignore="UnusedAttribute" />
<View
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"
android:importantForAccessibility="no" />
<com.google.android.material.button.MaterialButton
android:id="@+id/iv_setting"
style="@style/Widget.Material3.Button.IconButton.Filled.Tonal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:backgroundTint="@android:color/transparent"
android:contentDescription="@string/setting"
android:maxHeight="24dp"
android:tooltipText="@string/setting"
app:icon="@drawable/ic_settings"
app:iconGravity="textStart"
tools:ignore="NestedWeights" />
</LinearLayout>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
@@ -66,9 +66,6 @@
</LinearLayout>
</LinearLayout>
</io.legato.kazusa.ui.widget.TitleBar>
<LinearLayout
-44
View File
@@ -17,12 +17,6 @@
android:title="@string/refresh"
app:showAsAction="always" />
<item
android:id="@+id/menu_catalog"
android:icon="@drawable/ic_toc"
android:title="@string/chapter_list"
app:showAsAction="always" />
</group>
<item
@@ -44,13 +38,6 @@
android:title="@string/disable_manga_click_scroll"
app:showAsAction="never" />
<item
android:id="@+id/menu_enable_auto_page"
android:checkable="true"
android:checked="false"
android:title="@string/enable_auto_page_scroll"
app:showAsAction="never" />
<item
android:id="@+id/menu_enable_auto_scroll"
android:checkable="true"
@@ -58,12 +45,6 @@
android:title="@string/enable_auto_scroll"
app:showAsAction="never" />
<item
android:id="@+id/menu_manga_auto_page_speed"
android:title="@string/manga_auto_page_speed"
android:visible="false"
app:showAsAction="never" />
<item
android:id="@+id/menu_enable_horizontal_scroll"
android:checkable="true"
@@ -79,11 +60,6 @@
android:visible="false"
app:showAsAction="never" />
<item
android:id="@+id/menu_manga_footer_config"
android:title="@string/manga_footer_config"
app:showAsAction="never" />
<item
android:id="@+id/menu_manga_color_filter"
android:title="@string/manga_color_filter"
@@ -96,24 +72,4 @@
android:title="@string/hide_manga_title"
app:showAsAction="never" />
<item
android:id="@+id/menu_epaper_manga"
android:checkable="true"
android:checked="false"
android:title="@string/manga_epaper"
app:showAsAction="never" />
<item
android:id="@+id/menu_epaper_manga_setting"
android:title="@string/manga_epaper_stting"
android:visible="false"
app:showAsAction="never" />
<item
android:id="@+id/menu_gray_manga"
android:checkable="true"
android:checked="false"
android:title="@string/enable_manga_gray"
app:showAsAction="never" />
</menu>
+4 -4
View File
@@ -1200,15 +1200,15 @@
<string name="book_reader_info_bar">页数. %1$d/%2$d 章节. %3$d/%4$d -> %5$s%%</string>
<string name="menu_download_after">下载之后章节</string>
<string name="menu_download_all">下载全部章节</string>
<string name="manga_header_chapter">章节和文案》隐藏</string>
<string name="manga_check_chapter_label">章节.》文案</string>
<string name="manga_header_chapter">章节显示设置</string>
<string name="manga_check_chapter_label">章节</string>
<string name="manga_check_chapter">章节</string>
<string name="manga_check_chapter_name">章节名称</string>
<string name="manga_header_page">《页数和文案》隐藏</string>
<string name="manga_check_page_label">页数.》文案</string>
<string name="manga_check_page_label">页数</string>
<string name="manga_check_page_number">页数</string>
<string name="manga_header_progress">《总进度和文案》隐藏</string>
<string name="manga_check_progress_label">总进度.》文案</string>
<string name="manga_check_progress_label">总进度</string>
<string name="manga_check_progress">总进度</string>
<string name="manga_header_footer">页脚</string>
<string name="manga_radio_left">靠左</string>