Fix refresh of toggle state when dialog is dismissed in several cases.

This commit is contained in:
Alex Hart
2023-04-18 13:00:30 -03:00
committed by Cody Henthorne
parent 9081230286
commit baf9cd0909
3 changed files with 23 additions and 5 deletions

View File

@@ -208,16 +208,22 @@ class SwitchPreferenceViewHolder(itemView: View) : PreferenceViewHolder<SwitchPr
private val switchWidget: MaterialSwitch = itemView.findViewById(R.id.switch_widget)
override fun bind(model: SwitchPreference) {
super.bind(model)
switchWidget.setOnCheckedChangeListener(null)
switchWidget.isEnabled = model.isEnabled
switchWidget.isChecked = model.isChecked
switchWidget.setOnCheckedChangeListener { _, _ ->
model.onClick()
}
if (payload.contains(SwitchPreference.PAYLOAD_CHECKED)) {
return
}
super.bind(model)
switchWidget.isEnabled = model.isEnabled
itemView.setOnClickListener {
model.onClick()
}

View File

@@ -152,6 +152,7 @@ class AccountSettingsFragment : DSLSettingsFragment(R.string.AccountSettingsFrag
val dialog: AlertDialog = MaterialAlertDialogBuilder(context)
.setView(R.layout.pin_disable_reminders_dialog)
.setOnDismissListener { viewModel.refreshState() }
.create()
dialog.show()

View File

@@ -2,7 +2,6 @@
package org.thoughtcrime.securesms.components.settings
import androidx.annotation.CallSuper
import androidx.annotation.Discouraged
import androidx.annotation.Px
import androidx.annotation.StringRes
@@ -230,7 +229,6 @@ abstract class PreferenceModel<T : PreferenceModel<T>>(
}
}
@CallSuper
override fun areContentsTheSame(newItem: T): Boolean {
return areItemsTheSame(newItem) &&
newItem.summary == summary &&
@@ -293,8 +291,21 @@ class SwitchPreference(
val isChecked: Boolean,
val onClick: () -> Unit
) : PreferenceModel<SwitchPreference>() {
companion object {
const val PAYLOAD_CHECKED = "payload_checked"
}
override fun areContentsTheSame(newItem: SwitchPreference): Boolean {
return super.areContentsTheSame(newItem) && isChecked == newItem.isChecked
return false
}
override fun getChangePayload(newItem: SwitchPreference): Any? {
return if (super.areContentsTheSame(newItem)) {
PAYLOAD_CHECKED
} else {
null
}
}
}