From 57424931855b065b2d3ac845bd2d0ed3413ef1ee Mon Sep 17 00:00:00 2001 From: sk Date: Fri, 11 Nov 2022 16:12:26 +0100 Subject: [PATCH] re-implement redraft from upstream edit function --- .../android/fragments/ComposeFragment.java | 6 ++++-- .../displayitems/HeaderStatusDisplayItem.java | 19 +++++++++---------- .../android/ui/utils/UiUtils.java | 8 ++++++-- mastodon/src/main/res/values/strings.xml | 3 +++ 4 files changed, 22 insertions(+), 14 deletions(-) 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 be33b4393..170deb827 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/ComposeFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/ComposeFragment.java @@ -192,6 +192,7 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr private boolean attachmentsErrorShowing; private Status editingStatus; + private boolean redraftStatus; private boolean pollChanged; private boolean creatingView; private boolean ignoreSelectionChanges=false; @@ -210,6 +211,7 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr instance=AccountSessionManager.getInstance().getInstanceInfo(instanceDomain); if(getArguments().containsKey("editStatus")){ editingStatus=Parcels.unwrap(getArguments().getParcelable("editStatus")); + redraftStatus=getArguments().getBoolean("redraftStatus"); } if(instance==null){ Nav.finish(this); @@ -561,7 +563,7 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater){ publishButton=new Button(getActivity()); - publishButton.setText(editingStatus==null ? R.string.publish : R.string.save); + publishButton.setText(editingStatus==null || redraftStatus ? R.string.publish : R.string.save); publishButton.setOnClickListener(this::onPublishClick); LinearLayout wrap=new LinearLayout(getActivity()); wrap.setOrientation(LinearLayout.HORIZONTAL); @@ -722,7 +724,7 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr } }; - if(editingStatus!=null){ + if(editingStatus!=null && !redraftStatus){ new EditStatus(req, editingStatus.id) .setCallback(resCallback) .exec(accountID); diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/HeaderStatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/HeaderStatusDisplayItem.java index 0785865a0..223476c2c 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/HeaderStatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/HeaderStatusDisplayItem.java @@ -137,10 +137,11 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{ optionsMenu.setOnMenuItemClickListener(menuItem->{ Account account=item.user; int id=menuItem.getItemId(); - if(id==R.id.edit){ + if(id==R.id.edit || id==R.id.delete_and_redraft) { final Bundle args=new Bundle(); args.putString("account", item.parentFragment.getAccountID()); args.putParcelable("editStatus", Parcels.wrap(item.status)); + if (id==R.id.delete_and_redraft) args.putBoolean("redraftStatus", true); if(TextUtils.isEmpty(item.status.content) && TextUtils.isEmpty(item.status.spoilerText)){ Nav.go(item.parentFragment.getActivity(), ComposeFragment.class, args); }else{ @@ -150,7 +151,13 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{ public void onSuccess(GetStatusSourceText.Response result){ args.putString("sourceText", result.text); args.putString("sourceSpoiler", result.spoilerText); - Nav.go(item.parentFragment.getActivity(), ComposeFragment.class, args); + if (id==R.id.delete_and_redraft) { + UiUtils.confirmDeletePost(item.parentFragment.getActivity(), item.parentFragment.getAccountID(), item.status, s->{ + Nav.go(item.parentFragment.getActivity(), ComposeFragment.class, args); + }, true); + } else { + Nav.go(item.parentFragment.getActivity(), ComposeFragment.class, args); + } } @Override @@ -163,14 +170,6 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{ } }else if(id==R.id.delete){ UiUtils.confirmDeletePost(item.parentFragment.getActivity(), item.parentFragment.getAccountID(), item.status, s->{}); - }else if(id==R.id.delete_and_redraft) { - UiUtils.confirmDeletePost(item.parentFragment.getActivity(), item.parentFragment.getAccountID(), item.status, s->{ - Bundle args=new Bundle(); - args.putString("account", item.parentFragment.getAccountID()); - args.putString("prefilledText", HtmlParser.parse(item.status.content, item.status.emojis, item.status.mentions, item.status.tags, item.parentFragment.getAccountID()).toString()); // demo - // TODO: restore re-drafted text and attachments - Nav.go(item.parentFragment.getActivity(), ComposeFragment.class, args); - }); }else if(id==R.id.mute){ UiUtils.confirmToggleMuteUser(item.parentFragment.getActivity(), item.parentFragment.getAccountID(), account, relationship!=null && relationship.muting, r->{}); }else if(id==R.id.block){ diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/utils/UiUtils.java b/mastodon/src/main/java/org/joinmastodon/android/ui/utils/UiUtils.java index 84436cca2..15a60356a 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/utils/UiUtils.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/utils/UiUtils.java @@ -44,6 +44,7 @@ import org.joinmastodon.android.api.requests.statuses.DeleteStatus; import org.joinmastodon.android.api.requests.statuses.GetStatusByID; import org.joinmastodon.android.api.session.AccountSessionManager; import org.joinmastodon.android.events.StatusDeletedEvent; +import org.joinmastodon.android.fragments.ComposeFragment; import org.joinmastodon.android.fragments.HashtagTimelineFragment; import org.joinmastodon.android.fragments.ProfileFragment; import org.joinmastodon.android.fragments.ThreadFragment; @@ -378,9 +379,12 @@ public class UiUtils{ .exec(accountID); }); } - public static void confirmDeletePost(Activity activity, String accountID, Status status, Consumer resultCallback){ - showConfirmationAlert(activity, R.string.confirm_delete_title, R.string.confirm_delete, R.string.delete, ()->{ + confirmDeletePost(activity, accountID, status, resultCallback, false); + } + + public static void confirmDeletePost(Activity activity, String accountID, Status status, Consumer resultCallback, boolean forRedraft){ + showConfirmationAlert(activity, forRedraft ? R.string.confirm_delete_and_redraft_title : R.string.confirm_delete_title, forRedraft ? R.string.confirm_delete_and_redraft : R.string.confirm_delete, forRedraft ? R.string.delete_and_redraft : R.string.delete, ()->{ new DeleteStatus(status.id) .setCallback(new Callback<>(){ @Override diff --git a/mastodon/src/main/res/values/strings.xml b/mastodon/src/main/res/values/strings.xml index 2ee4d9975..9a5493cdc 100644 --- a/mastodon/src/main/res/values/strings.xml +++ b/mastodon/src/main/res/values/strings.xml @@ -126,8 +126,11 @@ Vote Tap to reveal Delete + Delete and re-draft Delete Post + Delete and re-draft Post Are you sure you want to delete this post? + Are you sure you want to delete and re-draft this post? Deleting… Audio playback Play