|
@@ -286,56 +286,68 @@ public final class ThumbnailsCacheManager {
|
|
|
protected Bitmap doInBackground(Object... params) {
|
|
|
Bitmap thumbnail;
|
|
|
|
|
|
- file = (OCFile) params[0];
|
|
|
+ if (params == null || params.length == 0 || !(params[0] instanceof OCFile)) {
|
|
|
+ Log_OC.d(TAG, "Downloaded file is null or is not an instance of OCFile");
|
|
|
+ return null;
|
|
|
+ }
|
|
|
|
|
|
+ file = (OCFile) params[0];
|
|
|
|
|
|
- if (file.getRemoteId() != null && file.isPreviewAvailable()) {
|
|
|
+ if (file.getRemoteId() != null || file.isPreviewAvailable()) {
|
|
|
// Thumbnail in cache?
|
|
|
thumbnail = ThumbnailsCacheManager.getBitmapFromDiskCache(
|
|
|
- ThumbnailsCacheManager.PREFIX_RESIZED_IMAGE + file.getRemoteId()
|
|
|
- );
|
|
|
-
|
|
|
- if (thumbnail != null && !file.isUpdateThumbnailNeeded()) {
|
|
|
- Float size = (float) ThumbnailsCacheManager.getThumbnailDimension();
|
|
|
-
|
|
|
- // resized dimensions
|
|
|
- ImageDimension imageDimension = file.getImageDimension();
|
|
|
- if (imageDimension == null ||
|
|
|
- imageDimension.getWidth() != size ||
|
|
|
- imageDimension.getHeight() != size) {
|
|
|
- file.setImageDimension(new ImageDimension(thumbnail.getWidth(), thumbnail.getHeight()));
|
|
|
- storageManager.saveFile(file);
|
|
|
- }
|
|
|
+ ThumbnailsCacheManager.PREFIX_RESIZED_IMAGE + file.getRemoteId());
|
|
|
|
|
|
- if (MimeTypeUtil.isVideo(file)) {
|
|
|
- return ThumbnailsCacheManager.addVideoOverlay(thumbnail, MainApp.getAppContext());
|
|
|
- } else {
|
|
|
- return thumbnail;
|
|
|
- }
|
|
|
- } else {
|
|
|
- try {
|
|
|
- mClient = OwnCloudClientManagerFactory.getDefaultSingleton().getClientFor(user.toOwnCloudAccount(),
|
|
|
- MainApp.getAppContext());
|
|
|
+ if (thumbnail != null && !file.isUpdateThumbnailNeeded())
|
|
|
+ return getThumbnailFromCache(thumbnail);
|
|
|
|
|
|
- thumbnail = doResizedImageInBackground(file, storageManager);
|
|
|
- newImage = true;
|
|
|
+ return getThumbnailFromServerAndAddToCache(thumbnail);
|
|
|
+ }
|
|
|
|
|
|
- if (MimeTypeUtil.isVideo(file) && thumbnail != null) {
|
|
|
- thumbnail = addVideoOverlay(thumbnail, MainApp.getAppContext());
|
|
|
- }
|
|
|
+ Log_OC.d(TAG, "File cannot be previewed");
|
|
|
+ return null;
|
|
|
+ }
|
|
|
|
|
|
- } catch (OutOfMemoryError oome) {
|
|
|
- Log_OC.e(TAG, "Out of memory");
|
|
|
- } catch (Throwable t) {
|
|
|
- // the app should never break due to a problem with thumbnails
|
|
|
- Log_OC.e(TAG, "Generation of gallery image for " + file + " failed", t);
|
|
|
- }
|
|
|
+ @Nullable
|
|
|
+ private Bitmap getThumbnailFromServerAndAddToCache(Bitmap thumbnail) {
|
|
|
+ try {
|
|
|
+ mClient = OwnCloudClientManagerFactory.getDefaultSingleton().getClientFor(user.toOwnCloudAccount(),
|
|
|
+ MainApp.getAppContext());
|
|
|
+
|
|
|
+ thumbnail = doResizedImageInBackground(file, storageManager);
|
|
|
+ newImage = true;
|
|
|
|
|
|
- return thumbnail;
|
|
|
+ if (MimeTypeUtil.isVideo(file) && thumbnail != null) {
|
|
|
+ thumbnail = addVideoOverlay(thumbnail, MainApp.getAppContext());
|
|
|
}
|
|
|
+
|
|
|
+ } catch (OutOfMemoryError oome) {
|
|
|
+ Log_OC.e(TAG, "Out of memory");
|
|
|
+ } catch (Throwable t) {
|
|
|
+ // the app should never break due to a problem with thumbnails
|
|
|
+ Log_OC.e(TAG, "Generation of gallery image for " + file + " failed", t);
|
|
|
}
|
|
|
|
|
|
- return null;
|
|
|
+ return thumbnail;
|
|
|
+ }
|
|
|
+
|
|
|
+ private Bitmap getThumbnailFromCache(Bitmap thumbnail) {
|
|
|
+ float size = (float) ThumbnailsCacheManager.getThumbnailDimension();
|
|
|
+
|
|
|
+ // resized dimensions
|
|
|
+ ImageDimension imageDimension = file.getImageDimension();
|
|
|
+ if (imageDimension == null ||
|
|
|
+ imageDimension.getWidth() != size ||
|
|
|
+ imageDimension.getHeight() != size) {
|
|
|
+ file.setImageDimension(new ImageDimension(thumbnail.getWidth(), thumbnail.getHeight()));
|
|
|
+ storageManager.saveFile(file);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (MimeTypeUtil.isVideo(file)) {
|
|
|
+ return ThumbnailsCacheManager.addVideoOverlay(thumbnail, MainApp.getAppContext());
|
|
|
+ } else {
|
|
|
+ return thumbnail;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
protected void onPostExecute(Bitmap bitmap) {
|
|
@@ -1423,9 +1435,10 @@ public final class ThumbnailsCacheManager {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- // resized dimensions
|
|
|
+ // resized dimensions and set update thumbnail needed to false to prevent rendering loop
|
|
|
if (thumbnail != null) {
|
|
|
file.setImageDimension(new ImageDimension(thumbnail.getWidth(), thumbnail.getHeight()));
|
|
|
+ file.setUpdateThumbnailNeeded(false);
|
|
|
storageManager.saveFile(file);
|
|
|
}
|
|
|
}
|