diff --git a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java index d8b7dcddfe093ca94bf846778563f13b79c606d7..442faea9f52ccdc07574a2397fee2f267bd65204 100644 --- a/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java +++ b/src/main/java/eu/siacs/conversations/services/XmppConnectionService.java @@ -352,6 +352,7 @@ public class XmppConnectionService extends Service { private final Set mOnMucRosterUpdate = Collections.newSetFromMap(new WeakHashMap()); private final Set mOnKeyStatusUpdated = Collections.newSetFromMap(new WeakHashMap()); private final Set onJingleRtpConnectionUpdate = Collections.newSetFromMap(new WeakHashMap()); + private final Set alreadyAttemptedSVGDownload = new HashSet<>(); private final Object LISTENER_LOCK = new Object(); @@ -1428,6 +1429,35 @@ public class XmppConnectionService extends Service { toggleForegroundService(); setupPhoneStateListener(); rescanStickers(); + com.caverock.androidsvg.SVG.registerExternalFileResolver(new com.caverock.androidsvg.SVGExternalFileResolver() { + @Override + public Bitmap resolveImage(String filename) { + final LruCache cache = getDrawableCache(); + final Drawable d = cache.get(filename); + if (d != null) return FileBackend.drawDrawable(d); + if (getLongPreference("auto_accept_file_size", R.integer.auto_accept_filesize) < 3000000) { + return null; + } + synchronized(alreadyAttemptedSVGDownload) { + if (alreadyAttemptedSVGDownload.contains(filename)) return null; + alreadyAttemptedSVGDownload.add(filename); + } + final HttpConnectionManager httpManager = getHttpConnectionManager(); + Message dummy = new Message(new Conversation(null, getAccounts().get(0), null, 0), filename, Message.ENCRYPTION_NONE); + dummy.setFileParams(new Message.FileParams(filename)); + httpManager.createNewDownloadConnection(dummy, true, (file) -> { + if (file == null) { + dummy.getTransferable().start(); + } else { + try { + int size = (int)(getResources().getDisplayMetrics().density * 288); + getFileBackend().getThumbnail(file, getResources(), size, false, filename); + } catch (final Exception e) { } + } + }); + return null; + } + }); }