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