From c53661242a72031d54e2ac6970c1045e126774a0 Mon Sep 17 00:00:00 2001 From: Stephen Paul Weber Date: Mon, 8 May 2023 14:10:08 -0500 Subject: [PATCH] On slow devices even blurhash decode costs enough to do on background thread --- .../conversations/persistance/FileBackend.java | 4 ++-- .../eu/siacs/conversations/ui/XmppActivity.java | 15 ++++++++------- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/src/main/java/eu/siacs/conversations/persistance/FileBackend.java b/src/main/java/eu/siacs/conversations/persistance/FileBackend.java index fc4ef397cc4f1bb7454a324cd137ba6a7daaeb77..318c5a2f1eb9bc2d33e4e6a0af7437e0e1f071fe 100644 --- a/src/main/java/eu/siacs/conversations/persistance/FileBackend.java +++ b/src/main/java/eu/siacs/conversations/persistance/FileBackend.java @@ -1076,7 +1076,7 @@ public class FileBackend { } } - public BitmapDrawable getFallbackThumbnail(final Message message, int size) { + public BitmapDrawable getFallbackThumbnail(final Message message, int size, boolean cacheOnly) { List thumbs = message.getFileParams() != null ? message.getFileParams().getThumbnails() : null; if (thumbs != null && !thumbs.isEmpty()) { for (Element thumb : thumbs) { @@ -1086,7 +1086,7 @@ public class FileBackend { if (parts[0].equals("image/blurhash")) { final LruCache cache = mXmppConnectionService.getDrawableCache(); BitmapDrawable cached = (BitmapDrawable) cache.get(parts[1]); - if (cached != null) return cached; + if (cached != null || cacheOnly) return cached; int width = message.getFileParams().width; if (width < 1 && thumb.getAttribute("width") != null) width = Integer.parseInt(thumb.getAttribute("width")); diff --git a/src/main/java/eu/siacs/conversations/ui/XmppActivity.java b/src/main/java/eu/siacs/conversations/ui/XmppActivity.java index 16e7d55080c97fc061fa451f78aa9ea190a213d8..2c1d7e0e7301d2c4d301a8e9408e0bf67f0ace01 100644 --- a/src/main/java/eu/siacs/conversations/ui/XmppActivity.java +++ b/src/main/java/eu/siacs/conversations/ui/XmppActivity.java @@ -928,7 +928,7 @@ public abstract class XmppActivity extends ActionBarActivity { imageView.setBackgroundColor(0xff333333); imageView.setImageDrawable(null); final BitmapWorkerTask task = new BitmapWorkerTask(imageView); - final BitmapDrawable fallbackThumb = xmppConnectionService.getFileBackend().getFallbackThumbnail(message, (int) (metrics.density * 288)); + final BitmapDrawable fallbackThumb = xmppConnectionService.getFileBackend().getFallbackThumbnail(message, (int) (metrics.density * 288), true); final AsyncDrawable asyncDrawable = new AsyncDrawable( getResources(), fallbackThumb != null ? fallbackThumb.getBitmap() : null, task); imageView.setImageDrawable(asyncDrawable); @@ -990,17 +990,18 @@ public abstract class XmppActivity extends ActionBarActivity { if (isCancelled()) { return null; } + final XmppActivity activity = find(imageViewReference); + Drawable d = null; message = params[0]; try { - final XmppActivity activity = find(imageViewReference); if (activity != null && activity.xmppConnectionService != null) { - return activity.xmppConnectionService.getFileBackend().getThumbnail(message, imageViewReference.get().getContext().getResources(), (int) (activity.metrics.density * 288), false); - } else { - return null; + d = activity.xmppConnectionService.getFileBackend().getThumbnail(message, imageViewReference.get().getContext().getResources(), (int) (activity.metrics.density * 288), false); } - } catch (IOException e) { - return null; + } catch (IOException e) { } + if (activity != null && activity.xmppConnectionService != null) { + d = d == null ? activity.xmppConnectionService.getFileBackend().getFallbackThumbnail(message, (int) (activity.metrics.density * 288), false) : d; } + return d; } @Override