diff --git a/mastodon/src/main/java/org/joinmastodon/android/api/requests/statuses/CreateStatus.java b/mastodon/src/main/java/org/joinmastodon/android/api/requests/statuses/CreateStatus.java index bdb9dd14d..ef2109b83 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/api/requests/statuses/CreateStatus.java +++ b/mastodon/src/main/java/org/joinmastodon/android/api/requests/statuses/CreateStatus.java @@ -17,6 +17,7 @@ public class CreateStatus extends MastodonAPIRequest{ public static class Request{ public String status; + public List mediaAttributes; public List mediaIds; public Poll poll; public String inReplyToId; @@ -32,5 +33,17 @@ public class CreateStatus extends MastodonAPIRequest{ public boolean multiple; public boolean hideTotals; } + + public static class MediaAttribute{ + public String id; + public String description; + public String focus; + + public MediaAttribute(String id, String description, String focus){ + this.id=id; + this.description=description; + this.focus=focus; + } + } } } 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 d4606d6ca..624133db4 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/ComposeFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/ComposeFragment.java @@ -691,6 +691,9 @@ public class ComposeFragment extends MastodonToolbarFragment implements OnBackPr req.visibility=statusVisibility; if(!mediaViewController.isEmpty()){ req.mediaIds=mediaViewController.getAttachmentIDs(); + if(editingStatus != null){ + req.mediaAttributes=mediaViewController.getAttachmentAttributes(); + } } if(replyTo!=null){ req.inReplyToId=replyTo.id; diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/viewcontrollers/ComposeMediaViewController.java b/mastodon/src/main/java/org/joinmastodon/android/ui/viewcontrollers/ComposeMediaViewController.java index 2fade8a45..c4e50b1bb 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/viewcontrollers/ComposeMediaViewController.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/viewcontrollers/ComposeMediaViewController.java @@ -27,10 +27,14 @@ import android.widget.ProgressBar; import android.widget.TextView; import android.widget.Toast; +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + import org.joinmastodon.android.MastodonApp; import org.joinmastodon.android.R; import org.joinmastodon.android.api.MastodonAPIController; import org.joinmastodon.android.api.ProgressListener; +import org.joinmastodon.android.api.requests.statuses.CreateStatus; import org.joinmastodon.android.api.requests.statuses.GetAttachmentByID; import org.joinmastodon.android.api.requests.statuses.UpdateAttachment; import org.joinmastodon.android.api.requests.statuses.UploadAttachment; @@ -47,8 +51,11 @@ import org.parceler.Parcel; import org.parceler.Parcels; import java.util.ArrayList; +import java.util.Collection; import java.util.HashMap; +import java.util.Iterator; import java.util.List; +import java.util.ListIterator; import java.util.Locale; import java.util.Objects; import java.util.function.Consumer; @@ -540,6 +547,14 @@ public class ComposeMediaViewController{ public List getAttachmentIDs(){ return attachments.stream().map(a->a.serverAttachment.id).collect(Collectors.toList()); } + + public List getAttachmentAttributes(){ + List mediaAttributes = new ArrayList<>(); + for (DraftMediaAttachment att:attachments){ + mediaAttributes.add(new CreateStatus.Request.MediaAttribute(att.serverAttachment.id, att.description, null)); + } + return mediaAttributes; + } public boolean isEmpty(){ return attachments.isEmpty(); @@ -582,7 +597,7 @@ public class ComposeMediaViewController{ public void saveAltTextsBeforePublishing(Runnable onSuccess, Consumer onError){ ArrayList updateAltTextRequests=new ArrayList<>(); for(DraftMediaAttachment att:attachments){ - if(!att.descriptionSaved){ + if(!att.descriptionSaved && att.serverAttachment.description == null){ UpdateAttachment req=new UpdateAttachment(att.serverAttachment.id, att.description); req.setCallback(new Callback<>(){ @Override