This commit is contained in:
Horis
2026-03-10 13:01:34 +08:00
parent cbff4df257
commit 24687a4403
5 changed files with 28 additions and 59 deletions
@@ -29,13 +29,11 @@ import io.legado.app.utils.ACache
import io.legado.app.utils.GSON import io.legado.app.utils.GSON
import io.legado.app.utils.isAbsUrl import io.legado.app.utils.isAbsUrl
import io.legado.app.utils.launch import io.legado.app.utils.launch
import io.legado.app.utils.readText
import io.legado.app.utils.sendToClip import io.legado.app.utils.sendToClip
import io.legado.app.utils.setEdgeEffectColor import io.legado.app.utils.setEdgeEffectColor
import io.legado.app.utils.showDialogFragment import io.legado.app.utils.showDialogFragment
import io.legado.app.utils.showHelp import io.legado.app.utils.showHelp
import io.legado.app.utils.splitNotBlank import io.legado.app.utils.splitNotBlank
import io.legado.app.utils.toastOnUi
import io.legado.app.utils.viewbindingdelegate.viewBinding import io.legado.app.utils.viewbindingdelegate.viewBinding
import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.Dispatchers.IO
import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.catch
@@ -49,8 +47,8 @@ class TxtTocRuleActivity : VMBaseActivity<ActivityTxtTocRuleBinding, TxtTocRuleV
TxtTocRuleEditDialog.Callback, TxtTocRuleEditDialog.Callback,
PopupMenu.OnMenuItemClickListener { PopupMenu.OnMenuItemClickListener {
override val viewModel: TxtTocRuleViewModel by viewModels() override val viewModel by viewModels<TxtTocRuleViewModel>()
override val binding: ActivityTxtTocRuleBinding by viewBinding(ActivityTxtTocRuleBinding::inflate) override val binding by viewBinding(ActivityTxtTocRuleBinding::inflate)
private val adapter: TxtTocRuleAdapter by lazy { private val adapter: TxtTocRuleAdapter by lazy {
TxtTocRuleAdapter(this, this) TxtTocRuleAdapter(this, this)
} }
@@ -60,12 +58,8 @@ class TxtTocRuleActivity : VMBaseActivity<ActivityTxtTocRuleBinding, TxtTocRuleV
showDialogFragment(ImportTxtTocRuleDialog(it)) showDialogFragment(ImportTxtTocRuleDialog(it))
} }
private val importDoc = registerForActivityResult(HandleFileContract()) { private val importDoc = registerForActivityResult(HandleFileContract()) {
kotlin.runCatching { it.uri?.let { uri ->
it.uri?.readText(this)?.let { showDialogFragment(ImportTxtTocRuleDialog(uri.toString()))
showDialogFragment(ImportTxtTocRuleDialog(it))
}
}.onFailure {
toastOnUi("readTextError:${it.localizedMessage}")
} }
} }
private val exportResult = registerForActivityResult(HandleFileContract()) { private val exportResult = registerForActivityResult(HandleFileContract()) {
@@ -136,6 +130,7 @@ class TxtTocRuleActivity : VMBaseActivity<ActivityTxtTocRuleBinding, TxtTocRuleV
mode = HandleFileContract.FILE mode = HandleFileContract.FILE
allowExtensions = arrayOf("txt", "json") allowExtensions = arrayOf("txt", "json")
} }
R.id.menu_import_onLine -> showImportDialog() R.id.menu_import_onLine -> showImportDialog()
R.id.menu_import_qr -> qrCodeResult.launch() R.id.menu_import_qr -> qrCodeResult.launch()
R.id.menu_import_default -> viewModel.importDefault() R.id.menu_import_default -> viewModel.importDefault()
@@ -245,8 +240,14 @@ class TxtTocRuleActivity : VMBaseActivity<ActivityTxtTocRuleBinding, TxtTocRuleV
override fun onMenuItemClick(item: MenuItem): Boolean { override fun onMenuItemClick(item: MenuItem): Boolean {
when (item.itemId) { when (item.itemId) {
R.id.menu_enable_selection -> viewModel.enableSelection(*adapter.selection.toTypedArray()) R.id.menu_enable_selection -> viewModel.enableSelection(
R.id.menu_disable_selection -> viewModel.disableSelection(*adapter.selection.toTypedArray()) *adapter.selection.toTypedArray()
)
R.id.menu_disable_selection -> viewModel.disableSelection(
*adapter.selection.toTypedArray()
)
R.id.menu_export_selection -> exportResult.launch { R.id.menu_export_selection -> exportResult.launch {
mode = HandleFileContract.EXPORT mode = HandleFileContract.EXPORT
fileData = HandleFileContract.FileData( fileData = HandleFileContract.FileData(
@@ -35,12 +35,10 @@ import io.legado.app.utils.ACache
import io.legado.app.utils.applyTint import io.legado.app.utils.applyTint
import io.legado.app.utils.isAbsUrl import io.legado.app.utils.isAbsUrl
import io.legado.app.utils.launch import io.legado.app.utils.launch
import io.legado.app.utils.readText
import io.legado.app.utils.setLayout import io.legado.app.utils.setLayout
import io.legado.app.utils.showDialogFragment import io.legado.app.utils.showDialogFragment
import io.legado.app.utils.showHelp import io.legado.app.utils.showHelp
import io.legado.app.utils.splitNotBlank import io.legado.app.utils.splitNotBlank
import io.legado.app.utils.toastOnUi
import io.legado.app.utils.viewbindingdelegate.viewBinding import io.legado.app.utils.viewbindingdelegate.viewBinding
import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.Dispatchers.IO
import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.catch
@@ -72,12 +70,8 @@ class TxtTocRuleDialog() : BaseDialogFragment(R.layout.dialog_toc_regex),
showDialogFragment(ImportTxtTocRuleDialog(it)) showDialogFragment(ImportTxtTocRuleDialog(it))
} }
private val importDoc = registerForActivityResult(HandleFileContract()) { private val importDoc = registerForActivityResult(HandleFileContract()) {
kotlin.runCatching { it.uri?.let { uri ->
it.uri?.readText(requireContext())?.let { showDialogFragment(ImportTxtTocRuleDialog(uri.toString()))
showDialogFragment(ImportTxtTocRuleDialog(it))
}
}.onFailure {
toastOnUi("readTextError:${it.localizedMessage}")
} }
} }
@@ -30,13 +30,11 @@ import io.legado.app.utils.ACache
import io.legado.app.utils.GSON import io.legado.app.utils.GSON
import io.legado.app.utils.isAbsUrl import io.legado.app.utils.isAbsUrl
import io.legado.app.utils.launch import io.legado.app.utils.launch
import io.legado.app.utils.readText
import io.legado.app.utils.sendToClip import io.legado.app.utils.sendToClip
import io.legado.app.utils.setEdgeEffectColor import io.legado.app.utils.setEdgeEffectColor
import io.legado.app.utils.showDialogFragment import io.legado.app.utils.showDialogFragment
import io.legado.app.utils.showHelp import io.legado.app.utils.showHelp
import io.legado.app.utils.splitNotBlank import io.legado.app.utils.splitNotBlank
import io.legado.app.utils.toastOnUi
import io.legado.app.utils.viewbindingdelegate.viewBinding import io.legado.app.utils.viewbindingdelegate.viewBinding
import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.Dispatchers.IO
import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.catch
@@ -54,19 +52,11 @@ class DictRuleActivity : VMBaseActivity<ActivityDictRuleBinding, DictRuleViewMod
private val adapter by lazy { DictRuleAdapter(this, this) } private val adapter by lazy { DictRuleAdapter(this, this) }
private val qrCodeResult = registerForActivityResult(QrCodeResult()) { private val qrCodeResult = registerForActivityResult(QrCodeResult()) {
it ?: return@registerForActivityResult it ?: return@registerForActivityResult
showDialogFragment( showDialogFragment(ImportDictRuleDialog(it))
ImportDictRuleDialog(it)
)
} }
private val importDoc = registerForActivityResult(HandleFileContract()) { private val importDoc = registerForActivityResult(HandleFileContract()) {
kotlin.runCatching { it.uri?.let { uri ->
it.uri?.readText(this)?.let { showDialogFragment(ImportDictRuleDialog(uri.toString()))
showDialogFragment(
ImportDictRuleDialog(it)
)
}
}.onFailure {
toastOnUi("readTextError:${it.localizedMessage}")
} }
} }
private val exportResult = registerForActivityResult(HandleFileContract()) { private val exportResult = registerForActivityResult(HandleFileContract()) {
@@ -39,13 +39,11 @@ import io.legado.app.utils.GSON
import io.legado.app.utils.applyTint import io.legado.app.utils.applyTint
import io.legado.app.utils.isAbsUrl import io.legado.app.utils.isAbsUrl
import io.legado.app.utils.launch import io.legado.app.utils.launch
import io.legado.app.utils.readText
import io.legado.app.utils.sendToClip import io.legado.app.utils.sendToClip
import io.legado.app.utils.setEdgeEffectColor import io.legado.app.utils.setEdgeEffectColor
import io.legado.app.utils.showDialogFragment import io.legado.app.utils.showDialogFragment
import io.legado.app.utils.showHelp import io.legado.app.utils.showHelp
import io.legado.app.utils.splitNotBlank import io.legado.app.utils.splitNotBlank
import io.legado.app.utils.toastOnUi
import io.legado.app.utils.transaction import io.legado.app.utils.transaction
import io.legado.app.utils.viewbindingdelegate.viewBinding import io.legado.app.utils.viewbindingdelegate.viewBinding
import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.Dispatchers.IO
@@ -77,9 +75,7 @@ class ReplaceRuleActivity : VMBaseActivity<ActivityReplaceRuleBinding, ReplaceRu
private var dataInit = false private var dataInit = false
private val qrCodeResult = registerForActivityResult(QrCodeResult()) { private val qrCodeResult = registerForActivityResult(QrCodeResult()) {
it ?: return@registerForActivityResult it ?: return@registerForActivityResult
showDialogFragment( showDialogFragment(ImportReplaceRuleDialog(it))
ImportReplaceRuleDialog(it)
)
} }
private val editActivity = private val editActivity =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
@@ -88,14 +84,8 @@ class ReplaceRuleActivity : VMBaseActivity<ActivityReplaceRuleBinding, ReplaceRu
} }
} }
private val importDoc = registerForActivityResult(HandleFileContract()) { private val importDoc = registerForActivityResult(HandleFileContract()) {
kotlin.runCatching { it.uri?.let { uri ->
it.uri?.readText(this)?.let { showDialogFragment(ImportReplaceRuleDialog(uri.toString()))
showDialogFragment(
ImportReplaceRuleDialog(it)
)
}
}.onFailure {
toastOnUi("readTextError:${it.localizedMessage}")
} }
} }
private val exportResult = registerForActivityResult(HandleFileContract()) { private val exportResult = registerForActivityResult(HandleFileContract()) {
@@ -201,6 +191,7 @@ 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%")
} }
@@ -231,6 +222,7 @@ 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()
@@ -238,11 +230,13 @@ 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)
} }
@@ -34,7 +34,6 @@ import io.legado.app.utils.applyTint
import io.legado.app.utils.dpToPx import io.legado.app.utils.dpToPx
import io.legado.app.utils.isAbsUrl import io.legado.app.utils.isAbsUrl
import io.legado.app.utils.launch import io.legado.app.utils.launch
import io.legado.app.utils.readText
import io.legado.app.utils.sendToClip import io.legado.app.utils.sendToClip
import io.legado.app.utils.setEdgeEffectColor import io.legado.app.utils.setEdgeEffectColor
import io.legado.app.utils.share import io.legado.app.utils.share
@@ -42,7 +41,6 @@ import io.legado.app.utils.showDialogFragment
import io.legado.app.utils.showHelp import io.legado.app.utils.showHelp
import io.legado.app.utils.splitNotBlank import io.legado.app.utils.splitNotBlank
import io.legado.app.utils.startActivity import io.legado.app.utils.startActivity
import io.legado.app.utils.toastOnUi
import io.legado.app.utils.transaction import io.legado.app.utils.transaction
import io.legado.app.utils.viewbindingdelegate.viewBinding import io.legado.app.utils.viewbindingdelegate.viewBinding
import kotlinx.coroutines.Dispatchers.IO import kotlinx.coroutines.Dispatchers.IO
@@ -73,19 +71,11 @@ class RssSourceActivity : VMBaseActivity<ActivityRssSourceBinding, RssSourceView
private var groupMenu: SubMenu? = null private var groupMenu: SubMenu? = null
private val qrCodeResult = registerForActivityResult(QrCodeResult()) { private val qrCodeResult = registerForActivityResult(QrCodeResult()) {
it ?: return@registerForActivityResult it ?: return@registerForActivityResult
showDialogFragment( showDialogFragment(ImportRssSourceDialog(it))
ImportRssSourceDialog(it)
)
} }
private val importDoc = registerForActivityResult(HandleFileContract()) { private val importDoc = registerForActivityResult(HandleFileContract()) {
kotlin.runCatching { it.uri?.let { uri ->
it.uri?.readText(this)?.let { showDialogFragment(ImportRssSourceDialog(uri.toString()))
showDialogFragment(
ImportRssSourceDialog(it)
)
}
}.onFailure {
toastOnUi("readTextError:${it.localizedMessage}")
} }
} }
private val exportResult = registerForActivityResult(HandleFileContract()) { private val exportResult = registerForActivityResult(HandleFileContract()) {