From 33534ea49b45ccafca687fea2f1bccaba7129de2 Mon Sep 17 00:00:00 2001 From: alperozturk Date: Fri, 7 Feb 2025 10:31:31 +0100 Subject: [PATCH 01/10] use eTag Signed-off-by: alperozturk --- .../client/jobs/upload/FileUploadWorker.kt | 4 +-- .../com/nextcloud/ui/ImageDetailFragment.kt | 2 +- .../datamodel/ThumbnailsCacheManager.java | 26 +++++++++---------- .../operations/UploadFileOperation.java | 2 +- .../DiskLruImageCacheFileProvider.java | 4 +-- .../providers/DocumentsStorageProvider.java | 2 +- .../android/ui/activity/EditorWebView.java | 4 +-- .../android/ui/activity/ShareActivity.java | 3 +-- .../android/ui/adapter/OCFileListDelegate.kt | 4 +-- .../ui/adapter/ReceiveExternalFilesAdapter.kt | 6 ++--- .../android/ui/adapter/UploadListAdapter.java | 4 +-- .../ui/fragment/FileDetailFragment.java | 4 +-- .../ui/preview/PreviewImageFragment.kt | 4 +-- .../owncloud/android/utils/DisplayUtils.java | 16 ++++++------ .../owncloud/android/utils/MimeTypeUtil.java | 2 +- 15 files changed, 43 insertions(+), 44 deletions(-) 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..9532a5bedf45 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 eTag: String? = uploadFileOperation.file.etag + task.execute(ThumbnailsCacheManager.ThumbnailGenerationTaskObject(file, eTag)) } 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..6e1cc4ef7667 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.etag) BitmapUtils.bitmapToCircularBitmapDrawable(resources, bitmap)?.let { drawable.setDrawable(1, it) } 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..cc9b13918154 100644 --- a/app/src/main/java/com/owncloud/android/datamodel/ThumbnailsCacheManager.java +++ b/app/src/main/java/com/owncloud/android/datamodel/ThumbnailsCacheManager.java @@ -263,8 +263,7 @@ public GalleryImageGenerationTask( FileDataStorageManager storageManager, List asyncTasks, String imageKey, - int backgroundColor - ) { + int backgroundColor) { this.user = user; this.storageManager = storageManager; imageViewReference = new WeakReference<>(imageView); @@ -277,10 +276,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 +287,10 @@ protected Bitmap doInBackground(Object... params) { file = (OCFile) params[0]; - if (file.getRemoteId() != null || file.isPreviewAvailable()) { + if (file.getEtag() != null || file.isPreviewAvailable()) { // Thumbnail in cache? thumbnail = ThumbnailsCacheManager.getBitmapFromDiskCache( - ThumbnailsCacheManager.PREFIX_RESIZED_IMAGE + file.getRemoteId()); + ThumbnailsCacheManager.PREFIX_RESIZED_IMAGE + file.getEtag()); if (thumbnail != null && !file.isUpdateThumbnailNeeded()) return getThumbnailFromCache(thumbnail); @@ -654,6 +649,9 @@ private Bitmap doThumbnailFromOCFileInBackground() { Bitmap thumbnail; ServerFileInterface file = (ServerFileInterface) mFile; String imageKey = PREFIX_THUMBNAIL + file.getRemoteId(); + if (file instanceof OCFile ocFile) { + imageKey = PREFIX_THUMBNAIL + ocFile.getEtag(); + } boolean updateEnforced = (file instanceof OCFile && ((OCFile) file).isUpdateThumbnailNeeded()); @@ -670,8 +668,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 +695,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.getEtag(); + } Bitmap resizedImage; if (updateEnforced) { @@ -1295,7 +1295,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.getEtag(); Bitmap bitmap = BitmapUtils.decodeSampledBitmapFromFile(file.getStoragePath(), pxW, pxH); @@ -1313,7 +1313,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.getEtag(); GetMethod getMethod = null; @@ -1373,7 +1373,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.getEtag(); // 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..70ce4765e1a2 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.getEtag())); } 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..61b57d929356 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.getEtag()); // fallback to thumbnail if (thumbnail == null) { thumbnail = ThumbnailsCacheManager.getBitmapFromDiskCache( - ThumbnailsCacheManager.PREFIX_THUMBNAIL + ocFile.getRemoteId()); + ThumbnailsCacheManager.PREFIX_THUMBNAIL + ocFile.getEtag()); } // 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..d9f9d7f6ff90 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.getEtag()); 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..7394a14975bb 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.getEtag() != null) { // Thumbnail in cache? Bitmap thumbnail = ThumbnailsCacheManager.getBitmapFromDiskCache( - ThumbnailsCacheManager.PREFIX_THUMBNAIL + file.getRemoteId()); + ThumbnailsCacheManager.PREFIX_THUMBNAIL + file.getEtag()); 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..22d02d9a69ac 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.getEtag()); 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..7a52981d99ec 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.etag != null && task.imageKey != null && file.etag == task.imageKey) { return } } @@ -138,7 +138,7 @@ class OCFileListDelegate( user, storageManager, asyncGalleryTasks, - file.remoteId, + file.etag, 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..674f70515f1c 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.etag != 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.etag) 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.etag)) } } } 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..766df09c84a9 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.getEtag() != null && item.getUploadStatus() == UploadStatus.UPLOAD_SUCCEEDED) { // Thumbnail in Cache? - Bitmap thumbnail = ThumbnailsCacheManager.getBitmapFromDiskCache(String.valueOf(fakeFileToCheatThumbnailsCacheManagerInterface.getRemoteId())); + Bitmap thumbnail = ThumbnailsCacheManager.getBitmapFromDiskCache(String.valueOf(fakeFileToCheatThumbnailsCacheManagerInterface.getEtag())); 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..e34f7e036c20 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().getEtag(); 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().getEtag()); 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..bfa563924fea 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.etag, scaledWidth, scaledHeight ) @@ -328,7 +328,7 @@ 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.etag) } 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..5e8dfed9e45a 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.getEtag() != null && file.isPreviewAvailable()) { // Thumbnail in cache? Bitmap thumbnail = ThumbnailsCacheManager.getBitmapFromDiskCache( - ThumbnailsCacheManager.PREFIX_THUMBNAIL + file.getRemoteId()); + ThumbnailsCacheManager.PREFIX_THUMBNAIL + file.getEtag()); 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.getEtag() != 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.getEtag()); 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.getEtag() != null && task.getImageKey() != null && + file.getEtag().equals(task.getImageKey())) { return; } } @@ -948,7 +948,7 @@ private static void generateNewThumbnail(OCFile file, user, asyncTasks, gridView, - file.getRemoteId()); + file.getEtag()); 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.getEtag())); } 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..0ee352579cc6 100644 --- a/app/src/main/java/com/owncloud/android/utils/MimeTypeUtil.java +++ b/app/src/main/java/com/owncloud/android/utils/MimeTypeUtil.java @@ -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.getEtag()); if (thumbnail == null || file.isUpdateThumbnailNeeded()) { return MimeTypeUtil.getFileTypeIcon(file.getMimeType(), file.getFileName(), context, viewThemeUtils); } From db8bba794645a3d6d00805c0c37ff9018c01914b Mon Sep 17 00:00:00 2001 From: alperozturk Date: Fri, 7 Feb 2025 11:17:03 +0100 Subject: [PATCH 02/10] fix setThumbnailsForFileConflicts Signed-off-by: alperozturk --- .../utils/extensions/FileExtensions.kt | 27 ++++++++++++++++ .../datamodel/FileDataStorageManager.java | 13 ++++++++ .../ui/dialog/ConflictsResolveDialog.kt | 31 +++++-------------- .../owncloud/android/utils/MimeTypeUtil.java | 14 ++++++++- 4 files changed, 60 insertions(+), 25 deletions(-) diff --git a/app/src/main/java/com/nextcloud/utils/extensions/FileExtensions.kt b/app/src/main/java/com/nextcloud/utils/extensions/FileExtensions.kt index 94ae83be095c..1c14f2b20a80 100644 --- a/app/src/main/java/com/nextcloud/utils/extensions/FileExtensions.kt +++ b/app/src/main/java/com/nextcloud/utils/extensions/FileExtensions.kt @@ -7,11 +7,20 @@ package com.nextcloud.utils.extensions +import android.content.Context +import android.widget.ImageView +import com.bumptech.glide.Glide +import com.bumptech.glide.load.engine.DiskCacheStrategy +import com.owncloud.android.R import com.owncloud.android.datamodel.OCFile import com.owncloud.android.lib.common.utils.Log_OC import com.owncloud.android.utils.DisplayUtils +import com.owncloud.android.utils.MimeTypeUtil +import com.owncloud.android.utils.theme.ViewThemeUtils import java.io.File +private const val tag = "FileExtensions" + fun OCFile?.logFileSize(tag: String) { val size = DisplayUtils.bytesToHumanReadable(this?.fileLength ?: -1) val rawByte = this?.fileLength ?: -1 @@ -23,3 +32,21 @@ fun File?.logFileSize(tag: String) { val rawByte = this?.length() ?: -1 Log_OC.d(tag, "onSaveInstanceState: $size, raw byte $rawByte") } + +fun File?.loadThumbnail(context: Context, viewThemeUtils: ViewThemeUtils, imageView: ImageView) { + if (this == null || !exists()) { + Log_OC.d(tag, "cannot load thumbnail file is null or not exists") + return + } + + val placeholder = MimeTypeUtil.getFileTypeIcon(this, context, viewThemeUtils) + + Glide + .with(context) + .load(this) + .centerCrop() + .placeholder(placeholder) + .error(R.drawable.file) + .diskCacheStrategy(DiskCacheStrategy.ALL) + .into(imageView) +} diff --git a/app/src/main/java/com/owncloud/android/datamodel/FileDataStorageManager.java b/app/src/main/java/com/owncloud/android/datamodel/FileDataStorageManager.java index e209aa21b51b..ae228703c455 100644 --- a/app/src/main/java/com/owncloud/android/datamodel/FileDataStorageManager.java +++ b/app/src/main/java/com/owncloud/android/datamodel/FileDataStorageManager.java @@ -2786,4 +2786,17 @@ public List filter(OCFile file, OCFileFilterType filterType) { return result; } + + /** + * + * @return e.g. /storage/emulated/0/Android/media/com.nextcloud.client/nextcloud/user@10.0.2.2%3A55001/Aaa/aa.jpg + */ + public String getMediaPath(OCFile file) { + FileEntity entity = fileDao.getFileByDecryptedRemotePath(file.getDecryptedRemotePath(), user.getAccountName()); + if (entity == null) { + return null; + } + + return entity.getStoragePath(); + } } diff --git a/app/src/main/java/com/owncloud/android/ui/dialog/ConflictsResolveDialog.kt b/app/src/main/java/com/owncloud/android/ui/dialog/ConflictsResolveDialog.kt index bda667cd6b08..2585594f2234 100644 --- a/app/src/main/java/com/owncloud/android/ui/dialog/ConflictsResolveDialog.kt +++ b/app/src/main/java/com/owncloud/android/ui/dialog/ConflictsResolveDialog.kt @@ -22,6 +22,7 @@ import com.nextcloud.client.database.entity.OfflineOperationEntity import com.nextcloud.client.di.Injectable import com.nextcloud.utils.extensions.getParcelableArgument import com.nextcloud.utils.extensions.getSerializableArgument +import com.nextcloud.utils.extensions.loadThumbnail import com.owncloud.android.R import com.owncloud.android.databinding.ConflictResolveDialogBinding import com.owncloud.android.datamodel.FileDataStorageManager @@ -29,7 +30,6 @@ import com.owncloud.android.datamodel.OCFile import com.owncloud.android.datamodel.SyncedFolderProvider import com.owncloud.android.datamodel.ThumbnailsCacheManager.ThumbnailGenerationTask import com.owncloud.android.lib.common.utils.Log_OC -import com.owncloud.android.ui.adapter.LocalFileListAdapter import com.owncloud.android.ui.dialog.parcel.ConflictDialogData import com.owncloud.android.ui.dialog.parcel.ConflictFileData import com.owncloud.android.utils.DisplayUtils @@ -208,29 +208,12 @@ class ConflictsResolveDialog : DialogFragment(), Injectable { } private fun setThumbnailsForFileConflicts() { - binding.leftThumbnail.tag = leftDataFile.hashCode() - binding.rightThumbnail.tag = rightDataFile.hashCode() - - LocalFileListAdapter.setThumbnail( - leftDataFile, - binding.leftThumbnail, - context, - viewThemeUtils - ) - - DisplayUtils.setThumbnail( - rightDataFile, - binding.rightThumbnail, - user, - fileDataStorageManager, - asyncTasks, - false, - context, - null, - syncedFolderProvider.preferences, - viewThemeUtils, - syncedFolderProvider - ) + leftDataFile.loadThumbnail(requireContext(), viewThemeUtils, binding.leftThumbnail) + + // TODO: OCFile have null storagePath that's why we are fetching it from fileDataStorageManager + val mediaPath = fileDataStorageManager.getMediaPath(rightDataFile) ?: return + val file = File(mediaPath) + file.loadThumbnail(requireContext(), viewThemeUtils, binding.rightThumbnail) } private fun setOnClickListeners() { 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 0ee352579cc6..68700a6cae97 100644 --- a/app/src/main/java/com/owncloud/android/utils/MimeTypeUtil.java +++ b/app/src/main/java/com/owncloud/android/utils/MimeTypeUtil.java @@ -22,6 +22,7 @@ import com.owncloud.android.R; import com.owncloud.android.datamodel.OCFile; import com.owncloud.android.datamodel.ThumbnailsCacheManager; +import com.owncloud.android.lib.common.utils.Log_OC; import com.owncloud.android.lib.resources.files.model.ServerFileInterface; import com.owncloud.android.utils.theme.ViewThemeUtils; @@ -73,6 +74,7 @@ public final class MimeTypeUtil { */ private static final Map> FILE_EXTENSION_TO_MIMETYPE_MAPPING = new HashMap<>(); public static final String MIMETYPE_TEXT_MARKDOWN = "text/markdown"; + private static final String TAG = "MimeTypeUtil"; static { populateFileExtensionMimeTypeMapping(); @@ -84,6 +86,16 @@ private MimeTypeUtil() { // utility class -> private constructor } + public static Drawable getFileTypeIcon(File file, Context context, ViewThemeUtils viewThemeUtils) { + if (file == null || !file.exists()) { + Log_OC.d(TAG, "Cannot getFileTypeIcon. File is null or not exists"); + return null; + } + + final var mimeType = MimeTypeUtil.getMimeTypeFromPath(file.getPath()); + return MimeTypeUtil.getFileTypeIcon(mimeType, file.getName(), context, viewThemeUtils); + } + /** * Returns the Drawable of an image to use as icon associated to a known MIME type. * @@ -102,7 +114,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); } From fb2ab13e6652352f9875794aa70d20303c29d68c Mon Sep 17 00:00:00 2001 From: alperozturk Date: Fri, 7 Feb 2025 11:26:13 +0100 Subject: [PATCH 03/10] revert changes for conflict resolve dialog Signed-off-by: alperozturk --- .../utils/extensions/FileExtensions.kt | 27 ---------------- .../datamodel/FileDataStorageManager.java | 13 -------- .../ui/dialog/ConflictsResolveDialog.kt | 31 ++++++++++++++----- 3 files changed, 24 insertions(+), 47 deletions(-) diff --git a/app/src/main/java/com/nextcloud/utils/extensions/FileExtensions.kt b/app/src/main/java/com/nextcloud/utils/extensions/FileExtensions.kt index 1c14f2b20a80..94ae83be095c 100644 --- a/app/src/main/java/com/nextcloud/utils/extensions/FileExtensions.kt +++ b/app/src/main/java/com/nextcloud/utils/extensions/FileExtensions.kt @@ -7,20 +7,11 @@ package com.nextcloud.utils.extensions -import android.content.Context -import android.widget.ImageView -import com.bumptech.glide.Glide -import com.bumptech.glide.load.engine.DiskCacheStrategy -import com.owncloud.android.R import com.owncloud.android.datamodel.OCFile import com.owncloud.android.lib.common.utils.Log_OC import com.owncloud.android.utils.DisplayUtils -import com.owncloud.android.utils.MimeTypeUtil -import com.owncloud.android.utils.theme.ViewThemeUtils import java.io.File -private const val tag = "FileExtensions" - fun OCFile?.logFileSize(tag: String) { val size = DisplayUtils.bytesToHumanReadable(this?.fileLength ?: -1) val rawByte = this?.fileLength ?: -1 @@ -32,21 +23,3 @@ fun File?.logFileSize(tag: String) { val rawByte = this?.length() ?: -1 Log_OC.d(tag, "onSaveInstanceState: $size, raw byte $rawByte") } - -fun File?.loadThumbnail(context: Context, viewThemeUtils: ViewThemeUtils, imageView: ImageView) { - if (this == null || !exists()) { - Log_OC.d(tag, "cannot load thumbnail file is null or not exists") - return - } - - val placeholder = MimeTypeUtil.getFileTypeIcon(this, context, viewThemeUtils) - - Glide - .with(context) - .load(this) - .centerCrop() - .placeholder(placeholder) - .error(R.drawable.file) - .diskCacheStrategy(DiskCacheStrategy.ALL) - .into(imageView) -} diff --git a/app/src/main/java/com/owncloud/android/datamodel/FileDataStorageManager.java b/app/src/main/java/com/owncloud/android/datamodel/FileDataStorageManager.java index ae228703c455..e209aa21b51b 100644 --- a/app/src/main/java/com/owncloud/android/datamodel/FileDataStorageManager.java +++ b/app/src/main/java/com/owncloud/android/datamodel/FileDataStorageManager.java @@ -2786,17 +2786,4 @@ public List filter(OCFile file, OCFileFilterType filterType) { return result; } - - /** - * - * @return e.g. /storage/emulated/0/Android/media/com.nextcloud.client/nextcloud/user@10.0.2.2%3A55001/Aaa/aa.jpg - */ - public String getMediaPath(OCFile file) { - FileEntity entity = fileDao.getFileByDecryptedRemotePath(file.getDecryptedRemotePath(), user.getAccountName()); - if (entity == null) { - return null; - } - - return entity.getStoragePath(); - } } diff --git a/app/src/main/java/com/owncloud/android/ui/dialog/ConflictsResolveDialog.kt b/app/src/main/java/com/owncloud/android/ui/dialog/ConflictsResolveDialog.kt index 2585594f2234..bda667cd6b08 100644 --- a/app/src/main/java/com/owncloud/android/ui/dialog/ConflictsResolveDialog.kt +++ b/app/src/main/java/com/owncloud/android/ui/dialog/ConflictsResolveDialog.kt @@ -22,7 +22,6 @@ import com.nextcloud.client.database.entity.OfflineOperationEntity import com.nextcloud.client.di.Injectable import com.nextcloud.utils.extensions.getParcelableArgument import com.nextcloud.utils.extensions.getSerializableArgument -import com.nextcloud.utils.extensions.loadThumbnail import com.owncloud.android.R import com.owncloud.android.databinding.ConflictResolveDialogBinding import com.owncloud.android.datamodel.FileDataStorageManager @@ -30,6 +29,7 @@ import com.owncloud.android.datamodel.OCFile import com.owncloud.android.datamodel.SyncedFolderProvider import com.owncloud.android.datamodel.ThumbnailsCacheManager.ThumbnailGenerationTask import com.owncloud.android.lib.common.utils.Log_OC +import com.owncloud.android.ui.adapter.LocalFileListAdapter import com.owncloud.android.ui.dialog.parcel.ConflictDialogData import com.owncloud.android.ui.dialog.parcel.ConflictFileData import com.owncloud.android.utils.DisplayUtils @@ -208,12 +208,29 @@ class ConflictsResolveDialog : DialogFragment(), Injectable { } private fun setThumbnailsForFileConflicts() { - leftDataFile.loadThumbnail(requireContext(), viewThemeUtils, binding.leftThumbnail) - - // TODO: OCFile have null storagePath that's why we are fetching it from fileDataStorageManager - val mediaPath = fileDataStorageManager.getMediaPath(rightDataFile) ?: return - val file = File(mediaPath) - file.loadThumbnail(requireContext(), viewThemeUtils, binding.rightThumbnail) + binding.leftThumbnail.tag = leftDataFile.hashCode() + binding.rightThumbnail.tag = rightDataFile.hashCode() + + LocalFileListAdapter.setThumbnail( + leftDataFile, + binding.leftThumbnail, + context, + viewThemeUtils + ) + + DisplayUtils.setThumbnail( + rightDataFile, + binding.rightThumbnail, + user, + fileDataStorageManager, + asyncTasks, + false, + context, + null, + syncedFolderProvider.preferences, + viewThemeUtils, + syncedFolderProvider + ) } private fun setOnClickListeners() { From 471cf8eb5d54b43d208e84825328569066633162 Mon Sep 17 00:00:00 2001 From: alperozturk Date: Fri, 7 Feb 2025 11:38:11 +0100 Subject: [PATCH 04/10] revert changes for conflict resolve dialog Signed-off-by: alperozturk --- .../com/owncloud/android/utils/MimeTypeUtil.java | 12 ------------ 1 file changed, 12 deletions(-) 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 68700a6cae97..4f4505a7aea9 100644 --- a/app/src/main/java/com/owncloud/android/utils/MimeTypeUtil.java +++ b/app/src/main/java/com/owncloud/android/utils/MimeTypeUtil.java @@ -22,7 +22,6 @@ import com.owncloud.android.R; import com.owncloud.android.datamodel.OCFile; import com.owncloud.android.datamodel.ThumbnailsCacheManager; -import com.owncloud.android.lib.common.utils.Log_OC; import com.owncloud.android.lib.resources.files.model.ServerFileInterface; import com.owncloud.android.utils.theme.ViewThemeUtils; @@ -74,7 +73,6 @@ public final class MimeTypeUtil { */ private static final Map> FILE_EXTENSION_TO_MIMETYPE_MAPPING = new HashMap<>(); public static final String MIMETYPE_TEXT_MARKDOWN = "text/markdown"; - private static final String TAG = "MimeTypeUtil"; static { populateFileExtensionMimeTypeMapping(); @@ -86,16 +84,6 @@ private MimeTypeUtil() { // utility class -> private constructor } - public static Drawable getFileTypeIcon(File file, Context context, ViewThemeUtils viewThemeUtils) { - if (file == null || !file.exists()) { - Log_OC.d(TAG, "Cannot getFileTypeIcon. File is null or not exists"); - return null; - } - - final var mimeType = MimeTypeUtil.getMimeTypeFromPath(file.getPath()); - return MimeTypeUtil.getFileTypeIcon(mimeType, file.getName(), context, viewThemeUtils); - } - /** * Returns the Drawable of an image to use as icon associated to a known MIME type. * From 46dcf5f471a8914c5a7305f0d2409ed109b1e992 Mon Sep 17 00:00:00 2001 From: alperozturk Date: Mon, 17 Feb 2025 09:37:24 +0100 Subject: [PATCH 05/10] use thumbnail key Signed-off-by: alperozturk --- .../client/jobs/upload/FileUploadWorker.kt | 4 ++-- .../java/com/nextcloud/ui/ImageDetailFragment.kt | 2 +- .../com/owncloud/android/datamodel/OCFile.java | 4 ++++ .../datamodel/ThumbnailsCacheManager.java | 10 +++++----- .../android/operations/UploadFileOperation.java | 2 +- .../providers/DiskLruImageCacheFileProvider.java | 4 ++-- .../providers/DocumentsStorageProvider.java | 2 +- .../android/ui/activity/EditorWebView.java | 4 ++-- .../android/ui/activity/ShareActivity.java | 2 +- .../android/ui/adapter/OCFileListDelegate.kt | 4 ++-- .../ui/adapter/ReceiveExternalFilesAdapter.kt | 6 +++--- .../android/ui/adapter/UploadListAdapter.java | 4 ++-- .../android/ui/fragment/FileDetailFragment.java | 4 ++-- .../android/ui/preview/PreviewImageFragment.kt | 4 ++-- .../com/owncloud/android/utils/DisplayUtils.java | 16 ++++++++-------- .../com/owncloud/android/utils/MimeTypeUtil.java | 2 +- 16 files changed, 39 insertions(+), 35 deletions(-) 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 9532a5bedf45..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 eTag: String? = uploadFileOperation.file.etag - task.execute(ThumbnailsCacheManager.ThumbnailGenerationTaskObject(file, eTag)) + 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 6e1cc4ef7667..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.etag) + 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 cc9b13918154..5e4c92834701 100644 --- a/app/src/main/java/com/owncloud/android/datamodel/ThumbnailsCacheManager.java +++ b/app/src/main/java/com/owncloud/android/datamodel/ThumbnailsCacheManager.java @@ -287,10 +287,10 @@ protected Bitmap doInBackground(Object... params) { file = (OCFile) params[0]; - if (file.getEtag() != null || file.isPreviewAvailable()) { + if (file.isPreviewAvailable()) { // Thumbnail in cache? thumbnail = ThumbnailsCacheManager.getBitmapFromDiskCache( - ThumbnailsCacheManager.PREFIX_RESIZED_IMAGE + file.getEtag()); + ThumbnailsCacheManager.PREFIX_RESIZED_IMAGE + file.getThumbnailKey()); if (thumbnail != null && !file.isUpdateThumbnailNeeded()) return getThumbnailFromCache(thumbnail); @@ -650,7 +650,7 @@ private Bitmap doThumbnailFromOCFileInBackground() { ServerFileInterface file = (ServerFileInterface) mFile; String imageKey = PREFIX_THUMBNAIL + file.getRemoteId(); if (file instanceof OCFile ocFile) { - imageKey = PREFIX_THUMBNAIL + ocFile.getEtag(); + imageKey = PREFIX_THUMBNAIL + ocFile.getThumbnailKey(); } boolean updateEnforced = (file instanceof OCFile && ((OCFile) file).isUpdateThumbnailNeeded()); @@ -696,7 +696,7 @@ private Bitmap doThumbnailFromOCFileInBackground() { // check if resized version is available String resizedImageKey = PREFIX_RESIZED_IMAGE + file.getRemoteId(); if (file instanceof OCFile ocFile) { - resizedImageKey = PREFIX_RESIZED_IMAGE + ocFile.getEtag(); + resizedImageKey = PREFIX_RESIZED_IMAGE + ocFile.getThumbnailKey(); } Bitmap resizedImage; @@ -1373,7 +1373,7 @@ public static void clearCache() { private static Bitmap doResizedImageInBackground(OCFile file, FileDataStorageManager storageManager) { Bitmap thumbnail; - String imageKey = PREFIX_RESIZED_IMAGE + file.getEtag(); + 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 70ce4765e1a2..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.getEtag())); + 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 61b57d929356..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.getEtag()); + ThumbnailsCacheManager.PREFIX_RESIZED_IMAGE + ocFile.getThumbnailKey()); // fallback to thumbnail if (thumbnail == null) { thumbnail = ThumbnailsCacheManager.getBitmapFromDiskCache( - ThumbnailsCacheManager.PREFIX_THUMBNAIL + ocFile.getEtag()); + 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 d9f9d7f6ff90..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.getEtag()); + + 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 7394a14975bb..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.getEtag() != null) { + if ((MimeTypeUtil.isImage(file) || MimeTypeUtil.isVideo(file)) && file.getThumbnailKey() != null) { // Thumbnail in cache? Bitmap thumbnail = ThumbnailsCacheManager.getBitmapFromDiskCache( - ThumbnailsCacheManager.PREFIX_THUMBNAIL + file.getEtag()); + 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 22d02d9a69ac..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,7 +81,7 @@ protected void onCreate(Bundle savedInstanceState) { this, viewThemeUtils)); if (MimeTypeUtil.isImage(file)) { - Bitmap thumbnail = ThumbnailsCacheManager.getBitmapFromDiskCache(file.getEtag()); + 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 7a52981d99ec..a7fe765ecf55 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.etag != null && task.imageKey != null && file.etag == task.imageKey) { + if (task.imageKey != null && file.thumbnailKey == task.imageKey) { return } } @@ -138,7 +138,7 @@ class OCFileListDelegate( user, storageManager, asyncGalleryTasks, - file.etag, + file.thumbnailKey, 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 674f70515f1c..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.etag != 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.etag) + 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.etag)) + 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 766df09c84a9..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.getEtag() != null && + && fakeFileToCheatThumbnailsCacheManagerInterface.getThumbnailKey() != null && item.getUploadStatus() == UploadStatus.UPLOAD_SUCCEEDED) { // Thumbnail in Cache? - Bitmap thumbnail = ThumbnailsCacheManager.getBitmapFromDiskCache(String.valueOf(fakeFileToCheatThumbnailsCacheManagerInterface.getEtag())); + 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 e34f7e036c20..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().getEtag(); + 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().getEtag()); + 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 bfa563924fea..4ca2e5da8ca8 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.etag, + ThumbnailsCacheManager.PREFIX_RESIZED_IMAGE + file.thumbnailKey, scaledWidth, scaledHeight ) @@ -328,7 +328,7 @@ class PreviewImageFragment : FileFragment(), Injectable { } private fun getThumbnailBitmap(file: OCFile): Bitmap? { - return ThumbnailsCacheManager.getBitmapFromDiskCache(ThumbnailsCacheManager.PREFIX_THUMBNAIL + file.etag) + 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 5e8dfed9e45a..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.getEtag() != null && file.isPreviewAvailable()) { + if (file.getThumbnailKey() != null && file.isPreviewAvailable()) { // Thumbnail in cache? Bitmap thumbnail = ThumbnailsCacheManager.getBitmapFromDiskCache( - ThumbnailsCacheManager.PREFIX_THUMBNAIL + file.getEtag()); + 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.getEtag() != 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.getEtag()); + 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.getEtag() != null && task.getImageKey() != null && - file.getEtag().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.getEtag()); + 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.getEtag())); + 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 4f4505a7aea9..33bd4a96c5c8 100644 --- a/app/src/main/java/com/owncloud/android/utils/MimeTypeUtil.java +++ b/app/src/main/java/com/owncloud/android/utils/MimeTypeUtil.java @@ -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.getEtag()); + Bitmap thumbnail = ThumbnailsCacheManager.getBitmapFromDiskCache(ThumbnailsCacheManager.PREFIX_THUMBNAIL + file.getThumbnailKey()); if (thumbnail == null || file.isUpdateThumbnailNeeded()) { return MimeTypeUtil.getFileTypeIcon(file.getMimeType(), file.getFileName(), context, viewThemeUtils); } From b2f5150fce2c15b8a1fc85405d16a78ee91becd0 Mon Sep 17 00:00:00 2001 From: alperozturk Date: Mon, 17 Feb 2025 09:47:47 +0100 Subject: [PATCH 06/10] use thumbnail key Signed-off-by: alperozturk --- .../owncloud/android/datamodel/ThumbnailsCacheManager.java | 6 +++--- .../com/owncloud/android/ui/adapter/OCFileListDelegate.kt | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) 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 5e4c92834701..187f74bc06a5 100644 --- a/app/src/main/java/com/owncloud/android/datamodel/ThumbnailsCacheManager.java +++ b/app/src/main/java/com/owncloud/android/datamodel/ThumbnailsCacheManager.java @@ -287,7 +287,7 @@ protected Bitmap doInBackground(Object... params) { file = (OCFile) params[0]; - if (file.isPreviewAvailable()) { + if (file.getThumbnailKey() != null && file.isPreviewAvailable()) { // Thumbnail in cache? thumbnail = ThumbnailsCacheManager.getBitmapFromDiskCache( ThumbnailsCacheManager.PREFIX_RESIZED_IMAGE + file.getThumbnailKey()); @@ -1295,7 +1295,7 @@ public static void generateResizedImage(OCFile file) { Point p = getScreenDimension(); int pxW = p.x; int pxH = p.y; - String imageKey = PREFIX_RESIZED_IMAGE + file.getEtag(); + String imageKey = PREFIX_RESIZED_IMAGE + file.getThumbnailKey(); Bitmap bitmap = BitmapUtils.decodeSampledBitmapFromFile(file.getStoragePath(), pxW, pxH); @@ -1313,7 +1313,7 @@ public static void generateThumbnailFromOCFile(OCFile file, User user, Context c int pxW; int pxH; pxW = pxH = getThumbnailDimension(); - String imageKey = PREFIX_THUMBNAIL + file.getEtag(); + String imageKey = PREFIX_THUMBNAIL + file.getThumbnailKey(); GetMethod getMethod = null; 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 a7fe765ecf55..dbe18041e3c9 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 (task.imageKey != null && file.thumbnailKey == task.imageKey) { + if (file.thumbnailKey != null && task.imageKey != null && file.thumbnailKey == task.imageKey) { return } } From 4fa66735128c56ddd8b55c1e38d8f613b1afc3e2 Mon Sep 17 00:00:00 2001 From: alperozturk Date: Mon, 17 Feb 2025 10:02:33 +0100 Subject: [PATCH 07/10] add tests Signed-off-by: alperozturk --- .../owncloud/android/datamodel/OCFileTest.kt | 65 +++++++++++++++++++ 1 file changed, 65 insertions(+) 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) + } } From ac97cffeb60281a35e5783ee9a315fefa93bf5a0 Mon Sep 17 00:00:00 2001 From: alperozturk Date: Mon, 17 Feb 2025 10:03:33 +0100 Subject: [PATCH 08/10] fix code analytics Signed-off-by: alperozturk --- .../com/owncloud/android/ui/preview/PreviewImageFragment.kt | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) 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 4ca2e5da8ca8..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 @@ -328,7 +328,9 @@ class PreviewImageFragment : FileFragment(), Injectable { } private fun getThumbnailBitmap(file: OCFile): Bitmap? { - return ThumbnailsCacheManager.getBitmapFromDiskCache(ThumbnailsCacheManager.PREFIX_THUMBNAIL + file.thumbnailKey) + return ThumbnailsCacheManager.getBitmapFromDiskCache( + ThumbnailsCacheManager.PREFIX_THUMBNAIL + file.thumbnailKey + ) } override fun onStop() { From 46d76881405981624449ab39f1009d550b2d6d80 Mon Sep 17 00:00:00 2001 From: alperozturk Date: Mon, 17 Feb 2025 10:06:39 +0100 Subject: [PATCH 09/10] fix spotbugs Signed-off-by: alperozturk --- .../android/datamodel/ThumbnailsCacheManager.java | 8 +++----- .../com/owncloud/android/ui/adapter/OCFileListDelegate.kt | 1 - 2 files changed, 3 insertions(+), 6 deletions(-) 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 187f74bc06a5..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,13 +261,11 @@ public GalleryImageGenerationTask( User user, FileDataStorageManager storageManager, List asyncTasks, - String imageKey, int backgroundColor) { this.user = user; this.storageManager = storageManager; imageViewReference = new WeakReference<>(imageView); this.asyncTasks = asyncTasks; - this.imageKey = imageKey; this.backgroundColor = backgroundColor; } @@ -649,12 +646,13 @@ private Bitmap doThumbnailFromOCFileInBackground() { Bitmap thumbnail; ServerFileInterface file = (ServerFileInterface) mFile; String imageKey = PREFIX_THUMBNAIL + file.getRemoteId(); + + boolean updateEnforced = false; if (file instanceof OCFile ocFile) { imageKey = PREFIX_THUMBNAIL + ocFile.getThumbnailKey(); + updateEnforced = ocFile.isUpdateThumbnailNeeded(); } - boolean updateEnforced = (file instanceof OCFile && ((OCFile) file).isUpdateThumbnailNeeded()); - if (updateEnforced) { thumbnail = null; } else { 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 dbe18041e3c9..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 @@ -138,7 +138,6 @@ class OCFileListDelegate( user, storageManager, asyncGalleryTasks, - file.thumbnailKey, ContextCompat.getColor(context, R.color.bg_default) ) var drawable = MimeTypeUtil.getFileTypeIcon( From 665b49dd1f097a52c5534c329b856c56c751bc03 Mon Sep 17 00:00:00 2001 From: alperozturk Date: Mon, 17 Feb 2025 10:08:26 +0100 Subject: [PATCH 10/10] fix ss tests Signed-off-by: alperozturk --- .../java/com/owncloud/android/ui/fragment/GalleryFragmentIT.kt | 1 + 1 file changed, 1 insertion(+) 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