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)
+ }
+}
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/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) {
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