megalodon/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/StatusDisplayItem.java

92 lines
3.1 KiB
Java
Raw Normal View History

2022-01-17 11:27:34 +01:00
package org.joinmastodon.android.ui.displayitems;
import android.app.Activity;
import android.app.Fragment;
import android.text.TextUtils;
import android.view.ViewGroup;
2022-01-24 00:56:57 +01:00
import org.joinmastodon.android.R;
2022-02-08 11:25:17 +01:00
import org.joinmastodon.android.fragments.BaseStatusListFragment;
2022-01-17 11:27:34 +01:00
import org.joinmastodon.android.model.Attachment;
2022-01-24 00:56:57 +01:00
import org.joinmastodon.android.model.DisplayItemsParent;
2022-01-17 11:27:34 +01:00
import org.joinmastodon.android.model.Status;
2022-01-17 19:50:48 +01:00
import org.joinmastodon.android.ui.text.HtmlParser;
2022-01-17 11:27:34 +01:00
import java.util.ArrayList;
import me.grishka.appkit.imageloader.requests.ImageLoaderRequest;
import me.grishka.appkit.utils.BindableViewHolder;
public abstract class StatusDisplayItem{
2022-01-24 00:56:57 +01:00
public final String parentID;
2022-02-08 11:25:17 +01:00
public final BaseStatusListFragment parentFragment;
2022-01-17 11:27:34 +01:00
2022-02-08 11:25:17 +01:00
public StatusDisplayItem(String parentID, BaseStatusListFragment parentFragment){
2022-01-24 00:56:57 +01:00
this.parentID=parentID;
2022-02-08 11:25:17 +01:00
this.parentFragment=parentFragment;
2022-01-17 11:27:34 +01:00
}
public abstract Type getType();
public int getImageCount(){
return 0;
}
public ImageLoaderRequest getImageRequest(int index){
return null;
}
public static BindableViewHolder<? extends StatusDisplayItem> createViewHolder(Type type, Activity activity, ViewGroup parent){
return switch(type){
case HEADER -> new HeaderStatusDisplayItem.Holder(activity, parent);
case REBLOG_OR_REPLY_LINE -> new ReblogOrReplyLineStatusDisplayItem.Holder(activity, parent);
case TEXT -> new TextStatusDisplayItem.Holder(activity, parent);
case PHOTO -> new PhotoStatusDisplayItem.Holder(activity, parent);
case FOOTER -> new FooterStatusDisplayItem.Holder(activity, parent);
2022-01-17 11:27:34 +01:00
default -> throw new UnsupportedOperationException();
};
}
2022-02-08 11:25:17 +01:00
public static ArrayList<StatusDisplayItem> buildItems(BaseStatusListFragment fragment, Status status, String accountID, DisplayItemsParent parentObject){
2022-01-24 00:56:57 +01:00
String parentID=parentObject.getID();
2022-01-17 11:27:34 +01:00
ArrayList<StatusDisplayItem> items=new ArrayList<>();
2022-02-03 07:00:56 +01:00
Status statusForContent=status.getContentStatus();
2022-01-17 11:27:34 +01:00
if(status.reblog!=null){
2022-02-08 11:25:17 +01:00
items.add(new ReblogOrReplyLineStatusDisplayItem(parentID, fragment, fragment.getString(R.string.user_boosted, status.account.displayName)));
2022-01-17 11:27:34 +01:00
}
2022-01-24 00:56:57 +01:00
items.add(new HeaderStatusDisplayItem(parentID, statusForContent.account, statusForContent.createdAt, fragment, accountID));
2022-01-17 11:27:34 +01:00
if(!TextUtils.isEmpty(statusForContent.content))
2022-01-24 00:56:57 +01:00
items.add(new TextStatusDisplayItem(parentID, HtmlParser.parse(statusForContent.content, statusForContent.emojis), fragment));
2022-02-02 14:23:09 +01:00
int photoIndex=0;
int totalPhotos=0;
2022-01-17 11:27:34 +01:00
for(Attachment attachment:statusForContent.mediaAttachments){
if(attachment.type==Attachment.Type.IMAGE){
2022-02-02 14:23:09 +01:00
totalPhotos++;
}
}
for(Attachment attachment:statusForContent.mediaAttachments){
if(attachment.type==Attachment.Type.IMAGE){
items.add(new PhotoStatusDisplayItem(parentID, status, attachment, fragment, photoIndex, totalPhotos));
photoIndex++;
2022-01-17 11:27:34 +01:00
}
}
2022-02-08 11:25:17 +01:00
items.add(new FooterStatusDisplayItem(parentID, fragment, statusForContent, accountID));
2022-01-17 11:27:34 +01:00
return items;
}
public enum Type{
HEADER,
REBLOG_OR_REPLY_LINE,
TEXT,
PHOTO,
VIDEO,
GIFV,
AUDIO,
POLL_HEADER,
POLL_OPTION,
POLL_FOOTER,
CARD,
FOOTER,
}
}