优化
This commit is contained in:
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user