fix and refactor removing statuses

This commit is contained in:
sk 2023-10-16 18:28:47 +02:00
parent bdd2b90581
commit 7e80ed6af2
25 changed files with 65 additions and 57 deletions

View File

@ -470,7 +470,7 @@ public abstract class BaseStatusListFragment<T extends DisplayItemsParent> exten
int firstOptionIndex=-1, footerIndex=-1; int firstOptionIndex=-1, footerIndex=-1;
int i=0; int i=0;
for(StatusDisplayItem item:displayItems){ for(StatusDisplayItem item:displayItems){
if(item.contentStatusID.equals(statusForContent.id)){ if(item.getContentID().equals(statusForContent.id)){
if(item instanceof PollOptionStatusDisplayItem && firstOptionIndex==-1){ if(item instanceof PollOptionStatusDisplayItem && firstOptionIndex==-1){
firstOptionIndex=i; firstOptionIndex=i;
}else if(item instanceof PollFooterStatusDisplayItem){ }else if(item instanceof PollFooterStatusDisplayItem){
@ -485,7 +485,7 @@ public abstract class BaseStatusListFragment<T extends DisplayItemsParent> exten
List<StatusDisplayItem> pollItems=displayItems.subList(firstOptionIndex, footerIndex+1); List<StatusDisplayItem> pollItems=displayItems.subList(firstOptionIndex, footerIndex+1);
int prevSize=pollItems.size(); int prevSize=pollItems.size();
pollItems.clear(); pollItems.clear();
StatusDisplayItem.buildPollItems(parentID, statusForContent.id, this, poll, pollItems); StatusDisplayItem.buildPollItems(parentID, this, poll, pollItems);
if(prevSize!=pollItems.size()){ if(prevSize!=pollItems.size()){
adapter.notifyItemRangeRemoved(firstOptionIndex, prevSize); adapter.notifyItemRangeRemoved(firstOptionIndex, prevSize);
adapter.notifyItemRangeInserted(firstOptionIndex, pollItems.size()); adapter.notifyItemRangeInserted(firstOptionIndex, pollItems.size());

View File

@ -145,7 +145,7 @@ public class StatusEditHistoryFragment extends StatusListFragment{
} }
String sep = getString(R.string.sk_separator); 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(0, new ReblogOrReplyLineStatusDisplayItem(s.id, this, action+" "+sep+" "+date, Collections.emptyList(), 0, null, null, s));
items.add(1, new DummyStatusDisplayItem(s.id, s.getContentStatus().id, this)); items.add(1, new DummyStatusDisplayItem(s.id, this));
} }
return items; return items;
} }

View File

@ -30,7 +30,6 @@ import org.parceler.Parcels;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Iterator; import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.Stream; import java.util.stream.Stream;
@ -144,12 +143,12 @@ public abstract class StatusListFragment extends BaseStatusListFragment<Status>
} }
} }
protected Status getContentStatusByID(String id){ public Status getContentStatusByID(String id){
Status s=getStatusByID(id); Status s=getStatusByID(id);
return s==null ? null : s.getContentStatus(); return s==null ? null : s.getContentStatus();
} }
protected Status getStatusByID(String id){ public Status getStatusByID(String id){
for(Status s:data){ for(Status s:data){
if(s.id.equals(id)){ if(s.id.equals(id)){
return s; return s;
@ -179,54 +178,51 @@ public abstract class StatusListFragment extends BaseStatusListFragment<Status>
private void iterateRemoveStatus(List<Status> l, String id){ private void iterateRemoveStatus(List<Status> l, String id){
Iterator<Status> it=l.iterator(); Iterator<Status> it=l.iterator();
while(it.hasNext()){ while(it.hasNext()){
if(Objects.equals(it.next().getContentStatus().id, id)){ if(it.next().getContentStatus().id.equals(id)){
it.remove(); it.remove();
} }
} }
} }
private int removeStatusDisplayItems(Status status, int index, int ancestorFirstIndex, int ancestorLastIndex, int indexOffset){ private void removeStatusDisplayItems(Status status, int index, int ancestorFirstIndex, int ancestorLastIndex){
// did we find an ancestor that is also the status' neighbor? // did we find an ancestor that is also the status' neighbor?
if(ancestorFirstIndex>=0 && ancestorLastIndex==index-1){ if(ancestorFirstIndex>=0 && ancestorLastIndex==index-1){
for(int i=ancestorFirstIndex; i<=ancestorLastIndex; i++){ for(int i=ancestorFirstIndex; i<=ancestorLastIndex; i++){
StatusDisplayItem item=displayItems.get(i); StatusDisplayItem item=displayItems.get(i);
// update ancestor to have no descendant anymore // update ancestor to have no descendant anymore
if(item.contentStatusID.equals(status.inReplyToId)) item.hasDescendantNeighbor=false; if(item.getContentID().equals(status.inReplyToId)) item.hasDescendantNeighbor=false;
} }
adapter.notifyItemRangeChanged(ancestorFirstIndex-indexOffset, ancestorLastIndex-ancestorFirstIndex+1); adapter.notifyItemRangeChanged(ancestorFirstIndex, ancestorLastIndex-ancestorFirstIndex+1);
} }
if(index==-1) return 0; if(index==-1) return;
int lastIndex; int lastIndex;
for(lastIndex=index;lastIndex<displayItems.size();lastIndex++){ for(lastIndex=index;lastIndex<displayItems.size();lastIndex++){
if(!displayItems.get(lastIndex).contentStatusID.equals(status.id)) if(!displayItems.get(lastIndex).getContentID().equals(status.id))
break; break;
} }
int count=lastIndex-index; displayItems.subList(index, lastIndex).clear();
displayItems.subList(index-indexOffset, lastIndex-indexOffset).clear(); adapter.notifyItemRangeRemoved(index, lastIndex-index);
adapter.notifyItemRangeRemoved(index-indexOffset, lastIndex-index);
return count;
} }
protected void removeStatus(Status status){ protected void removeStatus(Status status){
Status removeStatus=status.getContentStatus(); Status removeStatus=status.getContentStatus();
String removeId=removeStatus.id; String removeId=removeStatus.id;
iterateRemoveStatus(data, removeId);
iterateRemoveStatus(preloadedData, removeId);
int ancestorFirstIndex=-1, ancestorLastIndex=-1; int ancestorFirstIndex=-1, ancestorLastIndex=-1;
int offset=0;
for(int i=0;i<displayItems.size();i++){ for(int i=0;i<displayItems.size();i++){
StatusDisplayItem item=displayItems.get(i); StatusDisplayItem item=displayItems.get(i);
if(Objects.equals(item.contentStatusID, removeId)){ if(item.getContentID().equals(removeId)){
offset+=removeStatusDisplayItems(removeStatus, i, ancestorFirstIndex, ancestorLastIndex, offset); removeStatusDisplayItems(removeStatus, i, ancestorFirstIndex, ancestorLastIndex);
ancestorFirstIndex=ancestorLastIndex=-1; ancestorFirstIndex=ancestorLastIndex=-1;
continue; continue;
} }
if(Objects.equals(item.contentStatusID, removeStatus.inReplyToId)){ if(item.getContentID().equals(removeStatus.inReplyToId)){
if(ancestorFirstIndex==-1) ancestorFirstIndex=i; if(ancestorFirstIndex==-1) ancestorFirstIndex=i;
ancestorLastIndex=i; ancestorLastIndex=i;
} }
} }
iterateRemoveStatus(data, removeId);
iterateRemoveStatus(preloadedData, removeId);
} }
@Override @Override

View File

@ -43,7 +43,7 @@ public class AccountCardStatusDisplayItem extends StatusDisplayItem{
public CharSequence parsedName, parsedBio; public CharSequence parsedName, parsedBio;
public AccountCardStatusDisplayItem(String parentID, BaseStatusListFragment parentFragment, String accountID, Account account, Notification notification){ public AccountCardStatusDisplayItem(String parentID, BaseStatusListFragment parentFragment, String accountID, Account account, Notification notification){
super(parentID, null, parentFragment); super(parentID, parentFragment);
this.account=account; this.account=account;
this.notification=notification; this.notification=notification;
avaRequest=new UrlImageLoaderRequest( avaRequest=new UrlImageLoaderRequest(

View File

@ -14,7 +14,7 @@ public class AccountStatusDisplayItem extends StatusDisplayItem{
public final AccountViewModel account; public final AccountViewModel account;
public AccountStatusDisplayItem(String parentID, BaseStatusListFragment parentFragment, Account account){ public AccountStatusDisplayItem(String parentID, BaseStatusListFragment parentFragment, Account account){
super(parentID, null, parentFragment); super(parentID, parentFragment);
this.account=new AccountViewModel(account, parentFragment.getAccountID()); this.account=new AccountViewModel(account, parentFragment.getAccountID());
} }

View File

@ -37,7 +37,7 @@ public class AudioStatusDisplayItem extends StatusDisplayItem{
private final ImageLoaderRequest imageRequest; private final ImageLoaderRequest imageRequest;
public AudioStatusDisplayItem(String parentID, BaseStatusListFragment parentFragment, Status status, Attachment attachment){ public AudioStatusDisplayItem(String parentID, BaseStatusListFragment parentFragment, Status status, Attachment attachment){
super(parentID, status.id, parentFragment); super(parentID, parentFragment);
this.status=status; this.status=status;
this.attachment=attachment; this.attachment=attachment;
imageRequest=new UrlImageLoaderRequest(TextUtils.isEmpty(attachment.previewUrl) ? status.account.avatarStatic : attachment.previewUrl, V.dp(100), V.dp(100)); imageRequest=new UrlImageLoaderRequest(TextUtils.isEmpty(attachment.previewUrl) ? status.account.avatarStatic : attachment.previewUrl, V.dp(100), V.dp(100));

View File

@ -12,8 +12,8 @@ import me.grishka.appkit.utils.V;
public class DummyStatusDisplayItem extends StatusDisplayItem { public class DummyStatusDisplayItem extends StatusDisplayItem {
public DummyStatusDisplayItem(String parentID, String contentStatusID, BaseStatusListFragment<?> parentFragment) { public DummyStatusDisplayItem(String parentID, BaseStatusListFragment<?> parentFragment) {
super(parentID, contentStatusID, parentFragment); super(parentID, parentFragment);
} }
@Override @Override

View File

@ -65,7 +65,7 @@ public class EmojiReactionsStatusDisplayItem extends StatusDisplayItem {
private static final float ALPHA_DISABLED=0.55f; private static final float ALPHA_DISABLED=0.55f;
public EmojiReactionsStatusDisplayItem(String parentID, BaseStatusListFragment<?> parentFragment, Status status, String accountID, boolean hideEmpty, boolean forAnnouncement) { public EmojiReactionsStatusDisplayItem(String parentID, BaseStatusListFragment<?> parentFragment, Status status, String accountID, boolean hideEmpty, boolean forAnnouncement) {
super(parentID, status.id, parentFragment); super(parentID, parentFragment);
this.status=status; this.status=status;
this.hideEmpty=hideEmpty; this.hideEmpty=hideEmpty;
this.forAnnouncement=forAnnouncement; this.forAnnouncement=forAnnouncement;

View File

@ -42,7 +42,7 @@ public class ExtendedFooterStatusDisplayItem extends StatusDisplayItem{
private static final DateTimeFormatter TIME_FORMATTER=DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG, FormatStyle.SHORT); private static final DateTimeFormatter TIME_FORMATTER=DateTimeFormatter.ofLocalizedDateTime(FormatStyle.LONG, FormatStyle.SHORT);
public ExtendedFooterStatusDisplayItem(String parentID, BaseStatusListFragment parentFragment, String accountID, Status status){ public ExtendedFooterStatusDisplayItem(String parentID, BaseStatusListFragment parentFragment, String accountID, Status status){
super(parentID, status.id, parentFragment); super(parentID, parentFragment);
this.status=status; this.status=status;
this.accountID=accountID; this.accountID=accountID;
} }

View File

@ -15,8 +15,8 @@ import org.joinmastodon.android.ui.utils.UiUtils;
public class FileStatusDisplayItem extends StatusDisplayItem{ public class FileStatusDisplayItem extends StatusDisplayItem{
private final Attachment attachment; private final Attachment attachment;
public FileStatusDisplayItem(String parentID, String contentStatusID, BaseStatusListFragment<?> parentFragment, Attachment attachment) { public FileStatusDisplayItem(String parentID, BaseStatusListFragment<?> parentFragment, Attachment attachment) {
super(parentID, contentStatusID, parentFragment); super(parentID, parentFragment);
this.attachment=attachment; this.attachment=attachment;
} }

View File

@ -43,7 +43,7 @@ public class FooterStatusDisplayItem extends StatusDisplayItem{
public boolean hideCounts; public boolean hideCounts;
public FooterStatusDisplayItem(String parentID, BaseStatusListFragment parentFragment, Status status, String accountID){ public FooterStatusDisplayItem(String parentID, BaseStatusListFragment parentFragment, Status status, String accountID){
super(parentID, status.id, parentFragment); super(parentID, parentFragment);
this.status=status; this.status=status;
this.accountID=accountID; this.accountID=accountID;
} }

View File

@ -21,7 +21,7 @@ public class GapStatusDisplayItem extends StatusDisplayItem{
private final Status status; private final Status status;
public GapStatusDisplayItem(String parentID, BaseStatusListFragment<?> parentFragment, Status status){ public GapStatusDisplayItem(String parentID, BaseStatusListFragment<?> parentFragment, Status status){
super(parentID, null, parentFragment); super(parentID, parentFragment);
this.status=status; this.status=status;
} }

View File

@ -14,7 +14,7 @@ public class HashtagStatusDisplayItem extends StatusDisplayItem{
public final Hashtag tag; public final Hashtag tag;
public HashtagStatusDisplayItem(String parentID, BaseStatusListFragment parentFragment, Hashtag tag){ public HashtagStatusDisplayItem(String parentID, BaseStatusListFragment parentFragment, Hashtag tag){
super(parentID, null, parentFragment); super(parentID, parentFragment);
this.tag=tag; this.tag=tag;
} }

View File

@ -86,7 +86,7 @@ public class HeaderStatusDisplayItem extends StatusDisplayItem{
private Consumer<String> consumeReadAnnouncement; private Consumer<String> consumeReadAnnouncement;
public HeaderStatusDisplayItem(String parentID, Account user, Instant createdAt, BaseStatusListFragment parentFragment, String accountID, Status status, CharSequence extraText, Notification notification, ScheduledStatus scheduledStatus){ public HeaderStatusDisplayItem(String parentID, Account user, Instant createdAt, BaseStatusListFragment parentFragment, String accountID, Status status, CharSequence extraText, Notification notification, ScheduledStatus scheduledStatus){
super(parentID, status.id, parentFragment); super(parentID, parentFragment);
AccountSession session = AccountSessionManager.get(accountID); AccountSession session = AccountSessionManager.get(accountID);
user=scheduledStatus != null ? session.self : user; user=scheduledStatus != null ? session.self : user;
this.user=user; this.user=user;

View File

@ -28,7 +28,7 @@ public class LinkCardStatusDisplayItem extends StatusDisplayItem{
private final UrlImageLoaderRequest imgRequest; private final UrlImageLoaderRequest imgRequest;
public LinkCardStatusDisplayItem(String parentID, BaseStatusListFragment parentFragment, Status status){ public LinkCardStatusDisplayItem(String parentID, BaseStatusListFragment parentFragment, Status status){
super(parentID, status.id, parentFragment); super(parentID, parentFragment);
this.status=status; this.status=status;
if(status.card.image!=null) if(status.card.image!=null)
imgRequest=new UrlImageLoaderRequest(status.card.image, 1000, 1000); imgRequest=new UrlImageLoaderRequest(status.card.image, 1000, 1000);

View File

@ -57,7 +57,7 @@ public class MediaGridStatusDisplayItem extends StatusDisplayItem{
public String sensitiveTitle; public String sensitiveTitle;
public MediaGridStatusDisplayItem(String parentID, BaseStatusListFragment<?> parentFragment, PhotoLayoutHelper.TiledLayoutResult tiledLayout, List<Attachment> attachments, Status status){ public MediaGridStatusDisplayItem(String parentID, BaseStatusListFragment<?> parentFragment, PhotoLayoutHelper.TiledLayoutResult tiledLayout, List<Attachment> attachments, Status status){
super(parentID, status.id, parentFragment); super(parentID, parentFragment);
this.tiledLayout=tiledLayout; this.tiledLayout=tiledLayout;
this.viewPool=parentFragment.getAttachmentViewsPool(); this.viewPool=parentFragment.getAttachmentViewsPool();
this.attachments=attachments; this.attachments=attachments;

View File

@ -49,7 +49,7 @@ public class NotificationHeaderStatusDisplayItem extends StatusDisplayItem{
private final CharSequence timestamp; private final CharSequence timestamp;
public NotificationHeaderStatusDisplayItem(String parentID, BaseStatusListFragment parentFragment, Notification notification, String accountID){ public NotificationHeaderStatusDisplayItem(String parentID, BaseStatusListFragment parentFragment, Notification notification, String accountID){
super(parentID, notification.status!=null ? notification.status.getContentStatus().id : null, parentFragment); super(parentID, parentFragment);
this.notification=notification; this.notification=notification;
this.accountID=accountID; this.accountID=accountID;
this.timestamp=notification.createdAt==null ? null : UiUtils.formatRelativeTimestamp(context, notification.createdAt); this.timestamp=notification.createdAt==null ? null : UiUtils.formatRelativeTimestamp(context, notification.createdAt);

View File

@ -15,8 +15,8 @@ import org.joinmastodon.android.ui.utils.UiUtils;
public class PollFooterStatusDisplayItem extends StatusDisplayItem{ public class PollFooterStatusDisplayItem extends StatusDisplayItem{
public final Poll poll; public final Poll poll;
public PollFooterStatusDisplayItem(String parentID, String contentStatusID, BaseStatusListFragment parentFragment, Poll poll){ public PollFooterStatusDisplayItem(String parentID, BaseStatusListFragment parentFragment, Poll poll){
super(parentID, contentStatusID, parentFragment); super(parentID, parentFragment);
this.poll=poll; this.poll=poll;
} }

View File

@ -31,8 +31,8 @@ public class PollOptionStatusDisplayItem extends StatusDisplayItem{
private final int optionIndex; private final int optionIndex;
public final Poll poll; public final Poll poll;
public PollOptionStatusDisplayItem(String parentID, String contentStatusID, Poll poll, int optionIndex, BaseStatusListFragment parentFragment){ public PollOptionStatusDisplayItem(String parentID, Poll poll, int optionIndex, BaseStatusListFragment parentFragment){
super(parentID, contentStatusID, parentFragment); super(parentID, parentFragment);
this.optionIndex=optionIndex; this.optionIndex=optionIndex;
option=poll.options.get(optionIndex); option=poll.options.get(optionIndex);
this.poll=poll; this.poll=poll;

View File

@ -50,7 +50,7 @@ public class ReblogOrReplyLineStatusDisplayItem extends StatusDisplayItem{
} }
public ReblogOrReplyLineStatusDisplayItem(String parentID, BaseStatusListFragment parentFragment, CharSequence text, List<Emoji> emojis, @DrawableRes int icon, StatusPrivacy visibility, @Nullable View.OnClickListener handleClick, CharSequence fullText, Status status) { public ReblogOrReplyLineStatusDisplayItem(String parentID, BaseStatusListFragment parentFragment, CharSequence text, List<Emoji> emojis, @DrawableRes int icon, StatusPrivacy visibility, @Nullable View.OnClickListener handleClick, CharSequence fullText, Status status) {
super(parentID, status.getContentStatus().id, parentFragment); super(parentID, parentFragment);
SpannableStringBuilder ssb=new SpannableStringBuilder(text); SpannableStringBuilder ssb=new SpannableStringBuilder(text);
if(AccountSessionManager.get(parentFragment.getAccountID()).getLocalPreferences().customEmojiInNames) if(AccountSessionManager.get(parentFragment.getAccountID()).getLocalPreferences().customEmojiInNames)
HtmlParser.parseCustomEmoji(ssb, emojis); HtmlParser.parseCustomEmoji(ssb, emojis);

View File

@ -14,7 +14,7 @@ public class SectionHeaderStatusDisplayItem extends StatusDisplayItem{
public final Runnable onButtonClick; public final Runnable onButtonClick;
public SectionHeaderStatusDisplayItem(BaseStatusListFragment parentFragment, String title, String buttonText, Runnable onButtonClick){ public SectionHeaderStatusDisplayItem(BaseStatusListFragment parentFragment, String title, String buttonText, Runnable onButtonClick){
super("", null, parentFragment); super("", parentFragment);
this.title=title; this.title=title;
this.buttonText=buttonText; this.buttonText=buttonText;
this.onButtonClick=onButtonClick; this.onButtonClick=onButtonClick;

View File

@ -32,7 +32,7 @@ public class SpoilerStatusDisplayItem extends StatusDisplayItem{
private final int attachmentCount; private final int attachmentCount;
public SpoilerStatusDisplayItem(String parentID, BaseStatusListFragment<?> parentFragment, String title, Status statusForContent, Type type){ public SpoilerStatusDisplayItem(String parentID, BaseStatusListFragment<?> parentFragment, String title, Status statusForContent, Type type){
super(parentID, statusForContent.id, parentFragment); super(parentID, parentFragment);
this.status=statusForContent; this.status=statusForContent;
this.type=type; this.type=type;
this.attachmentCount=statusForContent.mediaAttachments.size(); this.attachmentCount=statusForContent.mediaAttachments.size();

View File

@ -13,6 +13,8 @@ import android.text.TextUtils;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import androidx.annotation.NonNull;
import org.joinmastodon.android.GlobalUserPreferences; import org.joinmastodon.android.GlobalUserPreferences;
import org.joinmastodon.android.R; import org.joinmastodon.android.R;
import org.joinmastodon.android.api.session.AccountLocalPreferences; import org.joinmastodon.android.api.session.AccountLocalPreferences;
@ -22,6 +24,7 @@ import org.joinmastodon.android.fragments.HashtagTimelineFragment;
import org.joinmastodon.android.fragments.HomeTabFragment; import org.joinmastodon.android.fragments.HomeTabFragment;
import org.joinmastodon.android.fragments.ListTimelineFragment; import org.joinmastodon.android.fragments.ListTimelineFragment;
import org.joinmastodon.android.fragments.ProfileFragment; import org.joinmastodon.android.fragments.ProfileFragment;
import org.joinmastodon.android.fragments.StatusListFragment;
import org.joinmastodon.android.fragments.ThreadFragment; import org.joinmastodon.android.fragments.ThreadFragment;
import org.joinmastodon.android.model.Account; import org.joinmastodon.android.model.Account;
import org.joinmastodon.android.model.Attachment; import org.joinmastodon.android.model.Attachment;
@ -53,7 +56,7 @@ import me.grishka.appkit.utils.BindableViewHolder;
import me.grishka.appkit.views.UsableRecyclerView; import me.grishka.appkit.views.UsableRecyclerView;
public abstract class StatusDisplayItem{ public abstract class StatusDisplayItem{
public final String parentID, contentStatusID; public final String parentID;
public final BaseStatusListFragment<?> parentFragment; public final BaseStatusListFragment<?> parentFragment;
public boolean inset; public boolean inset;
public int index; public int index;
@ -83,12 +86,21 @@ public abstract class StatusDisplayItem{
this.isDirectDescendant = isDirectDescendant; this.isDirectDescendant = isDirectDescendant;
} }
public StatusDisplayItem(String parentID, String contentStatusID, BaseStatusListFragment<?> parentFragment){ public StatusDisplayItem(String parentID, BaseStatusListFragment<?> parentFragment){
this.parentID=parentID; this.parentID=parentID;
this.contentStatusID=contentStatusID;
this.parentFragment=parentFragment; this.parentFragment=parentFragment;
} }
@NonNull
public String getContentID(){
if(parentFragment instanceof StatusListFragment slf){
Status s=slf.getContentStatusByID(parentID);
return s!=null ? s.id : parentID;
}else{
return parentID;
}
}
public abstract Type getType(); public abstract Type getType();
public int getImageCount(){ public int getImageCount(){
@ -246,7 +258,7 @@ public abstract class StatusDisplayItem{
}else if(!hasSpoiler && header!=null){ }else if(!hasSpoiler && header!=null){
header.needBottomPadding=true; header.needBottomPadding=true;
}else if(hasSpoiler){ }else if(hasSpoiler){
contentItems.add(new DummyStatusDisplayItem(parentID, statusForContent.id, fragment)); contentItems.add(new DummyStatusDisplayItem(parentID, fragment));
} }
List<Attachment> imageAttachments=statusForContent.mediaAttachments.stream().filter(att->att.type.isImage()).collect(Collectors.toList()); List<Attachment> imageAttachments=statusForContent.mediaAttachments.stream().filter(att->att.type.isImage()).collect(Collectors.toList());
@ -270,11 +282,11 @@ public abstract class StatusDisplayItem{
contentItems.add(new AudioStatusDisplayItem(parentID, fragment, statusForContent, att)); contentItems.add(new AudioStatusDisplayItem(parentID, fragment, statusForContent, att));
} }
if(att.type==Attachment.Type.UNKNOWN){ if(att.type==Attachment.Type.UNKNOWN){
contentItems.add(new FileStatusDisplayItem(parentID, statusForContent.id, fragment, att)); contentItems.add(new FileStatusDisplayItem(parentID, fragment, att));
} }
} }
if(statusForContent.poll!=null){ if(statusForContent.poll!=null){
buildPollItems(parentID, statusForContent.id, fragment, statusForContent.poll, contentItems); buildPollItems(parentID, fragment, statusForContent.poll, contentItems);
} }
if(statusForContent.card!=null && statusForContent.mediaAttachments.isEmpty()){ if(statusForContent.card!=null && statusForContent.mediaAttachments.isEmpty()){
contentItems.add(new LinkCardStatusDisplayItem(parentID, fragment, statusForContent)); contentItems.add(new LinkCardStatusDisplayItem(parentID, fragment, statusForContent));
@ -301,7 +313,7 @@ public abstract class StatusDisplayItem{
boolean inset=(flags & FLAG_INSET)!=0; boolean inset=(flags & FLAG_INSET)!=0;
// add inset dummy so last content item doesn't clip out of inset bounds // add inset dummy so last content item doesn't clip out of inset bounds
if((inset || footer==null) && (flags & FLAG_CHECKABLE)==0){ if((inset || footer==null) && (flags & FLAG_CHECKABLE)==0){
items.add(new DummyStatusDisplayItem(parentID, statusForContent.id, fragment)); items.add(new DummyStatusDisplayItem(parentID, fragment));
// in case we ever need the dummy to display a margin for the media grid again: // 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) // (i forgot why we apparently don't need this anymore)
// !contentItems.isEmpty() && contentItems // !contentItems.isEmpty() && contentItems
@ -322,13 +334,13 @@ public abstract class StatusDisplayItem{
new ArrayList<>(List.of(new WarningFilteredStatusDisplayItem(parentID, fragment, statusForContent, items, applyingFilter))); new ArrayList<>(List.of(new WarningFilteredStatusDisplayItem(parentID, fragment, statusForContent, items, applyingFilter)));
} }
public static void buildPollItems(String parentID, String contentStatusID, BaseStatusListFragment fragment, Poll poll, List<StatusDisplayItem> items){ public static void buildPollItems(String parentID, BaseStatusListFragment fragment, Poll poll, List<StatusDisplayItem> items){
int i=0; int i=0;
for(Poll.Option opt:poll.options){ for(Poll.Option opt:poll.options){
items.add(new PollOptionStatusDisplayItem(parentID, contentStatusID, poll, i, fragment)); items.add(new PollOptionStatusDisplayItem(parentID, poll, i, fragment));
i++; i++;
} }
items.add(new PollFooterStatusDisplayItem(parentID, contentStatusID, fragment, poll)); items.add(new PollFooterStatusDisplayItem(parentID, fragment, poll));
} }
public enum Type{ public enum Type{

View File

@ -42,7 +42,7 @@ public class TextStatusDisplayItem extends StatusDisplayItem{
public final Status status; public final Status status;
public TextStatusDisplayItem(String parentID, CharSequence text, BaseStatusListFragment parentFragment, Status status, boolean disableTranslate){ public TextStatusDisplayItem(String parentID, CharSequence text, BaseStatusListFragment parentFragment, Status status, boolean disableTranslate){
super(parentID, status.id, parentFragment); super(parentID, parentFragment);
this.text=text; this.text=text;
this.status=status; this.status=status;
this.disableTranslate=disableTranslate; this.disableTranslate=disableTranslate;

View File

@ -19,7 +19,7 @@ public class WarningFilteredStatusDisplayItem extends StatusDisplayItem{
public LegacyFilter applyingFilter; public LegacyFilter applyingFilter;
public WarningFilteredStatusDisplayItem(String parentID, BaseStatusListFragment<?> parentFragment, Status status, List<StatusDisplayItem> filteredItems, LegacyFilter applyingFilter){ public WarningFilteredStatusDisplayItem(String parentID, BaseStatusListFragment<?> parentFragment, Status status, List<StatusDisplayItem> filteredItems, LegacyFilter applyingFilter){
super(parentID, status.id, parentFragment); super(parentID, parentFragment);
this.status=status; this.status=status;
this.filteredItems = filteredItems; this.filteredItems = filteredItems;
this.applyingFilter = applyingFilter; this.applyingFilter = applyingFilter;