Fix issue #302 - Respect visibility of accounts when replying
This commit is contained in:
parent
2ba5234bb4
commit
c9516e7763
|
@ -149,252 +149,18 @@ public class ComposeActivity extends BaseActivity implements ComposeAdapter.Mana
|
||||||
private Uri sharedUri;
|
private Uri sharedUri;
|
||||||
private String sharedSubject, sharedContent, sharedTitle, sharedDescription, shareURL, sharedUrlMedia;
|
private String sharedSubject, sharedContent, sharedTitle, sharedDescription, shareURL, sharedUrlMedia;
|
||||||
|
|
||||||
@Override
|
private static int visibilityToNumber(String visibility) {
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
switch (visibility) {
|
||||||
super.onCreate(savedInstanceState);
|
case "public":
|
||||||
ThemeHelper.applyTheme(this);
|
return 3;
|
||||||
binding = ActivityPaginationBinding.inflate(getLayoutInflater());
|
case "unlisted":
|
||||||
setContentView(binding.getRoot());
|
return 2;
|
||||||
setSupportActionBar(binding.toolbar);
|
case "private":
|
||||||
ActionBar actionBar = getSupportActionBar();
|
return 1;
|
||||||
//Fake id given to drafts
|
case "direct":
|
||||||
composeID = 1;
|
return 0;
|
||||||
//Remove title
|
|
||||||
if (actionBar != null) {
|
|
||||||
actionBar.setDisplayShowTitleEnabled(false);
|
|
||||||
actionBar.setBackgroundDrawable(new ColorDrawable(ContextCompat.getColor(this, R.color.cyanea_primary)));
|
|
||||||
}
|
|
||||||
if (getSupportActionBar() != null) {
|
|
||||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
|
||||||
getSupportActionBar().setDisplayShowHomeEnabled(true);
|
|
||||||
}
|
|
||||||
statusList = new ArrayList<>();
|
|
||||||
Bundle b = getIntent().getExtras();
|
|
||||||
if (b != null) {
|
|
||||||
statusReply = (Status) b.getSerializable(Helper.ARG_STATUS_REPLY);
|
|
||||||
statusDraft = (StatusDraft) b.getSerializable(Helper.ARG_STATUS_DRAFT);
|
|
||||||
scheduledStatus = (ScheduledStatus) b.getSerializable(Helper.ARG_STATUS_SCHEDULED);
|
|
||||||
statusReplyId = b.getString(Helper.ARG_STATUS_REPLY_ID);
|
|
||||||
statusMention = (Status) b.getSerializable(Helper.ARG_STATUS_MENTION);
|
|
||||||
account = (BaseAccount) b.getSerializable(Helper.ARG_ACCOUNT);
|
|
||||||
instance = b.getString(Helper.ARG_INSTANCE, null);
|
|
||||||
token = b.getString(Helper.ARG_TOKEN, null);
|
|
||||||
visibility = b.getString(Helper.ARG_VISIBILITY, null);
|
|
||||||
mentionBooster = (app.fedilab.android.client.entities.api.Account) b.getSerializable(Helper.ARG_MENTION_BOOSTER);
|
|
||||||
accountMention = (app.fedilab.android.client.entities.api.Account) b.getSerializable(Helper.ARG_ACCOUNT_MENTION);
|
|
||||||
//Shared elements
|
|
||||||
sharedUriList = b.getParcelableArrayList(Helper.ARG_SHARE_URI_LIST);
|
|
||||||
sharedUri = b.getParcelable(Helper.ARG_SHARE_URI);
|
|
||||||
sharedUrlMedia = b.getString(Helper.ARG_SHARE_URL_MEDIA);
|
|
||||||
sharedSubject = b.getString(Helper.ARG_SHARE_SUBJECT, null);
|
|
||||||
sharedContent = b.getString(Helper.ARG_SHARE_CONTENT, null);
|
|
||||||
sharedTitle = b.getString(Helper.ARG_SHARE_TITLE, null);
|
|
||||||
sharedDescription = b.getString(Helper.ARG_SHARE_DESCRIPTION, null);
|
|
||||||
shareURL = b.getString(Helper.ARG_SHARE_URL, null);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
binding.toolbar.setPopupTheme(Helper.popupStyle());
|
|
||||||
//Edit a scheduled status from server
|
|
||||||
if (scheduledStatus != null) {
|
|
||||||
statusDraft = new StatusDraft();
|
|
||||||
List<Status> statuses = new ArrayList<>();
|
|
||||||
Status status = new Status();
|
|
||||||
status.text = scheduledStatus.params.text;
|
|
||||||
status.in_reply_to_id = scheduledStatus.params.in_reply_to_id;
|
|
||||||
status.poll = scheduledStatus.params.poll;
|
|
||||||
|
|
||||||
if (scheduledStatus.params.media_ids != null && scheduledStatus.params.media_ids.size() > 0) {
|
|
||||||
status.media_attachments = new ArrayList<>();
|
|
||||||
new Thread(() -> {
|
|
||||||
StatusesVM statusesVM = new ViewModelProvider(ComposeActivity.this).get(StatusesVM.class);
|
|
||||||
for (String attachmentId : scheduledStatus.params.media_ids) {
|
|
||||||
statusesVM.getAttachment(instance, token, attachmentId)
|
|
||||||
.observe(ComposeActivity.this, attachment -> status.media_attachments.add(attachment));
|
|
||||||
}
|
|
||||||
}).start();
|
|
||||||
}
|
|
||||||
status.sensitive = scheduledStatus.params.sensitive;
|
|
||||||
status.spoiler_text = scheduledStatus.params.spoiler_text;
|
|
||||||
status.visibility = scheduledStatus.params.visibility;
|
|
||||||
statusDraft.statusDraftList = statuses;
|
|
||||||
}
|
|
||||||
if (account == null) {
|
|
||||||
account = currentAccount;
|
|
||||||
}
|
|
||||||
if (account == null) {
|
|
||||||
Toasty.error(ComposeActivity.this, getString(R.string.toast_error), Toasty.LENGTH_SHORT).show();
|
|
||||||
finish();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (instance == null) {
|
|
||||||
instance = account.instance;
|
|
||||||
}
|
|
||||||
if (token == null) {
|
|
||||||
token = account.token;
|
|
||||||
}
|
|
||||||
if (emojis == null || !emojis.containsKey(currentInstance)) {
|
|
||||||
new Thread(() -> {
|
|
||||||
try {
|
|
||||||
emojis.put(currentInstance, new EmojiInstance(ComposeActivity.this).getEmojiList(currentInstance));
|
|
||||||
} catch (DBException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}).start();
|
|
||||||
}
|
|
||||||
final SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(ComposeActivity.this);
|
|
||||||
if (MainActivity.instanceInfo == null) {
|
|
||||||
String instanceInfo = sharedpreferences.getString(getString(R.string.INSTANCE_INFO) + instance, null);
|
|
||||||
if (instanceInfo != null) {
|
|
||||||
MainActivity.instanceInfo = Instance.restore(instanceInfo);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
StatusesVM statusesVM = new ViewModelProvider(ComposeActivity.this).get(StatusesVM.class);
|
|
||||||
//Empty compose
|
|
||||||
List<Status> statusDraftList = new ArrayList<>();
|
|
||||||
Status status = new Status();
|
|
||||||
statusDraftList.add(status);
|
|
||||||
|
|
||||||
if (statusReplyId != null && statusDraft != null) {//Delete and redraft
|
|
||||||
statusesVM.getStatus(currentInstance, BaseMainActivity.currentToken, statusReplyId)
|
|
||||||
.observe(ComposeActivity.this, status1 -> {
|
|
||||||
if (status1 != null) {
|
|
||||||
statusesVM.getContext(currentInstance, BaseMainActivity.currentToken, statusReplyId)
|
|
||||||
.observe(ComposeActivity.this, statusContext -> {
|
|
||||||
if (statusContext != null) {
|
|
||||||
initializeContextRedraftView(statusContext, status1);
|
|
||||||
} else {
|
|
||||||
Helper.sendToastMessage(getApplication(), Helper.RECEIVE_TOAST_TYPE_ERROR, getString(R.string.toast_error));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
Helper.sendToastMessage(getApplication(), Helper.RECEIVE_TOAST_TYPE_ERROR, getString(R.string.toast_error));
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} else if (statusDraft != null) {//Restore a draft with all messages
|
|
||||||
if (statusDraft.statusReplyList != null) {
|
|
||||||
statusList.addAll(statusDraft.statusReplyList);
|
|
||||||
binding.recyclerView.addItemDecoration(new DividerDecorationSimple(ComposeActivity.this, statusList));
|
|
||||||
}
|
|
||||||
int statusCount = statusList.size();
|
|
||||||
statusList.addAll(statusDraft.statusDraftList);
|
|
||||||
composeAdapter = new ComposeAdapter(statusList, statusCount, account, accountMention, visibility);
|
|
||||||
composeAdapter.manageDrafts = this;
|
|
||||||
LinearLayoutManager mLayoutManager = new LinearLayoutManager(ComposeActivity.this);
|
|
||||||
binding.recyclerView.setLayoutManager(mLayoutManager);
|
|
||||||
binding.recyclerView.setAdapter(composeAdapter);
|
|
||||||
binding.recyclerView.scrollToPosition(composeAdapter.getItemCount() - 1);
|
|
||||||
|
|
||||||
} else if (statusReply != null) {
|
|
||||||
statusList.add(statusReply);
|
|
||||||
int statusCount = statusList.size();
|
|
||||||
statusDraftList.get(0).in_reply_to_id = statusReply.id;
|
|
||||||
//We change order for mentions
|
|
||||||
//At first place the account that has been mentioned if it's not our
|
|
||||||
statusDraftList.get(0).mentions = new ArrayList<>();
|
|
||||||
if (statusReply.account.acct != null && !statusReply.account.acct.equalsIgnoreCase(currentAccount.mastodon_account.acct)) {
|
|
||||||
Mention mention = new Mention();
|
|
||||||
mention.acct = "@" + statusReply.account.acct;
|
|
||||||
mention.url = statusReply.account.url;
|
|
||||||
mention.username = statusReply.account.username;
|
|
||||||
statusDraftList.get(0).mentions.add(mention);
|
|
||||||
}
|
|
||||||
|
|
||||||
//There are other mentions to
|
|
||||||
if (statusReply.mentions != null && statusReply.mentions.size() > 0) {
|
|
||||||
for (Mention mentionTmp : statusReply.mentions) {
|
|
||||||
if (statusReply.account.acct != null && !mentionTmp.acct.equalsIgnoreCase(statusReply.account.acct) && !mentionTmp.acct.equalsIgnoreCase(currentAccount.mastodon_account.acct)) {
|
|
||||||
statusDraftList.get(0).mentions.add(mentionTmp);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (mentionBooster != null) {
|
|
||||||
Mention mention = new Mention();
|
|
||||||
mention.acct = mentionBooster.acct;
|
|
||||||
mention.url = mentionBooster.url;
|
|
||||||
mention.username = mentionBooster.username;
|
|
||||||
boolean present = false;
|
|
||||||
for (Mention mentionTmp : statusDraftList.get(0).mentions) {
|
|
||||||
if (mentionTmp.acct.equalsIgnoreCase(mentionBooster.acct)) {
|
|
||||||
present = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!present) {
|
|
||||||
statusDraftList.get(0).mentions.add(mention);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (statusReply.spoiler_text != null) {
|
|
||||||
statusDraftList.get(0).spoiler_text = statusReply.spoiler_text;
|
|
||||||
}
|
|
||||||
//StatusDraftList at this point should only have one element
|
|
||||||
statusList.addAll(statusDraftList);
|
|
||||||
composeAdapter = new ComposeAdapter(statusList, statusCount, account, accountMention, visibility);
|
|
||||||
composeAdapter.manageDrafts = this;
|
|
||||||
LinearLayoutManager mLayoutManager = new LinearLayoutManager(ComposeActivity.this);
|
|
||||||
binding.recyclerView.setLayoutManager(mLayoutManager);
|
|
||||||
binding.recyclerView.setAdapter(composeAdapter);
|
|
||||||
statusesVM.getContext(currentInstance, BaseMainActivity.currentToken, statusReply.id)
|
|
||||||
.observe(ComposeActivity.this, this::initializeContextView);
|
|
||||||
} else {
|
|
||||||
//Compose without replying
|
|
||||||
statusList.addAll(statusDraftList);
|
|
||||||
composeAdapter = new ComposeAdapter(statusList, 0, account, accountMention, visibility);
|
|
||||||
composeAdapter.manageDrafts = this;
|
|
||||||
LinearLayoutManager mLayoutManager = new LinearLayoutManager(ComposeActivity.this);
|
|
||||||
binding.recyclerView.setLayoutManager(mLayoutManager);
|
|
||||||
binding.recyclerView.setAdapter(composeAdapter);
|
|
||||||
if (statusMention != null) {
|
|
||||||
composeAdapter.loadMentions(statusMention);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
MastodonHelper.loadPPMastodon(binding.profilePicture, account.mastodon_account);
|
|
||||||
LocalBroadcastManager.getInstance(this)
|
|
||||||
.registerReceiver(imageReceiver,
|
|
||||||
new IntentFilter(Helper.INTENT_SEND_MODIFIED_IMAGE));
|
|
||||||
|
|
||||||
if (timer != null) {
|
|
||||||
timer.scheduleAtFixedRate(new TimerTask() {
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
storeDraft(false);
|
|
||||||
}
|
|
||||||
}, 0, 10000);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (sharedUriList != null && sharedUriList.size() > 0) {
|
|
||||||
|
|
||||||
Handler handler = new Handler();
|
|
||||||
handler.postDelayed(() -> {
|
|
||||||
List<Uri> uris = new ArrayList<>(sharedUriList);
|
|
||||||
composeAdapter.addAttachment(-1, uris);
|
|
||||||
}, 1000);
|
|
||||||
} else if (sharedUri != null && !sharedUri.toString().startsWith("http")) {
|
|
||||||
Handler handler = new Handler();
|
|
||||||
handler.postDelayed(() -> {
|
|
||||||
List<Uri> uris = new ArrayList<>();
|
|
||||||
uris.add(sharedUri);
|
|
||||||
composeAdapter.addAttachment(-1, uris);
|
|
||||||
}, 1000);
|
|
||||||
} else if (shareURL != null) {
|
|
||||||
Helper.download(ComposeActivity.this, sharedUrlMedia, new OnDownloadInterface() {
|
|
||||||
@Override
|
|
||||||
public void onDownloaded(String saveFilePath, String downloadUrl, Error error) {
|
|
||||||
composeAdapter.addSharing(shareURL, sharedTitle, sharedDescription, sharedSubject, sharedContent, saveFilePath);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onUpdateProgress(int progress) {
|
|
||||||
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
} else {
|
|
||||||
if (composeAdapter != null) {
|
|
||||||
composeAdapter.addSharing(null, null, sharedDescription, null, sharedContent, null);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
return 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -671,6 +437,285 @@ public class ComposeActivity extends BaseActivity implements ComposeAdapter.Mana
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static String visibilityToString(int visibility) {
|
||||||
|
switch (visibility) {
|
||||||
|
case 3:
|
||||||
|
return "public";
|
||||||
|
case 2:
|
||||||
|
return "unlisted";
|
||||||
|
case 1:
|
||||||
|
return "private";
|
||||||
|
case 0:
|
||||||
|
return "direct";
|
||||||
|
}
|
||||||
|
return "public";
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String getVisibility(String defaultVisibility) {
|
||||||
|
int tootVisibility = visibilityToNumber(defaultVisibility);
|
||||||
|
if (currentAccount != null) {
|
||||||
|
int userVisibility = visibilityToNumber(currentAccount.mastodon_account.source.privacy);
|
||||||
|
if (tootVisibility > userVisibility) {
|
||||||
|
return visibilityToString(userVisibility);
|
||||||
|
} else {
|
||||||
|
return visibilityToString(tootVisibility);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return defaultVisibility;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
ThemeHelper.applyTheme(this);
|
||||||
|
binding = ActivityPaginationBinding.inflate(getLayoutInflater());
|
||||||
|
setContentView(binding.getRoot());
|
||||||
|
setSupportActionBar(binding.toolbar);
|
||||||
|
ActionBar actionBar = getSupportActionBar();
|
||||||
|
//Fake id given to drafts
|
||||||
|
composeID = 1;
|
||||||
|
//Remove title
|
||||||
|
if (actionBar != null) {
|
||||||
|
actionBar.setDisplayShowTitleEnabled(false);
|
||||||
|
actionBar.setBackgroundDrawable(new ColorDrawable(ContextCompat.getColor(this, R.color.cyanea_primary)));
|
||||||
|
}
|
||||||
|
if (getSupportActionBar() != null) {
|
||||||
|
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||||
|
getSupportActionBar().setDisplayShowHomeEnabled(true);
|
||||||
|
}
|
||||||
|
statusList = new ArrayList<>();
|
||||||
|
Bundle b = getIntent().getExtras();
|
||||||
|
if (b != null) {
|
||||||
|
statusReply = (Status) b.getSerializable(Helper.ARG_STATUS_REPLY);
|
||||||
|
statusDraft = (StatusDraft) b.getSerializable(Helper.ARG_STATUS_DRAFT);
|
||||||
|
scheduledStatus = (ScheduledStatus) b.getSerializable(Helper.ARG_STATUS_SCHEDULED);
|
||||||
|
statusReplyId = b.getString(Helper.ARG_STATUS_REPLY_ID);
|
||||||
|
statusMention = (Status) b.getSerializable(Helper.ARG_STATUS_MENTION);
|
||||||
|
account = (BaseAccount) b.getSerializable(Helper.ARG_ACCOUNT);
|
||||||
|
instance = b.getString(Helper.ARG_INSTANCE, null);
|
||||||
|
token = b.getString(Helper.ARG_TOKEN, null);
|
||||||
|
visibility = b.getString(Helper.ARG_VISIBILITY, null);
|
||||||
|
if (visibility == null && statusReply != null) {
|
||||||
|
visibility = getVisibility(statusReply.visibility);
|
||||||
|
} else if (visibility == null && currentAccount != null) {
|
||||||
|
visibility = currentAccount.mastodon_account.source.privacy;
|
||||||
|
}
|
||||||
|
mentionBooster = (app.fedilab.android.client.entities.api.Account) b.getSerializable(Helper.ARG_MENTION_BOOSTER);
|
||||||
|
accountMention = (app.fedilab.android.client.entities.api.Account) b.getSerializable(Helper.ARG_ACCOUNT_MENTION);
|
||||||
|
//Shared elements
|
||||||
|
sharedUriList = b.getParcelableArrayList(Helper.ARG_SHARE_URI_LIST);
|
||||||
|
sharedUri = b.getParcelable(Helper.ARG_SHARE_URI);
|
||||||
|
sharedUrlMedia = b.getString(Helper.ARG_SHARE_URL_MEDIA);
|
||||||
|
sharedSubject = b.getString(Helper.ARG_SHARE_SUBJECT, null);
|
||||||
|
sharedContent = b.getString(Helper.ARG_SHARE_CONTENT, null);
|
||||||
|
sharedTitle = b.getString(Helper.ARG_SHARE_TITLE, null);
|
||||||
|
sharedDescription = b.getString(Helper.ARG_SHARE_DESCRIPTION, null);
|
||||||
|
shareURL = b.getString(Helper.ARG_SHARE_URL, null);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
binding.toolbar.setPopupTheme(Helper.popupStyle());
|
||||||
|
//Edit a scheduled status from server
|
||||||
|
if (scheduledStatus != null) {
|
||||||
|
statusDraft = new StatusDraft();
|
||||||
|
List<Status> statuses = new ArrayList<>();
|
||||||
|
Status status = new Status();
|
||||||
|
status.text = scheduledStatus.params.text;
|
||||||
|
status.in_reply_to_id = scheduledStatus.params.in_reply_to_id;
|
||||||
|
status.poll = scheduledStatus.params.poll;
|
||||||
|
|
||||||
|
if (scheduledStatus.params.media_ids != null && scheduledStatus.params.media_ids.size() > 0) {
|
||||||
|
status.media_attachments = new ArrayList<>();
|
||||||
|
new Thread(() -> {
|
||||||
|
StatusesVM statusesVM = new ViewModelProvider(ComposeActivity.this).get(StatusesVM.class);
|
||||||
|
for (String attachmentId : scheduledStatus.params.media_ids) {
|
||||||
|
statusesVM.getAttachment(instance, token, attachmentId)
|
||||||
|
.observe(ComposeActivity.this, attachment -> status.media_attachments.add(attachment));
|
||||||
|
}
|
||||||
|
}).start();
|
||||||
|
}
|
||||||
|
status.sensitive = scheduledStatus.params.sensitive;
|
||||||
|
status.spoiler_text = scheduledStatus.params.spoiler_text;
|
||||||
|
status.visibility = scheduledStatus.params.visibility;
|
||||||
|
statusDraft.statusDraftList = statuses;
|
||||||
|
}
|
||||||
|
if (account == null) {
|
||||||
|
account = currentAccount;
|
||||||
|
}
|
||||||
|
if (account == null) {
|
||||||
|
Toasty.error(ComposeActivity.this, getString(R.string.toast_error), Toasty.LENGTH_SHORT).show();
|
||||||
|
finish();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (instance == null) {
|
||||||
|
instance = account.instance;
|
||||||
|
}
|
||||||
|
if (token == null) {
|
||||||
|
token = account.token;
|
||||||
|
}
|
||||||
|
if (emojis == null || !emojis.containsKey(currentInstance)) {
|
||||||
|
new Thread(() -> {
|
||||||
|
try {
|
||||||
|
emojis.put(currentInstance, new EmojiInstance(ComposeActivity.this).getEmojiList(currentInstance));
|
||||||
|
} catch (DBException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}).start();
|
||||||
|
}
|
||||||
|
final SharedPreferences sharedpreferences = PreferenceManager.getDefaultSharedPreferences(ComposeActivity.this);
|
||||||
|
if (MainActivity.instanceInfo == null) {
|
||||||
|
String instanceInfo = sharedpreferences.getString(getString(R.string.INSTANCE_INFO) + instance, null);
|
||||||
|
if (instanceInfo != null) {
|
||||||
|
MainActivity.instanceInfo = Instance.restore(instanceInfo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
StatusesVM statusesVM = new ViewModelProvider(ComposeActivity.this).get(StatusesVM.class);
|
||||||
|
//Empty compose
|
||||||
|
List<Status> statusDraftList = new ArrayList<>();
|
||||||
|
Status status = new Status();
|
||||||
|
statusDraftList.add(status);
|
||||||
|
|
||||||
|
if (statusReplyId != null && statusDraft != null) {//Delete and redraft
|
||||||
|
statusesVM.getStatus(currentInstance, BaseMainActivity.currentToken, statusReplyId)
|
||||||
|
.observe(ComposeActivity.this, status1 -> {
|
||||||
|
if (status1 != null) {
|
||||||
|
statusesVM.getContext(currentInstance, BaseMainActivity.currentToken, statusReplyId)
|
||||||
|
.observe(ComposeActivity.this, statusContext -> {
|
||||||
|
if (statusContext != null) {
|
||||||
|
initializeContextRedraftView(statusContext, status1);
|
||||||
|
} else {
|
||||||
|
Helper.sendToastMessage(getApplication(), Helper.RECEIVE_TOAST_TYPE_ERROR, getString(R.string.toast_error));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
Helper.sendToastMessage(getApplication(), Helper.RECEIVE_TOAST_TYPE_ERROR, getString(R.string.toast_error));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else if (statusDraft != null) {//Restore a draft with all messages
|
||||||
|
if (statusDraft.statusReplyList != null) {
|
||||||
|
statusList.addAll(statusDraft.statusReplyList);
|
||||||
|
binding.recyclerView.addItemDecoration(new DividerDecorationSimple(ComposeActivity.this, statusList));
|
||||||
|
}
|
||||||
|
int statusCount = statusList.size();
|
||||||
|
statusList.addAll(statusDraft.statusDraftList);
|
||||||
|
composeAdapter = new ComposeAdapter(statusList, statusCount, account, accountMention, visibility);
|
||||||
|
composeAdapter.manageDrafts = this;
|
||||||
|
LinearLayoutManager mLayoutManager = new LinearLayoutManager(ComposeActivity.this);
|
||||||
|
binding.recyclerView.setLayoutManager(mLayoutManager);
|
||||||
|
binding.recyclerView.setAdapter(composeAdapter);
|
||||||
|
binding.recyclerView.scrollToPosition(composeAdapter.getItemCount() - 1);
|
||||||
|
|
||||||
|
} else if (statusReply != null) {
|
||||||
|
statusList.add(statusReply);
|
||||||
|
int statusCount = statusList.size();
|
||||||
|
statusDraftList.get(0).in_reply_to_id = statusReply.id;
|
||||||
|
//We change order for mentions
|
||||||
|
//At first place the account that has been mentioned if it's not our
|
||||||
|
statusDraftList.get(0).mentions = new ArrayList<>();
|
||||||
|
if (statusReply.account.acct != null && !statusReply.account.acct.equalsIgnoreCase(currentAccount.mastodon_account.acct)) {
|
||||||
|
Mention mention = new Mention();
|
||||||
|
mention.acct = "@" + statusReply.account.acct;
|
||||||
|
mention.url = statusReply.account.url;
|
||||||
|
mention.username = statusReply.account.username;
|
||||||
|
statusDraftList.get(0).mentions.add(mention);
|
||||||
|
}
|
||||||
|
|
||||||
|
//There are other mentions to
|
||||||
|
if (statusReply.mentions != null && statusReply.mentions.size() > 0) {
|
||||||
|
for (Mention mentionTmp : statusReply.mentions) {
|
||||||
|
if (statusReply.account.acct != null && !mentionTmp.acct.equalsIgnoreCase(statusReply.account.acct) && !mentionTmp.acct.equalsIgnoreCase(currentAccount.mastodon_account.acct)) {
|
||||||
|
statusDraftList.get(0).mentions.add(mentionTmp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (mentionBooster != null) {
|
||||||
|
Mention mention = new Mention();
|
||||||
|
mention.acct = mentionBooster.acct;
|
||||||
|
mention.url = mentionBooster.url;
|
||||||
|
mention.username = mentionBooster.username;
|
||||||
|
boolean present = false;
|
||||||
|
for (Mention mentionTmp : statusDraftList.get(0).mentions) {
|
||||||
|
if (mentionTmp.acct.equalsIgnoreCase(mentionBooster.acct)) {
|
||||||
|
present = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!present) {
|
||||||
|
statusDraftList.get(0).mentions.add(mention);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (statusReply.spoiler_text != null) {
|
||||||
|
statusDraftList.get(0).spoiler_text = statusReply.spoiler_text;
|
||||||
|
}
|
||||||
|
//StatusDraftList at this point should only have one element
|
||||||
|
statusList.addAll(statusDraftList);
|
||||||
|
composeAdapter = new ComposeAdapter(statusList, statusCount, account, accountMention, visibility);
|
||||||
|
composeAdapter.manageDrafts = this;
|
||||||
|
LinearLayoutManager mLayoutManager = new LinearLayoutManager(ComposeActivity.this);
|
||||||
|
binding.recyclerView.setLayoutManager(mLayoutManager);
|
||||||
|
binding.recyclerView.setAdapter(composeAdapter);
|
||||||
|
statusesVM.getContext(currentInstance, BaseMainActivity.currentToken, statusReply.id)
|
||||||
|
.observe(ComposeActivity.this, this::initializeContextView);
|
||||||
|
} else {
|
||||||
|
//Compose without replying
|
||||||
|
statusList.addAll(statusDraftList);
|
||||||
|
composeAdapter = new ComposeAdapter(statusList, 0, account, accountMention, visibility);
|
||||||
|
composeAdapter.manageDrafts = this;
|
||||||
|
LinearLayoutManager mLayoutManager = new LinearLayoutManager(ComposeActivity.this);
|
||||||
|
binding.recyclerView.setLayoutManager(mLayoutManager);
|
||||||
|
binding.recyclerView.setAdapter(composeAdapter);
|
||||||
|
if (statusMention != null) {
|
||||||
|
composeAdapter.loadMentions(statusMention);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
MastodonHelper.loadPPMastodon(binding.profilePicture, account.mastodon_account);
|
||||||
|
LocalBroadcastManager.getInstance(this)
|
||||||
|
.registerReceiver(imageReceiver,
|
||||||
|
new IntentFilter(Helper.INTENT_SEND_MODIFIED_IMAGE));
|
||||||
|
|
||||||
|
if (timer != null) {
|
||||||
|
timer.scheduleAtFixedRate(new TimerTask() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
storeDraft(false);
|
||||||
|
}
|
||||||
|
}, 0, 10000);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sharedUriList != null && sharedUriList.size() > 0) {
|
||||||
|
|
||||||
|
Handler handler = new Handler();
|
||||||
|
handler.postDelayed(() -> {
|
||||||
|
List<Uri> uris = new ArrayList<>(sharedUriList);
|
||||||
|
composeAdapter.addAttachment(-1, uris);
|
||||||
|
}, 1000);
|
||||||
|
} else if (sharedUri != null && !sharedUri.toString().startsWith("http")) {
|
||||||
|
Handler handler = new Handler();
|
||||||
|
handler.postDelayed(() -> {
|
||||||
|
List<Uri> uris = new ArrayList<>();
|
||||||
|
uris.add(sharedUri);
|
||||||
|
composeAdapter.addAttachment(-1, uris);
|
||||||
|
}, 1000);
|
||||||
|
} else if (shareURL != null) {
|
||||||
|
Helper.download(ComposeActivity.this, sharedUrlMedia, new OnDownloadInterface() {
|
||||||
|
@Override
|
||||||
|
public void onDownloaded(String saveFilePath, String downloadUrl, Error error) {
|
||||||
|
composeAdapter.addSharing(shareURL, sharedTitle, sharedDescription, sharedSubject, sharedContent, saveFilePath);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onUpdateProgress(int progress) {
|
||||||
|
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
} else {
|
||||||
|
if (composeAdapter != null) {
|
||||||
|
composeAdapter.addSharing(null, null, sharedDescription, null, sharedContent, null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onItemDraftAdded(int position) {
|
public void onItemDraftAdded(int position) {
|
||||||
|
@ -678,7 +723,7 @@ public class ComposeActivity extends BaseActivity implements ComposeAdapter.Mana
|
||||||
composeID++;
|
composeID++;
|
||||||
status.id = String.valueOf(composeID);
|
status.id = String.valueOf(composeID);
|
||||||
status.mentions = statusList.get(position).mentions;
|
status.mentions = statusList.get(position).mentions;
|
||||||
status.visibility = statusList.get(position).visibility;
|
status.visibility = getVisibility(statusList.get(position).visibility);
|
||||||
status.spoiler_text = statusList.get(position).spoiler_text;
|
status.spoiler_text = statusList.get(position).spoiler_text;
|
||||||
status.sensitive = statusList.get(position).sensitive;
|
status.sensitive = statusList.get(position).sensitive;
|
||||||
statusList.add(status);
|
statusList.add(status);
|
||||||
|
|
Loading…
Reference in New Issue