From baa915a0a3d3a5b9204e527dcb526559731a0fc8 Mon Sep 17 00:00:00 2001 From: Levi Bard Date: Mon, 18 Jan 2021 13:53:13 +0100 Subject: [PATCH] Support opening unknown attachment types via `openLink` (#2044) * Support opening unknown attachment types via openLink. #1970 * Fix label text for unknown attachment types --- .../tusky/adapter/StatusBaseViewHolder.java | 13 +++++++------ .../conversation/ConversationViewHolder.java | 2 +- .../search/fragments/SearchStatusesFragment.kt | 2 ++ .../tusky/fragment/AccountMediaFragment.kt | 7 +++---- .../com/keylesspalace/tusky/fragment/SFragment.java | 6 +++--- .../keylesspalace/tusky/util/StatusViewHelper.kt | 6 ++++-- app/src/main/res/values/strings.xml | 2 ++ 7 files changed, 22 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/com/keylesspalace/tusky/adapter/StatusBaseViewHolder.java b/app/src/main/java/com/keylesspalace/tusky/adapter/StatusBaseViewHolder.java index 046ab9cf..5bce0624 100644 --- a/app/src/main/java/com/keylesspalace/tusky/adapter/StatusBaseViewHolder.java +++ b/app/src/main/java/com/keylesspalace/tusky/adapter/StatusBaseViewHolder.java @@ -533,7 +533,6 @@ public abstract class StatusBaseViewHolder extends RecyclerView.ViewHolder { @DrawableRes private static int getLabelIcon(Attachment.Type type) { switch (type) { - default: case IMAGE: return R.drawable.ic_photo_24dp; case GIFV: @@ -541,6 +540,8 @@ public abstract class StatusBaseViewHolder extends RecyclerView.ViewHolder { return R.drawable.ic_videocam_24dp; case AUDIO: return R.drawable.ic_music_box_24dp; + default: + return R.drawable.ic_attach_file_24dp; } } @@ -718,7 +719,7 @@ public abstract class StatusBaseViewHolder extends RecyclerView.ViewHolder { setBookmarked(status.isBookmarked()); List attachments = status.getAttachments(); boolean sensitive = status.isSensitive(); - if (statusDisplayOptions.mediaPreviewEnabled() && !hasAudioAttachment(attachments)) { + if (statusDisplayOptions.mediaPreviewEnabled() && hasPreviewableAttachment(attachments)) { setMediaPreviews(attachments, sensitive, listener, status.isShowingContent(), statusDisplayOptions.useBlurhash()); if (attachments.size() == 0) { @@ -767,13 +768,13 @@ public abstract class StatusBaseViewHolder extends RecyclerView.ViewHolder { } } - protected static boolean hasAudioAttachment(List attachments) { + protected static boolean hasPreviewableAttachment(List attachments) { for (Attachment attachment : attachments) { - if (attachment.getType() == Attachment.Type.AUDIO) { - return true; + if (attachment.getType() == Attachment.Type.AUDIO || attachment.getType() == Attachment.Type.UNKNOWN) { + return false; } } - return false; + return true; } private void setDescriptionForStatus(@NonNull StatusViewData.Concrete status, diff --git a/app/src/main/java/com/keylesspalace/tusky/components/conversation/ConversationViewHolder.java b/app/src/main/java/com/keylesspalace/tusky/components/conversation/ConversationViewHolder.java index 6727156d..19ef749e 100644 --- a/app/src/main/java/com/keylesspalace/tusky/components/conversation/ConversationViewHolder.java +++ b/app/src/main/java/com/keylesspalace/tusky/components/conversation/ConversationViewHolder.java @@ -83,7 +83,7 @@ public class ConversationViewHolder extends StatusBaseViewHolder { setBookmarked(status.getBookmarked()); List attachments = status.getAttachments(); boolean sensitive = status.getSensitive(); - if (statusDisplayOptions.mediaPreviewEnabled() && !hasAudioAttachment(attachments)) { + if (statusDisplayOptions.mediaPreviewEnabled() && hasPreviewableAttachment(attachments)) { setMediaPreviews(attachments, sensitive, listener, status.getShowingHiddenContent(), statusDisplayOptions.useBlurhash()); diff --git a/app/src/main/java/com/keylesspalace/tusky/components/search/fragments/SearchStatusesFragment.kt b/app/src/main/java/com/keylesspalace/tusky/components/search/fragments/SearchStatusesFragment.kt index 5fbbc715..bc7ac2ba 100644 --- a/app/src/main/java/com/keylesspalace/tusky/components/search/fragments/SearchStatusesFragment.kt +++ b/app/src/main/java/com/keylesspalace/tusky/components/search/fragments/SearchStatusesFragment.kt @@ -54,6 +54,7 @@ import com.keylesspalace.tusky.interfaces.AccountSelectionListener import com.keylesspalace.tusky.interfaces.StatusActionListener import com.keylesspalace.tusky.settings.PrefKeys import com.keylesspalace.tusky.util.CardViewMode +import com.keylesspalace.tusky.util.LinkHelper import com.keylesspalace.tusky.util.NetworkState import com.keylesspalace.tusky.util.StatusDisplayOptions import com.keylesspalace.tusky.view.showMuteAccountDialog @@ -143,6 +144,7 @@ class SearchStatusesFragment : SearchFragment { + LinkHelper.openLink(actionable.attachments[attachmentIndex].url, context) } } diff --git a/app/src/main/java/com/keylesspalace/tusky/fragment/AccountMediaFragment.kt b/app/src/main/java/com/keylesspalace/tusky/fragment/AccountMediaFragment.kt index ed1fbad8..0ae20758 100644 --- a/app/src/main/java/com/keylesspalace/tusky/fragment/AccountMediaFragment.kt +++ b/app/src/main/java/com/keylesspalace/tusky/fragment/AccountMediaFragment.kt @@ -34,6 +34,7 @@ import com.keylesspalace.tusky.entity.Attachment import com.keylesspalace.tusky.entity.Status import com.keylesspalace.tusky.interfaces.RefreshableFragment import com.keylesspalace.tusky.network.MastodonApi +import com.keylesspalace.tusky.util.LinkHelper import com.keylesspalace.tusky.util.ThemeUtils import com.keylesspalace.tusky.util.hide import com.keylesspalace.tusky.util.show @@ -260,10 +261,8 @@ class AccountMediaFragment : BaseFragment(), RefreshableFragment, Injectable { } } Attachment.Type.UNKNOWN -> { - }/* Intentionally do nothing. This case is here is to handle when new attachment - * types are added to the API before code is added here to handle them. So, the - * best fallback is to just show the preview and ignore requests to view them. */ - + LinkHelper.openLink(items[currentIndex].attachment.url, context) + } } } diff --git a/app/src/main/java/com/keylesspalace/tusky/fragment/SFragment.java b/app/src/main/java/com/keylesspalace/tusky/fragment/SFragment.java index e1d50437..4c50740b 100644 --- a/app/src/main/java/com/keylesspalace/tusky/fragment/SFragment.java +++ b/app/src/main/java/com/keylesspalace/tusky/fragment/SFragment.java @@ -63,6 +63,7 @@ import com.keylesspalace.tusky.entity.PollOption; import com.keylesspalace.tusky.entity.Status; import com.keylesspalace.tusky.network.MastodonApi; import com.keylesspalace.tusky.network.TimelineCases; +import com.keylesspalace.tusky.util.LinkHelper; import com.keylesspalace.tusky.view.MuteAccountDialog; import com.keylesspalace.tusky.viewdata.AttachmentViewData; @@ -395,10 +396,9 @@ public abstract class SFragment extends BaseFragment implements Injectable { } break; } + default: case UNKNOWN: { - /* Intentionally do nothing. This case is here is to handle when new attachment - * types are added to the API before code is added here to handle them. So, the - * best fallback is to just show the preview and ignore requests to view them. */ + LinkHelper.openLink(active.getUrl(), getContext()); break; } } diff --git a/app/src/main/java/com/keylesspalace/tusky/util/StatusViewHelper.kt b/app/src/main/java/com/keylesspalace/tusky/util/StatusViewHelper.kt index 2fb9ad42..db0441bd 100644 --- a/app/src/main/java/com/keylesspalace/tusky/util/StatusViewHelper.kt +++ b/app/src/main/java/com/keylesspalace/tusky/util/StatusViewHelper.kt @@ -228,7 +228,8 @@ class StatusViewHelper(private val itemView: View) { return when (type) { Attachment.Type.IMAGE -> context.getString(R.string.status_media_images) Attachment.Type.GIFV, Attachment.Type.VIDEO -> context.getString(R.string.status_media_video) - else -> context.getString(R.string.status_media_images) + Attachment.Type.AUDIO -> context.getString(R.string.status_media_audio) + else -> context.getString(R.string.status_media_attachments) } } @@ -237,7 +238,8 @@ class StatusViewHelper(private val itemView: View) { return when (type) { Attachment.Type.IMAGE -> R.drawable.ic_photo_24dp Attachment.Type.GIFV, Attachment.Type.VIDEO -> R.drawable.ic_videocam_24dp - else -> R.drawable.ic_photo_24dp + Attachment.Type.AUDIO -> R.drawable.ic_music_box_24dp + else -> R.drawable.ic_attach_file_24dp } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 7f1ec78f..6b08043e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -326,6 +326,8 @@ Share link to toot Images Video + Audio + Attachments Follow requested