Allow to edit scheduled messages from server side

This commit is contained in:
Thomas 2025-02-21 11:32:34 +01:00
parent 92eb1ea3d1
commit 7d9d2346cc
7 changed files with 142 additions and 86 deletions

View file

@ -17,6 +17,7 @@ package app.fedilab.android.mastodon.activities;
import static app.fedilab.android.BaseMainActivity.currentInstance; import static app.fedilab.android.BaseMainActivity.currentInstance;
import static app.fedilab.android.BaseMainActivity.emojis; import static app.fedilab.android.BaseMainActivity.emojis;
import static app.fedilab.android.mastodon.helper.Helper.TAG;
import android.Manifest; import android.Manifest;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
@ -34,6 +35,7 @@ import android.os.Looper;
import android.text.Editable; import android.text.Editable;
import android.text.InputFilter; import android.text.InputFilter;
import android.text.TextWatcher; import android.text.TextWatcher;
import android.util.Log;
import android.util.TypedValue; import android.util.TypedValue;
import android.view.Menu; import android.view.Menu;
import android.view.MenuItem; import android.view.MenuItem;
@ -129,7 +131,7 @@ public class ComposeActivity extends BaseActivity implements ComposeAdapter.Mana
if (imgpath != null) { if (imgpath != null) {
int position = 0; int position = 0;
for (Status status : statusList) { for (Status status : statusList) {
if (status.media_attachments != null && status.media_attachments.size() > 0) { if (status.media_attachments != null && !status.media_attachments.isEmpty()) {
for (Attachment attachment : status.media_attachments) { for (Attachment attachment : status.media_attachments) {
if (attachment.local_path != null && attachment.local_path.equalsIgnoreCase(imgpath)) { if (attachment.local_path != null && attachment.local_path.equalsIgnoreCase(imgpath)) {
if (focusX != -2) { if (focusX != -2) {
@ -552,7 +554,7 @@ public class ComposeActivity extends BaseActivity implements ComposeAdapter.Mana
status.in_reply_to_id = scheduledStatus.params.in_reply_to_id; status.in_reply_to_id = scheduledStatus.params.in_reply_to_id;
status.poll = scheduledStatus.params.poll; status.poll = scheduledStatus.params.poll;
if (scheduledStatus.params.media_ids != null && scheduledStatus.params.media_ids.size() > 0) { if (scheduledStatus.params.media_ids != null && !scheduledStatus.params.media_ids.isEmpty()) {
status.media_attachments = new ArrayList<>(); status.media_attachments = new ArrayList<>();
new Thread(() -> { new Thread(() -> {
StatusesVM statusesVM = new ViewModelProvider(ComposeActivity.this).get(StatusesVM.class); StatusesVM statusesVM = new ViewModelProvider(ComposeActivity.this).get(StatusesVM.class);
@ -565,6 +567,7 @@ public class ComposeActivity extends BaseActivity implements ComposeAdapter.Mana
status.sensitive = scheduledStatus.params.sensitive; status.sensitive = scheduledStatus.params.sensitive;
status.spoiler_text = scheduledStatus.params.spoiler_text; status.spoiler_text = scheduledStatus.params.spoiler_text;
status.visibility = scheduledStatus.params.visibility; status.visibility = scheduledStatus.params.visibility;
statuses.add(status);
statusDraft.statusDraftList = statuses; statusDraft.statusDraftList = statuses;
} }
if (account == null) { if (account == null) {
@ -753,7 +756,7 @@ public class ComposeActivity extends BaseActivity implements ComposeAdapter.Mana
}, 0, 10000); }, 0, 10000);
} }
if (sharedAttachments != null && sharedAttachments.size() > 0) { if (sharedAttachments != null && !sharedAttachments.isEmpty()) {
for (Attachment attachment : sharedAttachments) { for (Attachment attachment : sharedAttachments) {
composeAdapter.addAttachment(-1, attachment); composeAdapter.addAttachment(-1, attachment);
} }
@ -844,7 +847,12 @@ public class ComposeActivity extends BaseActivity implements ComposeAdapter.Mana
private void storeDraft(boolean sendMessage) { private void storeDraft(boolean sendMessage) {
storeDraft(sendMessage, null); String scheduledDate = null;
if(scheduledStatus != null && scheduledStatus.scheduled_at != null) {
SimpleDateFormat sdf = new SimpleDateFormat(Helper.SCHEDULE_DATE_FORMAT, Locale.getDefault());
scheduledDate = sdf.format(scheduledStatus.scheduled_at.getTime());
}
storeDraft(sendMessage, scheduledDate);
} }
private void storeDraft(boolean sendMessage, String scheduledDate) { private void storeDraft(boolean sendMessage, String scheduledDate) {
@ -869,11 +877,11 @@ public class ComposeActivity extends BaseActivity implements ComposeAdapter.Mana
WorkManager.getInstance(ComposeActivity.this).cancelWorkById(statusDraft.workerUuid); WorkManager.getInstance(ComposeActivity.this).cancelWorkById(statusDraft.workerUuid);
} }
} }
if (statusReplies.size() > 0) { if (!statusReplies.isEmpty()) {
statusDraft.statusReplyList = new ArrayList<>(); statusDraft.statusReplyList = new ArrayList<>();
statusDraft.statusReplyList.addAll(statusReplies); statusDraft.statusReplyList.addAll(statusReplies);
} }
if (statusDrafts.size() > 0) { if (!statusDrafts.isEmpty()) {
statusDraft.statusDraftList = new ArrayList<>(); statusDraft.statusDraftList = new ArrayList<>();
statusDraft.statusDraftList.addAll(statusDrafts); statusDraft.statusDraftList.addAll(statusDrafts);
} }
@ -906,7 +914,7 @@ public class ComposeActivity extends BaseActivity implements ComposeAdapter.Mana
} else { } else {
Toasty.info(ComposeActivity.this, getString(R.string.toot_error_no_content), Toasty.LENGTH_SHORT).show(); Toasty.info(ComposeActivity.this, getString(R.string.toot_error_no_content), Toasty.LENGTH_SHORT).show();
} }
if (statusDrafts.size() > 0) { if (!statusDrafts.isEmpty()) {
statusDrafts.get(statusDrafts.size() - 1).submitted = false; statusDrafts.get(statusDrafts.size() - 1).submitted = false;
composeAdapter.notifyItemChanged(statusList.size() - 1); composeAdapter.notifyItemChanged(statusList.size() - 1);
} }
@ -979,12 +987,14 @@ public class ComposeActivity extends BaseActivity implements ComposeAdapter.Mana
mediaCount += status.media_attachments != null ? status.media_attachments.size() : 0; mediaCount += status.media_attachments != null ? status.media_attachments.size() : 0;
} }
if (mediaCount > 0) { if (mediaCount > 0) {
String scheduledStatusId = scheduledStatus!=null&&scheduledStatus.id!=null?scheduledStatus.id:null;
Data inputData = new Data.Builder() Data inputData = new Data.Builder()
.putString(Helper.ARG_STATUS_DRAFT_ID, String.valueOf(statusDraft.id)) .putString(Helper.ARG_STATUS_DRAFT_ID, String.valueOf(statusDraft.id))
.putString(Helper.ARG_INSTANCE, instance) .putString(Helper.ARG_INSTANCE, instance)
.putString(Helper.ARG_TOKEN, token) .putString(Helper.ARG_TOKEN, token)
.putString(Helper.ARG_EDIT_STATUS_ID, editMessageId) .putString(Helper.ARG_EDIT_STATUS_ID, editMessageId)
.putString(Helper.ARG_USER_ID, account.user_id) .putString(Helper.ARG_USER_ID, account.user_id)
.putString(Helper.ARG_SCHEDULED_ID, scheduledStatusId)
.putString(Helper.ARG_SCHEDULED_DATE, scheduledDate).build(); .putString(Helper.ARG_SCHEDULED_DATE, scheduledDate).build();
OneTimeWorkRequest request = new OneTimeWorkRequest.Builder(ComposeWorker.class) OneTimeWorkRequest request = new OneTimeWorkRequest.Builder(ComposeWorker.class)
.setInputData(inputData) .setInputData(inputData)
@ -993,7 +1003,8 @@ public class ComposeActivity extends BaseActivity implements ComposeAdapter.Mana
WorkManager.getInstance(ComposeActivity.this).enqueue(request); WorkManager.getInstance(ComposeActivity.this).enqueue(request);
} else { } else {
new ThreadMessageService(ComposeActivity.this, instance, account.user_id, token, statusDraft, scheduledDate, editMessageId); String scheduledStatusId = scheduledStatus!=null&&scheduledStatus.id!=null?scheduledStatus.id:null;
new ThreadMessageService(ComposeActivity.this, instance, account.user_id, token, statusDraft, scheduledDate, editMessageId, scheduledStatusId);
} }
finish(); finish();
} }

View file

@ -294,6 +294,7 @@ public class Helper {
public static final String ARG_MEDIA_ARRAY_PROFILE = "ARG_MEDIA_ARRAY_PROFILE"; public static final String ARG_MEDIA_ARRAY_PROFILE = "ARG_MEDIA_ARRAY_PROFILE";
public static final String ARG_VISIBILITY = "ARG_VISIBILITY"; public static final String ARG_VISIBILITY = "ARG_VISIBILITY";
public static final String ARG_SCHEDULED_DATE = "ARG_SCHEDULED_DATE"; public static final String ARG_SCHEDULED_DATE = "ARG_SCHEDULED_DATE";
public static final String ARG_SCHEDULED_ID = "ARG_SCHEDULED_ID";
public static final String WORKER_REFRESH_NOTIFICATION = "WORKER_REFRESH_NOTIFICATION"; public static final String WORKER_REFRESH_NOTIFICATION = "WORKER_REFRESH_NOTIFICATION";
public static final String WORKER_REFRESH_HOME = "WORKER_REFRESH_HOME"; public static final String WORKER_REFRESH_HOME = "WORKER_REFRESH_HOME";

View file

@ -16,6 +16,7 @@ package app.fedilab.android.mastodon.jobs;
import static android.content.Context.NOTIFICATION_SERVICE; import static android.content.Context.NOTIFICATION_SERVICE;
import android.app.IntentService; import android.app.IntentService;
import android.app.Notification; import android.app.Notification;
import android.app.NotificationChannel; import android.app.NotificationChannel;
@ -114,7 +115,7 @@ public class ComposeWorker extends Worker {
MastodonStatusesService mastodonStatusesService = init(context, dataPost.instance); MastodonStatusesService mastodonStatusesService = init(context, dataPost.instance);
boolean error = false; boolean error = false;
Status firstSendMessage = null; Status firstSendMessage = null;
if (dataPost.statusDraft != null && dataPost.statusDraft.statusDraftList != null && dataPost.statusDraft.statusDraftList.size() > 0) { if (dataPost.statusDraft != null && dataPost.statusDraft.statusDraftList != null && !dataPost.statusDraft.statusDraftList.isEmpty()) {
//If state is null, it is created (typically when submitting the status the first time) //If state is null, it is created (typically when submitting the status the first time)
if (dataPost.statusDraft.state == null) { if (dataPost.statusDraft.state == null) {
dataPost.statusDraft.state = new PostState(); dataPost.statusDraft.state = new PostState();
@ -137,7 +138,7 @@ public class ComposeWorker extends Worker {
List<Status> statuses = dataPost.statusDraft.statusDraftList; List<Status> statuses = dataPost.statusDraft.statusDraftList;
String in_reply_to_status = null; String in_reply_to_status = null;
if (dataPost.statusDraft.statusReplyList != null && dataPost.statusDraft.statusReplyList.size() > 0) { if (dataPost.statusDraft.statusReplyList != null && !dataPost.statusDraft.statusReplyList.isEmpty()) {
in_reply_to_status = dataPost.statusDraft.statusReplyList.get(dataPost.statusDraft.statusReplyList.size() - 1).id; in_reply_to_status = dataPost.statusDraft.statusReplyList.get(dataPost.statusDraft.statusReplyList.size() - 1).id;
} }
totalMediaSize = 0; totalMediaSize = 0;
@ -146,13 +147,13 @@ public class ComposeWorker extends Worker {
boolean watermark = sharedPreferences.getBoolean(context.getString(R.string.SET_WATERMARK), false); boolean watermark = sharedPreferences.getBoolean(context.getString(R.string.SET_WATERMARK), false);
String watermarkText = sharedPreferences.getString(context.getString(R.string.SET_WATERMARK_TEXT) + BaseMainActivity.currentUserID + BaseMainActivity.currentInstance, null); String watermarkText = sharedPreferences.getString(context.getString(R.string.SET_WATERMARK_TEXT) + BaseMainActivity.currentUserID + BaseMainActivity.currentInstance, null);
for (int i = startingPosition; i < statuses.size(); i++) { for (int i = startingPosition; i < statuses.size(); i++) {
if (statuses.get(i).media_attachments != null && statuses.get(i).media_attachments.size() > 0) { if (statuses.get(i).media_attachments != null && !statuses.get(i).media_attachments.isEmpty()) {
for (Attachment attachment : statuses.get(i).media_attachments) { for (Attachment attachment : statuses.get(i).media_attachments) {
totalMediaSize += attachment.size; totalMediaSize += attachment.size;
} }
} }
} }
if (watermarkText == null || watermarkText.trim().length() == 0) { if (watermarkText == null || watermarkText.trim().isEmpty()) {
try { try {
BaseAccount account = new Account(context).getAccountByToken(dataPost.token); BaseAccount account = new Account(context).getAccountByToken(dataPost.token);
watermarkText = account.mastodon_account.username + "@" + account.instance; watermarkText = account.mastodon_account.username + "@" + account.instance;
@ -174,7 +175,7 @@ public class ComposeWorker extends Worker {
} }
//post media first //post media first
List<String> attachmentIds = null; List<String> attachmentIds = null;
if (statuses.get(i).media_attachments != null && statuses.get(i).media_attachments.size() > 0) { if (statuses.get(i).media_attachments != null && !statuses.get(i).media_attachments.isEmpty()) {
attachmentIds = new ArrayList<>(); attachmentIds = new ArrayList<>();
for (Attachment attachment : statuses.get(i).media_attachments) { for (Attachment attachment : statuses.get(i).media_attachments) {
if (attachment.id != null) { if (attachment.id != null) {
@ -248,7 +249,7 @@ public class ComposeWorker extends Worker {
statuses.get(i).text += " \uD83D\uDC41"; statuses.get(i).text += " \uD83D\uDC41";
} }
//Record tags //Record tags
if (statuses.get(i).text != null && statuses.get(i).text.length() > 0) { if (statuses.get(i).text != null && !statuses.get(i).text.isEmpty()) {
Matcher matcher = Helper.hashtagPattern.matcher(statuses.get(i).text); Matcher matcher = Helper.hashtagPattern.matcher(statuses.get(i).text);
while (matcher.find()) { while (matcher.find()) {
int matchStart = matcher.start(1); int matchStart = matcher.start(1);
@ -257,7 +258,7 @@ public class ComposeWorker extends Worker {
if (matchStart >= 0 && matchEnd < statuses.get(i).text.length()) { if (matchStart >= 0 && matchEnd < statuses.get(i).text.length()) {
String tag = statuses.get(i).text.substring(matchStart, matchEnd); String tag = statuses.get(i).text.substring(matchStart, matchEnd);
tag = tag.replace("#", ""); tag = tag.replace("#", "");
if (tag.length() > 0) { if (!tag.isEmpty()) {
try { try {
new CamelTag(context).insert(tag); new CamelTag(context).insert(tag);
} catch (DBException e) { } catch (DBException e) {
@ -363,6 +364,14 @@ public class ComposeWorker extends Worker {
return; return;
} }
} else { } else {
Call<Void> voidCall = mastodonStatusesService.deleteScheduledStatus(dataPost.token, dataPost.scheduledId);
if (voidCall != null) {
try {
voidCall.execute();
} catch (Exception e) {
e.printStackTrace();
}
}
Call<ScheduledStatus> scheduledStatusCall = mastodonStatusesService.createScheduledStatus(null, dataPost.token, statuses.get(i).text, attachmentIds, poll_options, poll_expire_in, Call<ScheduledStatus> scheduledStatusCall = mastodonStatusesService.createScheduledStatus(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(), dataPost.scheduledDate, statuses.get(i).language); 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(), dataPost.scheduledDate, statuses.get(i).language);
try { try {
@ -489,6 +498,7 @@ public class ComposeWorker extends Worker {
} }
} }
String token = inputData.getString(Helper.ARG_TOKEN); String token = inputData.getString(Helper.ARG_TOKEN);
String scheduledId = inputData.getString(Helper.ARG_SCHEDULED_ID);
String instance = inputData.getString(Helper.ARG_INSTANCE); String instance = inputData.getString(Helper.ARG_INSTANCE);
String userId = inputData.getString(Helper.ARG_USER_ID); String userId = inputData.getString(Helper.ARG_USER_ID);
String scheduledDate = inputData.getString(Helper.ARG_SCHEDULED_DATE); String scheduledDate = inputData.getString(Helper.ARG_SCHEDULED_DATE);
@ -503,6 +513,7 @@ public class ComposeWorker extends Worker {
DataPost dataPost = new DataPost(); DataPost dataPost = new DataPost();
dataPost.instance = instance; dataPost.instance = instance;
dataPost.token = token; dataPost.token = token;
dataPost.scheduledId = scheduledId;
dataPost.userId = userId; dataPost.userId = userId;
dataPost.statusDraft = statusDraft; dataPost.statusDraft = statusDraft;
dataPost.scheduledDate = scheduledDate; dataPost.scheduledDate = scheduledDate;
@ -582,6 +593,7 @@ public class ComposeWorker extends Worker {
public String instance; public String instance;
public String token; public String token;
public String userId; public String userId;
public String scheduledId;
public String statusEditId; public String statusEditId;
public StatusDraft statusDraft; public StatusDraft statusDraft;
public int messageToSend; public int messageToSend;

View file

@ -15,6 +15,7 @@ package app.fedilab.android.mastodon.services;
* see <http://www.gnu.org/licenses>. */ * see <http://www.gnu.org/licenses>. */
import android.content.Context; import android.content.Context;
import app.fedilab.android.mastodon.client.entities.app.StatusDraft; import app.fedilab.android.mastodon.client.entities.app.StatusDraft;
@ -22,7 +23,7 @@ import app.fedilab.android.mastodon.jobs.ComposeWorker;
public class ThreadMessageService { public class ThreadMessageService {
public ThreadMessageService(Context context, String instance, String userId, String token, StatusDraft statusDraft, String scheduledDate, String editMessageId) { public ThreadMessageService(Context context, String instance, String userId, String token, StatusDraft statusDraft, String scheduledDate, String editMessageId, String scheduledStatusId) {
ComposeWorker.DataPost dataPost = new ComposeWorker.DataPost(); ComposeWorker.DataPost dataPost = new ComposeWorker.DataPost();
dataPost.instance = instance; dataPost.instance = instance;
dataPost.userId = userId; dataPost.userId = userId;
@ -30,6 +31,7 @@ public class ThreadMessageService {
dataPost.scheduledDate = scheduledDate; dataPost.scheduledDate = scheduledDate;
dataPost.statusDraft = statusDraft; dataPost.statusDraft = statusDraft;
dataPost.statusEditId = editMessageId; dataPost.statusEditId = editMessageId;
dataPost.scheduledId = scheduledStatusId;
ComposeWorker.publishMessage(context, dataPost); ComposeWorker.publishMessage(context, dataPost);
} }
} }

View file

@ -17,12 +17,15 @@ package app.fedilab.android.mastodon.ui.drawer;
import static androidx.core.text.HtmlCompat.FROM_HTML_MODE_LEGACY; import static androidx.core.text.HtmlCompat.FROM_HTML_MODE_LEGACY;
import static app.fedilab.android.mastodon.helper.Helper.TAG;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.text.Html; import android.text.Html;
import android.text.SpannableString; import android.text.SpannableString;
import android.util.Log;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
@ -45,6 +48,7 @@ import app.fedilab.android.R;
import app.fedilab.android.databinding.DrawerStatusScheduledBinding; import app.fedilab.android.databinding.DrawerStatusScheduledBinding;
import app.fedilab.android.mastodon.activities.ComposeActivity; import app.fedilab.android.mastodon.activities.ComposeActivity;
import app.fedilab.android.mastodon.client.entities.api.ScheduledStatus; import app.fedilab.android.mastodon.client.entities.api.ScheduledStatus;
import app.fedilab.android.mastodon.client.entities.api.Tag;
import app.fedilab.android.mastodon.client.entities.app.CachedBundle; import app.fedilab.android.mastodon.client.entities.app.CachedBundle;
import app.fedilab.android.mastodon.client.entities.app.ScheduledBoost; import app.fedilab.android.mastodon.client.entities.app.ScheduledBoost;
import app.fedilab.android.mastodon.client.entities.app.StatusDraft; import app.fedilab.android.mastodon.client.entities.app.StatusDraft;
@ -126,10 +130,14 @@ public class StatusScheduledAdapter extends RecyclerView.Adapter<StatusScheduled
} }
holder.binding.cardviewContainer.setOnClickListener(v -> { holder.binding.cardviewContainer.setOnClickListener(v -> {
if (statusDraft != null) { if (statusDraftList != null || scheduledStatuses != null) {
Intent intent = new Intent(context, ComposeActivity.class); Intent intent = new Intent(context, ComposeActivity.class);
Bundle args = new Bundle(); Bundle args = new Bundle();
args.putSerializable(Helper.ARG_STATUS_DRAFT, statusDraft); if(statusDraftList != null) {
args.putSerializable(Helper.ARG_STATUS_DRAFT, statusDraftList.get(position));
} else {
args.putSerializable(Helper.ARG_STATUS_SCHEDULED, scheduledStatuses.get(position));
}
new CachedBundle(context).insertBundle(args, Helper.getCurrentAccount(context), bundleId -> { new CachedBundle(context).insertBundle(args, Helper.getCurrentAccount(context), bundleId -> {
Bundle bundle = new Bundle(); Bundle bundle = new Bundle();
bundle.putLong(Helper.ARG_INTENT_ID, bundleId); bundle.putLong(Helper.ARG_INTENT_ID, bundleId);
@ -149,7 +157,7 @@ public class StatusScheduledAdapter extends RecyclerView.Adapter<StatusScheduled
.observe((LifecycleOwner) context, unused -> { .observe((LifecycleOwner) context, unused -> {
if (scheduledStatuses != null) { if (scheduledStatuses != null) {
scheduledStatuses.remove(scheduledStatus); scheduledStatuses.remove(scheduledStatus);
if (scheduledStatuses.size() == 0) { if (scheduledStatuses.isEmpty()) {
scheduledActions.onAllDeleted(); scheduledActions.onAllDeleted();
} }
notifyItemRemoved(position); notifyItemRemoved(position);
@ -161,7 +169,7 @@ public class StatusScheduledAdapter extends RecyclerView.Adapter<StatusScheduled
WorkManager.getInstance(context).cancelWorkById(statusDraft.workerUuid); WorkManager.getInstance(context).cancelWorkById(statusDraft.workerUuid);
if (statusDraftList != null) { if (statusDraftList != null) {
statusDraftList.remove(statusDraft); statusDraftList.remove(statusDraft);
if (statusDraftList.size() == 0) { if (statusDraftList.isEmpty()) {
scheduledActions.onAllDeleted(); scheduledActions.onAllDeleted();
} }
notifyItemRemoved(position); notifyItemRemoved(position);
@ -175,7 +183,7 @@ public class StatusScheduledAdapter extends RecyclerView.Adapter<StatusScheduled
WorkManager.getInstance(context).cancelWorkById(scheduledBoost.workerUuid); WorkManager.getInstance(context).cancelWorkById(scheduledBoost.workerUuid);
if (scheduledBoosts != null) { if (scheduledBoosts != null) {
scheduledBoosts.remove(scheduledBoost); scheduledBoosts.remove(scheduledBoost);
if (scheduledBoosts.size() == 0) { if (scheduledBoosts.isEmpty()) {
scheduledActions.onAllDeleted(); scheduledActions.onAllDeleted();
} }
notifyItemRemoved(position); notifyItemRemoved(position);

View file

@ -277,7 +277,7 @@ public class FragmentMastodonDirectMessage extends Fragment {
WorkManager.getInstance(requireActivity()).enqueue(request); WorkManager.getInstance(requireActivity()).enqueue(request);
} else { } else {
new ThreadMessageService(requireActivity(), currentInstance, currentUserID, currentToken, statusDraft, null, null); new ThreadMessageService(requireActivity(), currentInstance, currentUserID, currentToken, statusDraft, null, null, null);
} }
}).start(); }).start();
} }

View file

@ -56,17 +56,24 @@ public class FragmentScheduled extends Fragment implements StatusScheduledAdapte
return binding.getRoot(); return binding.getRoot();
} }
@Override @Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { public void onResume() {
super.onViewCreated(view, savedInstanceState); super.onResume();
binding.loader.setVisibility(View.VISIBLE);
if (type == Timeline.TimeLineEnum.SCHEDULED_TOOT_SERVER) { if (type == Timeline.TimeLineEnum.SCHEDULED_TOOT_SERVER) {
displayScheduledServer();
} else if (type == Timeline.TimeLineEnum.SCHEDULED_TOOT_CLIENT) {
displayScheduledDevice();
} else if (type == Timeline.TimeLineEnum.SCHEDULED_BOOST) {
displayScheduledBoost();
}
}
private void displayScheduledServer() {
StatusesVM statusesVM = new ViewModelProvider(requireActivity()).get(StatusesVM.class); StatusesVM statusesVM = new ViewModelProvider(requireActivity()).get(StatusesVM.class);
statusesVM.getScheduledStatuses(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, null, null, null, MastodonHelper.statusesPerCall(requireActivity())) statusesVM.getScheduledStatuses(BaseMainActivity.currentInstance, BaseMainActivity.currentToken, null, null, null, MastodonHelper.statusesPerCall(requireActivity()))
.observe(requireActivity(), scheduledStatuses -> { .observe(requireActivity(), scheduledStatuses -> {
binding.loader.setVisibility(View.GONE); binding.loader.setVisibility(View.GONE);
if (scheduledStatuses != null && scheduledStatuses.scheduledStatuses != null && scheduledStatuses.scheduledStatuses.size() > 0) { if (scheduledStatuses != null && scheduledStatuses.scheduledStatuses != null && !scheduledStatuses.scheduledStatuses.isEmpty()) {
StatusScheduledAdapter statusScheduledAdapter = new StatusScheduledAdapter(scheduledStatuses.scheduledStatuses, null, null); StatusScheduledAdapter statusScheduledAdapter = new StatusScheduledAdapter(scheduledStatuses.scheduledStatuses, null, null);
statusScheduledAdapter.scheduledActions = FragmentScheduled.this; statusScheduledAdapter.scheduledActions = FragmentScheduled.this;
binding.recyclerView.setAdapter(statusScheduledAdapter); binding.recyclerView.setAdapter(statusScheduledAdapter);
@ -78,14 +85,16 @@ public class FragmentScheduled extends Fragment implements StatusScheduledAdapte
binding.recyclerView.setVisibility(View.GONE); binding.recyclerView.setVisibility(View.GONE);
} }
}); });
} else if (type == Timeline.TimeLineEnum.SCHEDULED_TOOT_CLIENT) { }
private void displayScheduledDevice() {
new Thread(() -> { new Thread(() -> {
try { try {
List<StatusDraft> scheduledDrafts = new StatusDraft(requireActivity()).geStatusDraftScheduledList(Helper.getCurrentAccount(requireActivity())); List<StatusDraft> scheduledDrafts = new StatusDraft(requireActivity()).geStatusDraftScheduledList(Helper.getCurrentAccount(requireActivity()));
Handler mainHandler = new Handler(Looper.getMainLooper()); Handler mainHandler = new Handler(Looper.getMainLooper());
Runnable myRunnable = () -> { Runnable myRunnable = () -> {
binding.loader.setVisibility(View.GONE); binding.loader.setVisibility(View.GONE);
if (scheduledDrafts != null && scheduledDrafts.size() > 0) { if (scheduledDrafts != null && !scheduledDrafts.isEmpty()) {
StatusScheduledAdapter statusScheduledAdapter = new StatusScheduledAdapter(null, scheduledDrafts, null); StatusScheduledAdapter statusScheduledAdapter = new StatusScheduledAdapter(null, scheduledDrafts, null);
statusScheduledAdapter.scheduledActions = FragmentScheduled.this; statusScheduledAdapter.scheduledActions = FragmentScheduled.this;
binding.recyclerView.setAdapter(statusScheduledAdapter); binding.recyclerView.setAdapter(statusScheduledAdapter);
@ -102,15 +111,16 @@ public class FragmentScheduled extends Fragment implements StatusScheduledAdapte
e.printStackTrace(); e.printStackTrace();
} }
}).start(); }).start();
}
} else if (type == Timeline.TimeLineEnum.SCHEDULED_BOOST) { private void displayScheduledBoost(){
new Thread(() -> { new Thread(() -> {
try { try {
List<ScheduledBoost> scheduledBoosts = new ScheduledBoost(requireActivity()).getScheduled(Helper.getCurrentAccount(requireActivity())); List<ScheduledBoost> scheduledBoosts = new ScheduledBoost(requireActivity()).getScheduled(Helper.getCurrentAccount(requireActivity()));
Handler mainHandler = new Handler(Looper.getMainLooper()); Handler mainHandler = new Handler(Looper.getMainLooper());
Runnable myRunnable = () -> { Runnable myRunnable = () -> {
binding.loader.setVisibility(View.GONE); binding.loader.setVisibility(View.GONE);
if (scheduledBoosts != null && scheduledBoosts.size() > 0) { if (scheduledBoosts != null && !scheduledBoosts.isEmpty()) {
StatusScheduledAdapter statusScheduledAdapter = new StatusScheduledAdapter(null, null, scheduledBoosts); StatusScheduledAdapter statusScheduledAdapter = new StatusScheduledAdapter(null, null, scheduledBoosts);
statusScheduledAdapter.scheduledActions = FragmentScheduled.this; statusScheduledAdapter.scheduledActions = FragmentScheduled.this;
binding.recyclerView.setAdapter(statusScheduledAdapter); binding.recyclerView.setAdapter(statusScheduledAdapter);
@ -129,6 +139,18 @@ public class FragmentScheduled extends Fragment implements StatusScheduledAdapte
} }
}).start(); }).start();
} }
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
binding.loader.setVisibility(View.VISIBLE);
if (type == Timeline.TimeLineEnum.SCHEDULED_TOOT_SERVER) {
displayScheduledServer();
} else if (type == Timeline.TimeLineEnum.SCHEDULED_TOOT_CLIENT) {
displayScheduledDevice();
} else if (type == Timeline.TimeLineEnum.SCHEDULED_BOOST) {
displayScheduledBoost();
}
} }
@Override @Override