Skip to content
This repository was archived by the owner on Oct 28, 2024. It is now read-only.

Commit 5b28468

Browse files
committed
add option to allow multiple poll choices
1 parent 6fd58c9 commit 5b28468

File tree

5 files changed

+75
-0
lines changed

5 files changed

+75
-0
lines changed

mastodon/src/main/java/org/joinmastodon/android/fragments/ComposeFragment.java

+36
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
import android.view.animation.LinearInterpolator;
4141
import android.view.inputmethod.InputMethodManager;
4242
import android.widget.Button;
43+
import android.widget.CheckBox;
4344
import android.widget.EditText;
4445
import android.widget.FrameLayout;
4546
import android.widget.ImageButton;
@@ -150,6 +151,8 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
150151
private ReorderableLinearLayout pollOptionsView;
151152
private View pollWrap;
152153
private View addPollOptionBtn;
154+
private View pollAllowMultipleItem;
155+
private CheckBox pollAllowMultipleCheckbox;
153156
private TextView pollDurationView;
154157

155158
private ArrayList<DraftPollOption> pollOptions=new ArrayList<>();
@@ -288,6 +291,9 @@ public void onIconChanged(int icon){
288291
pollOptionsView=view.findViewById(R.id.poll_options);
289292
pollWrap=view.findViewById(R.id.poll_wrap);
290293
addPollOptionBtn=view.findViewById(R.id.add_poll_option);
294+
pollAllowMultipleItem=view.findViewById(R.id.poll_allow_multiple);
295+
pollAllowMultipleCheckbox=view.findViewById(R.id.poll_allow_multiple_checkbox);
296+
pollAllowMultipleItem.setOnClickListener(v->this.togglePollAllowMultiple());
291297

292298
addPollOptionBtn.setOnClickListener(v->{
293299
createDraftPollOption().edit.requestFocus();
@@ -302,6 +308,7 @@ public void onIconChanged(int icon){
302308
pollBtn.setSelected(true);
303309
mediaBtn.setEnabled(false);
304310
pollWrap.setVisibility(View.VISIBLE);
311+
updatePollAllowMultiple(savedInstanceState.getBoolean("pollAllowMultiple", false));
305312
for(String oldText:savedInstanceState.getStringArrayList("pollOptions")){
306313
DraftPollOption opt=createDraftPollOption();
307314
opt.edit.setText(oldText);
@@ -312,6 +319,7 @@ public void onIconChanged(int icon){
312319
pollBtn.setSelected(true);
313320
mediaBtn.setEnabled(false);
314321
pollWrap.setVisibility(View.VISIBLE);
322+
updatePollAllowMultiple(editingStatus.poll.multiple);
315323
for(Poll.Option eopt:editingStatus.poll.options){
316324
DraftPollOption opt=createDraftPollOption();
317325
opt.edit.setText(eopt.title);
@@ -381,6 +389,7 @@ public void onSaveInstanceState(Bundle outState){
381389
outState.putStringArrayList("pollOptions", opts);
382390
outState.putInt("pollDuration", pollDuration);
383391
outState.putString("pollDurationStr", pollDurationStr);
392+
outState.putBoolean("pollAllowMultiple", pollAllowMultipleItem.isSelected());
384393
}
385394
outState.putBoolean("hasSpoiler", hasSpoiler);
386395
if(!attachments.isEmpty()){
@@ -658,6 +667,7 @@ private void publish(){
658667
if(!pollOptions.isEmpty()){
659668
req.poll=new CreateStatus.Request.Poll();
660669
req.poll.expiresIn=pollDuration;
670+
req.poll.multiple=pollAllowMultipleItem.isSelected();
661671
for(DraftPollOption opt:pollOptions)
662672
req.poll.options.add(opt.edit.getText().toString());
663673
}
@@ -1158,6 +1168,11 @@ private DraftPollOption createDraftPollOption(){
11581168
option.view=LayoutInflater.from(getActivity()).inflate(R.layout.compose_poll_option, pollOptionsView, false);
11591169
option.edit=option.view.findViewById(R.id.edit);
11601170
option.dragger=option.view.findViewById(R.id.dragger_thingy);
1171+
ImageView icon = option.view.findViewById(R.id.icon);
1172+
icon.setImageDrawable(getContext().getDrawable(pollAllowMultipleItem.isSelected() ?
1173+
R.drawable.ic_poll_checkbox_regular_selector :
1174+
R.drawable.ic_poll_option_button
1175+
));
11611176

11621177
option.dragger.setOnLongClickListener(v->{
11631178
pollOptionsView.startDragging(option.view);
@@ -1319,6 +1334,27 @@ private void updateVisibilityIcon(){
13191334
});
13201335
}
13211336

1337+
private void togglePollAllowMultiple() {
1338+
updatePollAllowMultiple(!pollAllowMultipleItem.isSelected());
1339+
}
1340+
1341+
private void updatePollAllowMultiple(boolean multiple){
1342+
pollAllowMultipleItem.setSelected(multiple);
1343+
pollAllowMultipleCheckbox.setChecked(multiple);
1344+
ImageView btn = addPollOptionBtn.findViewById(R.id.add_poll_option_icon);
1345+
btn.setImageDrawable(getContext().getDrawable(multiple ?
1346+
R.drawable.ic_fluent_add_square_24_regular :
1347+
R.drawable.ic_fluent_add_circle_24_regular
1348+
));
1349+
for (DraftPollOption opt:pollOptions) {
1350+
ImageView icon = opt.view.findViewById(R.id.icon);
1351+
icon.setImageDrawable(getContext().getDrawable(multiple ?
1352+
R.drawable.ic_poll_checkbox_regular_selector :
1353+
R.drawable.ic_poll_option_button
1354+
));
1355+
}
1356+
}
1357+
13221358
@Override
13231359
public void onSelectionChanged(int start, int end){
13241360
if(ignoreSelectionChanges)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:viewportWidth="24" android:viewportHeight="24">
2+
<path android:pathData="M12 7c0.414 0 0.75 0.336 0.75 0.75v3.5h3.5c0.414 0 0.75 0.336 0.75 0.75s-0.336 0.75-0.75 0.75h-3.5v3.5c0 0.414-0.336 0.75-0.75 0.75s-0.75-0.336-0.75-0.75v-3.5h-3.5C7.336 12.75 7 12.414 7 12s0.336-0.75 0.75-0.75h3.5v-3.5C11.25 7.336 11.586 7 12 7zM3 6.25C3 4.455 4.455 3 6.25 3h11.5C19.545 3 21 4.455 21 6.25v11.5c0 1.795-1.455 3.25-3.25 3.25H6.25C4.455 21 3 19.545 3 17.75V6.25zM6.25 4.5C5.284 4.5 4.5 5.284 4.5 6.25v11.5c0 0.966 0.784 1.75 1.75 1.75h11.5c0.966 0 1.75-0.784 1.75-1.75V6.25c0-0.966-0.784-1.75-1.75-1.75H6.25z" android:fillColor="@color/fluent_default_icon_tint"/>
3+
</vector>

mastodon/src/main/res/layout/compose_poll_option.xml

+1
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
android:outlineProvider="background"
1616
android:elevation="2dp">
1717
<ImageView
18+
android:id="@+id/icon"
1819
android:layout_width="24dp"
1920
android:layout_height="24dp"
2021
android:layout_margin="16dp"

mastodon/src/main/res/layout/fragment_compose.xml

+34
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,7 @@
129129
android:outlineProvider="background"
130130
android:elevation="2dp">
131131
<ImageView
132+
android:id="@+id/add_poll_option_icon"
132133
android:layout_width="24dp"
133134
android:layout_height="24dp"
134135
android:layout_margin="16dp"
@@ -145,6 +146,39 @@
145146
android:textAppearance="@style/m3_label_large"
146147
android:textColor="?android:textColorPrimary"
147148
tools:text="Duration: 7 days"/>
149+
150+
<LinearLayout
151+
android:id="@+id/poll_allow_multiple"
152+
android:orientation="horizontal"
153+
android:layout_width="match_parent"
154+
android:layout_height="wrap_content"
155+
android:layout_marginBottom="16dp"
156+
android:layout_marginTop="8dp"
157+
android:gravity="center_vertical"
158+
android:layoutDirection="locale"
159+
android:paddingLeft="16dp"
160+
android:paddingRight="16dp"
161+
android:paddingTop="12dp"
162+
android:paddingBottom="12dp"
163+
android:background="?android:selectableItemBackground">
164+
165+
<CheckBox
166+
android:id="@+id/poll_allow_multiple_checkbox"
167+
android:clickable="false"
168+
android:layout_width="wrap_content"
169+
android:layout_height="24dp"
170+
android:layout_marginEnd="24dp"
171+
android:duplicateParentState="true"
172+
android:importantForAccessibility="no"/>
173+
174+
<TextView
175+
android:layout_width="0dp"
176+
android:layout_height="wrap_content"
177+
android:layout_weight="1"
178+
android:textSize="16sp"
179+
android:singleLine="true"
180+
android:text="@string/poll_allow_multiple" />
181+
</LinearLayout>
148182
</LinearLayout>
149183

150184
<org.joinmastodon.android.ui.views.ComposeMediaLayout

mastodon/src/main/res/values/strings.xml

+1
Original file line numberDiff line numberDiff line change
@@ -397,4 +397,5 @@
397397
<string name="login_title">Welcome Back</string>
398398
<string name="login_subtitle">Log in with the server where you created your account.</string>
399399
<string name="server_url">Server URL</string>
400+
<string name="poll_allow_multiple">Allow multiple choices</string>
400401
</resources>

0 commit comments

Comments
 (0)