This commit is contained in:
Horis
2026-02-12 22:46:02 +08:00
parent fc6a1e38fd
commit 94e7aa464c
23 changed files with 185 additions and 157 deletions
@@ -8,9 +8,30 @@ import io.legado.app.utils.applyTint
class ThemeCheckBox(context: Context, attrs: AttributeSet) : AppCompatCheckBox(context, attrs) { class ThemeCheckBox(context: Context, attrs: AttributeSet) : AppCompatCheckBox(context, attrs) {
private var isUserAction = false
init { init {
if (!isInEditMode) { if (!isInEditMode) {
applyTint(context.accentColor) 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)
}
}
}
} }
@@ -9,9 +9,30 @@ import io.legado.app.utils.applyTint
class ThemeRadioButton(context: Context, attrs: AttributeSet) : class ThemeRadioButton(context: Context, attrs: AttributeSet) :
AppCompatRadioButton(context, attrs) { AppCompatRadioButton(context, attrs) {
private var isUserAction = false
init { init {
if (!isInEditMode) { if (!isInEditMode) {
applyTint(context.accentColor) 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)
}
}
}
} }
@@ -11,11 +11,30 @@ import io.legado.app.utils.applyTint
*/ */
class ThemeSwitch(context: Context, attrs: AttributeSet) : SwitchCompat(context, attrs) { class ThemeSwitch(context: Context, attrs: AttributeSet) : SwitchCompat(context, attrs) {
private var isUserAction = false
init { init {
if (!isInEditMode) { if (!isInEditMode) {
applyTint(context.accentColor) 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)
}
}
} }
} }
@@ -25,8 +25,14 @@ import io.legado.app.lib.dialogs.alert
import io.legado.app.lib.theme.primaryColor import io.legado.app.lib.theme.primaryColor
import io.legado.app.ui.widget.dialog.CodeDialog import io.legado.app.ui.widget.dialog.CodeDialog
import io.legado.app.ui.widget.dialog.WaitDialog 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.viewbindingdelegate.viewBinding
import io.legado.app.utils.visible
import splitties.views.onClick import splitties.views.onClick
@@ -255,11 +261,9 @@ class ImportBookSourceDialog() : BaseDialogFragment(R.layout.dialog_recycler_vie
override fun registerListener(holder: ItemViewHolder, binding: ItemSourceImportBinding) { override fun registerListener(holder: ItemViewHolder, binding: ItemSourceImportBinding) {
binding.apply { binding.apply {
cbSourceName.setOnCheckedChangeListener { buttonView, isChecked -> cbSourceName.setOnUserCheckedChangeListener { isChecked ->
if (buttonView.isPressed) { viewModel.selectStatus[holder.layoutPosition] = isChecked
viewModel.selectStatus[holder.layoutPosition] = isChecked upSelectText()
upSelectText()
}
} }
root.onClick { root.onClick {
cbSourceName.isChecked = !cbSourceName.isChecked cbSourceName.isChecked = !cbSourceName.isChecked
@@ -18,8 +18,12 @@ import io.legado.app.databinding.ItemSourceImportBinding
import io.legado.app.lib.theme.primaryColor import io.legado.app.lib.theme.primaryColor
import io.legado.app.ui.widget.dialog.CodeDialog import io.legado.app.ui.widget.dialog.CodeDialog
import io.legado.app.ui.widget.dialog.WaitDialog 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.viewbindingdelegate.viewBinding
import io.legado.app.utils.visible
import splitties.views.onClick import splitties.views.onClick
class ImportDictRuleDialog() : BaseDialogFragment(R.layout.dialog_recycler_view), 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) { override fun registerListener(holder: ItemViewHolder, binding: ItemSourceImportBinding) {
binding.apply { binding.apply {
cbSourceName.setOnCheckedChangeListener { buttonView, isChecked -> cbSourceName.setOnUserCheckedChangeListener { isChecked ->
if (buttonView.isPressed) { viewModel.selectStatus[holder.layoutPosition] = isChecked
viewModel.selectStatus[holder.layoutPosition] = isChecked upSelectText()
upSelectText()
}
} }
root.onClick { root.onClick {
cbSourceName.isChecked = !cbSourceName.isChecked cbSourceName.isChecked = !cbSourceName.isChecked
@@ -152,11 +152,9 @@ class ImportHttpTtsDialog() : BaseDialogFragment(R.layout.dialog_recycler_view),
override fun registerListener(holder: ItemViewHolder, binding: ItemSourceImportBinding) { override fun registerListener(holder: ItemViewHolder, binding: ItemSourceImportBinding) {
binding.apply { binding.apply {
cbSourceName.setOnCheckedChangeListener { buttonView, isChecked -> cbSourceName.setOnUserCheckedChangeListener { isChecked ->
if (buttonView.isPressed) { viewModel.selectStatus[holder.layoutPosition] = isChecked
viewModel.selectStatus[holder.layoutPosition] = isChecked upSelectText()
upSelectText()
}
} }
root.onClick { root.onClick {
cbSourceName.isChecked = !cbSourceName.isChecked cbSourceName.isChecked = !cbSourceName.isChecked
@@ -24,8 +24,14 @@ import io.legado.app.lib.dialogs.alert
import io.legado.app.lib.theme.primaryColor import io.legado.app.lib.theme.primaryColor
import io.legado.app.ui.widget.dialog.CodeDialog import io.legado.app.ui.widget.dialog.CodeDialog
import io.legado.app.ui.widget.dialog.WaitDialog 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.viewbindingdelegate.viewBinding
import io.legado.app.utils.visible
import splitties.views.onClick import splitties.views.onClick
class ImportReplaceRuleDialog() : BaseDialogFragment(R.layout.dialog_recycler_view), 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.replacement != localRule.replacement
|| item.isRegex != localRule.isRegex || item.isRegex != localRule.isRegex
|| item.scope != localRule.scope -> "更新" || item.scope != localRule.scope -> "更新"
else -> "已有" else -> "已有"
} }
} }
@@ -219,11 +226,9 @@ class ImportReplaceRuleDialog() : BaseDialogFragment(R.layout.dialog_recycler_vi
override fun registerListener(holder: ItemViewHolder, binding: ItemSourceImportBinding) { override fun registerListener(holder: ItemViewHolder, binding: ItemSourceImportBinding) {
binding.run { binding.run {
cbSourceName.setOnCheckedChangeListener { buttonView, isChecked -> cbSourceName.setOnUserCheckedChangeListener { isChecked ->
if (buttonView.isPressed) { viewModel.selectStatus[holder.layoutPosition] = isChecked
viewModel.selectStatus[holder.layoutPosition] = isChecked upSelectText()
upSelectText()
}
} }
root.onClick { root.onClick {
cbSourceName.isChecked = !cbSourceName.isChecked cbSourceName.isChecked = !cbSourceName.isChecked
@@ -240,11 +240,9 @@ class ImportRssSourceDialog() : BaseDialogFragment(R.layout.dialog_recycler_view
override fun registerListener(holder: ItemViewHolder, binding: ItemSourceImportBinding) { override fun registerListener(holder: ItemViewHolder, binding: ItemSourceImportBinding) {
binding.apply { binding.apply {
cbSourceName.setOnCheckedChangeListener { buttonView, isChecked -> cbSourceName.setOnUserCheckedChangeListener { isChecked ->
if (buttonView.isPressed) { viewModel.selectStatus[holder.layoutPosition] = isChecked
viewModel.selectStatus[holder.layoutPosition] = isChecked upSelectText()
upSelectText()
}
} }
root.onClick { root.onClick {
cbSourceName.isChecked = !cbSourceName.isChecked cbSourceName.isChecked = !cbSourceName.isChecked
@@ -151,11 +151,9 @@ class ImportThemeDialog() : BaseDialogFragment(R.layout.dialog_recycler_view) {
override fun registerListener(holder: ItemViewHolder, binding: ItemSourceImportBinding) { override fun registerListener(holder: ItemViewHolder, binding: ItemSourceImportBinding) {
binding.apply { binding.apply {
cbSourceName.setOnCheckedChangeListener { buttonView, isChecked -> cbSourceName.setOnUserCheckedChangeListener { isChecked ->
if (buttonView.isPressed) { viewModel.selectStatus[holder.layoutPosition] = isChecked
viewModel.selectStatus[holder.layoutPosition] = isChecked upSelectText()
upSelectText()
}
} }
root.onClick { root.onClick {
cbSourceName.isChecked = !cbSourceName.isChecked cbSourceName.isChecked = !cbSourceName.isChecked
@@ -151,11 +151,9 @@ class ImportTxtTocRuleDialog() : BaseDialogFragment(R.layout.dialog_recycler_vie
override fun registerListener(holder: ItemViewHolder, binding: ItemSourceImportBinding) { override fun registerListener(holder: ItemViewHolder, binding: ItemSourceImportBinding) {
binding.apply { binding.apply {
cbSourceName.setOnCheckedChangeListener { buttonView, isChecked -> cbSourceName.setOnUserCheckedChangeListener { isChecked ->
if (buttonView.isPressed) { viewModel.selectStatus[holder.layoutPosition] = isChecked
viewModel.selectStatus[holder.layoutPosition] = isChecked upSelectText()
upSelectText()
}
} }
root.onClick { root.onClick {
cbSourceName.isChecked = !cbSourceName.isChecked cbSourceName.isChecked = !cbSourceName.isChecked
@@ -135,11 +135,9 @@ class GroupManageDialog : BaseDialogFragment(R.layout.dialog_recycler_view),
) )
} }
} }
swShow.setOnCheckedChangeListener { buttonView, isChecked -> swShow.setOnUserCheckedChangeListener { isChecked ->
if (buttonView.isPressed) { getItem(holder.layoutPosition)?.let {
getItem(holder.layoutPosition)?.let { viewModel.upGroup(it.copy(show = isChecked))
viewModel.upGroup(it.copy(show = isChecked))
}
} }
} }
} }
@@ -127,14 +127,12 @@ class GroupSelectDialog() : BaseDialogFragment(R.layout.dialog_book_group_picker
override fun registerListener(holder: ItemViewHolder, binding: ItemGroupSelectBinding) { override fun registerListener(holder: ItemViewHolder, binding: ItemGroupSelectBinding) {
binding.run { binding.run {
cbGroup.setOnCheckedChangeListener { buttonView, isChecked -> cbGroup.setOnUserCheckedChangeListener { isChecked ->
if (buttonView.isPressed) { getItem(holder.layoutPosition)?.let {
getItem(holder.layoutPosition)?.let { groupId = if (isChecked) {
groupId = if (isChecked) { groupId + it.groupId
groupId + it.groupId } else {
} else { groupId - it.groupId
groupId - it.groupId
}
} }
} }
} }
@@ -116,8 +116,8 @@ class ServersDialog : BaseDialogFragment(R.layout.dialog_recycler_view),
} }
override fun registerListener(holder: ItemViewHolder, binding: ItemServerSelectBinding) { override fun registerListener(holder: ItemViewHolder, binding: ItemServerSelectBinding) {
binding.rbServer.setOnCheckedChangeListener { buttonView, isChecked -> binding.rbServer.setOnUserCheckedChangeListener { isChecked ->
if (buttonView.isPressed && isChecked) { if (isChecked) {
selectServerId = getItemByLayoutPosition(holder.layoutPosition)!!.id selectServerId = getItemByLayoutPosition(holder.layoutPosition)!!.id
adapter.updateItems(0, itemCount - 1, "upSelect") adapter.updateItems(0, itemCount - 1, "upSelect")
} }
@@ -17,7 +17,7 @@ import io.legado.app.help.config.AppConfig
import io.legado.app.lib.theme.backgroundColor import io.legado.app.lib.theme.backgroundColor
import io.legado.app.ui.widget.recycler.DragSelectTouchHelper import io.legado.app.ui.widget.recycler.DragSelectTouchHelper
import io.legado.app.ui.widget.recycler.ItemTouchCallback import io.legado.app.ui.widget.recycler.ItemTouchCallback
import java.util.* import java.util.Collections
class BookAdapter(context: Context, val callBack: CallBack) : class BookAdapter(context: Context, val callBack: CallBack) :
RecyclerAdapter<Book, ItemArrangeBookBinding>(context), RecyclerAdapter<Book, ItemArrangeBookBinding>(context),
@@ -65,18 +65,14 @@ class BookAdapter(context: Context, val callBack: CallBack) :
override fun registerListener(holder: ItemViewHolder, binding: ItemArrangeBookBinding) { override fun registerListener(holder: ItemViewHolder, binding: ItemArrangeBookBinding) {
binding.apply { binding.apply {
checkbox.setOnCheckedChangeListener { buttonView, isChecked -> checkbox.setOnUserCheckedChangeListener { isChecked ->
if (buttonView.isPressed) { getItem(holder.layoutPosition)?.let {
getItem(holder.layoutPosition)?.let { if (isChecked) {
if (buttonView.isPressed) { selectedBooks.add(it)
if (isChecked) { } else {
selectedBooks.add(it) selectedBooks.remove(it)
} else {
selectedBooks.remove(it)
}
callBack.upSelectCount()
}
} }
callBack.upSelectCount()
} }
} }
root.setOnClickListener { root.setOnClickListener {
@@ -203,16 +203,14 @@ class SearchScopeDialog : BaseDialogFragment(R.layout.dialog_search_scope) {
groups.getOrNull(position)?.let { groups.getOrNull(position)?.let {
holder.binding.checkBox.isChecked = selectGroups.contains(it) holder.binding.checkBox.isChecked = selectGroups.contains(it)
holder.binding.checkBox.text = it holder.binding.checkBox.text = it
holder.binding.checkBox.setOnCheckedChangeListener { buttonView, isChecked -> holder.binding.checkBox.setOnUserCheckedChangeListener { isChecked ->
if (buttonView.isPressed) { if (isChecked) {
if (isChecked) { selectGroups.add(it)
selectGroups.add(it) } else {
} else { selectGroups.remove(it)
selectGroups.remove(it) }
} holder.itemView.post {
buttonView.post { notifyItemRangeChanged(0, itemCount, "up")
notifyItemRangeChanged(0, itemCount, "up")
}
} }
} }
} }
@@ -222,14 +220,12 @@ class SearchScopeDialog : BaseDialogFragment(R.layout.dialog_search_scope) {
screenSources.getOrNull(position)?.let { screenSources.getOrNull(position)?.let {
holder.binding.radioButton.isChecked = selectSource == it holder.binding.radioButton.isChecked = selectSource == it
holder.binding.radioButton.text = it.bookSourceName holder.binding.radioButton.text = it.bookSourceName
holder.binding.radioButton.setOnCheckedChangeListener { buttonView, isChecked -> holder.binding.radioButton.setOnUserCheckedChangeListener { isChecked ->
if (buttonView.isPressed) { if (isChecked) {
if (isChecked) { selectSource = it
selectSource = it }
} holder.itemView.post {
buttonView.post { notifyItemRangeChanged(0, itemCount, "up")
notifyItemRangeChanged(0, itemCount, "up")
}
} }
} }
} }
@@ -125,24 +125,20 @@ class BookSourceAdapter(
override fun registerListener(holder: ItemViewHolder, binding: ItemBookSourceBinding) { override fun registerListener(holder: ItemViewHolder, binding: ItemBookSourceBinding) {
binding.apply { binding.apply {
swtEnabled.setOnCheckedChangeListener { view, checked -> swtEnabled.setOnUserCheckedChangeListener { checked ->
getItem(holder.layoutPosition)?.let { getItem(holder.layoutPosition)?.let {
if (view.isPressed) { it.enabled = checked
it.enabled = checked callBack.enable(checked, it)
callBack.enable(checked, it)
}
} }
} }
cbBookSource.setOnCheckedChangeListener { view, checked -> cbBookSource.setOnUserCheckedChangeListener { checked ->
getItem(holder.layoutPosition)?.let { getItem(holder.layoutPosition)?.let {
if (view.isPressed) { if (checked) {
if (checked) { selected.add(it)
selected.add(it) } else {
} else { selected.remove(it)
selected.remove(it)
}
callBack.upCountView()
} }
callBack.upCountView()
} }
} }
ivEdit.setOnClickListener { ivEdit.setOnClickListener {
@@ -100,24 +100,20 @@ class TxtTocRuleAdapter(context: Context, private val callBack: CallBack) :
} }
override fun registerListener(holder: ItemViewHolder, binding: ItemTxtTocRuleBinding) { override fun registerListener(holder: ItemViewHolder, binding: ItemTxtTocRuleBinding) {
binding.cbSource.setOnCheckedChangeListener { buttonView, isChecked -> binding.cbSource.setOnUserCheckedChangeListener { isChecked ->
getItem(holder.layoutPosition)?.let { getItem(holder.layoutPosition)?.let {
if (buttonView.isPressed) { if (isChecked) {
if (isChecked) { selected.add(it)
selected.add(it) } else {
} else { selected.remove(it)
selected.remove(it)
}
callBack.upCountView()
} }
callBack.upCountView()
} }
} }
binding.swtEnabled.setOnCheckedChangeListener { buttonView, isChecked -> binding.swtEnabled.setOnUserCheckedChangeListener { isChecked ->
getItem(holder.layoutPosition)?.let { getItem(holder.layoutPosition)?.let {
if (buttonView.isPressed) { it.enable = isChecked
it.enable = isChecked callBack.update(it)
callBack.update(it)
}
} }
} }
binding.ivEdit.setOnClickListener { binding.ivEdit.setOnClickListener {
@@ -142,7 +138,7 @@ class TxtTocRuleAdapter(context: Context, private val callBack: CallBack) :
when (menuItem.itemId) { when (menuItem.itemId) {
R.id.menu_top -> callBack.toTop(source) R.id.menu_top -> callBack.toTop(source)
R.id.menu_bottom -> callBack.toBottom(source) R.id.menu_bottom -> callBack.toBottom(source)
R.id.menu_del -> { R.id.menu_del -> {
callBack.del(source) callBack.del(source)
selected.remove(source) selected.remove(source)
} }
@@ -150,6 +150,7 @@ class TxtTocRuleDialog() : BaseDialogFragment(R.layout.dialog_toc_regex),
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()
@@ -274,18 +275,16 @@ class TxtTocRuleDialog() : BaseDialogFragment(R.layout.dialog_toc_regex),
override fun registerListener(holder: ItemViewHolder, binding: ItemTocRegexBinding) { override fun registerListener(holder: ItemViewHolder, binding: ItemTocRegexBinding) {
binding.apply { binding.apply {
rbRegexName.setOnCheckedChangeListener { buttonView, isChecked -> rbRegexName.setOnUserCheckedChangeListener { isChecked ->
if (buttonView.isPressed && isChecked) { if (isChecked) {
selectedName = getItem(holder.layoutPosition)?.name selectedName = getItem(holder.layoutPosition)?.name
updateItems(0, itemCount - 1, bundleOf("upSelect" to null)) updateItems(0, itemCount - 1, bundleOf("upSelect" to null))
} }
} }
swtEnabled.setOnCheckedChangeListener { buttonView, isChecked -> swtEnabled.setOnUserCheckedChangeListener { isChecked ->
if (buttonView.isPressed) { getItem(holder.layoutPosition)?.let {
getItem(holder.layoutPosition)?.let { it.enable = isChecked
it.enable = isChecked viewModel.update(it)
viewModel.update(it)
}
} }
} }
ivEdit.setOnClickListener { ivEdit.setOnClickListener {
@@ -117,12 +117,10 @@ class DictRuleAdapter(context: Context, var callBack: CallBack) :
override fun registerListener(holder: ItemViewHolder, binding: ItemDictRuleBinding) { override fun registerListener(holder: ItemViewHolder, binding: ItemDictRuleBinding) {
binding.apply { binding.apply {
swtEnabled.setOnCheckedChangeListener { buttonView, isChecked -> swtEnabled.setOnUserCheckedChangeListener { isChecked ->
if (buttonView.isPressed) { getItem(holder.layoutPosition)?.let {
getItem(holder.layoutPosition)?.let { it.enabled = isChecked
it.enabled = isChecked callBack.update(it)
callBack.update(it)
}
} }
} }
cbName.setOnClickListener { cbName.setOnClickListener {
@@ -125,12 +125,10 @@ class ReplaceRuleAdapter(context: Context, var callBack: CallBack) :
override fun registerListener(holder: ItemViewHolder, binding: ItemReplaceRuleBinding) { override fun registerListener(holder: ItemViewHolder, binding: ItemReplaceRuleBinding) {
binding.apply { binding.apply {
swtEnabled.setOnCheckedChangeListener { buttonView, isChecked -> swtEnabled.setOnUserCheckedChangeListener { isChecked ->
if (buttonView.isPressed) { getItem(holder.layoutPosition)?.let {
getItem(holder.layoutPosition)?.let { it.isEnabled = isChecked
it.isEnabled = isChecked callBack.update(it)
callBack.update(it)
}
} }
} }
ivEdit.setOnClickListener { ivEdit.setOnClickListener {
@@ -40,6 +40,7 @@ class RssSourceEditAdapter : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
.inflate(LayoutInflater.from(parent.context), parent, false) .inflate(LayoutInflater.from(parent.context), parent, false)
CheckBoxViewHolder(binding) CheckBoxViewHolder(binding)
} }
else -> { else -> {
val binding = ItemSourceEditBinding val binding = ItemSourceEditBinding
.inflate(LayoutInflater.from(parent.context), parent, false) .inflate(LayoutInflater.from(parent.context), parent, false)
@@ -113,19 +114,17 @@ class RssSourceEditAdapter : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
} }
} }
inner class CheckBoxViewHolder(val binding: ItemSourceEditCheckBoxBinding) : class CheckBoxViewHolder(val binding: ItemSourceEditCheckBoxBinding) :
RecyclerView.ViewHolder(binding.root) { RecyclerView.ViewHolder(binding.root) {
fun bind(editEntity: EditEntity) = binding.run { fun bind(editEntity: EditEntity) = binding.run {
checkBox.setOnCheckedChangeListener(null)
checkBox.text = editEntity.hint checkBox.text = editEntity.hint
checkBox.isChecked = editEntity.value.isTrue() checkBox.isChecked = editEntity.value.isTrue()
checkBox.setOnCheckedChangeListener { _, isChecked -> checkBox.setOnUserCheckedChangeListener { isChecked ->
editEntity.value = isChecked.toString() editEntity.value = isChecked.toString()
} }
} }
} }
@@ -95,28 +95,20 @@ class RssSourceAdapter(context: Context, val callBack: CallBack) :
override fun registerListener(holder: ItemViewHolder, binding: ItemRssSourceBinding) { override fun registerListener(holder: ItemViewHolder, binding: ItemRssSourceBinding) {
binding.apply { binding.apply {
swtEnabled.setOnCheckedChangeListener { view, checked -> swtEnabled.setOnUserCheckedChangeListener { checked ->
if (view.isPressed) { getItem(holder.layoutPosition)?.let {
getItem(holder.layoutPosition)?.let { it.enabled = checked
if (view.isPressed) { callBack.update(it)
it.enabled = checked
callBack.update(it)
}
}
} }
} }
cbSource.setOnCheckedChangeListener { view, checked -> cbSource.setOnUserCheckedChangeListener { checked ->
if (view.isPressed) { getItem(holder.layoutPosition)?.let {
getItem(holder.layoutPosition)?.let { if (checked) {
if (view.isPressed) { selected.add(it)
if (checked) { } else {
selected.add(it) selected.remove(it)
} else {
selected.remove(it)
}
callBack.upCountView()
}
} }
callBack.upCountView()
} }
} }
ivEdit.setOnClickListener { ivEdit.setOnClickListener {
@@ -44,10 +44,8 @@ class SelectActionBar @JvmOverloads constructor(
binding.cbSelectedAll.setTextColor(primaryTextColor) binding.cbSelectedAll.setTextColor(primaryTextColor)
TintHelper.setTint(binding.cbSelectedAll, context.accentColor, !bgIsLight) TintHelper.setTint(binding.cbSelectedAll, context.accentColor, !bgIsLight)
binding.ivMenuMore.setColorFilter(disabledColor, PorterDuff.Mode.SRC_IN) binding.ivMenuMore.setColorFilter(disabledColor, PorterDuff.Mode.SRC_IN)
binding.cbSelectedAll.setOnCheckedChangeListener { buttonView, isChecked -> binding.cbSelectedAll.setOnUserCheckedChangeListener { isChecked ->
if (buttonView.isPressed) { callBack?.selectAll(isChecked)
callBack?.selectAll(isChecked)
}
} }
binding.btnRevertSelection.setOnClickListener { callBack?.revertSelection() } binding.btnRevertSelection.setOnClickListener { callBack?.revertSelection() }
binding.btnSelectActionMain.setOnClickListener { callBack?.onClickSelectBarMainAction() } binding.btnSelectActionMain.setOnClickListener { callBack?.onClickSelectBarMainAction() }