synchronize around thumbnail cache to avoid loading images twice

This commit is contained in:
Daniel Gultsch 2016-04-28 20:15:28 +02:00
parent 1d2e2f71c2
commit 252d015b71

View file

@ -20,6 +20,7 @@ import android.system.StructStat;
import android.util.Base64; import android.util.Base64;
import android.util.Base64OutputStream; import android.util.Base64OutputStream;
import android.util.Log; import android.util.Log;
import android.util.LruCache;
import android.webkit.MimeTypeMap; import android.webkit.MimeTypeMap;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
@ -344,20 +345,28 @@ public class FileBackend {
} }
} }
public Bitmap getThumbnail(Message message, int size, boolean cacheOnly) public Bitmap getThumbnail(Message message, int size, boolean cacheOnly) throws FileNotFoundException {
throws FileNotFoundException { final String uuid = message.getUuid();
Bitmap thumbnail = mXmppConnectionService.getBitmapCache().get(message.getUuid()); final LruCache<String,Bitmap> cache = mXmppConnectionService.getBitmapCache();
Log.d(Config.LOGTAG,"get thumbnail for "+uuid+" cacheOnly="+Boolean.toString(cacheOnly));
Bitmap thumbnail = cache.get(uuid);
if ((thumbnail == null) && (!cacheOnly)) { if ((thumbnail == null) && (!cacheOnly)) {
synchronized (cache) {
thumbnail = cache.get(uuid);
if (thumbnail != null) {
return thumbnail;
}
File file = getFile(message); File file = getFile(message);
BitmapFactory.Options options = new BitmapFactory.Options(); BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = calcSampleSize(file, size); options.inSampleSize = calcSampleSize(file, size);
Bitmap fullsize = BitmapFactory.decodeFile(file.getAbsolutePath(),options); Bitmap fullsize = BitmapFactory.decodeFile(file.getAbsolutePath(), options);
if (fullsize == null) { if (fullsize == null) {
throw new FileNotFoundException(); throw new FileNotFoundException();
} }
thumbnail = resize(fullsize, size); thumbnail = resize(fullsize, size);
thumbnail = rotate(thumbnail, getRotation(file)); thumbnail = rotate(thumbnail, getRotation(file));
this.mXmppConnectionService.getBitmapCache().put(message.getUuid(),thumbnail); this.mXmppConnectionService.getBitmapCache().put(uuid, thumbnail);
}
} }
return thumbnail; return thumbnail;
} }