From 880c656be269bd470f12b3fec014e8dae45531e8 Mon Sep 17 00:00:00 2001 From: Marcel Hibbe Date: Tue, 19 Jul 2022 12:57:08 +0200 Subject: [PATCH] enable/disable submit button by liveData Signed-off-by: Marcel Hibbe --- .../nextcloud/talk/polls/ui/PollVoteFragment.kt | 14 +++++--------- .../talk/polls/viewmodels/PollVoteViewModel.kt | 15 ++++++++++++++- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/polls/ui/PollVoteFragment.kt b/app/src/main/java/com/nextcloud/talk/polls/ui/PollVoteFragment.kt index c8adb9448..2da51b177 100644 --- a/app/src/main/java/com/nextcloud/talk/polls/ui/PollVoteFragment.kt +++ b/app/src/main/java/com/nextcloud/talk/polls/ui/PollVoteFragment.kt @@ -110,6 +110,10 @@ class PollVoteFragment : Fragment() { } } + viewModel.submitButtonEnabled.observe(viewLifecycleOwner) { enabled -> + binding.pollVoteSubmitButton.isEnabled = enabled + } + binding.pollVoteRadioGroup.setOnCheckedChangeListener { _, checkedId -> viewModel.selectOption(checkedId, true) updateSubmitButton() @@ -174,15 +178,7 @@ class PollVoteFragment : Fragment() { } private fun updateSubmitButton() { - binding.pollVoteSubmitButton.isEnabled = - areSelectedOptionsDifferentToVotedOptions() && viewModel.selectedOptions.isNotEmpty() - } - - private fun areSelectedOptionsDifferentToVotedOptions(): Boolean { - return !( - viewModel.votedOptions.containsAll(viewModel.selectedOptions) && - viewModel.selectedOptions.containsAll(viewModel.votedOptions) - ) + viewModel.updateSubmitButton() } private fun makeOptionBoldIfSelfVoted(button: CompoundButton, poll: Poll, index: Int) { diff --git a/app/src/main/java/com/nextcloud/talk/polls/viewmodels/PollVoteViewModel.kt b/app/src/main/java/com/nextcloud/talk/polls/viewmodels/PollVoteViewModel.kt index cb8f16fc2..344915e65 100644 --- a/app/src/main/java/com/nextcloud/talk/polls/viewmodels/PollVoteViewModel.kt +++ b/app/src/main/java/com/nextcloud/talk/polls/viewmodels/PollVoteViewModel.kt @@ -45,6 +45,10 @@ class PollVoteViewModel @Inject constructor(private val repository: PollReposito val viewState: LiveData get() = _viewState + private val _submitButtonEnabled: MutableLiveData = MutableLiveData() + val submitButtonEnabled: LiveData + get() = _submitButtonEnabled + private var disposable: Disposable? = null private var _votedOptions: List = emptyList() @@ -75,7 +79,7 @@ class PollVoteViewModel @Inject constructor(private val repository: PollReposito fun vote(roomToken: String, pollId: String) { if (_selectedOptions.isNotEmpty()) { repository.vote(roomToken, pollId, _selectedOptions) - ?.doOnSubscribe { disposable = it } + .doOnSubscribe { disposable = it } ?.subscribeOn(Schedulers.io()) ?.observeOn(AndroidSchedulers.mainThread()) ?.subscribe(PollObserver()) @@ -87,6 +91,15 @@ class PollVoteViewModel @Inject constructor(private val repository: PollReposito disposable?.dispose() } + fun updateSubmitButton() { + val areSelectedOptionsDifferentToVotedOptions = !( + votedOptions.containsAll(selectedOptions) && + selectedOptions.containsAll(votedOptions) + ) + + _submitButtonEnabled.value = areSelectedOptionsDifferentToVotedOptions && selectedOptions.isNotEmpty() + } + inner class PollObserver : Observer { lateinit var poll: Poll