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" /> + +