Merge branch 'better-poll-voting'

This commit is contained in:
sk 2022-12-05 17:57:46 +01:00
commit 68863f28eb
5 changed files with 16 additions and 8 deletions

View File

@ -15,6 +15,7 @@ public class GlobalUserPreferences{
public static boolean alwaysExpandContentWarnings; public static boolean alwaysExpandContentWarnings;
public static boolean disableMarquee; public static boolean disableMarquee;
public static ThemePreference theme; public static ThemePreference theme;
public static boolean voteButtonForSingleChoice;
private static SharedPreferences getPrefs(){ private static SharedPreferences getPrefs(){
return MastodonApp.context.getSharedPreferences("global", Context.MODE_PRIVATE); return MastodonApp.context.getSharedPreferences("global", Context.MODE_PRIVATE);
@ -32,6 +33,7 @@ public class GlobalUserPreferences{
showInteractionCounts=prefs.getBoolean("showInteractionCounts", false); showInteractionCounts=prefs.getBoolean("showInteractionCounts", false);
alwaysExpandContentWarnings=prefs.getBoolean("alwaysExpandContentWarnings", false); alwaysExpandContentWarnings=prefs.getBoolean("alwaysExpandContentWarnings", false);
disableMarquee=prefs.getBoolean("disableMarquee", false); disableMarquee=prefs.getBoolean("disableMarquee", false);
voteButtonForSingleChoice=prefs.getBoolean("voteButtonForSingleChoice", true);
theme=ThemePreference.values()[prefs.getInt("theme", 0)]; theme=ThemePreference.values()[prefs.getInt("theme", 0)];
} }

View File

@ -400,10 +400,12 @@ public abstract class BaseStatusListFragment<T extends DisplayItemsParent> exten
public void onPollOptionClick(PollOptionStatusDisplayItem.Holder holder){ public void onPollOptionClick(PollOptionStatusDisplayItem.Holder holder){
Poll poll=holder.getItem().poll; Poll poll=holder.getItem().poll;
Poll.Option option=holder.getItem().option; Poll.Option option=holder.getItem().option;
if(poll.multiple){ if(poll.multiple || GlobalUserPreferences.voteButtonForSingleChoice){
if(poll.selectedOptions==null) if(poll.selectedOptions==null)
poll.selectedOptions=new ArrayList<>(); poll.selectedOptions=new ArrayList<>();
if(poll.selectedOptions.contains(option)){ boolean optionContained=poll.selectedOptions.contains(option);
if(!poll.multiple) poll.selectedOptions.clear();
if(optionContained){
poll.selectedOptions.remove(option); poll.selectedOptions.remove(option);
holder.itemView.setSelected(false); holder.itemView.setSelected(false);
}else{ }else{
@ -412,6 +414,9 @@ public abstract class BaseStatusListFragment<T extends DisplayItemsParent> exten
} }
for(int i=0;i<list.getChildCount();i++){ for(int i=0;i<list.getChildCount();i++){
RecyclerView.ViewHolder vh=list.getChildViewHolder(list.getChildAt(i)); RecyclerView.ViewHolder vh=list.getChildViewHolder(list.getChildAt(i));
if(!poll.multiple && vh instanceof PollOptionStatusDisplayItem.Holder item){
if (item != holder) item.itemView.setSelected(false);
}
if(vh instanceof PollFooterStatusDisplayItem.Holder footer){ if(vh instanceof PollFooterStatusDisplayItem.Holder footer){
if(footer.getItemID().equals(holder.getItemID())){ if(footer.getItemID().equals(holder.getItemID())){
footer.rebind(); footer.rebind();

View File

@ -6,6 +6,7 @@ import android.view.ViewGroup;
import android.widget.Button; import android.widget.Button;
import android.widget.TextView; import android.widget.TextView;
import org.joinmastodon.android.GlobalUserPreferences;
import org.joinmastodon.android.R; import org.joinmastodon.android.R;
import org.joinmastodon.android.fragments.BaseStatusListFragment; import org.joinmastodon.android.fragments.BaseStatusListFragment;
import org.joinmastodon.android.model.Poll; import org.joinmastodon.android.model.Poll;
@ -44,7 +45,7 @@ public class PollFooterStatusDisplayItem extends StatusDisplayItem{
text+=" · "+item.parentFragment.getString(R.string.poll_closed); text+=" · "+item.parentFragment.getString(R.string.poll_closed);
} }
this.text.setText(text); this.text.setText(text);
button.setVisibility(item.poll.isExpired() || item.poll.voted || !item.poll.multiple ? View.GONE : View.VISIBLE); 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()); button.setEnabled(item.poll.selectedOptions!=null && !item.poll.selectedOptions.isEmpty());
} }
} }

View File

@ -76,10 +76,11 @@ public class PollOptionStatusDisplayItem extends StatusDisplayItem{
@Override @Override
public void onBind(PollOptionStatusDisplayItem item){ public void onBind(PollOptionStatusDisplayItem item){
text.setText(item.text); text.setText(item.text);
icon.setVisibility(item.showResults ? View.GONE : View.VISIBLE); // icon.setVisibility(item.showResults ? View.GONE : View.VISIBLE);
percent.setVisibility(item.showResults ? View.VISIBLE : View.GONE); percent.setVisibility(item.showResults ? View.VISIBLE : View.GONE);
itemView.setClickable(!item.showResults); itemView.setClickable(!item.showResults);
if(item.showResults){ if(item.showResults){
icon.setSelected(item.poll.ownVotes.contains(item.poll.options.indexOf(item.option)));
progressBg.setLevel(Math.round(10000f*item.votesFraction)); progressBg.setLevel(Math.round(10000f*item.votesFraction));
button.setBackground(progressBg); button.setBackground(progressBg);
itemView.setSelected(item.isMostVoted); itemView.setSelected(item.isMostVoted);

View File

@ -12,7 +12,8 @@
<LinearLayout <LinearLayout
android:id="@+id/button" android:id="@+id/button"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="48dp" android:layout_height="wrap_content"
android:paddingVertical="12dp"
android:outlineProvider="background" android:outlineProvider="background"
android:elevation="2dp" android:elevation="2dp"
android:background="@drawable/bg_poll_option_clickable" android:background="@drawable/bg_poll_option_clickable"
@ -48,9 +49,7 @@
android:layout_marginLeft="16dp" android:layout_marginLeft="16dp"
android:layout_marginRight="16dp" android:layout_marginRight="16dp"
android:textAppearance="@style/m3_title_medium" android:textAppearance="@style/m3_title_medium"
android:singleLine="true" tools:text="scream into void. like this: aaaaaaaaaaaaaaaaaaaa"/>
android:ellipsize="end"
tools:text="scream into void"/>
</LinearLayout> </LinearLayout>