Merge branch 'feature/mark-media-as-sensitive' into fork
This commit is contained in:
commit
2ff4f00774
|
@ -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(){
|
||||||
|
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
||||||
|
|
||||||
|
|
|
@ -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>
|
||||||
|
|
|
@ -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>
|
||||||
|
|
Loading…
Reference in New Issue