Merge branch 'feature/mark-media-as-sensitive' into fork

This commit is contained in:
sk 2022-11-07 20:17:39 +01:00
commit 2ff4f00774
7 changed files with 77 additions and 0 deletions

View File

@ -161,11 +161,13 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
private Button publishButton; private Button publishButton;
private ImageButton mediaBtn, pollBtn, emojiBtn, spoilerBtn, visibilityBtn; private ImageButton mediaBtn, pollBtn, emojiBtn, spoilerBtn, visibilityBtn;
private ImageView sensitiveIcon;
private ComposeMediaLayout attachmentsView; private ComposeMediaLayout attachmentsView;
private TextView replyText; private TextView replyText;
private ReorderableLinearLayout pollOptionsView; private ReorderableLinearLayout pollOptionsView;
private View pollWrap; private View pollWrap;
private View addPollOptionBtn; private View addPollOptionBtn;
private View sensitiveItem;
private TextView pollDurationView; private TextView pollDurationView;
private ArrayList<DraftPollOption> pollOptions=new ArrayList<>(); private ArrayList<DraftPollOption> pollOptions=new ArrayList<>();
@ -181,6 +183,7 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
private String pollDurationStr; private String pollDurationStr;
private EditText spoilerEdit; private EditText spoilerEdit;
private boolean hasSpoiler; private boolean hasSpoiler;
private boolean sensitive;
private ProgressBar sendProgress; private ProgressBar sendProgress;
private ImageView sendError; private ImageView sendError;
private View sendingOverlay; private View sendingOverlay;
@ -290,6 +293,8 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
emojiBtn=view.findViewById(R.id.btn_emoji); emojiBtn=view.findViewById(R.id.btn_emoji);
spoilerBtn=view.findViewById(R.id.btn_spoiler); spoilerBtn=view.findViewById(R.id.btn_spoiler);
visibilityBtn=view.findViewById(R.id.btn_visibility); visibilityBtn=view.findViewById(R.id.btn_visibility);
sensitiveIcon=view.findViewById(R.id.sensitive_icon);
sensitiveItem=view.findViewById(R.id.sensitive_item);
replyText=view.findViewById(R.id.reply_text); replyText=view.findViewById(R.id.reply_text);
mediaBtn.setOnClickListener(v->openFilePicker()); mediaBtn.setOnClickListener(v->openFilePicker());
@ -297,6 +302,7 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
emojiBtn.setOnClickListener(v->emojiKeyboard.toggleKeyboardPopup(mainEditText)); emojiBtn.setOnClickListener(v->emojiKeyboard.toggleKeyboardPopup(mainEditText));
spoilerBtn.setOnClickListener(v->toggleSpoiler()); spoilerBtn.setOnClickListener(v->toggleSpoiler());
visibilityBtn.setOnClickListener(this::onVisibilityClick); visibilityBtn.setOnClickListener(this::onVisibilityClick);
sensitiveItem.setOnClickListener(v->toggleSensitive());
emojiKeyboard.setOnIconChangedListener(new PopupKeyboard.OnIconChangeListener(){ emojiKeyboard.setOnIconChangedListener(new PopupKeyboard.OnIconChangeListener(){
@Override @Override
public void onIconChanged(int icon){ public void onIconChanged(int icon){
@ -368,6 +374,9 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
spoilerBtn.setSelected(true); spoilerBtn.setSelected(true);
} }
sensitive = savedInstanceState != null && savedInstanceState.getBoolean("sensitive", false);
sensitiveIcon.setSelected(sensitive);
ArrayList<Parcelable> serializedAttachments=(savedInstanceState!=null ? savedInstanceState : getArguments()) ArrayList<Parcelable> serializedAttachments=(savedInstanceState!=null ? savedInstanceState : getArguments())
.getParcelableArrayList("attachments"); .getParcelableArrayList("attachments");
if(serializedAttachments!=null){ if(serializedAttachments!=null){
@ -387,7 +396,9 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
if(editingStatus!=null && editingStatus.visibility!=null) { if(editingStatus!=null && editingStatus.visibility!=null) {
statusVisibility=editingStatus.visibility; statusVisibility=editingStatus.visibility;
} }
updateVisibilityIcon(); updateVisibilityIcon();
updateSensitivity();
autocompleteViewController=new ComposeAutocompleteViewController(getActivity(), accountID); autocompleteViewController=new ComposeAutocompleteViewController(getActivity(), accountID);
autocompleteViewController.setCompletionSelectedListener(this::onAutocompleteOptionSelected); autocompleteViewController.setCompletionSelectedListener(this::onAutocompleteOptionSelected);
@ -421,6 +432,7 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
} }
outState.putSerializable("visibility", statusVisibility); outState.putSerializable("visibility", statusVisibility);
} }
outState.putBoolean("sensitive", sensitive);
} }
@Override @Override
@ -678,6 +690,7 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
CreateStatus.Request req=new CreateStatus.Request(); CreateStatus.Request req=new CreateStatus.Request();
req.status=text; req.status=text;
req.visibility=statusVisibility; req.visibility=statusVisibility;
req.sensitive=sensitive;
if(!attachments.isEmpty()){ if(!attachments.isEmpty()){
req.mediaIds=attachments.stream().map(a->a.serverAttachment.id).collect(Collectors.toList()); req.mediaIds=attachments.stream().map(a->a.serverAttachment.id).collect(Collectors.toList());
} }
@ -884,6 +897,7 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
uploadNextQueuedAttachment(); uploadNextQueuedAttachment();
} }
updatePublishButtonState(); updatePublishButtonState();
updateSensitivity();
if(getMediaAttachmentsCount()==MAX_ATTACHMENTS) if(getMediaAttachmentsCount()==MAX_ATTACHMENTS)
mediaBtn.setEnabled(false); mediaBtn.setEnabled(false);
return true; return true;
@ -1058,6 +1072,7 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
updatePublishButtonState(); updatePublishButtonState();
pollBtn.setEnabled(attachments.isEmpty()); pollBtn.setEnabled(attachments.isEmpty());
mediaBtn.setEnabled(true); mediaBtn.setEnabled(true);
updateSensitivity();
} }
private void onRetryOrCancelMediaUploadClick(View v){ private void onRetryOrCancelMediaUploadClick(View v){
@ -1253,13 +1268,27 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr
spoilerEdit.setVisibility(View.VISIBLE); spoilerEdit.setVisibility(View.VISIBLE);
spoilerBtn.setSelected(true); spoilerBtn.setSelected(true);
spoilerEdit.requestFocus(); spoilerEdit.requestFocus();
updateSensitivity();
}else{ }else{
spoilerEdit.setVisibility(View.GONE); spoilerEdit.setVisibility(View.GONE);
spoilerEdit.setText(""); spoilerEdit.setText("");
spoilerBtn.setSelected(false); spoilerBtn.setSelected(false);
mainEditText.requestFocus(); mainEditText.requestFocus();
updateCharCounter(); updateCharCounter();
sensitiveIcon.setVisibility(getMediaAttachmentsCount() > 0 ? View.VISIBLE : View.GONE);
} }
updateSensitivity();
}
private void toggleSensitive() {
sensitive=!sensitive;
sensitiveIcon.setSelected(sensitive);
}
private void updateSensitivity() {
sensitiveItem.setVisibility(View.GONE);
if (!attachments.isEmpty() && !hasSpoiler) sensitiveItem.setVisibility(View.VISIBLE);
if (attachments.isEmpty()) sensitive = false;
} }
private int getMediaAttachmentsCount(){ private int getMediaAttachmentsCount(){

View File

@ -0,0 +1,3 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:viewportWidth="24" android:viewportHeight="24">
<path android:pathData="M3 3.748c0-0.414 0.336-0.75 0.75-0.75h16.504c0.618 0 0.971 0.706 0.6 1.2L16.69 9.75l4.164 5.551c0.371 0.495 0.018 1.2-0.6 1.2H4.5v4.75c0 0.38-0.282 0.693-0.648 0.743L3.75 22c-0.38 0-0.693-0.282-0.743-0.648L3 21.25V3.748z" android:fillColor="@color/fluent_default_icon_tint"/>
</vector>

View File

@ -0,0 +1,3 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android" android:width="24dp" android:height="24dp" android:viewportWidth="24" android:viewportHeight="24">
<path android:pathData="M3 3.748c0-0.414 0.336-0.75 0.75-0.75h16.504c0.618 0 0.971 0.706 0.6 1.2L16.69 9.75l4.164 5.551c0.371 0.495 0.018 1.2-0.6 1.2H4.5v4.75c0 0.38-0.282 0.693-0.648 0.743L3.75 22c-0.38 0-0.693-0.282-0.743-0.648L3 21.25V3.748zm15.754 0.75H4.5v10.503h14.254l-3.602-4.802c-0.2-0.266-0.2-0.633 0-0.9l3.602-4.8z" android:fillColor="@color/fluent_default_icon_tint"/>
</vector>

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<!--~ Copyright (c) 2022. ~ Microsoft Corporation. All rights reserved.-->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/ic_fluent_flag_24_filled" android:state_activated="true"/>
<item android:drawable="@drawable/ic_fluent_flag_24_filled" android:state_checked="true"/>
<item android:drawable="@drawable/ic_fluent_flag_24_filled" android:state_selected="true"/>
<item android:drawable="@drawable/ic_fluent_flag_24_regular"/>
</selector>

View File

@ -154,6 +154,38 @@
android:layout_gravity="center_horizontal" android:layout_gravity="center_horizontal"
android:visibility="gone"/> android:visibility="gone"/>
<LinearLayout
android:id="@+id/sensitive_item"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:gravity="center_vertical"
android:layoutDirection="locale"
android:paddingLeft="16dp"
android:paddingRight="16dp"
android:paddingTop="12dp"
android:paddingBottom="12dp"
android:background="?android:selectableItemBackground"
android:visibility="gone">
<ImageView
android:id="@+id/sensitive_icon"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginEnd="32dp"
android:src="@drawable/ic_fluent_flag_24_selector"
android:tint="?android:textColorPrimary"
android:importantForAccessibility="no"/>
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textSize="16sp"
android:singleLine="true"
android:text="@string/mark_media_as_sensitive" />
</LinearLayout>
</LinearLayout> </LinearLayout>
</ScrollView> </ScrollView>

View File

@ -288,6 +288,7 @@
<string name="button_share">Teilen</string> <string name="button_share">Teilen</string>
<string name="media_no_description">Medien ohne Beschreibung</string> <string name="media_no_description">Medien ohne Beschreibung</string>
<string name="add_media">Medien hinzufügen</string> <string name="add_media">Medien hinzufügen</string>
<string name="mark_media_as_sensitive">Medien als NSFW markieren</string>
<string name="add_poll">Umfrage hinzufügen</string> <string name="add_poll">Umfrage hinzufügen</string>
<string name="emoji">Emoji</string> <string name="emoji">Emoji</string>
<string name="post_visibility">Sichtbarkeit des Beitrages</string> <string name="post_visibility">Sichtbarkeit des Beitrages</string>

View File

@ -294,6 +294,7 @@
<string name="bookmarks">Bookmarks</string> <string name="bookmarks">Bookmarks</string>
<string name="media_no_description">Media without description</string> <string name="media_no_description">Media without description</string>
<string name="add_media">Add media</string> <string name="add_media">Add media</string>
<string name="mark_media_as_sensitive">Mark media as sensitive</string>
<string name="add_poll">Add a poll</string> <string name="add_poll">Add a poll</string>
<string name="emoji">Emoji</string> <string name="emoji">Emoji</string>
<string name="post_visibility">Post visibility</string> <string name="post_visibility">Post visibility</string>