From fcc67c6918345758751a88b3eb475491fd5eb45e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Hru=C5=A1ka?= Date: Sat, 16 Feb 2019 14:31:41 +0100 Subject: [PATCH] Fix large image attachments not showing (#1043) * fix for too large image attachments not fitting into GL texture * Don't use context!! --- .../tusky/adapter/StatusBaseViewHolder.java | 12 ++++++++++++ .../tusky/fragment/AccountMediaFragment.kt | 7 +++++++ .../tusky/fragment/ViewImageFragment.kt | 11 +++++++++++ app/src/main/res/values/integers.xml | 6 +++++- 4 files changed, 35 insertions(+), 1 deletion(-) 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 7f1d1a2d..313d4671 100644 --- a/app/src/main/java/com/keylesspalace/tusky/adapter/StatusBaseViewHolder.java +++ b/app/src/main/java/com/keylesspalace/tusky/adapter/StatusBaseViewHolder.java @@ -284,6 +284,9 @@ public abstract class StatusBaseViewHolder extends RecyclerView.ViewHolder { final int n = Math.min(attachments.size(), Status.MAX_MEDIA_ATTACHMENTS); + final int maxW = context.getResources().getInteger(R.integer.media_max_width); + final int maxH = context.getResources().getInteger(R.integer.media_max_height); + for (int i = 0; i < n; i++) { String previewUrl = attachments.get(i).getPreviewUrl(); String description = attachments.get(i).getDescription(); @@ -299,6 +302,9 @@ public abstract class StatusBaseViewHolder extends RecyclerView.ViewHolder { if (TextUtils.isEmpty(previewUrl)) { Picasso.with(context) .load(mediaPreviewUnloadedId) + .resize(maxW, maxH) + .onlyScaleDown() + .centerInside() .into(mediaPreviews[i]); } else { MetaData meta = attachments.get(i).getMeta(); @@ -310,6 +316,9 @@ public abstract class StatusBaseViewHolder extends RecyclerView.ViewHolder { Picasso.with(context) .load(previewUrl) .placeholder(mediaPreviewUnloadedId) + .resize(maxW, maxH) + .onlyScaleDown() + .centerInside() // Also pass the mediaPreview as a callback to ensure it is called // initially when the image gets loaded: .into(mediaPreviews[i], mediaPreviews[i]); @@ -319,6 +328,9 @@ public abstract class StatusBaseViewHolder extends RecyclerView.ViewHolder { Picasso.with(context) .load(previewUrl) .placeholder(mediaPreviewUnloadedId) + .resize(maxW, maxH) + .onlyScaleDown() + .centerInside() .into(mediaPreviews[i]); } } 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 aa928914..0c04ec2a 100644 --- a/app/src/main/java/com/keylesspalace/tusky/fragment/AccountMediaFragment.kt +++ b/app/src/main/java/com/keylesspalace/tusky/fragment/AccountMediaFragment.kt @@ -301,8 +301,15 @@ class AccountMediaFragment : BaseFragment(), Injectable { itemBgBaseHSV[2] = random.nextFloat() * (1f - 0.3f) + 0.3f holder.imageView.setBackgroundColor(Color.HSVToColor(itemBgBaseHSV)) val item = items[position] + + val maxW = holder.imageView.context.resources.getInteger(R.integer.media_max_width) + val maxH = holder.imageView.context.resources.getInteger(R.integer.media_max_height) + Picasso.with(holder.imageView.context) .load(item.attachment.previewUrl) + .resize(maxW, maxH) + .onlyScaleDown() + .centerInside() .into(holder.imageView) } diff --git a/app/src/main/java/com/keylesspalace/tusky/fragment/ViewImageFragment.kt b/app/src/main/java/com/keylesspalace/tusky/fragment/ViewImageFragment.kt index 8e4250fe..5fdec672 100644 --- a/app/src/main/java/com/keylesspalace/tusky/fragment/ViewImageFragment.kt +++ b/app/src/main/java/com/keylesspalace/tusky/fragment/ViewImageFragment.kt @@ -74,6 +74,9 @@ class ViewImageFragment : ViewMediaFragment() { result } + val maxW = photoView.context.resources.getInteger(R.integer.media_max_width) + val maxH = photoView.context.resources.getInteger(R.integer.media_max_height) + // If we are the view to be shown initially... if (arguments!!.getBoolean(ViewMediaFragment.ARG_START_POSTPONED_TRANSITION)) { // Try to load image from disk. @@ -81,6 +84,9 @@ class ViewImageFragment : ViewMediaFragment() { .load(url) .noFade() .networkPolicy(NetworkPolicy.OFFLINE) + .resize(maxW, maxH) + .onlyScaleDown() + .centerInside() .into(photoView, object : Callback { override fun onSuccess() { // if we loaded image from disk, we should check that view is attached. @@ -169,10 +175,15 @@ class ViewImageFragment : ViewMediaFragment() { } private fun loadImageFromNetwork(url: String, photoView: ImageView) { + val maxW = photoView.context.resources.getInteger(R.integer.media_max_width) + val maxH = photoView.context.resources.getInteger(R.integer.media_max_height) + Picasso.with(context) .load(url) .noPlaceholder() .networkPolicy(NetworkPolicy.NO_STORE) + .resize(maxW, maxH) + .onlyScaleDown() .into(photoView, object : Callback { override fun onSuccess() { finishLoadingSuccessfully() diff --git a/app/src/main/res/values/integers.xml b/app/src/main/res/values/integers.xml index 572304c6..60893e5c 100644 --- a/app/src/main/res/values/integers.xml +++ b/app/src/main/res/values/integers.xml @@ -1,4 +1,8 @@ 3 - \ No newline at end of file + + + 1920 + 1920 +