mirror of
https://codeberg.org/tom79/Fedilab.git
synced 2025-09-15 08:20:18 +03:00
Quote when composing
This commit is contained in:
parent
5accc101f7
commit
cc5f18beec
11 changed files with 80 additions and 14 deletions
|
@ -156,6 +156,7 @@ public class ComposeActivity extends BaseActivity implements ComposeAdapter.Mana
|
|||
private Uri photoFileUri;
|
||||
private ScheduledStatus scheduledStatus;
|
||||
private String visibility;
|
||||
private String quote_approval_policy;
|
||||
private Account accountMention;
|
||||
private String statusReplyId;
|
||||
private Account mentionBooster;
|
||||
|
@ -287,7 +288,7 @@ public class ComposeActivity extends BaseActivity implements ComposeAdapter.Mana
|
|||
statusList.addAll(0, context.ancestors);
|
||||
statusList.add(initialStatus);
|
||||
statusList.add(statusDraft.statusDraftList.get(0));
|
||||
composeAdapter = new ComposeAdapter(statusList, context.ancestors.size(), account, accountMention, visibility, editMessageId);
|
||||
composeAdapter = new ComposeAdapter(statusList, context.ancestors.size(), account, accountMention, visibility, quote_approval_policy, editMessageId);
|
||||
composeAdapter.mediaDescriptionCallBack = this;
|
||||
composeAdapter.promptDraftListener = this;
|
||||
composeAdapter.manageDrafts = this;
|
||||
|
@ -526,6 +527,10 @@ public class ComposeActivity extends BaseActivity implements ComposeAdapter.Mana
|
|||
} else if (visibility == null && Helper.getCurrentAccount(ComposeActivity.this) != null && Helper.getCurrentAccount(ComposeActivity.this).mastodon_account != null && Helper.getCurrentAccount(ComposeActivity.this).mastodon_account.source != null) {
|
||||
visibility = Helper.getCurrentAccount(ComposeActivity.this).mastodon_account.source.privacy;
|
||||
}
|
||||
if (quote_approval_policy == null && Helper.getCurrentAccount(ComposeActivity.this) != null && Helper.getCurrentAccount(ComposeActivity.this).mastodon_account != null && Helper.getCurrentAccount(ComposeActivity.this).mastodon_account.source != null) {
|
||||
quote_approval_policy = Helper.getCurrentAccount(ComposeActivity.this).mastodon_account.source.quote_authorizations;
|
||||
}
|
||||
|
||||
if(setMentionBooster) {
|
||||
mentionBooster = (Account) b.getSerializable(Helper.ARG_MENTION_BOOSTER);
|
||||
} else {
|
||||
|
@ -569,6 +574,7 @@ public class ComposeActivity extends BaseActivity implements ComposeAdapter.Mana
|
|||
status.sensitive = scheduledStatus.params.sensitive;
|
||||
status.spoiler_text = scheduledStatus.params.spoiler_text;
|
||||
status.visibility = scheduledStatus.params.visibility;
|
||||
status.quote_approval_policy = scheduledStatus.params.quote_approval_policy;
|
||||
statuses.add(status);
|
||||
statusDraft.statusDraftList = statuses;
|
||||
}
|
||||
|
@ -636,7 +642,7 @@ public class ComposeActivity extends BaseActivity implements ComposeAdapter.Mana
|
|||
}
|
||||
int statusCount = statusList.size();
|
||||
statusList.addAll(statusDraft.statusDraftList);
|
||||
composeAdapter = new ComposeAdapter(statusList, statusCount, account, accountMention, visibility, editMessageId);
|
||||
composeAdapter = new ComposeAdapter(statusList, statusCount, account, accountMention, visibility, quote_approval_policy, editMessageId);
|
||||
composeAdapter.mediaDescriptionCallBack = this;
|
||||
composeAdapter.manageDrafts = this;
|
||||
composeAdapter.promptDraftListener = this;
|
||||
|
@ -709,7 +715,7 @@ public class ComposeActivity extends BaseActivity implements ComposeAdapter.Mana
|
|||
}
|
||||
//StatusDraftList at this point should only have one element
|
||||
statusList.addAll(statusDraftList);
|
||||
composeAdapter = new ComposeAdapter(statusList, statusCount, account, accountMention, visibility, editMessageId);
|
||||
composeAdapter = new ComposeAdapter(statusList, statusCount, account, accountMention, visibility, quote_approval_policy, editMessageId);
|
||||
composeAdapter.mediaDescriptionCallBack = this;
|
||||
composeAdapter.manageDrafts = this;
|
||||
composeAdapter.promptDraftListener = this;
|
||||
|
@ -724,7 +730,7 @@ public class ComposeActivity extends BaseActivity implements ComposeAdapter.Mana
|
|||
statusDraftList.get(0).quote_id = statusQuoted.id;
|
||||
//StatusDraftList at this point should only have one element
|
||||
statusList.addAll(statusDraftList);
|
||||
composeAdapter = new ComposeAdapter(statusList, statusCount, account, accountMention, visibility, editMessageId);
|
||||
composeAdapter = new ComposeAdapter(statusList, statusCount, account, accountMention, visibility, quote_approval_policy, editMessageId);
|
||||
composeAdapter.mediaDescriptionCallBack = this;
|
||||
composeAdapter.manageDrafts = this;
|
||||
composeAdapter.promptDraftListener = this;
|
||||
|
@ -734,7 +740,7 @@ public class ComposeActivity extends BaseActivity implements ComposeAdapter.Mana
|
|||
} else {
|
||||
//Compose without replying
|
||||
statusList.addAll(statusDraftList);
|
||||
composeAdapter = new ComposeAdapter(statusList, 0, account, accountMention, visibility, editMessageId);
|
||||
composeAdapter = new ComposeAdapter(statusList, 0, account, accountMention, visibility,quote_approval_policy, editMessageId);
|
||||
composeAdapter.mediaDescriptionCallBack = this;
|
||||
composeAdapter.manageDrafts = this;
|
||||
composeAdapter.promptDraftListener = this;
|
||||
|
|
|
@ -64,6 +64,8 @@ public interface MastodonStatusesService {
|
|||
@Field("spoiler_text") String spoiler_text,
|
||||
@Field("visibility") String visibility,
|
||||
@Field("language") String language,
|
||||
@Field("quote_approval_policy") String quote_approval_policy,
|
||||
@Field("quoted_status_id") String quoted_status_id,
|
||||
@Field("quote_id") String quote_id,
|
||||
@Field("content_type") String content_type,
|
||||
@Field("local_only") Boolean local_only
|
||||
|
|
|
@ -42,6 +42,8 @@ public class ScheduledStatus implements Serializable {
|
|||
public String spoiler_text;
|
||||
@SerializedName("visibility")
|
||||
public String visibility;
|
||||
@SerializedName("quote_approval_policy")
|
||||
public String quote_approval_policy;
|
||||
@SerializedName("scheduled_at")
|
||||
public Date scheduled_at;
|
||||
@SerializedName("poll")
|
||||
|
|
|
@ -22,6 +22,8 @@ import java.util.List;
|
|||
public class Source implements Serializable {
|
||||
@SerializedName("privacy")
|
||||
public String privacy;
|
||||
@SerializedName("quote_authorizations")
|
||||
public String quote_authorizations;
|
||||
@SerializedName("sensitive")
|
||||
public boolean sensitive;
|
||||
@SerializedName("language")
|
||||
|
@ -36,6 +38,8 @@ public class Source implements Serializable {
|
|||
public static class SourceParams implements Serializable {
|
||||
@SerializedName("privacy")
|
||||
public String privacy;
|
||||
@SerializedName("quote_authorizations")
|
||||
public String quote_authorizations;
|
||||
@SerializedName("sensitive")
|
||||
public boolean sensitive;
|
||||
@SerializedName("language")
|
||||
|
|
|
@ -55,10 +55,13 @@ public class Status implements Serializable, Cloneable {
|
|||
public String text;
|
||||
@SerializedName("quote_id")
|
||||
public String quote_id;
|
||||
|
||||
@SerializedName("content_type")
|
||||
public String content_type;
|
||||
@SerializedName("visibility")
|
||||
public String visibility;
|
||||
@SerializedName("quote_approval_policy")
|
||||
public String quote_approval_policy;
|
||||
@SerializedName("language")
|
||||
public String language;
|
||||
@SerializedName("uri")
|
||||
|
|
|
@ -33,10 +33,15 @@ public class StatusParams implements Serializable {
|
|||
public String in_reply_to_id;
|
||||
@SerializedName("sensitive")
|
||||
public Boolean sensitive;
|
||||
|
||||
@SerializedName("spoiler_text")
|
||||
public String spoiler_text;
|
||||
@SerializedName("visibility")
|
||||
public String visibility;
|
||||
@SerializedName("quote_approval_policy")
|
||||
public String quote_approval_policy;
|
||||
@SerializedName("quoted_status_id")
|
||||
public String quoted_status_id;
|
||||
@SerializedName("language")
|
||||
public String language;
|
||||
@SerializedName("media_attributes")
|
||||
|
|
|
@ -572,6 +572,22 @@ public class MastodonHelper {
|
|||
HEADER
|
||||
}
|
||||
|
||||
public enum quote_visibility {
|
||||
@SerializedName("PUBLIC")
|
||||
PUBLIC("public"),
|
||||
@SerializedName("FOLLOWERS")
|
||||
FOLLOWERS("followers"),
|
||||
@SerializedName("NOBODY")
|
||||
NOBODY("nobody");
|
||||
private final String value;
|
||||
quote_visibility(String value) {
|
||||
this.value = value;
|
||||
}
|
||||
public String getValue() {
|
||||
return value;
|
||||
}
|
||||
}
|
||||
|
||||
public enum visibility {
|
||||
@SerializedName("PUBLIC")
|
||||
PUBLIC("public"),
|
||||
|
|
|
@ -261,7 +261,7 @@ public class ComposeWorker extends Worker {
|
|||
if (dataPost.scheduledDate == null) {
|
||||
if (dataPost.statusEditId == null) {
|
||||
statusCall = mastodonStatusesService.createStatus(null, dataPost.token, statuses.get(i).text, attachmentIds, poll_options, poll_expire_in,
|
||||
poll_multiple, poll_hide_totals, statuses.get(i).quote_id == null ? in_reply_to_status : null, statuses.get(i).sensitive, statuses.get(i).spoilerChecked ? statuses.get(i).spoiler_text : null, statuses.get(i).visibility.toLowerCase(), statuses.get(i).language, statuses.get(i).quote_id, statuses.get(i).content_type, statuses.get(i).local_only);
|
||||
poll_multiple, poll_hide_totals, statuses.get(i).quote_id == null ? in_reply_to_status : null, statuses.get(i).sensitive, statuses.get(i).spoilerChecked ? statuses.get(i).spoiler_text : null, statuses.get(i).visibility.toLowerCase(), statuses.get(i).language, statuses.get(i).quote_approval_policy.toLowerCase(), statuses.get(i).quote_id, statuses.get(i).quote_id, statuses.get(i).content_type, statuses.get(i).local_only);
|
||||
} else { //Status is edited
|
||||
StatusParams statusParams = new StatusParams();
|
||||
statusParams.status = statuses.get(i).text;
|
||||
|
@ -277,6 +277,8 @@ public class ComposeWorker extends Worker {
|
|||
statusParams.sensitive = statuses.get(i).sensitive;
|
||||
statusParams.spoiler_text = statuses.get(i).spoilerChecked ? statuses.get(i).spoiler_text : null;
|
||||
statusParams.visibility = statuses.get(i).visibility.toLowerCase();
|
||||
statusParams.quoted_status_id = statuses.get(i).quote_id.toLowerCase();
|
||||
statusParams.quote_approval_policy = statuses.get(i).quote_approval_policy.toLowerCase();
|
||||
statusParams.language = statuses.get(i).language;
|
||||
statusParams.media_attributes = media_attributes;
|
||||
statusCall = mastodonStatusesService.updateStatus(null, dataPost.token,
|
||||
|
|
|
@ -167,6 +167,7 @@ public class ComposeAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder
|
|||
private final int TYPE_NORMAL = 0;
|
||||
private final BaseAccount account;
|
||||
private final String visibility;
|
||||
private final String quote_approval_policy;
|
||||
private final Account mentionedAccount;
|
||||
private final String editMessageId;
|
||||
public ManageDrafts manageDrafts;
|
||||
|
@ -182,12 +183,13 @@ public class ComposeAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder
|
|||
private boolean splitChoiceDone = false;
|
||||
|
||||
|
||||
public ComposeAdapter(List<Status> statusList, int statusCount, BaseAccount account, Account mentionedAccount, String visibility, String editMessageId) {
|
||||
public ComposeAdapter(List<Status> statusList, int statusCount, BaseAccount account, Account mentionedAccount, String visibility, String quote_approval_policy, String editMessageId) {
|
||||
this.statusList = statusList;
|
||||
this.statusCount = statusCount;
|
||||
this.account = account;
|
||||
this.mentionedAccount = mentionedAccount;
|
||||
this.visibility = visibility;
|
||||
this.quote_approval_policy = quote_approval_policy;
|
||||
this.editMessageId = editMessageId;
|
||||
|
||||
}
|
||||
|
@ -1624,6 +1626,9 @@ public class ComposeAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder
|
|||
if (visibility != null && statusDraft.visibility == null) {
|
||||
statusDraft.visibility = visibility;
|
||||
}
|
||||
if(quote_approval_policy != null && statusDraft.quote_approval_policy == null) {
|
||||
statusDraft.quote_approval_policy = quote_approval_policy;
|
||||
}
|
||||
boolean unlistedReplies = sharedpreferences.getBoolean(context.getString(R.string.SET_UNLISTED_REPLIES), true);
|
||||
if (statusDraft.visibility == null) {
|
||||
if (position > 0) {
|
||||
|
@ -1639,7 +1644,9 @@ public class ComposeAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder
|
|||
} else if (!unlisted_changed && position > 0 && position == statusCount && unlistedReplies && statusDraft.visibility.equalsIgnoreCase("public") && statusList.size() > 1) {
|
||||
statusDraft.visibility = "unlisted";
|
||||
}
|
||||
|
||||
if( statusDraft.quote_approval_policy == null) { //Set a default value
|
||||
statusDraft.quote_approval_policy = MastodonHelper.quote_visibility.PUBLIC.name();
|
||||
}
|
||||
switch (statusDraft.visibility.toLowerCase()) {
|
||||
case "public" -> {
|
||||
holder.binding.buttonVisibility.setIconResource(R.drawable.ic_compose_visibility_public);
|
||||
|
@ -1663,6 +1670,24 @@ public class ComposeAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder
|
|||
}
|
||||
}
|
||||
|
||||
|
||||
switch (statusDraft.quote_approval_policy.toLowerCase()) {
|
||||
case "public" -> {
|
||||
holder.binding.buttonQuoteApprovalPolicy.setIconResource(R.drawable.ic_compose_visibility_public);
|
||||
statusDraft.quote_approval_policy = MastodonHelper.quote_visibility.PUBLIC.name();
|
||||
}
|
||||
case "followers" -> {
|
||||
holder.binding.buttonQuoteApprovalPolicy.setIconResource(R.drawable.ic_baseline_people_alt_24);
|
||||
statusDraft.quote_approval_policy = MastodonHelper.quote_visibility.FOLLOWERS.name();
|
||||
}
|
||||
case "nobody" -> {
|
||||
holder.binding.buttonQuoteApprovalPolicy.setIconResource(R.drawable.ic_baseline_block_24);
|
||||
statusDraft.quote_approval_policy = MastodonHelper.quote_visibility.NOBODY.name();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
holder.binding.visibilityPanel.setOnTouchListener((view, motionEvent) -> true);
|
||||
holder.binding.buttonCloseAttachmentPanel.setOnClickListener(v -> holder.binding.attachmentChoicesPanel.setVisibility(View.GONE));
|
||||
holder.binding.buttonVisibility.setOnClickListener(v -> {
|
||||
|
@ -1706,17 +1731,17 @@ public class ComposeAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder
|
|||
holder.binding.buttonQuoteApprovalPolicyNoOne.setOnClickListener(v -> {
|
||||
holder.binding.quoteApprovalPolicyPanel.setVisibility(View.GONE);
|
||||
holder.binding.buttonQuoteApprovalPolicy.setIconResource(R.drawable.ic_baseline_block_24);
|
||||
// Todo: statusDraft.visibility = nobody
|
||||
statusDraft.quote_approval_policy = MastodonHelper.quote_visibility.NOBODY.name();
|
||||
});
|
||||
holder.binding.buttonQuoteApprovalPolicyFollowersOnly.setOnClickListener(v -> {
|
||||
holder.binding.quoteApprovalPolicyPanel.setVisibility(View.GONE);
|
||||
holder.binding.buttonQuoteApprovalPolicy.setIconResource(R.drawable.ic_baseline_people_alt_24);
|
||||
// Todo: statusDraft.visibility = followers
|
||||
statusDraft.quote_approval_policy = MastodonHelper.quote_visibility.FOLLOWERS.name();
|
||||
});
|
||||
holder.binding.buttonQuoteApprovalPolicyAnyone.setOnClickListener(v -> {
|
||||
holder.binding.quoteApprovalPolicyPanel.setVisibility(View.GONE);
|
||||
holder.binding.buttonQuoteApprovalPolicy.setIconResource(R.drawable.ic_compose_visibility_public);
|
||||
// Todo: statusDraft.visibility = public
|
||||
statusDraft.quote_approval_policy = MastodonHelper.quote_visibility.PUBLIC.name();
|
||||
});
|
||||
|
||||
if (statusDraft.spoilerChecked || statusDraft.spoiler_text != null && !statusDraft.spoiler_text.trim().isEmpty()) {
|
||||
|
|
|
@ -188,6 +188,7 @@ public class StatusesVM extends AndroidViewModel {
|
|||
String spoiler_text,
|
||||
String visibility,
|
||||
String language,
|
||||
String quote_approval_policy,
|
||||
String quote_id,
|
||||
String content_type,
|
||||
Boolean local_only) {
|
||||
|
@ -195,7 +196,7 @@ public class StatusesVM extends AndroidViewModel {
|
|||
statusMutableLiveData = new MutableLiveData<>();
|
||||
new Thread(() -> {
|
||||
Call<Status> statusCall = mastodonStatusesService.createStatus(idempotency_Key, token, text, media_ids, poll_options, poll_expire_in,
|
||||
poll_multiple, poll_hide_totals, in_reply_to_id, sensitive, spoiler_text, visibility, language, quote_id, content_type, local_only);
|
||||
poll_multiple, poll_hide_totals, in_reply_to_id, sensitive, spoiler_text, visibility, language, quote_approval_policy, quote_id, quote_id, content_type, local_only);
|
||||
Status status = null;
|
||||
if (statusCall != null) {
|
||||
try {
|
||||
|
|
|
@ -2046,7 +2046,7 @@ public class PeertubeActivity extends BasePeertubeActivity implements CommentLis
|
|||
viewModelComment.comment(ADD_COMMENT, peertube.getId(), null, commentStr).observe(PeertubeActivity.this, apiResponse1 -> manageVIewPostActions(ADD_COMMENT, 0, apiResponse1));
|
||||
} else {//Remote account is posting a message
|
||||
StatusesVM statusesVM = new ViewModelProvider(PeertubeActivity.this).get(StatusesVM.class);
|
||||
statusesVM.postStatus(currentInstance, currentToken, null, commentStr, null, null, null, null, null, status.id, false, null, "public", null, null, null, null).observe(PeertubeActivity.this, this::manageVIewPostActionsMastodon);
|
||||
statusesVM.postStatus(currentInstance, currentToken, null, commentStr, null, null, null, null, null, status.id, false, null, "public", null, null, null, null, null).observe(PeertubeActivity.this, this::manageVIewPostActionsMastodon);
|
||||
}
|
||||
binding.addCommentWrite.setText("");
|
||||
}
|
||||
|
@ -2058,7 +2058,7 @@ public class PeertubeActivity extends BasePeertubeActivity implements CommentLis
|
|||
viewModelComment.comment(REPLY, peertube.getId(), comment.getId(), commentView).observe(PeertubeActivity.this, apiResponse1 -> manageVIewPostActions(REPLY, position, apiResponse1));
|
||||
} else {//Remote account is posting a message
|
||||
StatusesVM statusesVM = new ViewModelProvider(PeertubeActivity.this).get(StatusesVM.class);
|
||||
statusesVM.postStatus(currentInstance, currentToken, null, commentView, null, null, null, null, null, status.id, false, null, "public", null, null, null, null).observe(PeertubeActivity.this, this::manageVIewPostActionsMastodon);
|
||||
statusesVM.postStatus(currentInstance, currentToken, null, commentView, null, null, null, null, null, status.id, false, null, "public", null, null, null, null, null).observe(PeertubeActivity.this, this::manageVIewPostActionsMastodon);
|
||||
}
|
||||
binding.addCommentWrite.setText("");
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue