Browse Source

show voted option in results

pull/61/merge
oogee 6 years ago
parent
commit
7f4ee62777
  1. 15
      app/src/main/java/gr/thmmy/mthmmy/activities/topic/TopicAdapter.java
  2. 13
      app/src/main/java/gr/thmmy/mthmmy/activities/topic/TopicParser.java
  3. 8
      app/src/main/java/gr/thmmy/mthmmy/model/Poll.java
  4. 8
      app/src/main/res/layout/activity_topic_poll.xml

15
app/src/main/java/gr/thmmy/mthmmy/activities/topic/TopicAdapter.java

@ -185,6 +185,7 @@ class TopicAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
if (!pollSupported) { if (!pollSupported) {
holder.optionsLayout.setVisibility(View.GONE); holder.optionsLayout.setVisibility(View.GONE);
holder.voteChart.setVisibility(View.GONE); holder.voteChart.setVisibility(View.GONE);
holder.selectedEntry.setVisibility(View.GONE);
holder.removeVotesButton.setVisibility(View.GONE); holder.removeVotesButton.setVisibility(View.GONE);
holder.showPollResultsButton.setVisibility(View.GONE); holder.showPollResultsButton.setVisibility(View.GONE);
holder.hidePollResultsButton.setVisibility(View.GONE); holder.hidePollResultsButton.setVisibility(View.GONE);
@ -222,6 +223,7 @@ class TopicAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
holder.optionsLayout.addView(checkBox); holder.optionsLayout.addView(checkBox);
} }
holder.voteChart.setVisibility(View.GONE); holder.voteChart.setVisibility(View.GONE);
holder.selectedEntry.setVisibility(View.GONE);
holder.optionsLayout.setVisibility(View.VISIBLE); holder.optionsLayout.setVisibility(View.VISIBLE);
} else if (poll.getAvailableVoteCount() == 1) { } else if (poll.getAvailableVoteCount() == 1) {
// vote single option // vote single option
@ -242,8 +244,9 @@ class TopicAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
} }
holder.optionsLayout.addView(radioGroup); holder.optionsLayout.addView(radioGroup);
holder.voteChart.setVisibility(View.GONE); holder.voteChart.setVisibility(View.GONE);
holder.selectedEntry.setVisibility(View.GONE);
holder.optionsLayout.setVisibility(View.VISIBLE); holder.optionsLayout.setVisibility(View.VISIBLE);
} else if (poll.getSelectedEntryIndex() != -1) { } else if (poll.isPollResultsHidden()) {
// vote already submitted but results are hidden // vote already submitted but results are hidden
Poll.Entry[] entries1 = poll.getEntries(); Poll.Entry[] entries1 = poll.getEntries();
for (int i = 0; i < entries1.length; i++) { for (int i = 0; i < entries1.length; i++) {
@ -267,6 +270,7 @@ class TopicAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
holder.optionsLayout.addView(textView); holder.optionsLayout.addView(textView);
} }
holder.voteChart.setVisibility(View.GONE); holder.voteChart.setVisibility(View.GONE);
holder.selectedEntry.setVisibility(View.GONE);
holder.optionsLayout.setVisibility(View.VISIBLE); holder.optionsLayout.setVisibility(View.VISIBLE);
} else { } else {
// Showing results // Showing results
@ -316,6 +320,12 @@ class TopicAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
holder.voteChart.setMinimumHeight((int) (chartHeightDp * (metrics.densityDpi / 160f))); holder.voteChart.setMinimumHeight((int) (chartHeightDp * (metrics.densityDpi / 160f)));
holder.voteChart.invalidate(); holder.voteChart.invalidate();
holder.voteChart.setVisibility(View.VISIBLE); holder.voteChart.setVisibility(View.VISIBLE);
if (poll.getSelectedEntryIndex() != -1) {
holder.selectedEntry.setText("You voted \"" +
poll.getEntries()[poll.getSelectedEntryIndex()].getEntryName() + "\"");
holder.selectedEntry.setVisibility(View.VISIBLE);
}
} }
if (poll.getRemoveVoteUrl() != null) { if (poll.getRemoveVoteUrl() != null) {
holder.removeVotesButton.setOnClickListener(v -> viewModel.removeVote()); holder.removeVotesButton.setOnClickListener(v -> viewModel.removeVote());
@ -899,7 +909,7 @@ class TopicAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
} }
static class PollViewHolder extends RecyclerView.ViewHolder { static class PollViewHolder extends RecyclerView.ViewHolder {
final TextView question, errorTextview; final TextView question, errorTextview, selectedEntry;
final LinearLayout optionsLayout; final LinearLayout optionsLayout;
final AppCompatButton submitButton; final AppCompatButton submitButton;
final AppCompatButton removeVotesButton, showPollResultsButton, hidePollResultsButton; final AppCompatButton removeVotesButton, showPollResultsButton, hidePollResultsButton;
@ -916,6 +926,7 @@ class TopicAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
hidePollResultsButton = itemView.findViewById(R.id.show_poll_options_button); hidePollResultsButton = itemView.findViewById(R.id.show_poll_options_button);
errorTextview = itemView.findViewById(R.id.error_too_many_checked); errorTextview = itemView.findViewById(R.id.error_too_many_checked);
voteChart = itemView.findViewById(R.id.vote_chart); voteChart = itemView.findViewById(R.id.vote_chart);
selectedEntry = itemView.findViewById(R.id.selected_entry_textview);
voteChart.setScaleYEnabled(false); voteChart.setScaleYEnabled(false);
voteChart.setDoubleTapToZoomEnabled(false); voteChart.setDoubleTapToZoomEnabled(false);
} }

