public Bitmap getThumbnail(Message message, int size, boolean cacheOnly) throws FileNotFoundException { final String uuid = message.getUuid(); final LruCache<String, Bitmap> cache = mXmppConnectionService.getBitmapCache(); Bitmap thumbnail = cache.get(uuid); if ((thumbnail == null) && (!cacheOnly)) { synchronized (cache) { thumbnail = cache.get(uuid); if (thumbnail != null) { return thumbnail; } DownloadableFile file = getFile(message); if (file.getMimeType().startsWith("video/")) { thumbnail = getVideoPreview(file, size); } else { Bitmap fullsize = getFullsizeImagePreview(file, size); if (fullsize == null) { throw new FileNotFoundException(); } thumbnail = resize(fullsize, size); thumbnail = rotate(thumbnail, getRotation(file)); } this.mXmppConnectionService.getBitmapCache().put(uuid, thumbnail); } } return thumbnail; }
public DownloadableFile getFile(Message message, boolean decrypted) { final boolean encrypted = !decrypted && (message.getEncryption() == Message.ENCRYPTION_PGP || message.getEncryption() == Message.ENCRYPTION_DECRYPTED); final DownloadableFile file; String path = message.getRelativeFilePath(); if (path == null) { String filename = fileDateFormat.format(new Date(message.getTimeSent())) + "_" + message.getUuid().substring(0, 4); path = filename; } if (path.startsWith("/")) { file = new DownloadableFile(path); } else { String mime = message.getMimeType(); if (mime != null && mime.startsWith("image")) { file = new DownloadableFile(getConversationsImageDirectory() + path); } else if (mime != null && mime.startsWith("video")) { file = new DownloadableFile(getConversationsVideoDirectory() + path); } else if (mime != null && mime.startsWith("audio")) { file = new DownloadableFile(getConversationsAudioDirectory() + path); } else { file = new DownloadableFile(getConversationsFileDirectory() + path); } } if (encrypted) { return new DownloadableFile(getConversationsFileDirectory() + file.getName() + ".pgp"); } else { return file; } }
public void updateFileParams(Message message, URL url) { DownloadableFile file = getFile(message); final String mime = file.getMimeType(); boolean image = message.getType() == Message.TYPE_IMAGE || (mime != null && mime.startsWith("image/")); boolean video = mime != null && mime.startsWith("video/"); if (image || video) { try { Dimensions dimensions = image ? getImageDimensions(file) : getVideoDimensions(file); if (url == null) { message.setBody( Long.toString(file.getSize()) + '|' + dimensions.width + '|' + dimensions.height); } else { message.setBody( url.toString() + "|" + Long.toString(file.getSize()) + '|' + dimensions.width + '|' + dimensions.height); } return; } catch (NotAVideoFile notAVideoFile) { Log.d(Config.LOGTAG, "file with mime type " + file.getMimeType() + " was not a video file"); // fall threw } } if (url != null) { message.setBody(url.toString() + "|" + Long.toString(file.getSize())); } else { message.setBody(Long.toString(file.getSize())); } }