From 3dcd0c35ed5ccd678ba929768a47dee79360bc5e Mon Sep 17 00:00:00 2001 From: Horis <821938089@qq.com> Date: Tue, 21 Feb 2023 17:21:10 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../{txtTocRegexHelp.md => txtTocRuleHelp.md} | 2 +- .../io/legado/app/data/dao/DictRuleDao.kt | 2 +- .../io/legado/app/data/entities/DictRule.kt | 11 +++ .../io/legado/app/data/entities/TxtTocRule.kt | 8 +- .../ui/association/ImportDictRuleDialog.kt | 2 +- .../book/source/manage/BookSourceActivity.kt | 1 - .../book/source/manage/BookSourceAdapter.kt | 74 ++++++++-------- .../ui/book/toc/rule/TxtTocRuleActivity.kt | 85 ++++++++++++++++--- .../app/ui/book/toc/rule/TxtTocRuleAdapter.kt | 47 +++++++++- .../app/ui/book/toc/rule/TxtTocRuleDialog.kt | 10 +-- .../ui/book/toc/rule/TxtTocRuleViewModel.kt | 17 +++- .../app/ui/dict/rule/DictRuleActivity.kt | 16 ++-- .../app/ui/dict/rule/DictRuleAdapter.kt | 1 + .../app/ui/dict/rule/DictRuleViewModel.kt | 12 +-- .../io/legado/app/ui/main/my/MyFragment.kt | 2 +- .../app/ui/replace/ReplaceRuleActivity.kt | 2 +- .../app/ui/replace/ReplaceRuleAdapter.kt | 5 +- .../ui/rss/source/manage/RssSourceAdapter.kt | 5 +- .../main/res/layout/activity_txt_toc_rule.xml | 5 +- .../main/res/layout/dialog_toc_regex_edit.xml | 2 +- app/src/main/res/menu/book_read.xml | 2 +- app/src/main/res/menu/book_toc.xml | 2 +- app/src/main/res/menu/dict_rule.xml | 2 +- .../{txt_toc_regex.xml => txt_toc_rule.xml} | 20 ++++- app/src/main/res/menu/txt_toc_rule_sel.xml | 20 +++++ app/src/main/res/values-es-rES/strings.xml | 5 +- app/src/main/res/values-ja-rJP/strings.xml | 5 +- app/src/main/res/values-pt-rBR/strings.xml | 5 +- app/src/main/res/values-zh-rHK/strings.xml | 5 +- app/src/main/res/values-zh-rTW/strings.xml | 5 +- app/src/main/res/values-zh/strings.xml | 5 +- app/src/main/res/values/strings.xml | 5 +- app/src/main/res/xml/pref_main.xml | 6 +- 33 files changed, 284 insertions(+), 112 deletions(-) rename app/src/main/assets/help/{txtTocRegexHelp.md => txtTocRuleHelp.md} (99%) rename app/src/main/res/menu/{txt_toc_regex.xml => txt_toc_rule.xml} (66%) create mode 100644 app/src/main/res/menu/txt_toc_rule_sel.xml diff --git a/app/src/main/assets/help/txtTocRegexHelp.md b/app/src/main/assets/help/txtTocRuleHelp.md similarity index 99% rename from app/src/main/assets/help/txtTocRegexHelp.md rename to app/src/main/assets/help/txtTocRuleHelp.md index 3f688c775..7f09bc9c0 100644 --- a/app/src/main/assets/help/txtTocRegexHelp.md +++ b/app/src/main/assets/help/txtTocRuleHelp.md @@ -4,7 +4,7 @@ - 新增目录规则,当Legado自带的规则不能够满足需求时,用户可根据自己的情况自定义目录规则 - 导入默认规则 在旧版本中,Legado自带的规则不会随着软件的更新而更新。用户需要使用最新规则或对自带规则修改后需要重置时,可点击 导入默认规则。**注意:导入默认规则不会重置用户自定义的规则,但如果您对自带的规则进行了修改,则修改的规则会被重置为默认规则。** -- 导入在线规则 为了方便异步调试以及用户导入他人的目录规则,Legado增加目录规则的网络导入功能。点击 网络导入 的输入框,可以通过内置的链接导入在线规则。(在线规则优先比内置的规则更加激进,但适配了更多类型的标题格式,用户需根据自己的情况选择是否导入) +- 网络导入 为了方便异步调试以及用户导入他人的目录规则,Legado增加目录规则的网络导入功能。点击 网络导入 的输入框,可以通过内置的链接导入在线规则。(在线规则优先比内置的规则更加激进,但适配了更多类型的标题格式,用户需根据自己的情况选择是否导入) - 拆分超长章节 根据目录正则分章时若单章超过三万字左右将自动分为多章 ### 操作区 diff --git a/app/src/main/java/io/legado/app/data/dao/DictRuleDao.kt b/app/src/main/java/io/legado/app/data/dao/DictRuleDao.kt index 7e53c3213..6dfd601bf 100644 --- a/app/src/main/java/io/legado/app/data/dao/DictRuleDao.kt +++ b/app/src/main/java/io/legado/app/data/dao/DictRuleDao.kt @@ -14,7 +14,7 @@ interface DictRuleDao { @get:Query("select * from dictRules where enabled = 1 order by sortNumber") val enabled: List - @Query("select * from dictRules where enabled = 1 order by sortNumber") + @Query("select * from dictRules order by sortNumber") fun flowAll(): Flow> @Query("select * from dictRules where name = :name") 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 61002f27c..32df2a200 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 @@ -21,6 +21,17 @@ data class DictRule( var sortNumber: Int = 0 ) { + override fun hashCode(): Int { + return name.hashCode() + } + + override fun equals(other: Any?): Boolean { + if (other is DictRule) { + return name == other.name + } + return false + } + /** * 搜索字典 */ diff --git a/app/src/main/java/io/legado/app/data/entities/TxtTocRule.kt b/app/src/main/java/io/legado/app/data/entities/TxtTocRule.kt index 1d37460f4..b4cf2d308 100644 --- a/app/src/main/java/io/legado/app/data/entities/TxtTocRule.kt +++ b/app/src/main/java/io/legado/app/data/entities/TxtTocRule.kt @@ -17,18 +17,12 @@ data class TxtTocRule( ) { override fun hashCode(): Int { - return GSON.toJson(this).hashCode() + return id.hashCode() } override fun equals(other: Any?): Boolean { - other ?: return false if (other is TxtTocRule) { return id == other.id - && name == other.name - && rule == other.rule - && example == other.example - && serialNumber == other.serialNumber - && enable == other.enable } return false } diff --git a/app/src/main/java/io/legado/app/ui/association/ImportDictRuleDialog.kt b/app/src/main/java/io/legado/app/ui/association/ImportDictRuleDialog.kt index f7ae3c04f..9297a2662 100644 --- a/app/src/main/java/io/legado/app/ui/association/ImportDictRuleDialog.kt +++ b/app/src/main/java/io/legado/app/ui/association/ImportDictRuleDialog.kt @@ -51,7 +51,7 @@ class ImportDictRuleDialog() : BaseDialogFragment(R.layout.dialog_recycler_view) @SuppressLint("NotifyDataSetChanged") override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) { binding.toolBar.setBackgroundColor(primaryColor) - binding.toolBar.setTitle(R.string.import_tts) + binding.toolBar.setTitle(R.string.import_dict_rule) binding.rotateLoading.visible() binding.recyclerView.layoutManager = LinearLayoutManager(requireContext()) binding.recyclerView.adapter = adapter diff --git a/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceActivity.kt b/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceActivity.kt index 17a86b3d6..b461d1fd3 100644 --- a/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceActivity.kt @@ -30,7 +30,6 @@ import io.legado.app.ui.book.search.SearchActivity import io.legado.app.ui.book.search.SearchScope import io.legado.app.ui.book.source.debug.BookSourceDebugActivity import io.legado.app.ui.book.source.edit.BookSourceEditActivity -import io.legado.app.ui.book.toc.rule.TxtTocRuleActivity import io.legado.app.ui.config.CheckSourceConfig import io.legado.app.ui.document.HandleFileContract import io.legado.app.ui.qrcode.QrCodeResult diff --git a/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceAdapter.kt b/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceAdapter.kt index 2d10abf4d..745aa0996 100644 --- a/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceAdapter.kt +++ b/app/src/main/java/io/legado/app/ui/book/source/manage/BookSourceAdapter.kt @@ -40,44 +40,43 @@ class BookSourceAdapter(context: Context, val callBack: CallBack) : } } - val diffItemCallback: DiffUtil.ItemCallback - get() = object : DiffUtil.ItemCallback() { - - override fun areItemsTheSame(oldItem: BookSource, newItem: BookSource): Boolean { - return oldItem.bookSourceUrl == newItem.bookSourceUrl - } - - override fun areContentsTheSame(oldItem: BookSource, newItem: BookSource): Boolean { - return oldItem.bookSourceName == newItem.bookSourceName - && oldItem.bookSourceGroup == newItem.bookSourceGroup - && oldItem.enabled == newItem.enabled - && oldItem.enabledExplore == newItem.enabledExplore - && oldItem.exploreUrl == newItem.exploreUrl - } - - override fun getChangePayload(oldItem: BookSource, newItem: BookSource): Any? { - val payload = Bundle() - if (oldItem.bookSourceName != newItem.bookSourceName - || oldItem.bookSourceGroup != newItem.bookSourceGroup - ) { - payload.putBoolean("upName", true) - } - if (oldItem.enabled != newItem.enabled) { - payload.putBoolean("enabled", newItem.enabled) - } - if (oldItem.enabledExplore != newItem.enabledExplore || - oldItem.exploreUrl != newItem.exploreUrl - ) { - payload.putBoolean("upExplore", true) - } - if (payload.isEmpty) { - return null - } - return payload - } + val diffItemCallback = object : DiffUtil.ItemCallback() { + override fun areItemsTheSame(oldItem: BookSource, newItem: BookSource): Boolean { + return oldItem.bookSourceUrl == newItem.bookSourceUrl } + override fun areContentsTheSame(oldItem: BookSource, newItem: BookSource): Boolean { + return oldItem.bookSourceName == newItem.bookSourceName + && oldItem.bookSourceGroup == newItem.bookSourceGroup + && oldItem.enabled == newItem.enabled + && oldItem.enabledExplore == newItem.enabledExplore + && oldItem.exploreUrl == newItem.exploreUrl + } + + override fun getChangePayload(oldItem: BookSource, newItem: BookSource): Any? { + val payload = Bundle() + if (oldItem.bookSourceName != newItem.bookSourceName + || oldItem.bookSourceGroup != newItem.bookSourceGroup + ) { + payload.putBoolean("upName", true) + } + if (oldItem.enabled != newItem.enabled) { + payload.putBoolean("enabled", newItem.enabled) + } + if (oldItem.enabledExplore != newItem.enabledExplore || + oldItem.exploreUrl != newItem.exploreUrl + ) { + payload.putBoolean("upExplore", true) + } + if (payload.isEmpty) { + return null + } + return payload + } + + } + override fun getViewBinding(parent: ViewGroup): ItemBookSourceBinding { return ItemBookSourceBinding.inflate(inflater, parent, false) } @@ -190,7 +189,10 @@ class BookSourceAdapter(context: Context, val callBack: CallBack) : } R.id.menu_search -> callBack.searchBook(source) R.id.menu_debug_source -> callBack.debug(source) - R.id.menu_del -> callBack.del(source) + R.id.menu_del -> { + callBack.del(source) + selected.remove(source) + } R.id.menu_enable_explore -> { callBack.update(source.copy(enabledExplore = !source.enabledExplore)) } diff --git a/app/src/main/java/io/legado/app/ui/book/toc/rule/TxtTocRuleActivity.kt b/app/src/main/java/io/legado/app/ui/book/toc/rule/TxtTocRuleActivity.kt index 143ba283b..8a66c96fe 100644 --- a/app/src/main/java/io/legado/app/ui/book/toc/rule/TxtTocRuleActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/toc/rule/TxtTocRuleActivity.kt @@ -5,6 +5,7 @@ import android.os.Bundle import android.view.Menu import android.view.MenuItem import androidx.activity.viewModels +import androidx.appcompat.widget.PopupMenu import androidx.recyclerview.widget.ItemTouchHelper import io.legado.app.R import io.legado.app.base.VMBaseActivity @@ -12,8 +13,13 @@ import io.legado.app.data.appDb import io.legado.app.data.entities.TxtTocRule import io.legado.app.databinding.ActivityTxtTocRuleBinding import io.legado.app.databinding.DialogEditTextBinding +import io.legado.app.help.DirectLinkUpload import io.legado.app.lib.dialogs.alert import io.legado.app.lib.theme.primaryColor +import io.legado.app.ui.association.ImportDictRuleDialog +import io.legado.app.ui.association.ImportTxtTocRuleDialog +import io.legado.app.ui.document.HandleFileContract +import io.legado.app.ui.qrcode.QrCodeResult import io.legado.app.ui.widget.SelectActionBar import io.legado.app.ui.widget.dialog.TextDialog import io.legado.app.ui.widget.recycler.DragSelectTouchHelper @@ -27,7 +33,8 @@ import kotlinx.coroutines.launch class TxtTocRuleActivity : VMBaseActivity(), TxtTocRuleAdapter.CallBack, SelectActionBar.CallBack, - TxtTocRuleEditDialog.Callback { + TxtTocRuleEditDialog.Callback, + PopupMenu.OnMenuItemClickListener { override val viewModel: TxtTocRuleViewModel by viewModels() override val binding: ActivityTxtTocRuleBinding by viewBinding(ActivityTxtTocRuleBinding::inflate) @@ -35,6 +42,38 @@ class TxtTocRuleActivity : VMBaseActivity + alert(R.string.export_success) { + if (uri.toString().isAbsUrl()) { + DirectLinkUpload.getSummary()?.let { summary -> + setMessage(summary) + } + } + val alertBinding = DialogEditTextBinding.inflate(layoutInflater).apply { + editView.hint = getString(R.string.path) + editView.setText(uri.toString()) + } + customView { alertBinding.root } + okButton { + sendToClip(uri.toString()) + } + } + } + } override fun onActivityCreated(savedInstanceState: Bundle?) { initView() @@ -59,20 +98,22 @@ class TxtTocRuleActivity : VMBaseActivity - adapter.setItems(tocRules) + adapter.setItems(tocRules, adapter.diffItemCallBack) upCountView() } } } override fun onCompatCreateOptionsMenu(menu: Menu): Boolean { - menuInflater.inflate(R.menu.txt_toc_regex, menu) + menuInflater.inflate(R.menu.txt_toc_rule, menu) return super.onCompatCreateOptionsMenu(menu) } @@ -84,9 +125,15 @@ class TxtTocRuleActivity : VMBaseActivity showDialogFragment(TxtTocRuleEditDialog()) - R.id.menu_default -> viewModel.importDefault() - R.id.menu_import -> showImportDialog() - R.id.menu_help -> showTxtTocRegexHelp() + R.id.menu_import_local -> importDoc.launch { + mode = HandleFileContract.FILE + allowExtensions = arrayOf("txt", "json") + } + R.id.menu_import_onLine -> showImportDialog() + R.id.menu_import_qr -> qrCodeResult.launch() + R.id.menu_import_default -> viewModel.importDefault() + R.id.menu_help -> showTxtTocRuleHelp() + } return super.onCompatOptionsItemSelected(item) } @@ -182,18 +229,32 @@ class TxtTocRuleActivity : VMBaseActivity - toastOnUi(msg) - } + showDialogFragment(ImportTxtTocRuleDialog(it)) } } cancelButton() } } - private fun showTxtTocRegexHelp() { - val text = String(assets.open("help/txtTocRegexHelp.md").readBytes()) + private fun showTxtTocRuleHelp() { + val text = String(assets.open("help/txtTocRuleHelp.md").readBytes()) showDialogFragment(TextDialog(getString(R.string.help), text, TextDialog.Mode.MD)) } -} \ No newline at end of file + override fun onMenuItemClick(item: MenuItem): Boolean { + when (item.itemId) { + R.id.menu_enable_selection -> viewModel.enableSelection(*adapter.selection.toTypedArray()) + R.id.menu_disable_selection -> viewModel.disableSelection(*adapter.selection.toTypedArray()) + R.id.menu_export_selection -> exportResult.launch { + mode = HandleFileContract.EXPORT + fileData = HandleFileContract.FileData( + "exportTxtTocRule.json", + GSON.toJson(adapter.selection).toByteArray(), + "application/json" + ) + } + } + return true + } + +} diff --git a/app/src/main/java/io/legado/app/ui/book/toc/rule/TxtTocRuleAdapter.kt b/app/src/main/java/io/legado/app/ui/book/toc/rule/TxtTocRuleAdapter.kt index 01643e40a..eb26474b0 100644 --- a/app/src/main/java/io/legado/app/ui/book/toc/rule/TxtTocRuleAdapter.kt +++ b/app/src/main/java/io/legado/app/ui/book/toc/rule/TxtTocRuleAdapter.kt @@ -6,10 +6,12 @@ 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.ReplaceRule import io.legado.app.data.entities.TxtTocRule import io.legado.app.databinding.ItemTxtTocRuleBinding import io.legado.app.lib.theme.backgroundColor @@ -28,6 +30,43 @@ class TxtTocRuleAdapter(context: Context, private val callBack: CallBack) : selected.contains(it) } + val diffItemCallBack = object : DiffUtil.ItemCallback() { + + override fun areItemsTheSame(oldItem: TxtTocRule, newItem: TxtTocRule): Boolean { + return oldItem.id == newItem.id + } + + override fun areContentsTheSame(oldItem: TxtTocRule, newItem: TxtTocRule): Boolean { + if (oldItem.name != newItem.name) { + return false + } + if (oldItem.enable != newItem.enable) { + return false + } + if (oldItem.example != newItem.example) { + return false + } + return true + } + + override fun getChangePayload(oldItem: TxtTocRule, newItem: TxtTocRule): Any? { + val payload = Bundle() + if (oldItem.name != newItem.name) { + payload.putBoolean("upName", true) + } + if (oldItem.enable != newItem.enable) { + payload.putBoolean("enabled", newItem.enable) + } + if (oldItem.example != newItem.example) { + payload.putBoolean("upExample", true) + } + if (payload.isEmpty) { + return null + } + return payload + } + } + override fun getViewBinding(parent: ViewGroup): ItemTxtTocRuleBinding { return ItemTxtTocRuleBinding.inflate(inflater, parent, false) } @@ -50,6 +89,9 @@ class TxtTocRuleAdapter(context: Context, private val callBack: CallBack) : bundle.keySet().map { when (it) { "selected" -> cbSource.isChecked = selected.contains(item) + "upNmae" -> cbSource.text = item.name + "upExample" -> titleExample.text = item.example + "enabled" -> swtEnabled.isChecked = item.enable } } } @@ -95,7 +137,10 @@ class TxtTocRuleAdapter(context: Context, private val callBack: CallBack) : when (menuItem.itemId) { R.id.menu_top -> callBack.toTop(source) R.id.menu_bottom -> callBack.toBottom(source) - R.id.menu_del -> callBack.del(source) + R.id.menu_del -> { + callBack.del(source) + selected.remove(source) + } } true } diff --git a/app/src/main/java/io/legado/app/ui/book/toc/rule/TxtTocRuleDialog.kt b/app/src/main/java/io/legado/app/ui/book/toc/rule/TxtTocRuleDialog.kt index a76f6edf1..7d709e716 100644 --- a/app/src/main/java/io/legado/app/ui/book/toc/rule/TxtTocRuleDialog.kt +++ b/app/src/main/java/io/legado/app/ui/book/toc/rule/TxtTocRuleDialog.kt @@ -61,8 +61,8 @@ class TxtTocRuleDialog() : BaseDialogFragment(R.layout.dialog_toc_regex), override fun onFragmentCreated(view: View, savedInstanceState: Bundle?) { binding.toolBar.setBackgroundColor(primaryColor) durRegex = arguments?.getString("tocRegex") - binding.toolBar.setTitle(R.string.txt_toc_regex) - binding.toolBar.inflateMenu(R.menu.txt_toc_regex) + binding.toolBar.setTitle(R.string.txt_toc_rule) + binding.toolBar.inflateMenu(R.menu.txt_toc_rule) binding.toolBar.menu.applyTint(requireContext()) binding.toolBar.menu.findItem(R.id.menu_split_long_chapter) ?.isChecked = ReadBook.book?.getSplitLongChapter() == true @@ -125,7 +125,7 @@ class TxtTocRuleDialog() : BaseDialogFragment(R.layout.dialog_toc_regex), item.isChecked = !item.isChecked if (!item.isChecked) context?.longToastOnUi(R.string.need_more_time_load_content) } - R.id.menu_help -> showTxtTocRegexHelp() + R.id.menu_help -> showTxtTocRuleHelp() } return false } @@ -170,8 +170,8 @@ class TxtTocRuleDialog() : BaseDialogFragment(R.layout.dialog_toc_regex), } } - private fun showTxtTocRegexHelp() { - val text = String(requireContext().assets.open("help/txtTocRegexHelp.md").readBytes()) + private fun showTxtTocRuleHelp() { + val text = String(requireContext().assets.open("help/txtTocRuleHelp.md").readBytes()) showDialogFragment(TextDialog(getString(R.string.help), text, TextDialog.Mode.MD)) } diff --git a/app/src/main/java/io/legado/app/ui/book/toc/rule/TxtTocRuleViewModel.kt b/app/src/main/java/io/legado/app/ui/book/toc/rule/TxtTocRuleViewModel.kt index 67efa0276..3eeecdb17 100644 --- a/app/src/main/java/io/legado/app/ui/book/toc/rule/TxtTocRuleViewModel.kt +++ b/app/src/main/java/io/legado/app/ui/book/toc/rule/TxtTocRuleViewModel.kt @@ -3,6 +3,7 @@ package io.legado.app.ui.book.toc.rule import android.app.Application import io.legado.app.base.BaseViewModel import io.legado.app.data.appDb +import io.legado.app.data.entities.DictRule import io.legado.app.data.entities.TxtTocRule import io.legado.app.help.DefaultData import io.legado.app.help.http.newCallResponseBody @@ -83,4 +84,18 @@ class TxtTocRuleViewModel(app: Application) : BaseViewModel(app) { } } -} \ No newline at end of file + fun enableSelection(vararg txtTocRule: TxtTocRule) { + execute { + val array = txtTocRule.map { it.copy(enable = true) }.toTypedArray() + appDb.txtTocRuleDao.insert(*array) + } + } + + fun disableSelection(vararg txtTocRule: TxtTocRule) { + execute { + val array = txtTocRule.map { it.copy(enable = false) }.toTypedArray() + appDb.txtTocRuleDao.insert(*array) + } + } + +} 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 41087409e..8b0ebcbc4 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 @@ -21,6 +21,7 @@ import io.legado.app.ui.association.ImportDictRuleDialog import io.legado.app.ui.document.HandleFileContract import io.legado.app.ui.qrcode.QrCodeResult import io.legado.app.ui.widget.SelectActionBar +import io.legado.app.ui.widget.dialog.TextDialog import io.legado.app.ui.widget.recycler.DragSelectTouchHelper import io.legado.app.ui.widget.recycler.ItemTouchCallback import io.legado.app.ui.widget.recycler.VerticalDivider @@ -120,15 +121,15 @@ class DictRuleActivity : VMBaseActivity showDialogFragment() - R.id.menu_import_default -> viewModel.importDefault() + R.id.menu_add -> showDialogFragment() R.id.menu_import_local -> importDoc.launch { mode = HandleFileContract.FILE allowExtensions = arrayOf("txt", "json") } R.id.menu_import_onLine -> showImportDialog() R.id.menu_import_qr -> qrCodeResult.launch() - R.id.menu_help -> {} + R.id.menu_import_default -> viewModel.importDefault() + R.id.menu_help -> showDictRuleHelp() } return super.onCompatOptionsItemSelected(item) } @@ -195,7 +196,7 @@ class DictRuleActivity : VMBaseActivity startActivity() "replaceManage" -> startActivity() "dictRuleManage" -> startActivity() - "txtTocRegexManage" -> startActivity() + "txtTocRuleManage" -> startActivity() "bookmark" -> startActivity() "setting" -> startActivity { putExtra("configTag", ConfigTag.OTHER_CONFIG) diff --git a/app/src/main/java/io/legado/app/ui/replace/ReplaceRuleActivity.kt b/app/src/main/java/io/legado/app/ui/replace/ReplaceRuleActivity.kt index 57ccf7c32..fa83b6fbe 100644 --- a/app/src/main/java/io/legado/app/ui/replace/ReplaceRuleActivity.kt +++ b/app/src/main/java/io/legado/app/ui/replace/ReplaceRuleActivity.kt @@ -270,7 +270,7 @@ class ReplaceRuleActivity : VMBaseActivity callBack.toTop(item) R.id.menu_bottom -> callBack.toBottom(item) - R.id.menu_del -> callBack.delete(item) + R.id.menu_del -> { + callBack.delete(item) + selected.remove(item) + } } true } diff --git a/app/src/main/java/io/legado/app/ui/rss/source/manage/RssSourceAdapter.kt b/app/src/main/java/io/legado/app/ui/rss/source/manage/RssSourceAdapter.kt index 44faf60a1..340be8ec5 100644 --- a/app/src/main/java/io/legado/app/ui/rss/source/manage/RssSourceAdapter.kt +++ b/app/src/main/java/io/legado/app/ui/rss/source/manage/RssSourceAdapter.kt @@ -179,7 +179,10 @@ class RssSourceAdapter(context: Context, val callBack: CallBack) : when (menuItem.itemId) { R.id.menu_top -> callBack.toTop(source) R.id.menu_bottom -> callBack.toBottom(source) - R.id.menu_del -> callBack.del(source) + R.id.menu_del -> { + callBack.del(source) + selected.remove(source) + } } true } diff --git a/app/src/main/res/layout/activity_txt_toc_rule.xml b/app/src/main/res/layout/activity_txt_toc_rule.xml index 7ac6263aa..d587b864d 100644 --- a/app/src/main/res/layout/activity_txt_toc_rule.xml +++ b/app/src/main/res/layout/activity_txt_toc_rule.xml @@ -9,10 +9,7 @@ android:id="@+id/title_bar" android:layout_width="match_parent" android:layout_height="wrap_content" - app:contentInsetStartWithNavigation="0dp" - app:contentLayout="@layout/view_search" - app:displayHomeAsUp="true" - app:title="@string/txt_toc_regex" /> + app:title="@string/txt_toc_rule" /> diff --git a/app/src/main/res/menu/book_toc.xml b/app/src/main/res/menu/book_toc.xml index fce5759fc..ec5e26f35 100644 --- a/app/src/main/res/menu/book_toc.xml +++ b/app/src/main/res/menu/book_toc.xml @@ -16,7 +16,7 @@ diff --git a/app/src/main/res/menu/dict_rule.xml b/app/src/main/res/menu/dict_rule.xml index 6a61f0126..e47d464db 100644 --- a/app/src/main/res/menu/dict_rule.xml +++ b/app/src/main/res/menu/dict_rule.xml @@ -5,7 +5,7 @@ tools:ignore="AlwaysShowAction"> diff --git a/app/src/main/res/menu/txt_toc_regex.xml b/app/src/main/res/menu/txt_toc_rule.xml similarity index 66% rename from app/src/main/res/menu/txt_toc_regex.xml rename to app/src/main/res/menu/txt_toc_rule.xml index 24ae30491..0b910aa66 100644 --- a/app/src/main/res/menu/txt_toc_regex.xml +++ b/app/src/main/res/menu/txt_toc_rule.xml @@ -11,14 +11,26 @@ tools:ignore="AlwaysShowAction" /> + + + + diff --git a/app/src/main/res/menu/txt_toc_rule_sel.xml b/app/src/main/res/menu/txt_toc_rule_sel.xml new file mode 100644 index 000000000..000686775 --- /dev/null +++ b/app/src/main/res/menu/txt_toc_rule_sel.xml @@ -0,0 +1,20 @@ + + + + + + + + + + diff --git a/app/src/main/res/values-es-rES/strings.xml b/app/src/main/res/values-es-rES/strings.xml index f54e87f4e..1d5e4c2af 100644 --- a/app/src/main/res/values-es-rES/strings.xml +++ b/app/src/main/res/values-es-rES/strings.xml @@ -342,7 +342,7 @@ Mostrar todos los buscados Mostrar la fuente de búsqueda si Descubrir fue cerrado Actualizar capítulos - Capítulos de Txt Regex + Capítulos de Txt Rule Codificación de texto Orden ascendente/descendente Ordenar @@ -1077,5 +1077,6 @@ 新建 url规则(urlRule) 显示规则(showRule) - 配置 TXT 目录正则 + 配置 TXT 目录规则 + 导入字典规则 diff --git a/app/src/main/res/values-ja-rJP/strings.xml b/app/src/main/res/values-ja-rJP/strings.xml index 75f00f746..e5758e413 100644 --- a/app/src/main/res/values-ja-rJP/strings.xml +++ b/app/src/main/res/values-ja-rJP/strings.xml @@ -346,7 +346,7 @@ Display all Discovery Display the selected origin\'s Discovery if closed Update chapters - Txt Chapters Regex + Txt Chapters Rule Text encoding Ascending/Descending order Sort @@ -1080,5 +1080,6 @@ 新建 url规则(urlRule) 显示规则(showRule) - 配置 TXT 目录正则 + 配置 TXT 目录规则 + 导入字典规则 diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 9857b9f7b..0e32bfee3 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -344,7 +344,7 @@ Mostrar todas as Descobertas Mostrar a fonte da Descoberta selecionada se encerrado Atualizar os capítulos - Capítulos de Txt Regex + Capítulos de Txt Rule Codificação de texto Ordem ascendente/descendente Ordenar @@ -1080,5 +1080,6 @@ 新建 url规则(urlRule) 显示规则(showRule) - 配置 TXT 目录正则 + 配置 TXT 目录规则 + 导入字典规则 diff --git a/app/src/main/res/values-zh-rHK/strings.xml b/app/src/main/res/values-zh-rHK/strings.xml index 9951dc376..c4efeaeec 100644 --- a/app/src/main/res/values-zh-rHK/strings.xml +++ b/app/src/main/res/values-zh-rHK/strings.xml @@ -343,7 +343,7 @@ 顯示所有發現 關閉則只顯示勾選源的發現 更新目錄 - TXT目錄正則 + TXT 目錄規則 設置編碼 倒序-順序 排序 @@ -1077,5 +1077,6 @@ 新建 url规则(urlRule) 显示规则(showRule) - 配置 TXT 目录正则 + 配置 TXT 目录规则 + 导入字典规则 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 1bb9004cd..763c91f91 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -345,7 +345,7 @@ 顯示所有發現 關閉則只顯示勾選源的發現 更新目錄 - TXT目錄正則 + TXT 目錄規則 設定編碼 倒序-順序 排序 @@ -1079,5 +1079,6 @@ 新建 url规则(urlRule) 显示规则(showRule) - 配置 TXT 目录正则 + 配置 TXT 目录规则 + 导入字典规则 diff --git a/app/src/main/res/values-zh/strings.xml b/app/src/main/res/values-zh/strings.xml index 28b990393..4d90f0b6f 100644 --- a/app/src/main/res/values-zh/strings.xml +++ b/app/src/main/res/values-zh/strings.xml @@ -345,7 +345,7 @@ 显示所有发现 关闭则只显示勾选源的发现 更新目录 - TXT 目录正则 + TXT 目录规则 设置编码 倒序-顺序 排序 @@ -1079,5 +1079,6 @@ 新建 url规则(urlRule) 显示规则(showRule) - 配置 TXT 目录正则 + 配置 TXT 目录规则 + 导入字典规则 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 62bdc5a3a..fa21b42fd 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -346,7 +346,7 @@ Display all Discovery Display the selected origin\'s Discovery if closed Update chapters - Txt Chapters Regex + Txt Chapters Rule Text encoding Ascending/Descending order Sort @@ -1080,5 +1080,6 @@ 新建 url规则(urlRule) 显示规则(showRule) - 配置 TXT 目录正则 + 配置 TXT 目录规则 + 导入字典规则 diff --git a/app/src/main/res/xml/pref_main.xml b/app/src/main/res/xml/pref_main.xml index a4576340a..f2830fec5 100644 --- a/app/src/main/res/xml/pref_main.xml +++ b/app/src/main/res/xml/pref_main.xml @@ -13,9 +13,9 @@ app:iconSpaceReserved="false" />