diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/ComposeFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/ComposeFragment.java index 265596e30..14d90d979 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/ComposeFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/ComposeFragment.java @@ -161,11 +161,13 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr private Button publishButton; private ImageButton mediaBtn, pollBtn, emojiBtn, spoilerBtn, visibilityBtn; + private ImageView sensitiveIcon; private ComposeMediaLayout attachmentsView; private TextView replyText; private ReorderableLinearLayout pollOptionsView; private View pollWrap; private View addPollOptionBtn; + private View sensitiveItem; private TextView pollDurationView; private ArrayList pollOptions=new ArrayList<>(); @@ -181,6 +183,7 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr private String pollDurationStr; private EditText spoilerEdit; private boolean hasSpoiler; + private boolean sensitive; private ProgressBar sendProgress; private ImageView sendError; private View sendingOverlay; @@ -290,6 +293,8 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr emojiBtn=view.findViewById(R.id.btn_emoji); spoilerBtn=view.findViewById(R.id.btn_spoiler); 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); mediaBtn.setOnClickListener(v->openFilePicker()); @@ -297,6 +302,7 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr emojiBtn.setOnClickListener(v->emojiKeyboard.toggleKeyboardPopup(mainEditText)); spoilerBtn.setOnClickListener(v->toggleSpoiler()); visibilityBtn.setOnClickListener(this::onVisibilityClick); + sensitiveItem.setOnClickListener(v->toggleSensitive()); emojiKeyboard.setOnIconChangedListener(new PopupKeyboard.OnIconChangeListener(){ @Override public void onIconChanged(int icon){ @@ -368,6 +374,9 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr spoilerBtn.setSelected(true); } + sensitive = savedInstanceState != null && savedInstanceState.getBoolean("sensitive", false); + sensitiveIcon.setSelected(sensitive); + ArrayList serializedAttachments=(savedInstanceState!=null ? savedInstanceState : getArguments()) .getParcelableArrayList("attachments"); if(serializedAttachments!=null){ @@ -387,7 +396,9 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr if(editingStatus!=null && editingStatus.visibility!=null) { statusVisibility=editingStatus.visibility; } + updateVisibilityIcon(); + updateSensitivity(); autocompleteViewController=new ComposeAutocompleteViewController(getActivity(), accountID); autocompleteViewController.setCompletionSelectedListener(this::onAutocompleteOptionSelected); @@ -421,6 +432,7 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr } outState.putSerializable("visibility", statusVisibility); } + outState.putBoolean("sensitive", sensitive); } @Override @@ -678,6 +690,7 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr CreateStatus.Request req=new CreateStatus.Request(); req.status=text; req.visibility=statusVisibility; + req.sensitive=sensitive; if(!attachments.isEmpty()){ req.mediaIds=attachments.stream().map(a->a.serverAttachment.id).collect(Collectors.toList()); } @@ -884,6 +897,7 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr uploadNextQueuedAttachment(); } updatePublishButtonState(); + updateSensitivity(); if(getMediaAttachmentsCount()==MAX_ATTACHMENTS) mediaBtn.setEnabled(false); return true; @@ -1058,6 +1072,7 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr updatePublishButtonState(); pollBtn.setEnabled(attachments.isEmpty()); mediaBtn.setEnabled(true); + updateSensitivity(); } private void onRetryOrCancelMediaUploadClick(View v){ @@ -1253,13 +1268,27 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr spoilerEdit.setVisibility(View.VISIBLE); spoilerBtn.setSelected(true); spoilerEdit.requestFocus(); + updateSensitivity(); }else{ spoilerEdit.setVisibility(View.GONE); spoilerEdit.setText(""); spoilerBtn.setSelected(false); mainEditText.requestFocus(); 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(){ diff --git a/mastodon/src/main/res/drawable/ic_fluent_flag_24_filled.xml b/mastodon/src/main/res/drawable/ic_fluent_flag_24_filled.xml new file mode 100644 index 000000000..c1d347f0a --- /dev/null +++ b/mastodon/src/main/res/drawable/ic_fluent_flag_24_filled.xml @@ -0,0 +1,3 @@ + + + diff --git a/mastodon/src/main/res/drawable/ic_fluent_flag_24_regular.xml b/mastodon/src/main/res/drawable/ic_fluent_flag_24_regular.xml new file mode 100644 index 000000000..8a6cdec47 --- /dev/null +++ b/mastodon/src/main/res/drawable/ic_fluent_flag_24_regular.xml @@ -0,0 +1,3 @@ + + + diff --git a/mastodon/src/main/res/drawable/ic_fluent_flag_24_selector.xml b/mastodon/src/main/res/drawable/ic_fluent_flag_24_selector.xml new file mode 100644 index 000000000..0792520ff --- /dev/null +++ b/mastodon/src/main/res/drawable/ic_fluent_flag_24_selector.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/mastodon/src/main/res/layout/fragment_compose.xml b/mastodon/src/main/res/layout/fragment_compose.xml index b5074a02e..1c31a1583 100644 --- a/mastodon/src/main/res/layout/fragment_compose.xml +++ b/mastodon/src/main/res/layout/fragment_compose.xml @@ -154,6 +154,38 @@ android:layout_gravity="center_horizontal" android:visibility="gone"/> + + + + + + diff --git a/mastodon/src/main/res/values-de-rDE/strings.xml b/mastodon/src/main/res/values-de-rDE/strings.xml index 95de8cd08..973091063 100644 --- a/mastodon/src/main/res/values-de-rDE/strings.xml +++ b/mastodon/src/main/res/values-de-rDE/strings.xml @@ -288,6 +288,7 @@ Teilen Medien ohne Beschreibung Medien hinzufügen + Medien als NSFW markieren Umfrage hinzufügen Emoji Sichtbarkeit des Beitrages diff --git a/mastodon/src/main/res/values/strings.xml b/mastodon/src/main/res/values/strings.xml index 3c78d891f..33040dc6e 100644 --- a/mastodon/src/main/res/values/strings.xml +++ b/mastodon/src/main/res/values/strings.xml @@ -294,6 +294,7 @@ Bookmarks Media without description Add media + Mark media as sensitive Add a poll Emoji Post visibility