From e7fee5913527a148f6d0ca675c7f41fe8037b2d8 Mon Sep 17 00:00:00 2001 From: alperozturk96 Date: Mon, 2 Nov 2026 11:11:28 +0300 Subject: [PATCH 1/3] fix download cancel Signed-off-by: alperozturk96 --- .../owncloud/android/operations/DownloadFileOperation.kt | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/app/src/main/java/com/owncloud/android/operations/DownloadFileOperation.kt b/app/src/main/java/com/owncloud/android/operations/DownloadFileOperation.kt index fc025259510c..9a586816cc11 100644 --- a/app/src/main/java/com/owncloud/android/operations/DownloadFileOperation.kt +++ b/app/src/main/java/com/owncloud/android/operations/DownloadFileOperation.kt @@ -57,6 +57,9 @@ class DownloadFileOperation( private val cancellationRequested = AtomicBoolean(false) private val mainThreadHandler = Handler(Looper.getMainLooper()) + @Volatile + private var downloadOperation: DownloadFileRemoteOperation? = null + constructor(user: User, file: OCFile, context: Context?) : this( user, file, @@ -165,6 +168,8 @@ class DownloadFileOperation( if (downloadType == DownloadType.DOWNLOAD) { dataTransferListeners.forEach { op.addProgressListener(it) } } + downloadOperation = op + if (cancellationRequested.get()) op.cancel() } val result = operation.execute(client.toNextcloudClient(operationContext)) as RemoteOperationResult return DownloadResult(operation, result) @@ -261,6 +266,7 @@ class DownloadFileOperation( fun cancel() { cancellationRequested.set(true) + downloadOperation?.cancel() } fun addProgressListener(listener: OnDatatransferProgressListener) { From a0d9a0c3b63016b62ff0a5b1d91b781851ec0b04 Mon Sep 17 00:00:00 2001 From: alperozturk96 Date: Mon, 2 Nov 2026 11:12:06 +0300 Subject: [PATCH 2/3] add cancel button Signed-off-by: alperozturk96 --- app/src/main/AndroidManifest.xml | 4 ++ .../download/DownloadNotificationManager.kt | 23 +++++++++++ .../download/FileDownloadCancelReceiver.kt | 39 +++++++++++++++++++ 3 files changed, 66 insertions(+) create mode 100644 app/src/main/java/com/nextcloud/client/jobs/download/FileDownloadCancelReceiver.kt diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 1f1c5a60abbe..8014d33ba07c 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -612,6 +612,10 @@ android:name="com.nextcloud.client.jobs.folderDownload.FolderDownloadWorkerReceiver" android:exported="false" /> + + + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +package com.nextcloud.client.jobs.download + +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import com.owncloud.android.lib.common.utils.Log_OC + +class FileDownloadCancelReceiver : BroadcastReceiver() { + + companion object { + private const val TAG = "FileDownloadCancelReceiver" + private const val INVALID_FILE_ID = -1L + + const val ACCOUNT_NAME = "ACCOUNT_NAME" + const val FILE_ID = "FILE_ID" + } + + override fun onReceive(context: Context, intent: Intent) { + val accountName = intent.getStringExtra(ACCOUNT_NAME) + if (accountName.isNullOrEmpty()) { + return + } + + val fileId = intent.getLongExtra(FILE_ID, INVALID_FILE_ID) + if (fileId == INVALID_FILE_ID) { + return + } + + Log_OC.d(TAG, "cancelling download of file: $fileId") + FileDownloadWorker.cancelOperation(accountName, fileId) + } +} From 9875eb5303638a9f6a621a9e8cc7b9f6c585b334 Mon Sep 17 00:00:00 2001 From: alperozturk96 Date: Mon, 2 Nov 2026 11:15:37 +0300 Subject: [PATCH 3/3] better translation Signed-off-by: alperozturk96 --- .../com/nextcloud/client/jobs/download/FileDownloadWorker.kt | 2 +- app/src/main/res/values/strings.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/nextcloud/client/jobs/download/FileDownloadWorker.kt b/app/src/main/java/com/nextcloud/client/jobs/download/FileDownloadWorker.kt index e1afbb18cb9a..96bfe30f5797 100644 --- a/app/src/main/java/com/nextcloud/client/jobs/download/FileDownloadWorker.kt +++ b/app/src/main/java/com/nextcloud/client/jobs/download/FileDownloadWorker.kt @@ -350,7 +350,7 @@ class FileDownloadWorker( private fun showDownloadErrorNotification(downloadError: FileDownloadError) { val text = when (downloadError) { FileDownloadError.Cancelled -> { - context.getString(R.string.downloader_file_download_cancelled) + context.getString(R.string.downloader_download_canceled) } FileDownloadError.Failed -> { diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 02ad7b2f9b0c..5603a2e8f4bc 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -354,7 +354,7 @@ Download failed Could not download %1$s Not downloaded yet - Certain files were canceled during the download by user + Download canceled Error occurred while downloading files Unexpected error occurred while downloading files Download failed, log in again