修复自动阅读按钮状态切换不生效的问题

This commit is contained in:
HapeLee
2025-08-31 05:13:21 +08:00
parent 4296172cc3
commit dccb72adab
2 changed files with 41 additions and 157 deletions
@@ -2,7 +2,6 @@ package io.legato.kazusa.ui.book.read
import android.annotation.SuppressLint
import android.content.Context
import android.content.res.ColorStateList
import android.content.res.Configuration
import android.graphics.drawable.GradientDrawable
import android.util.AttributeSet
@@ -170,35 +169,15 @@ class ReadMenu @JvmOverloads constructor(
}
private fun initView() = binding.run {
// if (AppConfig.isNightTheme) {
// fabNightTheme.setIconResource(R.drawable.ic_daytime)
// } else {
// fabNightTheme.setIconResource(R.drawable.ic_brightness)
// }
initAnimation()
// if (immersiveMenu) {
//// val lightTextColor = ColorUtils.withAlpha(ColorUtils.lightenColor(textColor), 0.75f)
//// titleBar.setTextColor(textColor)
//// titleBar.setBackgroundColor(bgColor)
//// titleBar.setColorFilter(textColor)
//// tvChapterName.setTextColor(lightTextColor)
//// tvChapterUrl.setTextColor(lightTextColor)
// } else if (reset) {
//// val bgColor = context.primaryColor
//// val textColor = context.primaryTextColor
//// titleBar.setTextColor(textColor)
//// titleBar.setBackgroundColor(bgColor)
//// titleBar.setColorFilter(textColor)
//// tvChapterName.setTextColor(textColor)
//// tvChapterUrl.setTextColor(textColor)
// }
val allButtons = getUserButtons()
renderButtons(binding.bottomView, allButtons)
binding.bottomView.post {
val allButtons = getUserButtons()
renderButtons(binding.bottomView, allButtons)
}
val brightnessBackground = GradientDrawable()
brightnessBackground.cornerRadius = 5F.dpToPx()
//brightnessBackground.setColor(ColorUtils.adjustAlpha(bgColor, 0.5f))
llBrightness.background = brightnessBackground
if (AppConfig.isEInkMode) {
titleBar.setBackgroundResource(R.drawable.bg_eink_border_bottom)
@@ -206,25 +185,7 @@ class ReadMenu @JvmOverloads constructor(
} else {
//llBottomBg.setBackgroundColor(bgColor)
}
// fabSearch.backgroundTintList = bottomBackgroundList
// fabSearch.setColorFilter(textColor)
// fabAutoPage.backgroundTintList = bottomBackgroundList
// fabAutoPage.setColorFilter(textColor)
// fabReplaceRule.backgroundTintList = bottomBackgroundList
// fabReplaceRule.setColorFilter(textColor)
// fabNightTheme.backgroundTintList = bottomBackgroundList
// fabNightTheme.setColorFilter(textColor)
//tvPre.setTextColor(textColor)
//tvNext.setTextColor(textColor)
// ivCatalog.setColorFilter(textColor, PorterDuff.Mode.SRC_IN)
// tvCatalog.setTextColor(textColor)
// ivReadAloud.setColorFilter(textColor, PorterDuff.Mode.SRC_IN)
// tvReadAloud.setTextColor(textColor)
// ivFont.setColorFilter(textColor, PorterDuff.Mode.SRC_IN)
// tvFont.setTextColor(textColor)
// ivSetting.setColorFilter(textColor, PorterDuff.Mode.SRC_IN)
// tvSetting.setTextColor(textColor)
// vwBrightnessPosAdjust.setColorFilter(textColor, PorterDuff.Mode.SRC_IN)
llBrightness.setOnClickListener(null)
seekBrightness.post {
seekBrightness.progress = AppConfig.readBrightness
@@ -488,56 +449,36 @@ class ReadMenu @JvmOverloads constructor(
}
private val buttonMap = mutableMapOf<String, MaterialButton>()
fun renderButtons(group: MaterialButtonGroup, buttons: List<ToolButton>) {
group.removeAllViews()
buttonMap.clear()
if (resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE) {
buttons.forEach { btn ->
val button = MaterialButton(
group.context,
null,
buttons.forEach { btn ->
val style =
if (resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE)
com.google.android.material.R.attr.materialIconButtonFilledTonalStyle
).apply {
id = btn.id.hashCode()
setIconResource(btn.iconRes)
contentDescription = btn.description
tooltipText = btn.description
setOnClickListener { btn.onClick() }
btn.onLongClick?.let { longAction ->
setOnLongClickListener {
longAction()
true
}
}
}
group.addView(button)
}
} else {
buttons.forEach { btn ->
val button = MaterialButton(
group.context,
null,
else
com.google.android.material.R.attr.materialIconButtonOutlinedStyle
).apply {
id = btn.id.hashCode()
setIconResource(btn.iconRes)
contentDescription = btn.description
tooltipText = btn.description
strokeWidth = 0
val primaryColor = context.themeColor(androidx.appcompat.R.attr.colorPrimary)
iconTint = ColorStateList.valueOf(primaryColor)
setOnClickListener { btn.onClick() }
btn.onLongClick?.let { longAction ->
setOnLongClickListener {
longAction()
true
}
val button = MaterialButton(group.context, null, style).apply {
id = btn.id.hashCode()
setIconResource(btn.iconRes)
contentDescription = btn.description
tooltipText = btn.description
strokeWidth = 0
setOnClickListener { btn.onClick() }
btn.onLongClick?.let { longAction ->
setOnLongClickListener {
longAction()
true
}
}
group.addView(button)
}
group.addView(button)
buttonMap[btn.id] = button
}
}
@@ -553,7 +494,7 @@ class ReadMenu @JvmOverloads constructor(
id = "auto_page",
iconRes = R.drawable.ic_auto_page,
description = context.getString(R.string.auto_next_page),
onClick = { callBack.autoPage() }
onClick = { runMenuOut { callBack.autoPage() } }
),
ToolButton(
id = "catalog",
@@ -565,7 +506,7 @@ class ReadMenu @JvmOverloads constructor(
id = "read_aloud",
iconRes = R.drawable.ic_read_aloud,
description = context.getString(R.string.read_aloud),
onClick = { callBack.onClickReadAloud() },
onClick = { runMenuOut { callBack.onClickReadAloud() } },
onLongClick = { callBack.showReadAloudDialog() }
),
ToolButton(
@@ -615,6 +556,17 @@ class ReadMenu @JvmOverloads constructor(
return result
}
fun setAutoPage(autoPage: Boolean) {
buttonMap["auto_page"]?.apply {
val icon = if (autoPage) R.drawable.ic_auto_page_stop else R.drawable.ic_auto_page
val desc =
context.getString(if (autoPage) R.string.auto_next_page_stop else R.string.auto_next_page)
setIconResource(icon)
contentDescription = desc
tooltipText = desc
}
}
private fun initAnimation() {
menuTopIn.setAnimationListener(menuInListener)
menuTopOut.setAnimationListener(menuOutListener)
@@ -704,19 +656,6 @@ class ReadMenu @JvmOverloads constructor(
binding.seekReadPage.value = seek.toFloat() + 1
}
fun setAutoPage(autoPage: Boolean) = binding.run {
fabAutoPage?.let { fab ->
if (autoPage) {
fab.setIconResource(R.drawable.ic_auto_page_stop)
fab.contentDescription = context.getString(R.string.auto_next_page_stop)
} else {
fab.setIconResource(R.drawable.ic_auto_page)
fab.contentDescription = context.getString(R.string.auto_next_page)
}
}
}
private fun upBrightnessVwPos() {
if (AppConfig.brightnessVwPos) {
binding.root.modifyBegin()
@@ -757,6 +696,7 @@ class ReadMenu @JvmOverloads constructor(
val iconRes: Int, // 图标资源
val description: String, // contentDescription / tooltipText
val onClick: () -> Unit, // 点击事件
val onLongClick: (() -> Unit)? = null // 可选长按
val onLongClick: (() -> Unit)? = null, // 可选长按
var state: Boolean = false // 动态
)
}