From 94e7aa464c351a17d2e6f37449ee72601057eb0d Mon Sep 17 00:00:00 2001 From: Horis <8674809+821938089@users.noreply.github.com> Date: Thu, 12 Feb 2026 22:46:02 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=20#5696?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/lib/theme/view/ThemeCheckBox.kt | 21 ++++++++++++ .../app/lib/theme/view/ThemeRadioButton.kt | 21 ++++++++++++ .../legado/app/lib/theme/view/ThemeSwitch.kt | 19 +++++++++++ .../ui/association/ImportBookSourceDialog.kt | 16 ++++++---- .../ui/association/ImportDictRuleDialog.kt | 14 ++++---- .../app/ui/association/ImportHttpTtsDialog.kt | 8 ++--- .../ui/association/ImportReplaceRuleDialog.kt | 17 ++++++---- .../ui/association/ImportRssSourceDialog.kt | 8 ++--- .../app/ui/association/ImportThemeDialog.kt | 8 ++--- .../ui/association/ImportTxtTocRuleDialog.kt | 8 ++--- .../app/ui/book/group/GroupManageDialog.kt | 8 ++--- .../app/ui/book/group/GroupSelectDialog.kt | 14 ++++---- .../ui/book/import/remote/ServersDialog.kt | 4 +-- .../legado/app/ui/book/manage/BookAdapter.kt | 20 +++++------- .../app/ui/book/search/SearchScopeDialog.kt | 32 ++++++++----------- .../book/source/manage/BookSourceAdapter.kt | 22 ++++++------- .../app/ui/book/toc/rule/TxtTocRuleAdapter.kt | 24 ++++++-------- .../app/ui/book/toc/rule/TxtTocRuleDialog.kt | 15 ++++----- .../app/ui/dict/rule/DictRuleAdapter.kt | 10 +++--- .../app/ui/replace/ReplaceRuleAdapter.kt | 10 +++--- .../rss/source/edit/RssSourceEditAdapter.kt | 7 ++-- .../ui/rss/source/manage/RssSourceAdapter.kt | 30 +++++++---------- .../legado/app/ui/widget/SelectActionBar.kt | 6 ++-- 23 files changed, 185 insertions(+), 157 deletions(-) diff --git a/app/src/main/java/io/legado/app/lib/theme/view/ThemeCheckBox.kt b/app/src/main/java/io/legado/app/lib/theme/view/ThemeCheckBox.kt index ffda099ff..2214c6335 100644 --- a/app/src/main/java/io/legado/app/lib/theme/view/ThemeCheckBox.kt +++ b/app/src/main/java/io/legado/app/lib/theme/view/ThemeCheckBox.kt @@ -8,9 +8,30 @@ import io.legado.app.utils.applyTint class ThemeCheckBox(context: Context, attrs: AttributeSet) : AppCompatCheckBox(context, attrs) { + private var isUserAction = false + init { if (!isInEditMode) { applyTint(context.accentColor) } } + + override fun performClick(): Boolean { + isUserAction = true + val result = super.performClick() + isUserAction = false + return result + } + + fun setOnUserCheckedChangeListener(listener: ((Boolean) -> Unit)?) { + if (listener == null) { + return super.setOnCheckedChangeListener(null) + } + super.setOnCheckedChangeListener { _, isChecked -> + if (isUserAction) { + listener.invoke(isChecked) + } + } + } + } diff --git a/app/src/main/java/io/legado/app/lib/theme/view/ThemeRadioButton.kt b/app/src/main/java/io/legado/app/lib/theme/view/ThemeRadioButton.kt index caf7a136e..90f6e958e 100644 --- a/app/src/main/java/io/legado/app/lib/theme/view/ThemeRadioButton.kt +++ b/app/src/main/java/io/legado/app/lib/theme/view/ThemeRadioButton.kt @@ -9,9 +9,30 @@ import io.legado.app.utils.applyTint class ThemeRadioButton(context: Context, attrs: AttributeSet) : AppCompatRadioButton(context, attrs) { + private var isUserAction = false + init { if (!isInEditMode) { applyTint(context.accentColor) } } + + override fun performClick(): Boolean { + isUserAction = true + val result = super.performClick() + isUserAction = false + return result + } + + fun setOnUserCheckedChangeListener(listener: ((Boolean) -> Unit)?) { + if (listener == null) { + return super.setOnCheckedChangeListener(null) + } + super.setOnCheckedChangeListener { _, isChecked -> + if (isUserAction) { + listener.invoke(isChecked) + } + } + } + } diff --git a/app/src/main/java/io/legado/app/lib/theme/view/ThemeSwitch.kt b/app/src/main/java/io/legado/app/lib/theme/view/ThemeSwitch.kt index 94b18be5c..b19bcc51e 100644 --- a/app/src/main/java/io/legado/app/lib/theme/view/ThemeSwitch.kt +++ b/app/src/main/java/io/legado/app/lib/theme/view/ThemeSwitch.kt @@ -11,11 +11,30 @@ import io.legado.app.utils.applyTint */ class ThemeSwitch(context: Context, attrs: AttributeSet) : SwitchCompat(context, attrs) { + private var isUserAction = false + init { if (!isInEditMode) { applyTint(context.accentColor) } + } + override fun performClick(): Boolean { + isUserAction = true + val result = super.performClick() + isUserAction = false + return result + } + + fun setOnUserCheckedChangeListener(listener: ((Boolean) -> Unit)?) { + if (listener == null) { + return super.setOnCheckedChangeListener(null) + } + super.setOnCheckedChangeListener { _, isChecked -> + if (isUserAction) { + listener.invoke(isChecked) + } + } } } diff --git a/app/src/main/java/io/legado/app/ui/association/ImportBookSourceDialog.kt b/app/src/main/java/io/legado/app/ui/association/ImportBookSourceDialog.kt index a1ff32655..a8d823921 100644 --- a/app/src/main/java/io/legado/app/ui/association/ImportBookSourceDialog.kt +++ b/app/src/main/java/io/legado/app/ui/association/ImportBookSourceDialog.kt @@ -25,8 +25,14 @@ import io.legado.app.lib.dialogs.alert import io.legado.app.lib.theme.primaryColor import io.legado.app.ui.widget.dialog.CodeDialog import io.legado.app.ui.widget.dialog.WaitDialog -import io.legado.app.utils.* +import io.legado.app.utils.GSON +import io.legado.app.utils.dpToPx +import io.legado.app.utils.fromJsonObject +import io.legado.app.utils.putPrefBoolean +import io.legado.app.utils.setLayout +import io.legado.app.utils.showDialogFragment import io.legado.app.utils.viewbindingdelegate.viewBinding +import io.legado.app.utils.visible import splitties.views.onClick @@ -255,11 +261,9 @@ class ImportBookSourceDialog() : BaseDialogFragment(R.layout.dialog_recycler_vie override fun registerListener(holder: ItemViewHolder, binding: ItemSourceImportBinding) { binding.apply { - cbSourceName.setOnCheckedChangeListener { buttonView, isChecked -> - if (buttonView.isPressed) { - viewModel.selectStatus[holder.layoutPosition] = isChecked - upSelectText() - } + cbSourceName.setOnUserCheckedChangeListener { isChecked -> + viewModel.selectStatus[holder.layoutPosition] = isChecked + upSelectText() } root.onClick { cbSourceName.isChecked = !cbSourceName.isChecked 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 9297a2662..5d3946ed9 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 @@ -18,8 +18,12 @@ import io.legado.app.databinding.ItemSourceImportBinding import io.legado.app.lib.theme.primaryColor import io.legado.app.ui.widget.dialog.CodeDialog import io.legado.app.ui.widget.dialog.WaitDialog -import io.legado.app.utils.* +import io.legado.app.utils.GSON +import io.legado.app.utils.fromJsonObject +import io.legado.app.utils.setLayout +import io.legado.app.utils.showDialogFragment import io.legado.app.utils.viewbindingdelegate.viewBinding +import io.legado.app.utils.visible import splitties.views.onClick class ImportDictRuleDialog() : BaseDialogFragment(R.layout.dialog_recycler_view), @@ -148,11 +152,9 @@ class ImportDictRuleDialog() : BaseDialogFragment(R.layout.dialog_recycler_view) override fun registerListener(holder: ItemViewHolder, binding: ItemSourceImportBinding) { binding.apply { - cbSourceName.setOnCheckedChangeListener { buttonView, isChecked -> - if (buttonView.isPressed) { - viewModel.selectStatus[holder.layoutPosition] = isChecked - upSelectText() - } + cbSourceName.setOnUserCheckedChangeListener { isChecked -> + viewModel.selectStatus[holder.layoutPosition] = isChecked + upSelectText() } root.onClick { cbSourceName.isChecked = !cbSourceName.isChecked diff --git a/app/src/main/java/io/legado/app/ui/association/ImportHttpTtsDialog.kt b/app/src/main/java/io/legado/app/ui/association/ImportHttpTtsDialog.kt index 29493c60e..2ddee1f47 100644 --- a/app/src/main/java/io/legado/app/ui/association/ImportHttpTtsDialog.kt +++ b/app/src/main/java/io/legado/app/ui/association/ImportHttpTtsDialog.kt @@ -152,11 +152,9 @@ class ImportHttpTtsDialog() : BaseDialogFragment(R.layout.dialog_recycler_view), override fun registerListener(holder: ItemViewHolder, binding: ItemSourceImportBinding) { binding.apply { - cbSourceName.setOnCheckedChangeListener { buttonView, isChecked -> - if (buttonView.isPressed) { - viewModel.selectStatus[holder.layoutPosition] = isChecked - upSelectText() - } + cbSourceName.setOnUserCheckedChangeListener { isChecked -> + viewModel.selectStatus[holder.layoutPosition] = isChecked + upSelectText() } root.onClick { cbSourceName.isChecked = !cbSourceName.isChecked diff --git a/app/src/main/java/io/legado/app/ui/association/ImportReplaceRuleDialog.kt b/app/src/main/java/io/legado/app/ui/association/ImportReplaceRuleDialog.kt index 58dc872ce..f12c59480 100644 --- a/app/src/main/java/io/legado/app/ui/association/ImportReplaceRuleDialog.kt +++ b/app/src/main/java/io/legado/app/ui/association/ImportReplaceRuleDialog.kt @@ -24,8 +24,14 @@ import io.legado.app.lib.dialogs.alert import io.legado.app.lib.theme.primaryColor import io.legado.app.ui.widget.dialog.CodeDialog import io.legado.app.ui.widget.dialog.WaitDialog -import io.legado.app.utils.* +import io.legado.app.utils.GSON +import io.legado.app.utils.dpToPx +import io.legado.app.utils.fromJsonObject +import io.legado.app.utils.putPrefBoolean +import io.legado.app.utils.setLayout +import io.legado.app.utils.showDialogFragment import io.legado.app.utils.viewbindingdelegate.viewBinding +import io.legado.app.utils.visible import splitties.views.onClick class ImportReplaceRuleDialog() : BaseDialogFragment(R.layout.dialog_recycler_view), @@ -212,6 +218,7 @@ class ImportReplaceRuleDialog() : BaseDialogFragment(R.layout.dialog_recycler_vi || item.replacement != localRule.replacement || item.isRegex != localRule.isRegex || item.scope != localRule.scope -> "更新" + else -> "已有" } } @@ -219,11 +226,9 @@ class ImportReplaceRuleDialog() : BaseDialogFragment(R.layout.dialog_recycler_vi override fun registerListener(holder: ItemViewHolder, binding: ItemSourceImportBinding) { binding.run { - cbSourceName.setOnCheckedChangeListener { buttonView, isChecked -> - if (buttonView.isPressed) { - viewModel.selectStatus[holder.layoutPosition] = isChecked - upSelectText() - } + cbSourceName.setOnUserCheckedChangeListener { isChecked -> + viewModel.selectStatus[holder.layoutPosition] = isChecked + upSelectText() } root.onClick { cbSourceName.isChecked = !cbSourceName.isChecked diff --git a/app/src/main/java/io/legado/app/ui/association/ImportRssSourceDialog.kt b/app/src/main/java/io/legado/app/ui/association/ImportRssSourceDialog.kt index 97a7affe9..66d1d4e80 100644 --- a/app/src/main/java/io/legado/app/ui/association/ImportRssSourceDialog.kt +++ b/app/src/main/java/io/legado/app/ui/association/ImportRssSourceDialog.kt @@ -240,11 +240,9 @@ class ImportRssSourceDialog() : BaseDialogFragment(R.layout.dialog_recycler_view override fun registerListener(holder: ItemViewHolder, binding: ItemSourceImportBinding) { binding.apply { - cbSourceName.setOnCheckedChangeListener { buttonView, isChecked -> - if (buttonView.isPressed) { - viewModel.selectStatus[holder.layoutPosition] = isChecked - upSelectText() - } + cbSourceName.setOnUserCheckedChangeListener { isChecked -> + viewModel.selectStatus[holder.layoutPosition] = isChecked + upSelectText() } root.onClick { cbSourceName.isChecked = !cbSourceName.isChecked diff --git a/app/src/main/java/io/legado/app/ui/association/ImportThemeDialog.kt b/app/src/main/java/io/legado/app/ui/association/ImportThemeDialog.kt index f9998e22b..ba9930d84 100644 --- a/app/src/main/java/io/legado/app/ui/association/ImportThemeDialog.kt +++ b/app/src/main/java/io/legado/app/ui/association/ImportThemeDialog.kt @@ -151,11 +151,9 @@ class ImportThemeDialog() : BaseDialogFragment(R.layout.dialog_recycler_view) { override fun registerListener(holder: ItemViewHolder, binding: ItemSourceImportBinding) { binding.apply { - cbSourceName.setOnCheckedChangeListener { buttonView, isChecked -> - if (buttonView.isPressed) { - viewModel.selectStatus[holder.layoutPosition] = isChecked - upSelectText() - } + cbSourceName.setOnUserCheckedChangeListener { isChecked -> + viewModel.selectStatus[holder.layoutPosition] = isChecked + upSelectText() } root.onClick { cbSourceName.isChecked = !cbSourceName.isChecked diff --git a/app/src/main/java/io/legado/app/ui/association/ImportTxtTocRuleDialog.kt b/app/src/main/java/io/legado/app/ui/association/ImportTxtTocRuleDialog.kt index 1d21921e0..bdd9792dd 100644 --- a/app/src/main/java/io/legado/app/ui/association/ImportTxtTocRuleDialog.kt +++ b/app/src/main/java/io/legado/app/ui/association/ImportTxtTocRuleDialog.kt @@ -151,11 +151,9 @@ class ImportTxtTocRuleDialog() : BaseDialogFragment(R.layout.dialog_recycler_vie override fun registerListener(holder: ItemViewHolder, binding: ItemSourceImportBinding) { binding.apply { - cbSourceName.setOnCheckedChangeListener { buttonView, isChecked -> - if (buttonView.isPressed) { - viewModel.selectStatus[holder.layoutPosition] = isChecked - upSelectText() - } + cbSourceName.setOnUserCheckedChangeListener { isChecked -> + viewModel.selectStatus[holder.layoutPosition] = isChecked + upSelectText() } root.onClick { cbSourceName.isChecked = !cbSourceName.isChecked diff --git a/app/src/main/java/io/legado/app/ui/book/group/GroupManageDialog.kt b/app/src/main/java/io/legado/app/ui/book/group/GroupManageDialog.kt index 0cff59e78..4152c8dc8 100644 --- a/app/src/main/java/io/legado/app/ui/book/group/GroupManageDialog.kt +++ b/app/src/main/java/io/legado/app/ui/book/group/GroupManageDialog.kt @@ -135,11 +135,9 @@ class GroupManageDialog : BaseDialogFragment(R.layout.dialog_recycler_view), ) } } - swShow.setOnCheckedChangeListener { buttonView, isChecked -> - if (buttonView.isPressed) { - getItem(holder.layoutPosition)?.let { - viewModel.upGroup(it.copy(show = isChecked)) - } + swShow.setOnUserCheckedChangeListener { isChecked -> + getItem(holder.layoutPosition)?.let { + viewModel.upGroup(it.copy(show = isChecked)) } } } diff --git a/app/src/main/java/io/legado/app/ui/book/group/GroupSelectDialog.kt b/app/src/main/java/io/legado/app/ui/book/group/GroupSelectDialog.kt index e153d81b2..7c196b1e0 100644 --- a/app/src/main/java/io/legado/app/ui/book/group/GroupSelectDialog.kt +++ b/app/src/main/java/io/legado/app/ui/book/group/GroupSelectDialog.kt @@ -127,14 +127,12 @@ class GroupSelectDialog() : BaseDialogFragment(R.layout.dialog_book_group_picker override fun registerListener(holder: ItemViewHolder, binding: ItemGroupSelectBinding) { binding.run { - cbGroup.setOnCheckedChangeListener { buttonView, isChecked -> - if (buttonView.isPressed) { - getItem(holder.layoutPosition)?.let { - groupId = if (isChecked) { - groupId + it.groupId - } else { - groupId - it.groupId - } + cbGroup.setOnUserCheckedChangeListener { isChecked -> + getItem(holder.layoutPosition)?.let { + groupId = if (isChecked) { + groupId + it.groupId + } else { + groupId - it.groupId } } } diff --git a/app/src/main/java/io/legado/app/ui/book/import/remote/ServersDialog.kt b/app/src/main/java/io/legado/app/ui/book/import/remote/ServersDialog.kt index 519e99904..3bf9990b3 100644 --- a/app/src/main/java/io/legado/app/ui/book/import/remote/ServersDialog.kt +++ b/app/src/main/java/io/legado/app/ui/book/import/remote/ServersDialog.kt @@ -116,8 +116,8 @@ class ServersDialog : BaseDialogFragment(R.layout.dialog_recycler_view), } override fun registerListener(holder: ItemViewHolder, binding: ItemServerSelectBinding) { - binding.rbServer.setOnCheckedChangeListener { buttonView, isChecked -> - if (buttonView.isPressed && isChecked) { + binding.rbServer.setOnUserCheckedChangeListener { isChecked -> + if (isChecked) { selectServerId = getItemByLayoutPosition(holder.layoutPosition)!!.id adapter.updateItems(0, itemCount - 1, "upSelect") } diff --git a/app/src/main/java/io/legado/app/ui/book/manage/BookAdapter.kt b/app/src/main/java/io/legado/app/ui/book/manage/BookAdapter.kt index 3ecb9ce51..a6d26a42f 100644 --- a/app/src/main/java/io/legado/app/ui/book/manage/BookAdapter.kt +++ b/app/src/main/java/io/legado/app/ui/book/manage/BookAdapter.kt @@ -17,7 +17,7 @@ import io.legado.app.help.config.AppConfig import io.legado.app.lib.theme.backgroundColor import io.legado.app.ui.widget.recycler.DragSelectTouchHelper import io.legado.app.ui.widget.recycler.ItemTouchCallback -import java.util.* +import java.util.Collections class BookAdapter(context: Context, val callBack: CallBack) : RecyclerAdapter(context), @@ -65,18 +65,14 @@ class BookAdapter(context: Context, val callBack: CallBack) : override fun registerListener(holder: ItemViewHolder, binding: ItemArrangeBookBinding) { binding.apply { - checkbox.setOnCheckedChangeListener { buttonView, isChecked -> - if (buttonView.isPressed) { - getItem(holder.layoutPosition)?.let { - if (buttonView.isPressed) { - if (isChecked) { - selectedBooks.add(it) - } else { - selectedBooks.remove(it) - } - callBack.upSelectCount() - } + checkbox.setOnUserCheckedChangeListener { isChecked -> + getItem(holder.layoutPosition)?.let { + if (isChecked) { + selectedBooks.add(it) + } else { + selectedBooks.remove(it) } + callBack.upSelectCount() } } root.setOnClickListener { diff --git a/app/src/main/java/io/legado/app/ui/book/search/SearchScopeDialog.kt b/app/src/main/java/io/legado/app/ui/book/search/SearchScopeDialog.kt index 5906b287e..0857fcda9 100644 --- a/app/src/main/java/io/legado/app/ui/book/search/SearchScopeDialog.kt +++ b/app/src/main/java/io/legado/app/ui/book/search/SearchScopeDialog.kt @@ -203,16 +203,14 @@ class SearchScopeDialog : BaseDialogFragment(R.layout.dialog_search_scope) { groups.getOrNull(position)?.let { holder.binding.checkBox.isChecked = selectGroups.contains(it) holder.binding.checkBox.text = it - holder.binding.checkBox.setOnCheckedChangeListener { buttonView, isChecked -> - if (buttonView.isPressed) { - if (isChecked) { - selectGroups.add(it) - } else { - selectGroups.remove(it) - } - buttonView.post { - notifyItemRangeChanged(0, itemCount, "up") - } + holder.binding.checkBox.setOnUserCheckedChangeListener { isChecked -> + if (isChecked) { + selectGroups.add(it) + } else { + selectGroups.remove(it) + } + holder.itemView.post { + notifyItemRangeChanged(0, itemCount, "up") } } } @@ -222,14 +220,12 @@ class SearchScopeDialog : BaseDialogFragment(R.layout.dialog_search_scope) { screenSources.getOrNull(position)?.let { holder.binding.radioButton.isChecked = selectSource == it holder.binding.radioButton.text = it.bookSourceName - holder.binding.radioButton.setOnCheckedChangeListener { buttonView, isChecked -> - if (buttonView.isPressed) { - if (isChecked) { - selectSource = it - } - buttonView.post { - notifyItemRangeChanged(0, itemCount, "up") - } + holder.binding.radioButton.setOnUserCheckedChangeListener { isChecked -> + if (isChecked) { + selectSource = it + } + holder.itemView.post { + notifyItemRangeChanged(0, itemCount, "up") } } } 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 513a98005..179b038e4 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 @@ -125,24 +125,20 @@ class BookSourceAdapter( override fun registerListener(holder: ItemViewHolder, binding: ItemBookSourceBinding) { binding.apply { - swtEnabled.setOnCheckedChangeListener { view, checked -> + swtEnabled.setOnUserCheckedChangeListener { checked -> getItem(holder.layoutPosition)?.let { - if (view.isPressed) { - it.enabled = checked - callBack.enable(checked, it) - } + it.enabled = checked + callBack.enable(checked, it) } } - cbBookSource.setOnCheckedChangeListener { view, checked -> + cbBookSource.setOnUserCheckedChangeListener { checked -> getItem(holder.layoutPosition)?.let { - if (view.isPressed) { - if (checked) { - selected.add(it) - } else { - selected.remove(it) - } - callBack.upCountView() + if (checked) { + selected.add(it) + } else { + selected.remove(it) } + callBack.upCountView() } } ivEdit.setOnClickListener { 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 1a117ac67..e7a54251c 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 @@ -100,24 +100,20 @@ class TxtTocRuleAdapter(context: Context, private val callBack: CallBack) : } override fun registerListener(holder: ItemViewHolder, binding: ItemTxtTocRuleBinding) { - binding.cbSource.setOnCheckedChangeListener { buttonView, isChecked -> + binding.cbSource.setOnUserCheckedChangeListener { isChecked -> getItem(holder.layoutPosition)?.let { - if (buttonView.isPressed) { - if (isChecked) { - selected.add(it) - } else { - selected.remove(it) - } - callBack.upCountView() + if (isChecked) { + selected.add(it) + } else { + selected.remove(it) } + callBack.upCountView() } } - binding.swtEnabled.setOnCheckedChangeListener { buttonView, isChecked -> + binding.swtEnabled.setOnUserCheckedChangeListener { isChecked -> getItem(holder.layoutPosition)?.let { - if (buttonView.isPressed) { - it.enable = isChecked - callBack.update(it) - } + it.enable = isChecked + callBack.update(it) } } binding.ivEdit.setOnClickListener { @@ -142,7 +138,7 @@ 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 -> { + R.id.menu_del -> { callBack.del(source) selected.remove(source) } 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 ad0589bd4..dd31a7aac 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 @@ -150,6 +150,7 @@ class TxtTocRuleDialog() : BaseDialogFragment(R.layout.dialog_toc_regex), 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() @@ -274,18 +275,16 @@ class TxtTocRuleDialog() : BaseDialogFragment(R.layout.dialog_toc_regex), override fun registerListener(holder: ItemViewHolder, binding: ItemTocRegexBinding) { binding.apply { - rbRegexName.setOnCheckedChangeListener { buttonView, isChecked -> - if (buttonView.isPressed && isChecked) { + rbRegexName.setOnUserCheckedChangeListener { isChecked -> + if (isChecked) { selectedName = getItem(holder.layoutPosition)?.name updateItems(0, itemCount - 1, bundleOf("upSelect" to null)) } } - swtEnabled.setOnCheckedChangeListener { buttonView, isChecked -> - if (buttonView.isPressed) { - getItem(holder.layoutPosition)?.let { - it.enable = isChecked - viewModel.update(it) - } + swtEnabled.setOnUserCheckedChangeListener { isChecked -> + getItem(holder.layoutPosition)?.let { + it.enable = isChecked + viewModel.update(it) } } ivEdit.setOnClickListener { diff --git a/app/src/main/java/io/legado/app/ui/dict/rule/DictRuleAdapter.kt b/app/src/main/java/io/legado/app/ui/dict/rule/DictRuleAdapter.kt index b54ec69d3..939fdb481 100644 --- a/app/src/main/java/io/legado/app/ui/dict/rule/DictRuleAdapter.kt +++ b/app/src/main/java/io/legado/app/ui/dict/rule/DictRuleAdapter.kt @@ -117,12 +117,10 @@ class DictRuleAdapter(context: Context, var callBack: CallBack) : override fun registerListener(holder: ItemViewHolder, binding: ItemDictRuleBinding) { binding.apply { - swtEnabled.setOnCheckedChangeListener { buttonView, isChecked -> - if (buttonView.isPressed) { - getItem(holder.layoutPosition)?.let { - it.enabled = isChecked - callBack.update(it) - } + swtEnabled.setOnUserCheckedChangeListener { isChecked -> + getItem(holder.layoutPosition)?.let { + it.enabled = isChecked + callBack.update(it) } } cbName.setOnClickListener { diff --git a/app/src/main/java/io/legado/app/ui/replace/ReplaceRuleAdapter.kt b/app/src/main/java/io/legado/app/ui/replace/ReplaceRuleAdapter.kt index 69c417dc5..03f7eb7c0 100644 --- a/app/src/main/java/io/legado/app/ui/replace/ReplaceRuleAdapter.kt +++ b/app/src/main/java/io/legado/app/ui/replace/ReplaceRuleAdapter.kt @@ -125,12 +125,10 @@ class ReplaceRuleAdapter(context: Context, var callBack: CallBack) : override fun registerListener(holder: ItemViewHolder, binding: ItemReplaceRuleBinding) { binding.apply { - swtEnabled.setOnCheckedChangeListener { buttonView, isChecked -> - if (buttonView.isPressed) { - getItem(holder.layoutPosition)?.let { - it.isEnabled = isChecked - callBack.update(it) - } + swtEnabled.setOnUserCheckedChangeListener { isChecked -> + getItem(holder.layoutPosition)?.let { + it.isEnabled = isChecked + callBack.update(it) } } ivEdit.setOnClickListener { diff --git a/app/src/main/java/io/legado/app/ui/rss/source/edit/RssSourceEditAdapter.kt b/app/src/main/java/io/legado/app/ui/rss/source/edit/RssSourceEditAdapter.kt index 3192fa65e..95c15f786 100644 --- a/app/src/main/java/io/legado/app/ui/rss/source/edit/RssSourceEditAdapter.kt +++ b/app/src/main/java/io/legado/app/ui/rss/source/edit/RssSourceEditAdapter.kt @@ -40,6 +40,7 @@ class RssSourceEditAdapter : RecyclerView.Adapter() { .inflate(LayoutInflater.from(parent.context), parent, false) CheckBoxViewHolder(binding) } + else -> { val binding = ItemSourceEditBinding .inflate(LayoutInflater.from(parent.context), parent, false) @@ -113,19 +114,17 @@ class RssSourceEditAdapter : RecyclerView.Adapter() { } } - inner class CheckBoxViewHolder(val binding: ItemSourceEditCheckBoxBinding) : + class CheckBoxViewHolder(val binding: ItemSourceEditCheckBoxBinding) : RecyclerView.ViewHolder(binding.root) { fun bind(editEntity: EditEntity) = binding.run { - checkBox.setOnCheckedChangeListener(null) checkBox.text = editEntity.hint checkBox.isChecked = editEntity.value.isTrue() - checkBox.setOnCheckedChangeListener { _, isChecked -> + checkBox.setOnUserCheckedChangeListener { isChecked -> editEntity.value = isChecked.toString() } } - } 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 b214fbcbc..5014001d0 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 @@ -95,28 +95,20 @@ class RssSourceAdapter(context: Context, val callBack: CallBack) : override fun registerListener(holder: ItemViewHolder, binding: ItemRssSourceBinding) { binding.apply { - swtEnabled.setOnCheckedChangeListener { view, checked -> - if (view.isPressed) { - getItem(holder.layoutPosition)?.let { - if (view.isPressed) { - it.enabled = checked - callBack.update(it) - } - } + swtEnabled.setOnUserCheckedChangeListener { checked -> + getItem(holder.layoutPosition)?.let { + it.enabled = checked + callBack.update(it) } } - cbSource.setOnCheckedChangeListener { view, checked -> - if (view.isPressed) { - getItem(holder.layoutPosition)?.let { - if (view.isPressed) { - if (checked) { - selected.add(it) - } else { - selected.remove(it) - } - callBack.upCountView() - } + cbSource.setOnUserCheckedChangeListener { checked -> + getItem(holder.layoutPosition)?.let { + if (checked) { + selected.add(it) + } else { + selected.remove(it) } + callBack.upCountView() } } ivEdit.setOnClickListener { diff --git a/app/src/main/java/io/legado/app/ui/widget/SelectActionBar.kt b/app/src/main/java/io/legado/app/ui/widget/SelectActionBar.kt index e44c662e2..97ff40f5c 100644 --- a/app/src/main/java/io/legado/app/ui/widget/SelectActionBar.kt +++ b/app/src/main/java/io/legado/app/ui/widget/SelectActionBar.kt @@ -44,10 +44,8 @@ class SelectActionBar @JvmOverloads constructor( binding.cbSelectedAll.setTextColor(primaryTextColor) TintHelper.setTint(binding.cbSelectedAll, context.accentColor, !bgIsLight) binding.ivMenuMore.setColorFilter(disabledColor, PorterDuff.Mode.SRC_IN) - binding.cbSelectedAll.setOnCheckedChangeListener { buttonView, isChecked -> - if (buttonView.isPressed) { - callBack?.selectAll(isChecked) - } + binding.cbSelectedAll.setOnUserCheckedChangeListener { isChecked -> + callBack?.selectAll(isChecked) } binding.btnRevertSelection.setOnClickListener { callBack?.revertSelection() } binding.btnSelectActionMain.setOnClickListener { callBack?.onClickSelectBarMainAction() }