This commit is contained in:
kunfei
2023-02-20 15:16:49 +08:00
parent cac408bf2a
commit 0b3cbc7802
18 changed files with 175 additions and 52 deletions
@@ -11,13 +11,13 @@ import kotlinx.coroutines.flow.Flow
@Dao
interface DictRuleDao {
@get:Query("select * from dictRules")
@get:Query("select * from dictRules order by sortNumber")
val all: List<DictRule>
@get:Query("select * from dictRules where enabled = 1")
@get:Query("select * from dictRules where enabled = 1 order by sortNumber")
val enabled: List<DictRule>
@Query("select * from dictRules where enabled = 1")
@Query("select * from dictRules where enabled = 1 order by sortNumber")
fun flowAll(): Flow<List<DictRule>>
@Upsert
@@ -12,7 +12,7 @@ import io.legado.app.model.analyzeRule.AnalyzeUrl
@Entity(tableName = "dictRules")
data class DictRule(
@PrimaryKey
val name: String,
var name: String,
var urlRule: String,
var showRule: String,
@ColumnInfo(defaultValue = "1")
@@ -1,6 +1,7 @@
package io.legado.app.ui.dict.rule
import android.os.Bundle
import android.view.Menu
import android.view.MenuItem
import androidx.activity.viewModels
import androidx.appcompat.widget.PopupMenu
@@ -36,6 +37,11 @@ class DictRuleActivity : VMBaseActivity<ActivityDictRuleBinding, DictRuleViewMod
observeDictRuleData()
}
override fun onCompatCreateOptionsMenu(menu: Menu): Boolean {
menuInflater.inflate(R.menu.dict_rule, menu)
return super.onCompatCreateOptionsMenu(menu)
}
private fun initRecyclerView() {
binding.recyclerView.setEdgeEffectColor(primaryColor)
binding.recyclerView.layoutManager = LinearLayoutManager(this)
@@ -53,6 +59,7 @@ class DictRuleActivity : VMBaseActivity<ActivityDictRuleBinding, DictRuleViewMod
ItemTouchHelper(itemTouchCallback).attachToRecyclerView(binding.recyclerView)
}
private fun initSelectActionView() {
binding.selectActionBar.setMainActionText(R.string.delete)
binding.selectActionBar.inflateMenu(R.menu.replace_rule_sel)
@@ -68,12 +75,11 @@ class DictRuleActivity : VMBaseActivity<ActivityDictRuleBinding, DictRuleViewMod
}
}
override fun selectAll(selectAll: Boolean) {
adapter.selectAll()
}
override fun revertSelection() {
adapter.revertSelection()
override fun onContextItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
R.id.menu_create -> {}
}
return super.onContextItemSelected(item)
}
override fun onMenuItemClick(item: MenuItem): Boolean {
@@ -83,6 +89,18 @@ class DictRuleActivity : VMBaseActivity<ActivityDictRuleBinding, DictRuleViewMod
return true
}
override fun selectAll(selectAll: Boolean) {
if (selectAll) {
adapter.revertSelection()
} else {
adapter.selectAll()
}
}
override fun revertSelection() {
adapter.revertSelection()
}
override fun update(vararg rule: DictRule) {
viewModel.upsert(*rule)
}
@@ -92,19 +110,11 @@ class DictRuleActivity : VMBaseActivity<ActivityDictRuleBinding, DictRuleViewMod
}
override fun edit(rule: DictRule) {
TODO("Not yet implemented")
}
override fun toTop(rule: DictRule) {
TODO("Not yet implemented")
}
override fun toBottom(rule: DictRule) {
TODO("Not yet implemented")
}
override fun upOrder() {
TODO("Not yet implemented")
viewModel.upSortNumber()
}
override fun upCountView() {
@@ -2,17 +2,14 @@ package io.legado.app.ui.dict.rule
import android.content.Context
import android.os.Bundle
import android.view.View
import android.view.ViewGroup
import android.widget.PopupMenu
import androidx.core.os.bundleOf
import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.RecyclerView
import io.legado.app.R
import io.legado.app.base.adapter.ItemViewHolder
import io.legado.app.base.adapter.RecyclerAdapter
import io.legado.app.data.entities.DictRule
import io.legado.app.databinding.ItemReplaceRuleBinding
import io.legado.app.databinding.ItemDictRuleBinding
import io.legado.app.lib.theme.backgroundColor
import io.legado.app.ui.widget.recycler.DragSelectTouchHelper
import io.legado.app.ui.widget.recycler.ItemTouchCallback
@@ -20,7 +17,7 @@ import io.legado.app.utils.ColorUtils
class DictRuleAdapter(context: Context, var callBack: CallBack) :
RecyclerAdapter<DictRule, ItemReplaceRuleBinding>(context),
RecyclerAdapter<DictRule, ItemDictRuleBinding>(context),
ItemTouchCallback.Callback {
private val selected = linkedSetOf<DictRule>()
@@ -83,8 +80,8 @@ class DictRuleAdapter(context: Context, var callBack: CallBack) :
callBack.upCountView()
}
override fun getViewBinding(parent: ViewGroup): ItemReplaceRuleBinding {
return ItemReplaceRuleBinding.inflate(inflater, parent, false)
override fun getViewBinding(parent: ViewGroup): ItemDictRuleBinding {
return ItemDictRuleBinding.inflate(inflater, parent, false)
}
override fun onCurrentListChanged() {
@@ -93,7 +90,7 @@ class DictRuleAdapter(context: Context, var callBack: CallBack) :
override fun convert(
holder: ItemViewHolder,
binding: ItemReplaceRuleBinding,
binding: ItemDictRuleBinding,
item: DictRule,
payloads: MutableList<Any>
) {
@@ -116,7 +113,7 @@ class DictRuleAdapter(context: Context, var callBack: CallBack) :
}
}
override fun registerListener(holder: ItemViewHolder, binding: ItemReplaceRuleBinding) {
override fun registerListener(holder: ItemViewHolder, binding: ItemDictRuleBinding) {
binding.apply {
swtEnabled.setOnCheckedChangeListener { buttonView, isChecked ->
if (buttonView.isPressed) {
@@ -126,11 +123,6 @@ class DictRuleAdapter(context: Context, var callBack: CallBack) :
}
}
}
ivEdit.setOnClickListener {
getItem(holder.layoutPosition)?.let {
callBack.edit(it)
}
}
cbName.setOnClickListener {
getItem(holder.layoutPosition)?.let {
if (cbName.isChecked) {
@@ -141,27 +133,19 @@ class DictRuleAdapter(context: Context, var callBack: CallBack) :
}
callBack.upCountView()
}
ivMenuMore.setOnClickListener {
showMenu(ivMenuMore, holder.layoutPosition)
ivEdit.setOnClickListener {
getItem(holder.layoutPosition)?.let {
callBack.edit(it)
}
}
ivDelete.setOnClickListener {
getItem(holder.layoutPosition)?.let {
callBack.delete(it)
}
}
}
}
private fun showMenu(view: View, position: Int) {
val item = getItem(position) ?: return
val popupMenu = PopupMenu(context, view)
popupMenu.inflate(R.menu.replace_rule_item)
popupMenu.setOnMenuItemClickListener { menuItem ->
when (menuItem.itemId) {
R.id.menu_top -> callBack.toTop(item)
R.id.menu_bottom -> callBack.toBottom(item)
R.id.menu_del -> callBack.delete(item)
}
true
}
popupMenu.show()
}
override fun swap(srcPosition: Int, targetPosition: Int): Boolean {
val srcItem = getItem(srcPosition)
val targetItem = getItem(targetPosition)
@@ -218,8 +202,6 @@ class DictRuleAdapter(context: Context, var callBack: CallBack) :
fun update(vararg rule: DictRule)
fun delete(rule: DictRule)
fun edit(rule: DictRule)
fun toTop(rule: DictRule)
fun toBottom(rule: DictRule)
fun upOrder()
fun upCountView()
}
@@ -20,4 +20,14 @@ class DictRuleViewModel(application: Application) : BaseViewModel(application) {
}
}
fun upSortNumber() {
execute {
val rules = appDb.dictRuleDao.all
for ((index, rule) in rules.withIndex()) {
rule.sortNumber = index + 1
}
appDb.dictRuleDao.upsert(*rules.toTypedArray())
}
}
}
@@ -27,6 +27,7 @@ import io.legado.app.ui.book.bookmark.AllBookmarkActivity
import io.legado.app.ui.book.source.manage.BookSourceActivity
import io.legado.app.ui.config.ConfigActivity
import io.legado.app.ui.config.ConfigTag
import io.legado.app.ui.dict.rule.DictRuleActivity
import io.legado.app.ui.replace.ReplaceRuleActivity
import io.legado.app.ui.widget.dialog.TextDialog
import io.legado.app.utils.*
@@ -136,6 +137,7 @@ class MyFragment : BaseFragment(R.layout.fragment_my_config) {
when (preference.key) {
"bookSourceManage" -> startActivity<BookSourceActivity>()
"replaceManage" -> startActivity<ReplaceRuleActivity>()
"dictRuleManage" -> startActivity<DictRuleActivity>()
"bookmark" -> startActivity<AllBookmarkActivity>()
"setting" -> startActivity<ConfigActivity> {
putExtra("configTag", ConfigTag.OTHER_CONFIG)