This commit is contained in:
Horis
2025-02-28 14:02:36 +08:00
parent ab7a7b0b7f
commit 2799320279
6 changed files with 5 additions and 94 deletions
@@ -1165,11 +1165,7 @@ class ReadBookActivity : BaseReadBookActivity(),
* 替换
*/
override fun openReplaceRule() {
val intent = Intent(this, ReplaceRuleActivity::class.java).apply {
val showApplied = ReadBook.book?.getUseReplaceRule() == true
putExtra("showApplied", showApplied)
}
replaceActivity.launch(intent)
replaceActivity.launch(Intent(this, ReplaceRuleActivity::class.java))
}
/**
@@ -1,6 +1,7 @@
package io.legado.app.ui.replace
import android.annotation.SuppressLint
import android.app.Activity
import android.os.Bundle
import android.view.Menu
import android.view.MenuItem
@@ -121,10 +122,8 @@ class ReplaceRuleActivity : VMBaseActivity<ActivityReplaceRuleBinding, ReplaceRu
initRecyclerView()
initSearchView()
initSelectActionView()
observeReplaceRuleData()
observeGroupData()
viewModel.initData(intent) {
observeReplaceRuleData()
}
}
override fun dispatchTouchEvent(ev: MotionEvent): Boolean {
@@ -216,7 +215,6 @@ class ReplaceRuleActivity : VMBaseActivity<ActivityReplaceRuleBinding, ReplaceRu
val key = searchKey.substringAfter("group:")
appDb.replaceRuleDao.flowGroupSearch("%$key%")
}
else -> {
appDb.replaceRuleDao.flowSearch("%$searchKey%")
}
@@ -224,7 +222,7 @@ class ReplaceRuleActivity : VMBaseActivity<ActivityReplaceRuleBinding, ReplaceRu
AppLog.put("替换规则管理界面更新数据出错", it)
}.flowOn(IO).conflate().collect {
if (dataInit) {
setResult(RESULT_OK)
setResult(Activity.RESULT_OK)
}
adapter.setItems(it, adapter.diffItemCallBack)
dataInit = true
@@ -247,7 +245,6 @@ class ReplaceRuleActivity : VMBaseActivity<ActivityReplaceRuleBinding, ReplaceRu
when (item.itemId) {
R.id.menu_add_replace_rule ->
editActivity.launch(ReplaceEditActivity.startIntent(this))
R.id.menu_group_manage -> showDialogFragment<GroupManageDialog>()
R.id.menu_del_selection -> viewModel.delSelection(adapter.selection)
R.id.menu_import_onLine -> showImportDialog()
@@ -255,13 +252,11 @@ class ReplaceRuleActivity : VMBaseActivity<ActivityReplaceRuleBinding, ReplaceRu
mode = HandleFileContract.FILE
allowExtensions = arrayOf("txt", "json")
}
R.id.menu_import_qr -> qrCodeResult.launch()
R.id.menu_help -> showHelp("replaceRuleHelp")
R.id.menu_group_null -> {
searchView.setQuery(getString(R.string.no_group), true)
}
else -> if (item.groupId == R.id.replace_group) {
searchView.setQuery("group:${item.title}", true)
}
@@ -348,14 +343,6 @@ class ReplaceRuleActivity : VMBaseActivity<ActivityReplaceRuleBinding, ReplaceRu
)
}
override fun isEnabledForBook(rule: ReplaceRule): Boolean {
return viewModel.isEnabledForBook(rule)
}
override fun isAppliedForBook(rule: ReplaceRule): Boolean {
return viewModel.isAppliedForBook(rule)
}
override fun update(vararg rule: ReplaceRule) {
setResult(RESULT_OK)
viewModel.update(*rule)
@@ -1,11 +1,9 @@
package io.legado.app.ui.replace
import android.content.Context
import android.graphics.Color
import android.os.Bundle
import android.view.View
import android.view.ViewGroup
import android.widget.ImageView
import android.widget.PopupMenu
import androidx.core.os.bundleOf
import androidx.recyclerview.widget.DiffUtil
@@ -19,8 +17,6 @@ import io.legado.app.lib.theme.backgroundColor
import io.legado.app.ui.widget.recycler.DragSelectTouchHelper
import io.legado.app.ui.widget.recycler.ItemTouchCallback
import io.legado.app.utils.ColorUtils
import io.legado.app.utils.invisible
import io.legado.app.utils.visible
class ReplaceRuleAdapter(context: Context, var callBack: CallBack) :
@@ -124,7 +120,6 @@ class ReplaceRuleAdapter(context: Context, var callBack: CallBack) :
}
}
}
upShowApplied(ivApplied, item)
}
}
@@ -177,23 +172,6 @@ class ReplaceRuleAdapter(context: Context, var callBack: CallBack) :
popupMenu.show()
}
private fun upShowApplied(iv: ImageView, rule: ReplaceRule) {
val isEnabledForBook = callBack.isEnabledForBook(rule)
val isAppliedForBook = callBack.isAppliedForBook(rule)
if (!isEnabledForBook && !isAppliedForBook) {
iv.invisible()
} else {
iv.visible()
}
if (isEnabledForBook) {
iv.setColorFilter(Color.RED)
}
if (isAppliedForBook) {
iv.setColorFilter(Color.GREEN)
}
}
override fun swap(srcPosition: Int, targetPosition: Int): Boolean {
val srcItem = getItem(srcPosition)
val targetItem = getItem(targetPosition)
@@ -254,7 +232,5 @@ class ReplaceRuleAdapter(context: Context, var callBack: CallBack) :
fun toBottom(rule: ReplaceRule)
fun upOrder()
fun upCountView()
fun isEnabledForBook(rule: ReplaceRule): Boolean
fun isAppliedForBook(rule: ReplaceRule): Boolean
}
}
@@ -1,13 +1,10 @@
package io.legado.app.ui.replace
import android.app.Application
import android.content.Intent
import android.text.TextUtils
import io.legado.app.base.BaseViewModel
import io.legado.app.data.appDb
import io.legado.app.data.entities.ReplaceRule
import io.legado.app.help.book.ContentProcessor
import io.legado.app.model.ReadBook
import io.legado.app.utils.splitNotBlank
/**
@@ -16,34 +13,6 @@ import io.legado.app.utils.splitNotBlank
*/
class ReplaceRuleViewModel(application: Application) : BaseViewModel(application) {
var showApplied = false
var enabledForBookRules = emptySet<ReplaceRule>()
var appliedForBookRules = emptySet<ReplaceRule>()
fun initData(intent: Intent, block: () -> Unit) {
execute {
showApplied = intent.getBooleanExtra("showApplied", false)
if (showApplied) {
val book = ReadBook.book ?: return@execute
val textChapter = ReadBook.curTextChapter ?: return@execute
enabledForBookRules = ContentProcessor.get(book).getContentReplaceRules().toSet()
textChapter.effectiveReplaceRules?.let {
appliedForBookRules = it.toSet()
}
}
}.onFinally {
block.invoke()
}
}
fun isEnabledForBook(rule: ReplaceRule): Boolean {
return showApplied && enabledForBookRules.contains(rule)
}
fun isAppliedForBook(rule: ReplaceRule): Boolean {
return showApplied && appliedForBookRules.contains(rule)
}
fun update(vararg rule: ReplaceRule) {
execute {
appDb.replaceRuleDao.update(*rule)