diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index ea5c56884..f4484c688 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -284,6 +284,11 @@
android:name=".ui.about.ReadRecordActivity"
android:configChanges="orientation|screenSize"
android:hardwareAccelerated="true" />
+
+
- @get:Query("select * from dictRules where enabled = 1")
+ @get:Query("select * from dictRules where enabled = 1 order by sortNumber")
val enabled: List
- @Query("select * from dictRules where enabled = 1")
+ @Query("select * from dictRules where enabled = 1 order by sortNumber")
fun flowAll(): Flow>
@Upsert
diff --git a/app/src/main/java/io/legado/app/data/entities/DictRule.kt b/app/src/main/java/io/legado/app/data/entities/DictRule.kt
index 5b8f8b520..acb03ebc2 100644
--- a/app/src/main/java/io/legado/app/data/entities/DictRule.kt
+++ b/app/src/main/java/io/legado/app/data/entities/DictRule.kt
@@ -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")
diff --git a/app/src/main/java/io/legado/app/ui/dict/rule/DictRuleActivity.kt b/app/src/main/java/io/legado/app/ui/dict/rule/DictRuleActivity.kt
index 620994bb6..d7b78952a 100644
--- a/app/src/main/java/io/legado/app/ui/dict/rule/DictRuleActivity.kt
+++ b/app/src/main/java/io/legado/app/ui/dict/rule/DictRuleActivity.kt
@@ -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 {}
+ }
+ return super.onContextItemSelected(item)
}
override fun onMenuItemClick(item: MenuItem): Boolean {
@@ -83,6 +89,18 @@ class DictRuleActivity : VMBaseActivity(context),
+ RecyclerAdapter(context),
ItemTouchCallback.Callback {
private val selected = linkedSetOf()
@@ -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
) {
@@ -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()
}
diff --git a/app/src/main/java/io/legado/app/ui/dict/rule/DictRuleViewModel.kt b/app/src/main/java/io/legado/app/ui/dict/rule/DictRuleViewModel.kt
index e8bdbda43..b07446f62 100644
--- a/app/src/main/java/io/legado/app/ui/dict/rule/DictRuleViewModel.kt
+++ b/app/src/main/java/io/legado/app/ui/dict/rule/DictRuleViewModel.kt
@@ -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())
+ }
+ }
+
}
\ No newline at end of file
diff --git a/app/src/main/java/io/legado/app/ui/main/my/MyFragment.kt b/app/src/main/java/io/legado/app/ui/main/my/MyFragment.kt
index cd5267474..3a732c2cc 100644
--- a/app/src/main/java/io/legado/app/ui/main/my/MyFragment.kt
+++ b/app/src/main/java/io/legado/app/ui/main/my/MyFragment.kt
@@ -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()
"replaceManage" -> startActivity()
+ "dictRuleManage" -> startActivity()
"bookmark" -> startActivity()
"setting" -> startActivity {
putExtra("configTag", ConfigTag.OTHER_CONFIG)
diff --git a/app/src/main/res/drawable/ic_outline_delete.xml b/app/src/main/res/drawable/ic_outline_delete.xml
new file mode 100644
index 000000000..734188c36
--- /dev/null
+++ b/app/src/main/res/drawable/ic_outline_delete.xml
@@ -0,0 +1,10 @@
+
+
+
diff --git a/app/src/main/res/layout/item_dict_rule.xml b/app/src/main/res/layout/item_dict_rule.xml
new file mode 100644
index 000000000..9a7b0e0f9
--- /dev/null
+++ b/app/src/main/res/layout/item_dict_rule.xml
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/menu/dict_rule.xml b/app/src/main/res/menu/dict_rule.xml
new file mode 100644
index 000000000..44e26a4ec
--- /dev/null
+++ b/app/src/main/res/menu/dict_rule.xml
@@ -0,0 +1,35 @@
+
+
diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml
index 3ac649293..d7d55a2b3 100644
--- a/app/src/main/res/values-es-rES/strings.xml
+++ b/app/src/main/res/values-es-rES/strings.xml
@@ -1073,4 +1073,6 @@
清除内置浏览器所有数据
列表
字典规则
+ 配置字典规则
+ 新建
diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml
index 689076b66..5902b0fae 100644
--- a/app/src/main/res/values-ja-rJP/strings.xml
+++ b/app/src/main/res/values-ja-rJP/strings.xml
@@ -1076,4 +1076,6 @@
清除内置浏览器所有数据
列表
字典规则
+ 配置字典规则
+ 新建
diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml
index 897a6cfea..af27b4d7d 100644
--- a/app/src/main/res/values-pt-rBR/strings.xml
+++ b/app/src/main/res/values-pt-rBR/strings.xml
@@ -1076,4 +1076,6 @@
清除内置浏览器所有数据
列表
字典规则
+ 配置字典规则
+ 新建
diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml
index f7ea253b0..86bb59bf0 100644
--- a/app/src/main/res/values-zh-rHK/strings.xml
+++ b/app/src/main/res/values-zh-rHK/strings.xml
@@ -1073,4 +1073,6 @@
清除内置浏览器所有数据
列表
字典规则
+ 配置字典规则
+ 新建
diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml
index 145846807..bb7d56445 100644
--- a/app/src/main/res/values-zh-rTW/strings.xml
+++ b/app/src/main/res/values-zh-rTW/strings.xml
@@ -1075,4 +1075,6 @@
清除内置浏览器所有数据
列表
字典规则
+ 配置字典规则
+ 新建
diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml
index a2869df9b..3df87db2e 100644
--- a/app/src/main/res/values-zh/strings.xml
+++ b/app/src/main/res/values-zh/strings.xml
@@ -1075,4 +1075,6 @@
清除内置浏览器所有数据
列表
字典规则
+ 配置字典规则
+ 新建
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 3e65abcf6..04735657c 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1076,4 +1076,6 @@
清除内置浏览器所有数据
List
Dict rule
+ Config dict rule
+ 新建
diff --git a/app/src/main/res/xml/pref_main.xml b/app/src/main/res/xml/pref_main.xml
index 70d80013d..bf1ca883c 100644
--- a/app/src/main/res/xml/pref_main.xml
+++ b/app/src/main/res/xml/pref_main.xml
@@ -19,6 +19,13 @@
android:icon="@drawable/ic_cfg_replace"
app:iconSpaceReserved="false" />
+
+