浏览代码

enable/disable submit button by liveData

Signed-off-by: Marcel Hibbe <dev@mhibbe.de>
Marcel Hibbe 3 年之前
父节点
当前提交
880c656be2

+ 5 - 9
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) {

+ 14 - 1
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<ViewState>
         get() = _viewState
 
+    private val _submitButtonEnabled: MutableLiveData<Boolean> = MutableLiveData()
+    val submitButtonEnabled: LiveData<Boolean>
+        get() = _submitButtonEnabled
+
     private var disposable: Disposable? = null
 
     private var _votedOptions: List<Int> = 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<Poll> {
 
         lateinit var poll: Poll