From 5b2a6d9ff3d94dd61890cbf55bbc9ef03151e425 Mon Sep 17 00:00:00 2001 From: alperozturk Date: Mon, 15 Dec 2025 09:17:26 +0100 Subject: [PATCH 1/2] fix: stop running gallery background job when user leave Signed-off-by: alperozturk --- .../jobs/gallery/GalleryImageGenerationJob.kt | 2 ++ .../owncloud/android/ui/adapter/GalleryAdapter.kt | 4 ++++ .../android/ui/adapter/OCFileListDelegate.kt | 13 +++++++++++++ .../android/ui/fragment/GalleryFragment.java | 1 + 4 files changed, 20 insertions(+) diff --git a/app/src/main/java/com/nextcloud/client/jobs/gallery/GalleryImageGenerationJob.kt b/app/src/main/java/com/nextcloud/client/jobs/gallery/GalleryImageGenerationJob.kt index 7138193a430c..e597c62e3a7a 100644 --- a/app/src/main/java/com/nextcloud/client/jobs/gallery/GalleryImageGenerationJob.kt +++ b/app/src/main/java/com/nextcloud/client/jobs/gallery/GalleryImageGenerationJob.kt @@ -40,6 +40,8 @@ class GalleryImageGenerationJob(private val user: User, private val storageManag ) private val activeJobs = WeakHashMap() + fun getActiveJobs(): WeakHashMap = activeJobs + fun removeActiveJob(imageView: ImageView, job: CoroutineScope) { if (isActiveJob(imageView, job)) { removeJob(imageView) diff --git a/app/src/main/java/com/owncloud/android/ui/adapter/GalleryAdapter.kt b/app/src/main/java/com/owncloud/android/ui/adapter/GalleryAdapter.kt index 0c84fe6c84e3..f7f0bc2ef76b 100644 --- a/app/src/main/java/com/owncloud/android/ui/adapter/GalleryAdapter.kt +++ b/app/src/main/java/com/owncloud/android/ui/adapter/GalleryAdapter.kt @@ -372,4 +372,8 @@ class GalleryAdapter( override fun setHighlightedItem(file: OCFile) = Unit override fun setSortOrder(mFile: OCFile, sortOrder: FileSortOrder) = Unit + + fun cleanup() { + ocFileListDelegate.cleanup() + } } 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 7cc6c4b59e6f..b784a83f478a 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 @@ -413,6 +413,19 @@ class OCFileListDelegate( fun cleanup() { ioScope.cancel() + + val activeJobs = GalleryImageGenerationJob.getActiveJobs() + + // Cancel all pending thumbnail/generation jobs for gallery images + for ((_, job) in activeJobs) { + job.cancel() + } + activeJobs.clear() + + // cancel async tasks from ThumbnailsCacheManager + cancelAllPendingTasks() + + Log_OC.d(TAG, "background jobs cancelled") } companion object { diff --git a/app/src/main/java/com/owncloud/android/ui/fragment/GalleryFragment.java b/app/src/main/java/com/owncloud/android/ui/fragment/GalleryFragment.java index 094c03da6464..cf1a649c2dc0 100644 --- a/app/src/main/java/com/owncloud/android/ui/fragment/GalleryFragment.java +++ b/app/src/main/java/com/owncloud/android/ui/fragment/GalleryFragment.java @@ -120,6 +120,7 @@ public static void setLastMediaItemPosition(Integer position) { public void onDestroyView() { LocalBroadcastManager.getInstance(requireContext()).unregisterReceiver(refreshSearchEventReceiver); setLastMediaItemPosition(null); + mAdapter.cleanup(); super.onDestroyView(); } From a89eb6a14cd039097e66a3c12a79e4031d78e822 Mon Sep 17 00:00:00 2001 From: alperozturk Date: Wed, 17 Dec 2025 11:30:31 +0100 Subject: [PATCH 2/2] add cancel all function Signed-off-by: alperozturk --- .../client/jobs/gallery/GalleryImageGenerationJob.kt | 7 ++++++- .../com/owncloud/android/ui/adapter/OCFileListDelegate.kt | 8 +------- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/com/nextcloud/client/jobs/gallery/GalleryImageGenerationJob.kt b/app/src/main/java/com/nextcloud/client/jobs/gallery/GalleryImageGenerationJob.kt index e597c62e3a7a..0e4d2149baa9 100644 --- a/app/src/main/java/com/nextcloud/client/jobs/gallery/GalleryImageGenerationJob.kt +++ b/app/src/main/java/com/nextcloud/client/jobs/gallery/GalleryImageGenerationJob.kt @@ -40,7 +40,12 @@ class GalleryImageGenerationJob(private val user: User, private val storageManag ) private val activeJobs = WeakHashMap() - fun getActiveJobs(): WeakHashMap = activeJobs + fun cancelAllActiveJobs() { + for ((_, job) in activeJobs) { + job.cancel() + } + activeJobs.clear() + } fun removeActiveJob(imageView: ImageView, job: CoroutineScope) { if (isActiveJob(imageView, job)) { 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 b784a83f478a..638faacd7596 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 @@ -414,13 +414,7 @@ class OCFileListDelegate( fun cleanup() { ioScope.cancel() - val activeJobs = GalleryImageGenerationJob.getActiveJobs() - - // Cancel all pending thumbnail/generation jobs for gallery images - for ((_, job) in activeJobs) { - job.cancel() - } - activeJobs.clear() + GalleryImageGenerationJob.cancelAllActiveJobs() // cancel async tasks from ThumbnailsCacheManager cancelAllPendingTasks()