diff --git a/mastodon/build.gradle b/mastodon/build.gradle index 626106226b..89db587217 100644 --- a/mastodon/build.gradle +++ b/mastodon/build.gradle @@ -15,8 +15,8 @@ android { applicationId "org.joinmastodon.android.sk" minSdk 23 targetSdk 33 - versionCode 103 - versionName "2.1.6+fork.103" + versionCode 104 + versionName "2.1.6+fork.104" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" resourceConfigurations += ['ar-rSA', 'ar-rDZ', 'be-rBY', 'bn-rBD', 'bs-rBA', 'ca-rES', 'cs-rCZ', 'da-rDK', 'de-rDE', 'el-rGR', 'es-rES', 'eu-rES', 'fa-rIR', 'fi-rFI', 'fil-rPH', 'fr-rFR', 'ga-rIE', 'gd-rGB', 'gl-rES', 'hi-rIN', 'hr-rHR', 'hu-rHU', 'hy-rAM', 'ig-rNG', 'in-rID', 'is-rIS', 'it-rIT', 'iw-rIL', 'ja-rJP', 'kab', 'ko-rKR', 'my-rMM', 'nl-rNL', 'no-rNO', 'oc-rFR', 'pl-rPL', 'pt-rBR', 'pt-rPT', 'ro-rRO', 'ru-rRU', 'si-rLK', 'sl-rSI', 'sv-rSE', 'th-rTH', 'tr-rTR', 'uk-rUA', 'ur-rIN', 'vi-rVN', 'zh-rCN', 'zh-rTW'] } diff --git a/mastodon/src/main/java/org/joinmastodon/android/events/ScheduledStatusDeletedEvent.java b/mastodon/src/main/java/org/joinmastodon/android/events/ScheduledStatusDeletedEvent.java index 96aaeac26a..3c2923387e 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/events/ScheduledStatusDeletedEvent.java +++ b/mastodon/src/main/java/org/joinmastodon/android/events/ScheduledStatusDeletedEvent.java @@ -1,7 +1,5 @@ package org.joinmastodon.android.events; -import org.joinmastodon.android.model.ScheduledStatus; - public class ScheduledStatusDeletedEvent{ public final String id; public final String accountID; diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/BaseStatusListFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/BaseStatusListFragment.java index deb0016139..8710c23083 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/BaseStatusListFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/BaseStatusListFragment.java @@ -465,12 +465,12 @@ protected boolean needDividerForExtraItem(View child, View bottomSibling, Recycl public abstract void onItemClick(String id); - protected void updatePoll(String itemID, Status status, Poll poll){ - status.poll=poll; + protected void updatePoll(String parentID, Status statusForContent, Poll poll){ + statusForContent.poll=poll; int firstOptionIndex=-1, footerIndex=-1; int i=0; for(StatusDisplayItem item:displayItems){ - if(item.parentID.equals(itemID)){ + if(item.contentStatusID.equals(statusForContent.id)){ if(item instanceof PollOptionStatusDisplayItem && firstOptionIndex==-1){ firstOptionIndex=i; }else if(item instanceof PollFooterStatusDisplayItem){ @@ -485,7 +485,7 @@ protected void updatePoll(String itemID, Status status, Poll poll){ List pollItems=displayItems.subList(firstOptionIndex, footerIndex+1); int prevSize=pollItems.size(); pollItems.clear(); - StatusDisplayItem.buildPollItems(itemID, this, poll, pollItems); + StatusDisplayItem.buildPollItems(parentID, statusForContent.id, this, poll, pollItems); if(prevSize!=pollItems.size()){ adapter.notifyItemRangeRemoved(firstOptionIndex, prevSize); adapter.notifyItemRangeInserted(firstOptionIndex, pollItems.size()); diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/NotificationsListFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/NotificationsListFragment.java index 6f6fed7454..bf07bbbbd2 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/NotificationsListFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/NotificationsListFragment.java @@ -238,7 +238,7 @@ public void onPollUpdated(PollUpdatedEvent ev){ continue; Status contentStatus=ntf.status.getContentStatus(); if(contentStatus.poll!=null && contentStatus.poll.id.equals(ev.poll.id)){ - updatePoll(ntf.id, ntf.status, ev.poll); + updatePoll(ntf.id, contentStatus, ev.poll); } } } diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/StatusEditHistoryFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/StatusEditHistoryFragment.java index 0a723a3220..193ddc0202 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/StatusEditHistoryFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/StatusEditHistoryFragment.java @@ -145,7 +145,7 @@ enum StatusEditChangeType{ } String sep = getString(R.string.sk_separator); items.add(0, new ReblogOrReplyLineStatusDisplayItem(s.id, this, action+" "+sep+" "+date, Collections.emptyList(), 0, null, null, s)); - items.add(1, new DummyStatusDisplayItem(s.id, this)); + items.add(1, new DummyStatusDisplayItem(s.id, s.getContentStatus().id, this)); } return items; } diff --git a/mastodon/src/main/java/org/joinmastodon/android/fragments/StatusListFragment.java b/mastodon/src/main/java/org/joinmastodon/android/fragments/StatusListFragment.java index 8459c6a84f..51a8357943 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/fragments/StatusListFragment.java +++ b/mastodon/src/main/java/org/joinmastodon/android/fragments/StatusListFragment.java @@ -28,7 +28,9 @@ import org.parceler.Parcels; import java.util.ArrayList; +import java.util.Iterator; import java.util.List; +import java.util.Objects; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -174,41 +176,57 @@ protected void onRemoveAccountPostsEvent(RemoveAccountPostsEvent ev){ } } - protected void removeStatus(Status status){ - data.remove(status); - preloadedData.remove(status); - int index=-1, ancestorFirstIndex = -1, ancestorLastIndex = -1; - for(int i=0;i l, String id){ + Iterator it=l.iterator(); + while(it.hasNext()){ + if(Objects.equals(it.next().getContentStatus().id, id)){ + it.remove(); } } + } + private int removeStatusDisplayItems(Status status, int index, int ancestorFirstIndex, int ancestorLastIndex, int indexOffset){ // did we find an ancestor that is also the status' neighbor? - if (ancestorFirstIndex >= 0 && ancestorLastIndex == index - 1) { - for (int i = ancestorFirstIndex; i <= ancestorLastIndex; i++) { - StatusDisplayItem item = displayItems.get(i); + if(ancestorFirstIndex>=0 && ancestorLastIndex==index-1){ + for(int i=ancestorFirstIndex; i<=ancestorLastIndex; i++){ + StatusDisplayItem item=displayItems.get(i); // update ancestor to have no descendant anymore - if (item.parentID.equals(status.inReplyToId)) item.hasDescendantNeighbor = false; + if(item.contentStatusID.equals(status.inReplyToId)) item.hasDescendantNeighbor=false; } - adapter.notifyItemRangeChanged(ancestorFirstIndex, ancestorLastIndex - ancestorFirstIndex + 1); + adapter.notifyItemRangeChanged(ancestorFirstIndex-indexOffset, ancestorLastIndex-ancestorFirstIndex+1); } - if(index==-1) - return; + if(index==-1) return 0; int lastIndex; for(lastIndex=index;lastIndex parentFragment) { - super(parentID, parentFragment); + public DummyStatusDisplayItem(String parentID, String contentStatusID, BaseStatusListFragment parentFragment) { + super(parentID, contentStatusID, parentFragment); } @Override diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/EmojiReactionsStatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/EmojiReactionsStatusDisplayItem.java index d874df595d..eefdf16bef 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/EmojiReactionsStatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/EmojiReactionsStatusDisplayItem.java @@ -65,7 +65,7 @@ public class EmojiReactionsStatusDisplayItem extends StatusDisplayItem { private static final float ALPHA_DISABLED=0.55f; public EmojiReactionsStatusDisplayItem(String parentID, BaseStatusListFragment parentFragment, Status status, String accountID, boolean hideEmpty, boolean forAnnouncement) { - super(parentID, parentFragment); + super(parentID, status.id, parentFragment); this.status=status; this.hideEmpty=hideEmpty; this.forAnnouncement=forAnnouncement; diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/ExtendedFooterStatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/ExtendedFooterStatusDisplayItem.java index 5a2c6810a4..21fbc1d30d 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/ExtendedFooterStatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/ExtendedFooterStatusDisplayItem.java @@ -42,7 +42,7 @@ public class ExtendedFooterStatusDisplayItem extends StatusDisplayItem{ private static final DateTimeFormatter TIME_FORMATTER=DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG, FormatStyle.SHORT); public ExtendedFooterStatusDisplayItem(String parentID, BaseStatusListFragment parentFragment, String accountID, Status status){ - super(parentID, parentFragment); + super(parentID, status.id, parentFragment); this.status=status; this.accountID=accountID; } diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/FileStatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/FileStatusDisplayItem.java index 50e720a021..a89d67553a 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/FileStatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/FileStatusDisplayItem.java @@ -1,29 +1,22 @@ package org.joinmastodon.android.ui.displayitems; import android.content.Context; -import android.graphics.drawable.Drawable; import android.net.Uri; import android.text.TextUtils; import android.view.View; import android.view.ViewGroup; -import android.widget.ImageView; import android.widget.TextView; import org.joinmastodon.android.R; import org.joinmastodon.android.fragments.BaseStatusListFragment; import org.joinmastodon.android.model.Attachment; -import org.joinmastodon.android.model.Card; -import org.joinmastodon.android.model.Status; -import org.joinmastodon.android.ui.drawables.BlurhashCrossfadeDrawable; import org.joinmastodon.android.ui.utils.UiUtils; -import me.grishka.appkit.imageloader.ImageLoaderViewHolder; - public class FileStatusDisplayItem extends StatusDisplayItem{ private final Attachment attachment; - public FileStatusDisplayItem(String parentID, BaseStatusListFragment parentFragment, Attachment attachment) { - super(parentID, parentFragment); + public FileStatusDisplayItem(String parentID, String contentStatusID, BaseStatusListFragment parentFragment, Attachment attachment) { + super(parentID, contentStatusID, parentFragment); this.attachment=attachment; } diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/FooterStatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/FooterStatusDisplayItem.java index bf0cce7a49..8af7bb11d5 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/FooterStatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/FooterStatusDisplayItem.java @@ -43,7 +43,7 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{ public boolean hideCounts; public FooterStatusDisplayItem(String parentID, BaseStatusListFragment parentFragment, Status status, String accountID){ - super(parentID, parentFragment); + super(parentID, status.id, parentFragment); this.status=status; this.accountID=accountID; } diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/GapStatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/GapStatusDisplayItem.java index 718263dd94..a7ec31708d 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/GapStatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/GapStatusDisplayItem.java @@ -18,10 +18,10 @@ public class GapStatusDisplayItem extends StatusDisplayItem{ public boolean loading; - private Status status; + private final Status status; public GapStatusDisplayItem(String parentID, BaseStatusListFragment parentFragment, Status status){ - super(parentID, parentFragment); + super(parentID, null, parentFragment); this.status=status; } diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/HashtagStatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/HashtagStatusDisplayItem.java index 8d066d04d8..4e9bd82181 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/HashtagStatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/HashtagStatusDisplayItem.java @@ -14,7 +14,7 @@ public class HashtagStatusDisplayItem extends StatusDisplayItem{ public final Hashtag tag; public HashtagStatusDisplayItem(String parentID, BaseStatusListFragment parentFragment, Hashtag tag){ - super(parentID, parentFragment); + super(parentID, null, parentFragment); this.tag=tag; } 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 7de40a6d92..ad6b98d3e5 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 @@ -86,7 +86,7 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{ private Consumer consumeReadAnnouncement; public HeaderStatusDisplayItem(String parentID, Account user, Instant createdAt, BaseStatusListFragment parentFragment, String accountID, Status status, CharSequence extraText, Notification notification, ScheduledStatus scheduledStatus){ - super(parentID, parentFragment); + super(parentID, status.id, parentFragment); AccountSession session = AccountSessionManager.get(accountID); user=scheduledStatus != null ? session.self : user; this.user=user; diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/LinkCardStatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/LinkCardStatusDisplayItem.java index 59b08451a5..425bcf0ec9 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/LinkCardStatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/LinkCardStatusDisplayItem.java @@ -28,7 +28,7 @@ public class LinkCardStatusDisplayItem extends StatusDisplayItem{ private final UrlImageLoaderRequest imgRequest; public LinkCardStatusDisplayItem(String parentID, BaseStatusListFragment parentFragment, Status status){ - super(parentID, parentFragment); + super(parentID, status.id, parentFragment); this.status=status; if(status.card.image!=null) imgRequest=new UrlImageLoaderRequest(status.card.image, 1000, 1000); diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/MediaGridStatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/MediaGridStatusDisplayItem.java index 385978be72..421d15dc1a 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/MediaGridStatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/MediaGridStatusDisplayItem.java @@ -57,7 +57,7 @@ public class MediaGridStatusDisplayItem extends StatusDisplayItem{ public String sensitiveTitle; public MediaGridStatusDisplayItem(String parentID, BaseStatusListFragment parentFragment, PhotoLayoutHelper.TiledLayoutResult tiledLayout, List attachments, Status status){ - super(parentID, parentFragment); + super(parentID, status.id, parentFragment); this.tiledLayout=tiledLayout; this.viewPool=parentFragment.getAttachmentViewsPool(); this.attachments=attachments; diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/NotificationHeaderStatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/NotificationHeaderStatusDisplayItem.java index b16c12ebe0..3e2dc7ac79 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/NotificationHeaderStatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/NotificationHeaderStatusDisplayItem.java @@ -49,7 +49,7 @@ public class NotificationHeaderStatusDisplayItem extends StatusDisplayItem{ private final CharSequence timestamp; public NotificationHeaderStatusDisplayItem(String parentID, BaseStatusListFragment parentFragment, Notification notification, String accountID){ - super(parentID, parentFragment); + super(parentID, notification.status!=null ? notification.status.getContentStatus().id : null, parentFragment); this.notification=notification; this.accountID=accountID; this.timestamp=notification.createdAt==null ? null : UiUtils.formatRelativeTimestamp(context, notification.createdAt); diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/PollFooterStatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/PollFooterStatusDisplayItem.java index 2ec3733359..a9da9d51ab 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/PollFooterStatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/PollFooterStatusDisplayItem.java @@ -15,8 +15,8 @@ public class PollFooterStatusDisplayItem extends StatusDisplayItem{ public final Poll poll; - public PollFooterStatusDisplayItem(String parentID, BaseStatusListFragment parentFragment, Poll poll){ - super(parentID, parentFragment); + public PollFooterStatusDisplayItem(String parentID, String contentStatusID, BaseStatusListFragment parentFragment, Poll poll){ + super(parentID, contentStatusID, parentFragment); this.poll=poll; } diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/PollOptionStatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/PollOptionStatusDisplayItem.java index a1eae6f995..2c315c6d17 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/PollOptionStatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/PollOptionStatusDisplayItem.java @@ -31,8 +31,8 @@ public class PollOptionStatusDisplayItem extends StatusDisplayItem{ private final int optionIndex; public final Poll poll; - public PollOptionStatusDisplayItem(String parentID, Poll poll, int optionIndex, BaseStatusListFragment parentFragment){ - super(parentID, parentFragment); + public PollOptionStatusDisplayItem(String parentID, String contentStatusID, Poll poll, int optionIndex, BaseStatusListFragment parentFragment){ + super(parentID, contentStatusID, parentFragment); this.optionIndex=optionIndex; option=poll.options.get(optionIndex); this.poll=poll; diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/ReblogOrReplyLineStatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/ReblogOrReplyLineStatusDisplayItem.java index 005bd255d8..7a3a27030c 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/ReblogOrReplyLineStatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/ReblogOrReplyLineStatusDisplayItem.java @@ -52,7 +52,7 @@ public ReblogOrReplyLineStatusDisplayItem(String parentID, BaseStatusListFragmen } public ReblogOrReplyLineStatusDisplayItem(String parentID, BaseStatusListFragment parentFragment, CharSequence text, List emojis, @DrawableRes int icon, StatusPrivacy visibility, @Nullable View.OnClickListener handleClick, CharSequence fullText, Status status) { - super(parentID, parentFragment); + super(parentID, status.getContentStatus().id, parentFragment); SpannableStringBuilder ssb=new SpannableStringBuilder(text); if(AccountSessionManager.get(parentFragment.getAccountID()).getLocalPreferences().customEmojiInNames) HtmlParser.parseCustomEmoji(ssb, emojis); diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/SectionHeaderStatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/SectionHeaderStatusDisplayItem.java index cde1a6b096..b7cb8afb52 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/SectionHeaderStatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/SectionHeaderStatusDisplayItem.java @@ -14,7 +14,7 @@ public class SectionHeaderStatusDisplayItem extends StatusDisplayItem{ public final Runnable onButtonClick; public SectionHeaderStatusDisplayItem(BaseStatusListFragment parentFragment, String title, String buttonText, Runnable onButtonClick){ - super("", parentFragment); + super("", null, parentFragment); this.title=title; this.buttonText=buttonText; this.onButtonClick=onButtonClick; diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/SpoilerStatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/SpoilerStatusDisplayItem.java index 722bd5c49d..cdf127f17d 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/SpoilerStatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/SpoilerStatusDisplayItem.java @@ -32,7 +32,7 @@ public class SpoilerStatusDisplayItem extends StatusDisplayItem{ private final int attachmentCount; public SpoilerStatusDisplayItem(String parentID, BaseStatusListFragment parentFragment, String title, Status statusForContent, Type type){ - super(parentID, parentFragment); + super(parentID, statusForContent.id, parentFragment); this.status=statusForContent; this.type=type; this.attachmentCount=statusForContent.mediaAttachments.size(); diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/StatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/StatusDisplayItem.java index eed67ed734..82c1ed98e0 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/StatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/StatusDisplayItem.java @@ -53,15 +53,15 @@ import me.grishka.appkit.views.UsableRecyclerView; public abstract class StatusDisplayItem{ - public final String parentID; + public final String parentID, contentStatusID; public final BaseStatusListFragment parentFragment; public boolean inset; public int index; public boolean - hasDescendantNeighbor = false, - hasAncestoringNeighbor = false, - isMainStatus = true, - isDirectDescendant = false; + hasDescendantNeighbor=false, + hasAncestoringNeighbor=false, + isMainStatus=true, + isDirectDescendant=false; public static final int FLAG_INSET=1; public static final int FLAG_NO_FOOTER=1 << 1; @@ -83,8 +83,9 @@ public void setAncestryInfo( this.isDirectDescendant = isDirectDescendant; } - public StatusDisplayItem(String parentID, BaseStatusListFragment parentFragment){ + public StatusDisplayItem(String parentID, String contentStatusID, BaseStatusListFragment parentFragment){ this.parentID=parentID; + this.contentStatusID=contentStatusID; this.parentFragment=parentFragment; } @@ -245,7 +246,7 @@ public static ArrayList buildItems(BaseStatusListFragment }else if(!hasSpoiler && header!=null){ header.needBottomPadding=true; }else if(hasSpoiler){ - contentItems.add(new DummyStatusDisplayItem(parentID, fragment)); + contentItems.add(new DummyStatusDisplayItem(parentID, statusForContent.id, fragment)); } List imageAttachments=statusForContent.mediaAttachments.stream().filter(att->att.type.isImage()).collect(Collectors.toList()); @@ -269,11 +270,11 @@ else if(statusForContent.sensitive && AccountSessionManager.get(accountID).getLo contentItems.add(new AudioStatusDisplayItem(parentID, fragment, statusForContent, att)); } if(att.type==Attachment.Type.UNKNOWN){ - contentItems.add(new FileStatusDisplayItem(parentID, fragment, att)); + contentItems.add(new FileStatusDisplayItem(parentID, statusForContent.id, fragment, att)); } } if(statusForContent.poll!=null){ - buildPollItems(parentID, fragment, statusForContent.poll, contentItems); + buildPollItems(parentID, statusForContent.id, fragment, statusForContent.poll, contentItems); } if(statusForContent.card!=null && statusForContent.mediaAttachments.isEmpty()){ contentItems.add(new LinkCardStatusDisplayItem(parentID, fragment, statusForContent)); @@ -300,7 +301,7 @@ else if(statusForContent.sensitive && AccountSessionManager.get(accountID).getLo boolean inset=(flags & FLAG_INSET)!=0; // add inset dummy so last content item doesn't clip out of inset bounds if((inset || footer==null) && (flags & FLAG_CHECKABLE)==0){ - items.add(new DummyStatusDisplayItem(parentID, fragment)); + items.add(new DummyStatusDisplayItem(parentID, statusForContent.id, fragment)); // in case we ever need the dummy to display a margin for the media grid again: // (i forgot why we apparently don't need this anymore) // !contentItems.isEmpty() && contentItems @@ -321,13 +322,13 @@ else if(statusForContent.sensitive && AccountSessionManager.get(accountID).getLo new ArrayList<>(List.of(new WarningFilteredStatusDisplayItem(parentID, fragment, statusForContent, items, applyingFilter))); } - public static void buildPollItems(String parentID, BaseStatusListFragment fragment, Poll poll, List items){ + public static void buildPollItems(String parentID, String contentStatusID, BaseStatusListFragment fragment, Poll poll, List items){ int i=0; for(Poll.Option opt:poll.options){ - items.add(new PollOptionStatusDisplayItem(parentID, poll, i, fragment)); + items.add(new PollOptionStatusDisplayItem(parentID, contentStatusID, poll, i, fragment)); i++; } - items.add(new PollFooterStatusDisplayItem(parentID, fragment, poll)); + items.add(new PollFooterStatusDisplayItem(parentID, contentStatusID, fragment, poll)); } public enum Type{ diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/TextStatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/TextStatusDisplayItem.java index 122b20fddb..0921c05451 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/TextStatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/TextStatusDisplayItem.java @@ -42,7 +42,7 @@ public class TextStatusDisplayItem extends StatusDisplayItem{ public final Status status; public TextStatusDisplayItem(String parentID, CharSequence text, BaseStatusListFragment parentFragment, Status status, boolean disableTranslate){ - super(parentID, parentFragment); + super(parentID, status.id, parentFragment); this.text=text; this.status=status; this.disableTranslate=disableTranslate; diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/WarningFilteredStatusDisplayItem.java b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/WarningFilteredStatusDisplayItem.java index 5f0867d021..ed3c7331f9 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/WarningFilteredStatusDisplayItem.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/WarningFilteredStatusDisplayItem.java @@ -19,7 +19,7 @@ public class WarningFilteredStatusDisplayItem extends StatusDisplayItem{ public LegacyFilter applyingFilter; public WarningFilteredStatusDisplayItem(String parentID, BaseStatusListFragment parentFragment, Status status, List filteredItems, LegacyFilter applyingFilter){ - super(parentID, parentFragment); + super(parentID, status.id, parentFragment); this.status=status; this.filteredItems = filteredItems; this.applyingFilter = applyingFilter; diff --git a/mastodon/src/main/java/org/joinmastodon/android/ui/text/HtmlParser.java b/mastodon/src/main/java/org/joinmastodon/android/ui/text/HtmlParser.java index b0a3dc8fd1..857288abb3 100644 --- a/mastodon/src/main/java/org/joinmastodon/android/ui/text/HtmlParser.java +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/text/HtmlParser.java @@ -210,6 +210,7 @@ private void processOpenSpan(Element el) { } public static void parseCustomEmoji(SpannableStringBuilder ssb, List emojis){ + if(emojis==null) return; Map emojiByCode = emojis.stream() .collect( 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 89516b6ad5..f1bf7f6557 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 @@ -68,6 +68,7 @@ import org.joinmastodon.android.GlobalUserPreferences; import org.joinmastodon.android.MastodonApp; import org.joinmastodon.android.R; +import org.joinmastodon.android.api.CacheController; import org.joinmastodon.android.api.MastodonAPIRequest; import org.joinmastodon.android.api.MastodonErrorResponse; import org.joinmastodon.android.api.StatusInteractionController; @@ -630,18 +631,24 @@ public static void confirmDeletePost(Activity activity, String accountID, Status } public static void confirmDeletePost(Activity activity, String accountID, Status status, Consumer resultCallback, boolean forRedraft) { + Status s=status.getContentStatus(); showConfirmationAlert(activity, forRedraft ? R.string.sk_confirm_delete_and_redraft_title : R.string.confirm_delete_title, forRedraft ? R.string.sk_confirm_delete_and_redraft : R.string.confirm_delete, forRedraft ? R.string.sk_delete_and_redraft : R.string.delete, forRedraft ? R.drawable.ic_fluent_arrow_clockwise_28_regular : R.drawable.ic_fluent_delete_28_regular, - () -> new DeleteStatus(status.id) + () -> new DeleteStatus(s.id) .setCallback(new Callback<>() { @Override public void onSuccess(Status result) { resultCallback.accept(result); - AccountSessionManager.getInstance().getAccount(accountID).getCacheController().deleteStatus(status.id); - E.post(new StatusDeletedEvent(status.id, accountID)); + CacheController cache=AccountSessionManager.get(accountID).getCacheController(); + cache.deleteStatus(s.id); + E.post(new StatusDeletedEvent(s.id, accountID)); + if(status!=s){ + cache.deleteStatus(status.id); + E.post(new StatusDeletedEvent(status.id, accountID)); + } } @Override @@ -1711,7 +1718,7 @@ public static Context getLocalizedContext(Context context, Locale desiredLocale) } public static Optional extractPronouns(Context context, @Nullable Account account) { - if (account == null) return Optional.empty(); + if (account==null || account.fields==null) return Optional.empty(); String localizedPronouns=context.getString(R.string.sk_pronouns_label).toLowerCase(); // higher = worse. the lowest number wins. also i'm sorry for writing this