13
app/src/main/java/gr/thmmy/mthmmy/activities/topic/TopicParser.java

@ -487,6 +487,7 @@ public class TopicParser {
int availableVoteCount = 0, selectedEntryIndex = -1; int availableVoteCount = 0, selectedEntryIndex = -1;
String pollFormUrl = null, sc = null, removeVoteUrl = null, showVoteResultsUrl = null, String pollFormUrl = null, sc = null, removeVoteUrl = null, showVoteResultsUrl = null,
showOptionsUrl = null; showOptionsUrl = null;
boolean pollResultsHidden = false;
Element pollColumn = table.select("tr[class=windowbg]").first().child(1); Element pollColumn = table.select("tr[class=windowbg]").first().child(1);
question = pollColumn.ownText().trim(); question = pollColumn.ownText().trim();
@ -525,21 +526,19 @@ public class TopicParser {
} }
} else { } else {
// poll in results mode // poll in results mode
boolean pollResultsHidden = false;
Elements entryRows = pollColumn.select("table[cellspacing] tr"); Elements entryRows = pollColumn.select("table[cellspacing] tr");
for (int i = 0; i < entryRows.size(); i++) { for (int i = 0; i < entryRows.size(); i++) {
Element entryRow = entryRows.get(i); Element entryRow = entryRows.get(i);
Elements entryColumns = entryRow.select("td"); Elements entryColumns = entryRow.select("td");
if (entryColumns.size() < 2) pollResultsHidden = true; if (entryColumns.first().attr("style").contains("font-weight: bold;"))
selectedEntryIndex = i;
String optionName = entryColumns.first().html(); String optionName = entryColumns.first().html();
int voteCount = 0; int voteCount = 0;
if (pollResultsHidden) { if (entryColumns.size() < 2) pollResultsHidden = true;
if (entryColumns.first().attr("style").contains("font-weight: bold;")) if (!pollResultsHidden) {
selectedEntryIndex = i;
} else {
String voteCountDescription = entryColumns.last().text(); String voteCountDescription = entryColumns.last().text();
Matcher integerMatcher = integerPattern.matcher(voteCountDescription); Matcher integerMatcher = integerPattern.matcher(voteCountDescription);
if (integerMatcher.find()) { if (integerMatcher.find()) {
@ -560,7 +559,7 @@ public class TopicParser {
} }
} }
return new Poll(question, entries.toArray(new Poll.Entry[0]), availableVoteCount, return new Poll(question, entries.toArray(new Poll.Entry[0]), availableVoteCount,
pollFormUrl, sc, removeVoteUrl, showVoteResultsUrl, showOptionsUrl, selectedEntryIndex); pollFormUrl, sc, removeVoteUrl, showVoteResultsUrl, showOptionsUrl, selectedEntryIndex, pollResultsHidden);
} catch (Exception e) { } catch (Exception e) {
Timber.v(e, "Could not parse a poll"); Timber.v(e, "Could not parse a poll");
} }

8
app/src/main/java/gr/thmmy/mthmmy/model/Poll.java

@ -9,9 +9,10 @@ public class Poll extends TopicItem {
private Entry[] entries; private Entry[] entries;
private int availableVoteCount, selectedEntryIndex = -1; private int availableVoteCount, selectedEntryIndex = -1;
private String pollFormUrl, sc, removeVoteUrl, showVoteResultsUrl, showOptionsUrl; private String pollFormUrl, sc, removeVoteUrl, showVoteResultsUrl, showOptionsUrl;
private boolean pollResultsHidden;
public Poll(String question, Entry[] entries, int availableVoteCount, String pollFormUrl, String sc, public Poll(String question, Entry[] entries, int availableVoteCount, String pollFormUrl, String sc,
String removeVoteUrl, String showVoteResultsUrl, String showOptionsUrl, int selectedEntryIndex) { String removeVoteUrl, String showVoteResultsUrl, String showOptionsUrl, int selectedEntryIndex, boolean pollResultsHidden) {
this.question = question; this.question = question;
this.entries = entries; this.entries = entries;
this.availableVoteCount = availableVoteCount; this.availableVoteCount = availableVoteCount;
@ -21,6 +22,7 @@ public class Poll extends TopicItem {
this.showVoteResultsUrl = showVoteResultsUrl; this.showVoteResultsUrl = showVoteResultsUrl;
this.showOptionsUrl = showOptionsUrl; this.showOptionsUrl = showOptionsUrl;
this.selectedEntryIndex = selectedEntryIndex; this.selectedEntryIndex = selectedEntryIndex;
this.pollResultsHidden = pollResultsHidden;
} }
private int totalVotes() { private int totalVotes() {
@ -73,6 +75,10 @@ public class Poll extends TopicItem {
return selectedEntryIndex; return selectedEntryIndex;
} }
public boolean isPollResultsHidden() {
return pollResultsHidden;
}
public static class Entry { public static class Entry {
private final String entryName; private final String entryName;
private int votes; private int votes;

8
app/src/main/res/layout/activity_topic_poll.xml

@ -25,6 +25,14 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:visibility="gone"/> android:visibility="gone"/>
<TextView
android:id="@+id/selected_entry_textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:textColor="@color/primary_text"
android:visibility="gone"/>
<TextView <TextView
android:id="@+id/error_too_many_checked" android:id="@+id/error_too_many_checked"
android:layout_width="wrap_content" android:layout_width="wrap_content"

Loading…
Cancel
Save