diff --git a/app/src/androidTest/java/com/owncloud/android/ui/fragment/GalleryFragmentIT.kt b/app/src/androidTest/java/com/owncloud/android/ui/fragment/GalleryFragmentIT.kt index c4fee2dceea1..d39fd5ef7feb 100644 --- a/app/src/androidTest/java/com/owncloud/android/ui/fragment/GalleryFragmentIT.kt +++ b/app/src/androidTest/java/com/owncloud/android/ui/fragment/GalleryFragmentIT.kt @@ -80,6 +80,7 @@ class GalleryFragmentIT : AbstractIT() { val defaultSize = ThumbnailsCacheManager.getThumbnailDimension().toFloat() val file = OCFile("/$id.png").apply { fileId = id.toLong() + fileLength = (0..100).random().toLong() remoteId = "$id" mimeType = "image/png" isPreviewAvailable = true diff --git a/app/src/main/java/com/nextcloud/client/jobs/upload/FileUploadWorker.kt b/app/src/main/java/com/nextcloud/client/jobs/upload/FileUploadWorker.kt index 80f167b47bf9..860c4ca000a9 100644 --- a/app/src/main/java/com/nextcloud/client/jobs/upload/FileUploadWorker.kt +++ b/app/src/main/java/com/nextcloud/client/jobs/upload/FileUploadWorker.kt @@ -272,8 +272,8 @@ class FileUploadWorker( val task = ThumbnailsCacheManager.ThumbnailGenerationTask(storageManager, user) val file = File(uploadFileOperation.originalStoragePath) - val remoteId: String? = uploadFileOperation.file.remoteId - task.execute(ThumbnailsCacheManager.ThumbnailGenerationTaskObject(file, remoteId)) + val thumbnailKey: String? = uploadFileOperation.file.thumbnailKey + task.execute(ThumbnailsCacheManager.ThumbnailGenerationTaskObject(file, thumbnailKey)) } catch (e: Exception) { Log_OC.e(TAG, "Error uploading", e) result = RemoteOperationResult(e) diff --git a/app/src/main/java/com/nextcloud/ui/ImageDetailFragment.kt b/app/src/main/java/com/nextcloud/ui/ImageDetailFragment.kt index 5a21ab3523d1..4a1cd4fd9e58 100644 --- a/app/src/main/java/com/nextcloud/ui/ImageDetailFragment.kt +++ b/app/src/main/java/com/nextcloud/ui/ImageDetailFragment.kt @@ -342,7 +342,7 @@ class ImageDetailFragment : Fragment(), Injectable { val drawable = ContextCompat.getDrawable(context, R.drawable.photo_pin) as LayerDrawable val bitmap = - ThumbnailsCacheManager.getBitmapFromDiskCache(ThumbnailsCacheManager.PREFIX_THUMBNAIL + file.remoteId) + ThumbnailsCacheManager.getBitmapFromDiskCache(ThumbnailsCacheManager.PREFIX_THUMBNAIL + file.thumbnailKey) BitmapUtils.bitmapToCircularBitmapDrawable(resources, bitmap)?.let { drawable.setDrawable(1, it) } diff --git a/app/src/main/java/com/owncloud/android/datamodel/OCFile.java b/app/src/main/java/com/owncloud/android/datamodel/OCFile.java index 92bf6bd55645..cc7476003578 100644 --- a/app/src/main/java/com/owncloud/android/datamodel/OCFile.java +++ b/app/src/main/java/com/owncloud/android/datamodel/OCFile.java @@ -584,6 +584,10 @@ public int hashCode() { return 31 * (int) (fileId ^ (fileId >>> 32)) + (int) (parentId ^ (parentId >>> 32)); } + public String getThumbnailKey() { + return String.valueOf(fileLength) + hashCode(); + } + @NonNull @Override public String toString() { diff --git a/app/src/main/java/com/owncloud/android/datamodel/ThumbnailsCacheManager.java b/app/src/main/java/com/owncloud/android/datamodel/ThumbnailsCacheManager.java index 3f74f9fee43a..8c9b653c3283 100644 --- a/app/src/main/java/com/owncloud/android/datamodel/ThumbnailsCacheManager.java +++ b/app/src/main/java/com/owncloud/android/datamodel/ThumbnailsCacheManager.java @@ -251,7 +251,6 @@ public static class GalleryImageGenerationTask extends AsyncTask imageViewReference; private OCFile file; - private String imageKey; private GalleryListener listener; private List asyncTasks; private int backgroundColor; @@ -262,14 +261,11 @@ public GalleryImageGenerationTask( User user, FileDataStorageManager storageManager, List asyncTasks, - String imageKey, - int backgroundColor - ) { + int backgroundColor) { this.user = user; this.storageManager = storageManager; imageViewReference = new WeakReference<>(imageView); this.asyncTasks = asyncTasks; - this.imageKey = imageKey; this.backgroundColor = backgroundColor; } @@ -277,10 +273,6 @@ public void setListener(GalleryImageGenerationTask.GalleryListener listener) { this.listener = listener; } - public String getImageKey() { - return imageKey; - } - @Override protected Bitmap doInBackground(Object... params) { Bitmap thumbnail; @@ -292,10 +284,10 @@ protected Bitmap doInBackground(Object... params) { file = (OCFile) params[0]; - if (file.getRemoteId() != null || file.isPreviewAvailable()) { + if (file.getThumbnailKey() != null && file.isPreviewAvailable()) { // Thumbnail in cache? thumbnail = ThumbnailsCacheManager.getBitmapFromDiskCache( - ThumbnailsCacheManager.PREFIX_RESIZED_IMAGE + file.getRemoteId()); + ThumbnailsCacheManager.PREFIX_RESIZED_IMAGE + file.getThumbnailKey()); if (thumbnail != null && !file.isUpdateThumbnailNeeded()) return getThumbnailFromCache(thumbnail); @@ -655,7 +647,11 @@ private Bitmap doThumbnailFromOCFileInBackground() { ServerFileInterface file = (ServerFileInterface) mFile; String imageKey = PREFIX_THUMBNAIL + file.getRemoteId(); - boolean updateEnforced = (file instanceof OCFile && ((OCFile) file).isUpdateThumbnailNeeded()); + boolean updateEnforced = false; + if (file instanceof OCFile ocFile) { + imageKey = PREFIX_THUMBNAIL + ocFile.getThumbnailKey(); + updateEnforced = ocFile.isUpdateThumbnailNeeded(); + } if (updateEnforced) { thumbnail = null; @@ -670,8 +666,7 @@ private Bitmap doThumbnailFromOCFileInBackground() { int pxH; pxW = pxH = getThumbnailDimension(); - if (file instanceof OCFile) { - OCFile ocFile = (OCFile) file; + if (file instanceof OCFile ocFile) { if (ocFile.isDown()) { Bitmap bitmap; if (MimeTypeUtil.isVideo(ocFile)) { @@ -698,6 +693,9 @@ private Bitmap doThumbnailFromOCFileInBackground() { if (thumbnail == null) { // check if resized version is available String resizedImageKey = PREFIX_RESIZED_IMAGE + file.getRemoteId(); + if (file instanceof OCFile ocFile) { + resizedImageKey = PREFIX_RESIZED_IMAGE + ocFile.getThumbnailKey(); + } Bitmap resizedImage; if (updateEnforced) { @@ -1295,7 +1293,7 @@ public static void generateResizedImage(OCFile file) { Point p = getScreenDimension(); int pxW = p.x; int pxH = p.y; - String imageKey = PREFIX_RESIZED_IMAGE + file.getRemoteId(); + String imageKey = PREFIX_RESIZED_IMAGE + file.getThumbnailKey(); Bitmap bitmap = BitmapUtils.decodeSampledBitmapFromFile(file.getStoragePath(), pxW, pxH); @@ -1313,7 +1311,7 @@ public static void generateThumbnailFromOCFile(OCFile file, User user, Context c int pxW; int pxH; pxW = pxH = getThumbnailDimension(); - String imageKey = PREFIX_THUMBNAIL + file.getRemoteId(); + String imageKey = PREFIX_THUMBNAIL + file.getThumbnailKey(); GetMethod getMethod = null; @@ -1373,7 +1371,7 @@ public static void clearCache() { private static Bitmap doResizedImageInBackground(OCFile file, FileDataStorageManager storageManager) { Bitmap thumbnail; - String imageKey = PREFIX_RESIZED_IMAGE + file.getRemoteId(); + String imageKey = PREFIX_RESIZED_IMAGE + file.getThumbnailKey(); // Check disk cache in background thread thumbnail = getBitmapFromDiskCache(imageKey); diff --git a/app/src/main/java/com/owncloud/android/operations/UploadFileOperation.java b/app/src/main/java/com/owncloud/android/operations/UploadFileOperation.java index 2ff9e9e1a376..a1bb3c6a67e4 100644 --- a/app/src/main/java/com/owncloud/android/operations/UploadFileOperation.java +++ b/app/src/main/java/com/owncloud/android/operations/UploadFileOperation.java @@ -1599,7 +1599,7 @@ private void saveUploadedFile(OwnCloudClient client) { // generate new Thumbnail final ThumbnailsCacheManager.ThumbnailGenerationTask task = new ThumbnailsCacheManager.ThumbnailGenerationTask(getStorageManager(), user); - task.execute(new ThumbnailsCacheManager.ThumbnailGenerationTaskObject(file, file.getRemoteId())); + task.execute(new ThumbnailsCacheManager.ThumbnailGenerationTaskObject(file, file.getThumbnailKey())); } private void updateOCFile(OCFile file, RemoteFile remoteFile) { diff --git a/app/src/main/java/com/owncloud/android/providers/DiskLruImageCacheFileProvider.java b/app/src/main/java/com/owncloud/android/providers/DiskLruImageCacheFileProvider.java index 246672fc4373..1823d2e30b07 100644 --- a/app/src/main/java/com/owncloud/android/providers/DiskLruImageCacheFileProvider.java +++ b/app/src/main/java/com/owncloud/android/providers/DiskLruImageCacheFileProvider.java @@ -62,12 +62,12 @@ public ParcelFileDescriptor openFile(@NonNull Uri uri, @NonNull String mode) thr public static ParcelFileDescriptor getParcelFileDescriptorForOCFile(OCFile ocFile) throws FileNotFoundException { Bitmap thumbnail = ThumbnailsCacheManager.getBitmapFromDiskCache( - ThumbnailsCacheManager.PREFIX_RESIZED_IMAGE + ocFile.getRemoteId()); + ThumbnailsCacheManager.PREFIX_RESIZED_IMAGE + ocFile.getThumbnailKey()); // fallback to thumbnail if (thumbnail == null) { thumbnail = ThumbnailsCacheManager.getBitmapFromDiskCache( - ThumbnailsCacheManager.PREFIX_THUMBNAIL + ocFile.getRemoteId()); + ThumbnailsCacheManager.PREFIX_THUMBNAIL + ocFile.getThumbnailKey()); } // fallback to default image diff --git a/app/src/main/java/com/owncloud/android/providers/DocumentsStorageProvider.java b/app/src/main/java/com/owncloud/android/providers/DocumentsStorageProvider.java index 24180eede9f1..81f00507f316 100644 --- a/app/src/main/java/com/owncloud/android/providers/DocumentsStorageProvider.java +++ b/app/src/main/java/com/owncloud/android/providers/DocumentsStorageProvider.java @@ -344,7 +344,7 @@ public AssetFileDescriptor openDocumentThumbnail(String documentId, OCFile file = document.getFile(); boolean exists = ThumbnailsCacheManager.containsBitmap(ThumbnailsCacheManager.PREFIX_THUMBNAIL - + file.getRemoteId()); + + file.getThumbnailKey()); if (!exists) { ThumbnailsCacheManager.generateThumbnailFromOCFile(file, document.getUser(), getContext()); } diff --git a/app/src/main/java/com/owncloud/android/ui/activity/EditorWebView.java b/app/src/main/java/com/owncloud/android/ui/activity/EditorWebView.java index 30ecb54b40c8..c0bd811b9726 100644 --- a/app/src/main/java/com/owncloud/android/ui/activity/EditorWebView.java +++ b/app/src/main/java/com/owncloud/android/ui/activity/EditorWebView.java @@ -253,10 +253,10 @@ protected void setThumbnailView(final User user) { LayerDrawable drawable = MimeTypeUtil.getFolderIcon(preferences.isDarkModeEnabled(), overlayIconId, this, viewThemeUtils); binding.thumbnail.setImageDrawable(drawable); } else { - if ((MimeTypeUtil.isImage(file) || MimeTypeUtil.isVideo(file)) && file.getRemoteId() != null) { + if ((MimeTypeUtil.isImage(file) || MimeTypeUtil.isVideo(file)) && file.getThumbnailKey() != null) { // Thumbnail in cache? Bitmap thumbnail = ThumbnailsCacheManager.getBitmapFromDiskCache( - ThumbnailsCacheManager.PREFIX_THUMBNAIL + file.getRemoteId()); + ThumbnailsCacheManager.PREFIX_THUMBNAIL + file.getThumbnailKey()); if (thumbnail != null && !file.isUpdateThumbnailNeeded()) { if (MimeTypeUtil.isVideo(file)) { diff --git a/app/src/main/java/com/owncloud/android/ui/activity/ShareActivity.java b/app/src/main/java/com/owncloud/android/ui/activity/ShareActivity.java index 3c6b724e553f..c0f963a3fbbe 100644 --- a/app/src/main/java/com/owncloud/android/ui/activity/ShareActivity.java +++ b/app/src/main/java/com/owncloud/android/ui/activity/ShareActivity.java @@ -81,8 +81,7 @@ protected void onCreate(Bundle savedInstanceState) { this, viewThemeUtils)); if (MimeTypeUtil.isImage(file)) { - String remoteId = String.valueOf(file.getRemoteId()); - Bitmap thumbnail = ThumbnailsCacheManager.getBitmapFromDiskCache(remoteId); + Bitmap thumbnail = ThumbnailsCacheManager.getBitmapFromDiskCache(file.getThumbnailKey()); if (thumbnail != null) { binding.shareFileIcon.setImageBitmap(thumbnail); } diff --git a/app/src/main/java/com/owncloud/android/ui/adapter/OCFileListDelegate.kt b/app/src/main/java/com/owncloud/android/ui/adapter/OCFileListDelegate.kt index de29534ac664..0a48fc689325 100644 --- a/app/src/main/java/com/owncloud/android/ui/adapter/OCFileListDelegate.kt +++ b/app/src/main/java/com/owncloud/android/ui/adapter/OCFileListDelegate.kt @@ -128,7 +128,7 @@ class OCFileListDelegate( // cancel previous generation, if view is re-used if (ThumbnailsCacheManager.cancelPotentialThumbnailWork(file, thumbnailView)) { for (task in asyncTasks) { - if (file.remoteId != null && task.imageKey != null && file.remoteId == task.imageKey) { + if (file.thumbnailKey != null && task.imageKey != null && file.thumbnailKey == task.imageKey) { return } } @@ -138,7 +138,6 @@ class OCFileListDelegate( user, storageManager, asyncGalleryTasks, - file.remoteId, ContextCompat.getColor(context, R.color.bg_default) ) var drawable = MimeTypeUtil.getFileTypeIcon( diff --git a/app/src/main/java/com/owncloud/android/ui/adapter/ReceiveExternalFilesAdapter.kt b/app/src/main/java/com/owncloud/android/ui/adapter/ReceiveExternalFilesAdapter.kt index 12736f80f651..5ed1940b3397 100644 --- a/app/src/main/java/com/owncloud/android/ui/adapter/ReceiveExternalFilesAdapter.kt +++ b/app/src/main/java/com/owncloud/android/ui/adapter/ReceiveExternalFilesAdapter.kt @@ -104,7 +104,7 @@ class ReceiveExternalFilesAdapter( if (file.isFolder) { setupThumbnailForFolder(thumbnailImageView, file) - } else if (MimeTypeUtil.isImage(file) && file.remoteId != null) { + } else if (MimeTypeUtil.isImage(file) && file.thumbnailKey != null) { setupThumbnailForImage(thumbnailImageView, file) } else { setupDefaultThumbnail(thumbnailImageView, file) @@ -121,7 +121,7 @@ class ReceiveExternalFilesAdapter( @Suppress("NestedBlockDepth") private fun setupThumbnailForImage(thumbnailImageView: ImageView, file: OCFile) { - var thumbnail = ThumbnailsCacheManager.getBitmapFromDiskCache(file.remoteId.toString()) + var thumbnail = ThumbnailsCacheManager.getBitmapFromDiskCache(file.thumbnailKey) if (thumbnail != null && !file.isUpdateThumbnailNeeded) { thumbnailImageView.setImageBitmap(thumbnail) } else { @@ -143,7 +143,7 @@ class ReceiveExternalFilesAdapter( thumbnailImageView.setImageDrawable(asyncDrawable) @Suppress("DEPRECATION") - task.execute(ThumbnailGenerationTaskObject(file, file.remoteId)) + task.execute(ThumbnailGenerationTaskObject(file, file.thumbnailKey)) } } } diff --git a/app/src/main/java/com/owncloud/android/ui/adapter/UploadListAdapter.java b/app/src/main/java/com/owncloud/android/ui/adapter/UploadListAdapter.java index e4d08e2335d6..4091d55eca71 100755 --- a/app/src/main/java/com/owncloud/android/ui/adapter/UploadListAdapter.java +++ b/app/src/main/java/com/owncloud/android/ui/adapter/UploadListAdapter.java @@ -498,10 +498,10 @@ public void onBindViewHolder(SectionedViewHolder holder, int section, int relati // TODO this code is duplicated; refactor to a common place if (MimeTypeUtil.isImage(fakeFileToCheatThumbnailsCacheManagerInterface) - && fakeFileToCheatThumbnailsCacheManagerInterface.getRemoteId() != null && + && fakeFileToCheatThumbnailsCacheManagerInterface.getThumbnailKey() != null && item.getUploadStatus() == UploadStatus.UPLOAD_SUCCEEDED) { // Thumbnail in Cache? - Bitmap thumbnail = ThumbnailsCacheManager.getBitmapFromDiskCache(String.valueOf(fakeFileToCheatThumbnailsCacheManagerInterface.getRemoteId())); + Bitmap thumbnail = ThumbnailsCacheManager.getBitmapFromDiskCache(String.valueOf(fakeFileToCheatThumbnailsCacheManagerInterface.getThumbnailKey())); if (thumbnail != null && !fakeFileToCheatThumbnailsCacheManagerInterface.isUpdateThumbnailNeeded()) { itemViewHolder.binding.thumbnail.setImageBitmap(thumbnail); diff --git a/app/src/main/java/com/owncloud/android/ui/fragment/FileDetailFragment.java b/app/src/main/java/com/owncloud/android/ui/fragment/FileDetailFragment.java index 9c360590c51b..ca820fc81d59 100644 --- a/app/src/main/java/com/owncloud/android/ui/fragment/FileDetailFragment.java +++ b/app/src/main/java/com/owncloud/android/ui/fragment/FileDetailFragment.java @@ -665,7 +665,7 @@ private void setFilePreview(OCFile file) { Bitmap resizedImage; if (toolbarActivity != null && MimeTypeUtil.isImage(file)) { - String tagId = ThumbnailsCacheManager.PREFIX_RESIZED_IMAGE + getFile().getRemoteId(); + String tagId = ThumbnailsCacheManager.PREFIX_RESIZED_IMAGE + getFile().getThumbnailKey(); resizedImage = ThumbnailsCacheManager.getBitmapFromDiskCache(tagId); if (resizedImage != null && !file.isUpdateThumbnailNeeded()) { @@ -674,7 +674,7 @@ private void setFilePreview(OCFile file) { } else { // show thumbnail while loading resized image Bitmap thumbnail = ThumbnailsCacheManager.getBitmapFromDiskCache( - ThumbnailsCacheManager.PREFIX_THUMBNAIL + getFile().getRemoteId()); + ThumbnailsCacheManager.PREFIX_THUMBNAIL + getFile().getThumbnailKey()); if (thumbnail != null) { toolbarActivity.setPreviewImageBitmap(thumbnail); diff --git a/app/src/main/java/com/owncloud/android/ui/preview/PreviewImageFragment.kt b/app/src/main/java/com/owncloud/android/ui/preview/PreviewImageFragment.kt index 91a4f16b3c89..8a320aad9503 100644 --- a/app/src/main/java/com/owncloud/android/ui/preview/PreviewImageFragment.kt +++ b/app/src/main/java/com/owncloud/android/ui/preview/PreviewImageFragment.kt @@ -313,7 +313,7 @@ class PreviewImageFragment : FileFragment(), Injectable { while (i < 3 && cachedImage == null) { try { cachedImage = ThumbnailsCacheManager.getScaledBitmapFromDiskCache( - ThumbnailsCacheManager.PREFIX_RESIZED_IMAGE + file.remoteId, + ThumbnailsCacheManager.PREFIX_RESIZED_IMAGE + file.thumbnailKey, scaledWidth, scaledHeight ) @@ -328,7 +328,9 @@ class PreviewImageFragment : FileFragment(), Injectable { } private fun getThumbnailBitmap(file: OCFile): Bitmap? { - return ThumbnailsCacheManager.getBitmapFromDiskCache(ThumbnailsCacheManager.PREFIX_THUMBNAIL + file.remoteId) + return ThumbnailsCacheManager.getBitmapFromDiskCache( + ThumbnailsCacheManager.PREFIX_THUMBNAIL + file.thumbnailKey + ) } override fun onStop() { diff --git a/app/src/main/java/com/owncloud/android/utils/DisplayUtils.java b/app/src/main/java/com/owncloud/android/utils/DisplayUtils.java index 750aa057b4d3..a5ac7bf38c65 100644 --- a/app/src/main/java/com/owncloud/android/utils/DisplayUtils.java +++ b/app/src/main/java/com/owncloud/android/utils/DisplayUtils.java @@ -871,10 +871,10 @@ public static void setThumbnail(OCFile file, LayerDrawable fileIcon = MimeTypeUtil.getFolderIcon(isDarkModeActive, overlayIconId, context, viewThemeUtils); thumbnailView.setImageDrawable(fileIcon); } else { - if (file.getRemoteId() != null && file.isPreviewAvailable()) { + if (file.getThumbnailKey() != null && file.isPreviewAvailable()) { // Thumbnail in cache? Bitmap thumbnail = ThumbnailsCacheManager.getBitmapFromDiskCache( - ThumbnailsCacheManager.PREFIX_THUMBNAIL + file.getRemoteId()); + ThumbnailsCacheManager.PREFIX_THUMBNAIL + file.getThumbnailKey()); if (thumbnail != null && !file.isUpdateThumbnailNeeded()) { stopShimmer(shimmerThumbnail, thumbnailView); @@ -897,7 +897,7 @@ public static void setThumbnail(OCFile file, thumbnailView.setBackgroundColor(context.getResources().getColor(R.color.bg_default)); } } else { - if (file.getRemoteId() != null) { + if (file.getThumbnailKey() != null) { generateNewThumbnail(file, thumbnailView, user, storageManager, asyncTasks, gridView, context, shimmerThumbnail, preferences, viewThemeUtils); } else { stopShimmer(shimmerThumbnail, thumbnailView); @@ -925,7 +925,7 @@ private static void generateNewThumbnail(OCFile file, } Bitmap thumbnail = ThumbnailsCacheManager.getBitmapFromDiskCache( - ThumbnailsCacheManager.PREFIX_THUMBNAIL + file.getRemoteId()); + ThumbnailsCacheManager.PREFIX_THUMBNAIL + file.getThumbnailKey()); if (thumbnail != null) { // If thumbnail is already in cache, display it immediately @@ -935,8 +935,8 @@ private static void generateNewThumbnail(OCFile file, } for (ThumbnailsCacheManager.ThumbnailGenerationTask task : asyncTasks) { - if (file.getRemoteId() != null && task.getImageKey() != null && - file.getRemoteId().equals(task.getImageKey())) { + if (file.getThumbnailKey() != null && task.getImageKey() != null && + file.getThumbnailKey().equals(task.getImageKey())) { return; } } @@ -948,7 +948,7 @@ private static void generateNewThumbnail(OCFile file, user, asyncTasks, gridView, - file.getRemoteId()); + file.getThumbnailKey()); Drawable drawable = MimeTypeUtil.getFileTypeIcon(file.getMimeType(), file.getFileName(), context, @@ -995,7 +995,7 @@ public void onError() { asyncTasks.add(task); task.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR, new ThumbnailsCacheManager.ThumbnailGenerationTaskObject(file, - file.getRemoteId())); + file.getThumbnailKey())); } catch (IllegalArgumentException e) { Log_OC.d(TAG, "ThumbnailGenerationTask : " + e.getMessage()); } diff --git a/app/src/main/java/com/owncloud/android/utils/MimeTypeUtil.java b/app/src/main/java/com/owncloud/android/utils/MimeTypeUtil.java index 7404c33d1666..33bd4a96c5c8 100644 --- a/app/src/main/java/com/owncloud/android/utils/MimeTypeUtil.java +++ b/app/src/main/java/com/owncloud/android/utils/MimeTypeUtil.java @@ -102,7 +102,7 @@ public static Drawable getFileTypeIcon(String mimetype, return null; } - if (R.drawable.file_zip == iconId) { + if (R.drawable.file_zip == iconId && viewThemeUtils != null) { viewThemeUtils.platform.tintDrawable(context, icon, ColorRole.PRIMARY); } @@ -168,7 +168,7 @@ public static Drawable getOCFileIcon(OCFile file, Context context, ViewThemeUtil return MimeTypeUtil.getFileTypeIcon(file.getMimeType(), file.getFileName(), context, viewThemeUtils); } - Bitmap thumbnail = ThumbnailsCacheManager.getBitmapFromDiskCache(ThumbnailsCacheManager.PREFIX_THUMBNAIL + file.getRemoteId()); + Bitmap thumbnail = ThumbnailsCacheManager.getBitmapFromDiskCache(ThumbnailsCacheManager.PREFIX_THUMBNAIL + file.getThumbnailKey()); if (thumbnail == null || file.isUpdateThumbnailNeeded()) { return MimeTypeUtil.getFileTypeIcon(file.getMimeType(), file.getFileName(), context, viewThemeUtils); } diff --git a/app/src/test/java/com/owncloud/android/datamodel/OCFileTest.kt b/app/src/test/java/com/owncloud/android/datamodel/OCFileTest.kt index 030623b04de5..5ca735a54594 100644 --- a/app/src/test/java/com/owncloud/android/datamodel/OCFileTest.kt +++ b/app/src/test/java/com/owncloud/android/datamodel/OCFileTest.kt @@ -9,6 +9,7 @@ package com.owncloud.android.datamodel import org.junit.Assert.assertEquals import org.junit.Assert.assertNotEquals +import org.junit.Assert.assertNotNull import org.junit.Test class OCFileTest { @@ -29,4 +30,68 @@ class OCFileTest { sut.localId = 1234567891011L assertEquals(1234567891011L, sut.localId) } + + @Test + fun testThumbnailKeyWhenGivenOnlyRemoteIdShouldReturnThumbnailKey() { + val sut = OCFile("/abc").apply { + remoteId = "00001" + } + + assertNotNull(sut.thumbnailKey) + } + + @Test + fun testThumbnailKeyWhenGivenOnlyRemoteIdForFilesShouldReturnDifferentThumbnailKeys() { + val file1 = OCFile("/abc/a1.jpg").apply { + remoteId = "00001" + fileLength = 100 + } + + val file2 = OCFile("/abc/a1.jpg").apply { + remoteId = "00002" + fileLength = 101 + } + + assert(file1.thumbnailKey != file2.thumbnailKey) + } + + @Test + fun testThumbnailKeyWhenRenameFileThumbnailKeyShouldNotChange() { + val file = OCFile("/abc").apply { + fileLength = 100 + fileName = "a1.jpg" + } + + val thumbnailKeyBeforeRename = file.thumbnailKey + + file.fileName = "a2.jpg" + val thumbnailKeyAfterRename = file.thumbnailKey + + assert(thumbnailKeyBeforeRename == thumbnailKeyAfterRename) + } + + @Test + fun testThumbnailKeyWhenGivenEmptyRemoteIdShouldReturnThumbnailKey() { + val sut = OCFile("/abc").apply { + fileLength = 100 + fileName = "a1.jpg" + } + + assertNotNull(sut.thumbnailKey) + } + + @Test + fun testThumbnailKeyWhenGivenEmptyRemoteIdForFilesShouldReturnDifferentThumbnailKeys() { + val file1 = OCFile("/abc").apply { + fileLength = 100 + fileName = "a1.jpg" + } + + val file2 = OCFile("/abc").apply { + fileLength = 101 + fileName = "a2.jpg" + } + + assert(file1.thumbnailKey != file2.thumbnailKey) + } }