From cedbcaefee42a41c4a8e26762fd7f5a42561657c Mon Sep 17 00:00:00 2001 From: Marcel Hibbe Date: Fri, 1 Jul 2022 14:07:57 +0200 Subject: [PATCH] fix percentage calculation for multiselect polls for multiselect polls the total votes must be taken instead amount of voters (one voter can have more than 1 votes..) Signed-off-by: Marcel Hibbe --- .../java/com/nextcloud/talk/polls/model/Poll.kt | 3 ++- .../talk/polls/repositories/PollRepositoryImpl.kt | 9 +++++++++ .../talk/polls/ui/PollMainDialogFragment.kt | 6 +++--- .../talk/polls/viewmodels/PollResultsViewModel.kt | 13 +------------ 4 files changed, 15 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/com/nextcloud/talk/polls/model/Poll.kt b/app/src/main/java/com/nextcloud/talk/polls/model/Poll.kt index f96e0009e..0405e8d2e 100644 --- a/app/src/main/java/com/nextcloud/talk/polls/model/Poll.kt +++ b/app/src/main/java/com/nextcloud/talk/polls/model/Poll.kt @@ -33,7 +33,8 @@ data class Poll( val maxVotes: Int, val votedSelf: List?, val numVoters: Int, - val details: List? + val details: List?, + val totalVotes: Int ) { companion object { const val STATUS_OPEN: Int = 0 diff --git a/app/src/main/java/com/nextcloud/talk/polls/repositories/PollRepositoryImpl.kt b/app/src/main/java/com/nextcloud/talk/polls/repositories/PollRepositoryImpl.kt index 8de92deed..7c888d0fd 100644 --- a/app/src/main/java/com/nextcloud/talk/polls/repositories/PollRepositoryImpl.kt +++ b/app/src/main/java/com/nextcloud/talk/polls/repositories/PollRepositoryImpl.kt @@ -134,6 +134,7 @@ class PollRepositoryImpl(private val ncApi: NcApi, private val currentUserProvid pollResponse.votedSelf, pollResponse.numVoters, pollDetails, + getTotalVotes(pollResponse.votes) ) } @@ -153,5 +154,13 @@ class PollRepositoryImpl(private val ncApi: NcApi, private val currentUserProvid pollDetailsResponse.optionId, ) } + + private fun getTotalVotes(votes: Map?): Int { + var totalVotes = 0 + votes?.forEach { + totalVotes += it.value + } + return totalVotes + } } } diff --git a/app/src/main/java/com/nextcloud/talk/polls/ui/PollMainDialogFragment.kt b/app/src/main/java/com/nextcloud/talk/polls/ui/PollMainDialogFragment.kt index 1ad9506d6..99a694bfb 100644 --- a/app/src/main/java/com/nextcloud/talk/polls/ui/PollMainDialogFragment.kt +++ b/app/src/main/java/com/nextcloud/talk/polls/ui/PollMainDialogFragment.kt @@ -115,7 +115,7 @@ class PollMainDialogFragment : DialogFragment() { } private fun showResultsScreen(poll: Poll) { - initVotersAmount(poll.numVoters) + initVotesAmount(poll.totalVotes) val contentFragment = PollResultsFragment.newInstance( user @@ -126,11 +126,11 @@ class PollMainDialogFragment : DialogFragment() { transaction.commit() } - private fun initVotersAmount(numVoters: Int) { + private fun initVotesAmount(totalVotes: Int) { binding.pollDetailsText.visibility = View.VISIBLE binding.pollDetailsText.text = String.format( resources.getString(R.string.polls_amount_voters), - numVoters + totalVotes ) } diff --git a/app/src/main/java/com/nextcloud/talk/polls/viewmodels/PollResultsViewModel.kt b/app/src/main/java/com/nextcloud/talk/polls/viewmodels/PollResultsViewModel.kt index a5581f94a..a803e628e 100644 --- a/app/src/main/java/com/nextcloud/talk/polls/viewmodels/PollResultsViewModel.kt +++ b/app/src/main/java/com/nextcloud/talk/polls/viewmodels/PollResultsViewModel.kt @@ -84,8 +84,7 @@ class PollResultsViewModel @Inject constructor() : ViewModel() { private fun initPollResults(poll: Poll) { _items.value = ArrayList() - val votersAmount = getVotersAmount(poll) - val oneVoteInPercent = HUNDRED / votersAmount + val oneVoteInPercent = HUNDRED / poll.totalVotes poll.options?.forEachIndexed { index, option -> val votersAmountForThisOption = getVotersAmountForOption(poll, index) @@ -115,16 +114,6 @@ class PollResultsViewModel @Inject constructor() : ViewModel() { _items.value = tempList } - private fun getVotersAmount(poll: Poll): Int { - var votersAmount = 0 - if (poll.details != null) { - votersAmount = poll.details.size - } else if (poll.votes != null) { - votersAmount = poll.numVoters - } - return votersAmount - } - private fun getVotersAmountForOption(poll: Poll, index: Int): Int { var votersAmountForThisOption: Int? = 0 if (poll.details != null) {