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 new file mode 100644 index 000000000..1d460a3e9 --- /dev/null +++ b/mastodon/src/main/java/org/joinmastodon/android/ui/displayitems/FileStatusDisplayItem.java @@ -0,0 +1,58 @@ +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); + this.attachment=attachment; + } + + @Override + public Type getType() { + return Type.FILE; + } + + public static class Holder extends StatusDisplayItem.Holder { + private final TextView title, domain; + + public Holder(Context context, ViewGroup parent) { + super(context, R.layout.display_item_file, parent); + title=findViewById(R.id.title); + domain=findViewById(R.id.domain); + findViewById(R.id.inner).setOnClickListener(this::onClick); + } + + @Override + public void onBind(FileStatusDisplayItem item) { + title.setText(item.attachment.description == null + ? title.getContext().getText(R.string.sk_attachment) + : item.attachment.description); + domain.setText(Uri.parse(item.attachment.url).getHost()); + } + + private void onClick(View v) { + UiUtils.openURL(itemView.getContext(), item.parentFragment.getAccountID(), item.attachment.url); + } + } +} + 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 69d3786c8..8014853b0 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 @@ -78,6 +78,7 @@ public abstract class StatusDisplayItem{ case EXTENDED_FOOTER -> new ExtendedFooterStatusDisplayItem.Holder(activity, parent); case MEDIA_GRID -> new MediaGridStatusDisplayItem.Holder(activity, parent); case WARNING -> new WarningFilteredStatusDisplayItem.Holder(activity, parent); + case FILE -> new FileStatusDisplayItem.Holder(activity, parent); }; } @@ -171,7 +172,10 @@ public abstract class StatusDisplayItem{ replyLine.needBottomPadding=true; else header.needBottomPadding=true; - List imageAttachments=statusForContent.mediaAttachments.stream().filter(att->att.type.isImage()).collect(Collectors.toList()); + + List imageAttachments=statusForContent.mediaAttachments.stream() + .filter(att->att.type.isImage() && !att.type.equals(Attachment.Type.UNKNOWN)) + .collect(Collectors.toList()); if(!imageAttachments.isEmpty()){ PhotoLayoutHelper.TiledLayoutResult layout=PhotoLayoutHelper.processThumbs(imageAttachments); items.add(new MediaGridStatusDisplayItem(parentID, fragment, layout, imageAttachments, statusForContent)); @@ -181,6 +185,12 @@ public abstract class StatusDisplayItem{ items.add(new AudioStatusDisplayItem(parentID, fragment, statusForContent, att)); } } + + statusForContent.mediaAttachments.stream() + .filter(att->att.type.equals(Attachment.Type.UNKNOWN)) + .map(att -> new FileStatusDisplayItem(parentID, fragment, att)) + .forEach(items::add); + if(statusForContent.poll!=null){ buildPollItems(parentID, fragment, statusForContent.poll, items); } @@ -230,7 +240,8 @@ public abstract class StatusDisplayItem{ GAP, EXTENDED_FOOTER, MEDIA_GRID, - WARNING + WARNING, + FILE } public static abstract class Holder extends BindableViewHolder implements UsableRecyclerView.DisableableClickable{ diff --git a/mastodon/src/main/res/drawable/bg_search_button.xml b/mastodon/src/main/res/drawable/bg_search_button.xml new file mode 100644 index 000000000..9b7d630ff --- /dev/null +++ b/mastodon/src/main/res/drawable/bg_search_button.xml @@ -0,0 +1,11 @@ + + + + + + + + + diff --git a/mastodon/src/main/res/drawable/ic_fluent_attach_24_regular.xml b/mastodon/src/main/res/drawable/ic_fluent_attach_24_regular.xml new file mode 100644 index 000000000..7c31688d8 --- /dev/null +++ b/mastodon/src/main/res/drawable/ic_fluent_attach_24_regular.xml @@ -0,0 +1,9 @@ + + + diff --git a/mastodon/src/main/res/layout/display_item_file.xml b/mastodon/src/main/res/layout/display_item_file.xml new file mode 100644 index 000000000..f206777ba --- /dev/null +++ b/mastodon/src/main/res/layout/display_item_file.xml @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + diff --git a/mastodon/src/main/res/values-de-rDE/strings_sk.xml b/mastodon/src/main/res/values-de-rDE/strings_sk.xml index d828668c7..15d77d62c 100644 --- a/mastodon/src/main/res/values-de-rDE/strings_sk.xml +++ b/mastodon/src/main/res/values-de-rDE/strings_sk.xml @@ -274,4 +274,5 @@ Vor dem Teilen bestätigen hat reagiert hat mit %s reagiert + Anhang \ No newline at end of file diff --git a/mastodon/src/main/res/values/strings_sk.xml b/mastodon/src/main/res/values/strings_sk.xml index 6eae86635..cafbe7de6 100644 --- a/mastodon/src/main/res/values/strings_sk.xml +++ b/mastodon/src/main/res/values/strings_sk.xml @@ -286,4 +286,5 @@ Allows setting a content type like Markdown when creating a post. Keep in mind that not all instances support this. Default content type This lets you have a content type be pre-selected when creating new posts, overriding the value set in “Posting preferences”. + Attachment \ No newline at end of file