From 0ef879ebd3c062fc6e6e95658589ca528fa8542c Mon Sep 17 00:00:00 2001 From: FineFindus Date: Thu, 16 Nov 2023 22:16:28 +0100 Subject: [PATCH 1/2] feat: add option to view poll results --- .../fragments/BaseStatusListFragment.java | 8 +++++++ .../PollFooterStatusDisplayItem.java | 22 ++++++++++++++----- .../PollOptionStatusDisplayItem.java | 11 ++++++++++ .../res/layout/display_item_poll_footer.xml | 10 +++++++++ mastodon/src/main/res/values/strings.xml | 2 ++ 5 files changed, 48 insertions(+), 5 deletions(-) diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/BaseStatusListFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/BaseStatusListFragment.java index 390033bf35..83dc1717b4 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/BaseStatusListFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/BaseStatusListFragment.java @@ -550,6 +550,14 @@ public void onPollVoteButtonClick(PollFooterStatusDisplayItem.Holder holder){ submitPollVote(holder.getItemID(), poll.id, poll.selectedOptions.stream().map(opt->poll.options.indexOf(opt)).collect(Collectors.toList())); } + public void onPollViewResultsButtonClick(PollFooterStatusDisplayItem.Holder holder, boolean shown){ + for(int i=0;i choices){ if(refreshing) return; diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/PollFooterStatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/PollFooterStatusDisplayItem.java index 2ec3733359..43a6306c81 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/PollFooterStatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/PollFooterStatusDisplayItem.java @@ -14,6 +14,7 @@ public class PollFooterStatusDisplayItem extends StatusDisplayItem{ public final Poll poll; + public boolean resultsVisible = false; public PollFooterStatusDisplayItem(String parentID, BaseStatusListFragment parentFragment, Poll poll){ super(parentID, parentFragment); @@ -27,13 +28,20 @@ public Type getType(){ public static class Holder extends StatusDisplayItem.Holder{ private TextView text; - private Button button; + private Button voteButton, resultsButton; public Holder(Activity activity, ViewGroup parent){ super(activity, R.layout.display_item_poll_footer, parent); text=findViewById(R.id.text); - button=findViewById(R.id.vote_btn); - button.setOnClickListener(v->item.parentFragment.onPollVoteButtonClick(this)); + voteButton=findViewById(R.id.vote_btn); + voteButton.setOnClickListener(v->item.parentFragment.onPollVoteButtonClick(this)); + resultsButton=findViewById(R.id.results_btn); + resultsButton.setOnClickListener(v-> { + item.resultsVisible = !item.resultsVisible; + item.parentFragment.onPollViewResultsButtonClick(this, item.resultsVisible); + resultsButton.setText(item.resultsVisible ? R.string.sk_poll_view : R.string.sk_poll_results); + setVoteButtonEnabled(); + }); } @Override @@ -48,8 +56,12 @@ public void onBind(PollFooterStatusDisplayItem item){ text+=" "+sep+" "+item.parentFragment.getString(R.string.poll_closed); } this.text.setText(text); - button.setVisibility(item.poll.isExpired() || item.poll.voted || (!item.poll.multiple && !GlobalUserPreferences.voteButtonForSingleChoice) ? View.GONE : View.VISIBLE); - button.setEnabled(item.poll.selectedOptions!=null && !item.poll.selectedOptions.isEmpty()); + setVoteButtonEnabled(); + } + + private void setVoteButtonEnabled() { + voteButton.setVisibility(item.poll.isExpired() || item.poll.voted || (!item.poll.multiple && !GlobalUserPreferences.voteButtonForSingleChoice) ? View.GONE : View.VISIBLE); + voteButton.setEnabled(item.poll.selectedOptions!=null && !item.poll.selectedOptions.isEmpty() && !item.resultsVisible); } } } diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/PollOptionStatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/PollOptionStatusDisplayItem.java index 3a875b06c7..434709e1c8 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/PollOptionStatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/PollOptionStatusDisplayItem.java @@ -17,6 +17,7 @@ import org.joinmastodon.android.ui.utils.CustomEmojiHelper; import org.joinmastodon.android.ui.utils.UiUtils; +import java.util.Collections; import java.util.Locale; import me.grishka.appkit.imageloader.ImageLoaderViewHolder; @@ -44,6 +45,10 @@ public PollOptionStatusDisplayItem(String parentID, Poll poll, int optionIndex, text=HtmlParser.parseCustomEmoji(option.title, poll.emojis); emojiHelper.setText(text); showResults=poll.isExpired() || poll.voted; + calculateResults(); + } + + private void calculateResults() { int total=poll.votersCount>0 ? poll.votersCount : poll.votesCount; if(showResults && option.votesCount!=null && total>0){ votesFraction=(float)option.votesCount/(float)total; @@ -135,5 +140,11 @@ public void clearImage(int index){ private void onButtonClick(View v){ item.parentFragment.onPollOptionClick(this); } + + public void showResults(boolean shown) { + item.showResults = shown; + item.calculateResults(); + rebind(); + } } } diff --git a/mastodon/src/main/res/layout/display_item_poll_footer.xml b/mastodon/src/main/res/layout/display_item_poll_footer.xml index 59d4482ab5..824f776307 100644 --- a/mastodon/src/main/res/layout/display_item_poll_footer.xml +++ b/mastodon/src/main/res/layout/display_item_poll_footer.xml @@ -19,6 +19,16 @@ android:textColor="?colorM3OnSurfaceVariant" tools:text="fdsafdsafsdafds"/> +