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
@@ -3,9 +3,4 @@
* 替换规则是用来替换正文内容的一种规则 * 替换规则是用来替换正文内容的一种规则
* 菜单可以新建和导入规则 * 菜单可以新建和导入规则
* 可以拖动排序 * 可以拖动排序
* 可以选择操作 * 可以选择操作
* 替换规则右上角标志
* 绿点表示本书启用且生效的作用于正文规则
* 红点表示本书启用的作用于正文规则
* 没有标志表示本书不启用的作用于正文规则
* 本书没有启用替换净化、不是从阅读界面打开的替换净化不显示标志
@@ -1165,11 +1165,7 @@ class ReadBookActivity : BaseReadBookActivity(),
* 替换 * 替换
*/ */
override fun openReplaceRule() { override fun openReplaceRule() {
val intent = Intent(this, ReplaceRuleActivity::class.java).apply { replaceActivity.launch(Intent(this, ReplaceRuleActivity::class.java))
val showApplied = ReadBook.book?.getUseReplaceRule() == true
putExtra("showApplied", showApplied)
}
replaceActivity.launch(intent)
} }
/** /**
@@ -1,6 +1,7 @@
package io.legado.app.ui.replace package io.legado.app.ui.replace
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.app.Activity
import android.os.Bundle import android.os.Bundle
import android.view.Menu import android.view.Menu
import android.view.MenuItem import android.view.MenuItem
@@ -121,10 +122,8 @@ class ReplaceRuleActivity : VMBaseActivity<ActivityReplaceRuleBinding, ReplaceRu
initRecyclerView() initRecyclerView()
initSearchView() initSearchView()
initSelectActionView() initSelectActionView()
observeReplaceRuleData()
observeGroupData() observeGroupData()
viewModel.initData(intent) {
observeReplaceRuleData()
}
} }
override fun dispatchTouchEvent(ev: MotionEvent): Boolean { override fun dispatchTouchEvent(ev: MotionEvent): Boolean {
@@ -216,7 +215,6 @@ class ReplaceRuleActivity : VMBaseActivity<ActivityReplaceRuleBinding, ReplaceRu
val key = searchKey.substringAfter("group:") val key = searchKey.substringAfter("group:")
appDb.replaceRuleDao.flowGroupSearch("%$key%") appDb.replaceRuleDao.flowGroupSearch("%$key%")
} }
else -> { else -> {
appDb.replaceRuleDao.flowSearch("%$searchKey%") appDb.replaceRuleDao.flowSearch("%$searchKey%")
} }
@@ -224,7 +222,7 @@ class ReplaceRuleActivity : VMBaseActivity<ActivityReplaceRuleBinding, ReplaceRu
AppLog.put("替换规则管理界面更新数据出错", it) AppLog.put("替换规则管理界面更新数据出错", it)
}.flowOn(IO).conflate().collect { }.flowOn(IO).conflate().collect {
if (dataInit) { if (dataInit) {
setResult(RESULT_OK) setResult(Activity.RESULT_OK)
} }
adapter.setItems(it, adapter.diffItemCallBack) adapter.setItems(it, adapter.diffItemCallBack)
dataInit = true dataInit = true
@@ -247,7 +245,6 @@ class ReplaceRuleActivity : VMBaseActivity<ActivityReplaceRuleBinding, ReplaceRu
when (item.itemId) { when (item.itemId) {
R.id.menu_add_replace_rule -> R.id.menu_add_replace_rule ->
editActivity.launch(ReplaceEditActivity.startIntent(this)) editActivity.launch(ReplaceEditActivity.startIntent(this))
R.id.menu_group_manage -> showDialogFragment<GroupManageDialog>() R.id.menu_group_manage -> showDialogFragment<GroupManageDialog>()
R.id.menu_del_selection -> viewModel.delSelection(adapter.selection) R.id.menu_del_selection -> viewModel.delSelection(adapter.selection)
R.id.menu_import_onLine -> showImportDialog() R.id.menu_import_onLine -> showImportDialog()
@@ -255,13 +252,11 @@ class ReplaceRuleActivity : VMBaseActivity<ActivityReplaceRuleBinding, ReplaceRu
mode = HandleFileContract.FILE mode = HandleFileContract.FILE
allowExtensions = arrayOf("txt", "json") allowExtensions = arrayOf("txt", "json")
} }
R.id.menu_import_qr -> qrCodeResult.launch() R.id.menu_import_qr -> qrCodeResult.launch()
R.id.menu_help -> showHelp("replaceRuleHelp") R.id.menu_help -> showHelp("replaceRuleHelp")
R.id.menu_group_null -> { R.id.menu_group_null -> {
searchView.setQuery(getString(R.string.no_group), true) searchView.setQuery(getString(R.string.no_group), true)
} }
else -> if (item.groupId == R.id.replace_group) { else -> if (item.groupId == R.id.replace_group) {
searchView.setQuery("group:${item.title}", true) 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) { override fun update(vararg rule: ReplaceRule) {
setResult(RESULT_OK) setResult(RESULT_OK)
viewModel.update(*rule) viewModel.update(*rule)
@@ -1,11 +1,9 @@
package io.legado.app.ui.replace package io.legado.app.ui.replace
import android.content.Context import android.content.Context
import android.graphics.Color
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.ImageView
import android.widget.PopupMenu import android.widget.PopupMenu
import androidx.core.os.bundleOf import androidx.core.os.bundleOf
import androidx.recyclerview.widget.DiffUtil 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.DragSelectTouchHelper
import io.legado.app.ui.widget.recycler.ItemTouchCallback import io.legado.app.ui.widget.recycler.ItemTouchCallback
import io.legado.app.utils.ColorUtils 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) : 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() 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 { override fun swap(srcPosition: Int, targetPosition: Int): Boolean {
val srcItem = getItem(srcPosition) val srcItem = getItem(srcPosition)
val targetItem = getItem(targetPosition) val targetItem = getItem(targetPosition)
@@ -254,7 +232,5 @@ class ReplaceRuleAdapter(context: Context, var callBack: CallBack) :
fun toBottom(rule: ReplaceRule) fun toBottom(rule: ReplaceRule)
fun upOrder() fun upOrder()
fun upCountView() fun upCountView()
fun isEnabledForBook(rule: ReplaceRule): Boolean
fun isAppliedForBook(rule: ReplaceRule): Boolean
} }
} }
@@ -1,13 +1,10 @@
package io.legado.app.ui.replace package io.legado.app.ui.replace
import android.app.Application import android.app.Application
import android.content.Intent
import android.text.TextUtils import android.text.TextUtils
import io.legado.app.base.BaseViewModel import io.legado.app.base.BaseViewModel
import io.legado.app.data.appDb import io.legado.app.data.appDb
import io.legado.app.data.entities.ReplaceRule 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 import io.legado.app.utils.splitNotBlank
/** /**
@@ -16,34 +13,6 @@ import io.legado.app.utils.splitNotBlank
*/ */
class ReplaceRuleViewModel(application: Application) : BaseViewModel(application) { 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) { fun update(vararg rule: ReplaceRule) {
execute { execute {
appDb.replaceRuleDao.update(*rule) appDb.replaceRuleDao.update(*rule)
@@ -62,16 +62,4 @@
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent"
tools:ignore="RtlHardcoded" /> tools:ignore="RtlHardcoded" />
<io.legado.app.ui.widget.image.CircleImageView
android:id="@+id/iv_applied"
android:layout_width="8dp"
android:layout_height="8dp"
android:scaleType="centerCrop"
android:scrollbars="none"
android:src="@color/md_green_600"
android:visibility="invisible"
app:layout_constraintRight_toRightOf="@id/iv_menu_more"
app:layout_constraintTop_toTopOf="@id/iv_menu_more"
tools:visibility="visible" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>