Skip to content

Commit

Permalink
Merge pull request #13539 from nextcloud/backport/13487/stable-3.30
Browse files Browse the repository at this point in the history
[stable-3.30] BugFix - Check Thumbnail Existence and Shimmering
  • Loading branch information
AndyScherzinger authored Sep 9, 2024
2 parents c8a7b4f + ede6c9e commit 6da7768
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 21 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -1015,6 +1015,15 @@ public long getLastTimestamp() {
return lastTimestamp;
}

@Override
public void onViewRecycled(@NonNull RecyclerView.ViewHolder holder) {
super.onViewRecycled(holder);
if (holder instanceof ListGridImageViewHolder listGridImageViewHolder) {
LoaderImageView thumbnailShimmer = listGridImageViewHolder.getShimmerThumbnail();
DisplayUtils.stopShimmer(thumbnailShimmer, listGridImageViewHolder.getThumbnail());
}
}

@Override
public void avatarGenerated(Drawable avatarDrawable, Object callContext) {
((ImageView) callContext).setImageDrawable(avatarDrawable);
Expand Down
52 changes: 31 additions & 21 deletions app/src/main/java/com/owncloud/android/utils/DisplayUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -927,12 +927,20 @@ private static void generateNewThumbnail(OCFile file,
Bitmap thumbnail = ThumbnailsCacheManager.getBitmapFromDiskCache(
ThumbnailsCacheManager.PREFIX_THUMBNAIL + file.getRemoteId());

if (thumbnail != null) {
// If thumbnail is already in cache, display it immediately
thumbnailView.setImageBitmap(thumbnail);
stopShimmer(shimmerThumbnail, thumbnailView);
return;
}

for (ThumbnailsCacheManager.ThumbnailGenerationTask task : asyncTasks) {
if (file.getRemoteId() != null && task.getImageKey() != null &&
file.getRemoteId().equals(task.getImageKey())) {
return;
}
}

try {
final ThumbnailsCacheManager.ThumbnailGenerationTask task =
new ThumbnailsCacheManager.ThumbnailGenerationTask(thumbnailView,
Expand All @@ -941,32 +949,34 @@ private static void generateNewThumbnail(OCFile file,
asyncTasks,
gridView,
file.getRemoteId());
if (thumbnail == null) {
Drawable drawable = MimeTypeUtil.getFileTypeIcon(file.getMimeType(),
file.getFileName(),
context,
viewThemeUtils);
if (drawable == null) {
drawable = ResourcesCompat.getDrawable(context.getResources(),
R.drawable.file_image,
null);
}
if (drawable == null) {
drawable = new ColorDrawable(Color.GRAY);
}

int px = ThumbnailsCacheManager.getThumbnailDimension();
thumbnail = BitmapUtils.drawableToBitmap(drawable, px, px);
Drawable drawable = MimeTypeUtil.getFileTypeIcon(file.getMimeType(),
file.getFileName(),
context,
viewThemeUtils);
if (drawable == null) {
drawable = ResourcesCompat.getDrawable(context.getResources(),
R.drawable.file_image,
null);
}
if (drawable == null) {
drawable = new ColorDrawable(Color.GRAY);
}

int px = ThumbnailsCacheManager.getThumbnailDimension();
thumbnail = BitmapUtils.drawableToBitmap(drawable, px, px);
final ThumbnailsCacheManager.AsyncThumbnailDrawable asyncDrawable =
new ThumbnailsCacheManager.AsyncThumbnailDrawable(context.getResources(),
thumbnail, task);

if (shimmerThumbnail != null && shimmerThumbnail.getVisibility() == View.GONE) {
if (gridView) {
configShimmerGridImageSize(shimmerThumbnail, preferences.getGridColumns());
}
startShimmer(shimmerThumbnail, thumbnailView);
if (shimmerThumbnail != null) {
shimmerThumbnail.postDelayed(() -> {
if (thumbnailView.getDrawable() == null) {
if (gridView) {
configShimmerGridImageSize(shimmerThumbnail, preferences.getGridColumns());
}
startShimmer(shimmerThumbnail, thumbnailView);
}
}, 100);
}

task.setListener(new ThumbnailsCacheManager.ThumbnailGenerationTask.Listener() {
Expand Down

0 comments on commit 6da7768

Please sign in to comment.