Skip to content

Commit cb6f8b9

Browse files
Merge pull request #17095 from nextcloud/fix/upload-cancel
improve upload cancellation
2 parents 5a22bf6 + 25f1820 commit cb6f8b9

4 files changed

Lines changed: 24 additions & 14 deletions

File tree

app/src/main/java/com/nextcloud/client/jobs/upload/FileUploadBroadcastReceiver.kt

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,11 @@ import android.app.NotificationManager
1111
import android.content.BroadcastReceiver
1212
import android.content.Context
1313
import android.content.Intent
14+
import com.nextcloud.client.account.UserAccountManagerImpl
1415
import com.owncloud.android.MainApp
16+
import com.owncloud.android.datamodel.FileDataStorageManager
1517
import com.owncloud.android.datamodel.UploadsStorageManager
18+
import com.owncloud.android.lib.common.utils.Log_OC
1619
import javax.inject.Inject
1720

1821
class FileUploadBroadcastReceiver : BroadcastReceiver() {
@@ -21,12 +24,12 @@ class FileUploadBroadcastReceiver : BroadcastReceiver() {
2124
lateinit var uploadsStorageManager: UploadsStorageManager
2225

2326
companion object {
24-
// region cancel or remove actions
27+
private const val TAG = "FileUploadBroadcastReceiver"
28+
2529
const val UPLOAD_ID = "UPLOAD_ID"
2630
const val ACCOUNT_NAME = "ACCOUNT_NAME"
2731
const val REMOTE_PATH = "REMOTE_PATH"
2832
const val REMOVE = "REMOVE"
29-
// endregion
3033
}
3134

3235
@Suppress("ReturnCount")
@@ -57,9 +60,12 @@ class FileUploadBroadcastReceiver : BroadcastReceiver() {
5760

5861
val remove = intent.getBooleanExtra(REMOVE, false)
5962

63+
Log_OC.d(TAG, "upload: $remotePath removed: $remove")
64+
6065
FileUploadWorker.cancelUpload(remotePath, accountName)
6166

6267
if (remove) {
68+
removeFileIfAlreadyUploaded(context, remotePath)
6369
uploadsStorageManager.removeUpload(uploadId)
6470
} else {
6571
FileUploadHelper.instance().updateUploadStatus(
@@ -73,4 +79,13 @@ class FileUploadBroadcastReceiver : BroadcastReceiver() {
7379
val notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
7480
notificationManager.cancel(uploadId.toInt())
7581
}
82+
83+
@Suppress("DEPRECATION")
84+
private fun removeFileIfAlreadyUploaded(context: Context, remotePath: String) {
85+
val userAccountManager = UserAccountManagerImpl.fromContext(context)
86+
val user = userAccountManager.user
87+
val storageManager = FileDataStorageManager(user, context.contentResolver)
88+
val ocFile = storageManager.getFileByPath(remotePath) ?: return
89+
storageManager.removeFile(ocFile, true, false)
90+
}
7691
}

app/src/main/java/com/nextcloud/client/jobs/upload/FileUploadWorker.kt

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ import com.nextcloud.client.preferences.AppPreferences
2727
import com.nextcloud.utils.ForegroundServiceHelper
2828
import com.nextcloud.utils.extensions.getPercent
2929
import com.nextcloud.utils.extensions.toFile
30-
import com.nextcloud.utils.extensions.updateStatus
3130
import com.owncloud.android.R
3231
import com.owncloud.android.datamodel.ForegroundServiceType
3332
import com.owncloud.android.datamodel.SyncedFolder
@@ -374,14 +373,6 @@ class FileUploadWorker(
374373
fileUploadEventBroadcaster.sendUploadStarted(operation, context)
375374
} catch (e: Exception) {
376375
Log_OC.e(TAG, "Error uploading", e)
377-
uploadsStorageManager.run {
378-
uploadDao.getUploadById(upload.uploadId, user.accountName)?.let { entity ->
379-
updateStatus(
380-
entity,
381-
UploadsStorageManager.UploadStatus.UPLOAD_FAILED
382-
)
383-
}
384-
}
385376
result = RemoteOperationResult(e)
386377
}
387378

app/src/main/java/com/nextcloud/client/jobs/upload/UploadBroadcastAction.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import android.content.Context
1212
import android.content.Intent
1313
import androidx.core.app.NotificationCompat
1414
import com.owncloud.android.R
15+
import com.owncloud.android.lib.common.utils.Log_OC
1516
import com.owncloud.android.operations.UploadFileOperation
1617

1718
sealed class UploadBroadcastAction {
@@ -48,7 +49,10 @@ sealed class UploadBroadcastAction {
4849
setPackage(context.packageName)
4950
}
5051

51-
val requestCode = if (remove) operation.ocUploadId.toInt() + 1000 else operation.ocUploadId.toInt()
52+
val uploadId = operation.ocUploadId.toInt()
53+
val requestCode = if (remove) uploadId + 1000 else uploadId
54+
55+
Log_OC.i("UploadBroadcastAction", "broadcast action code: $requestCode")
5256

5357
return PendingIntent.getBroadcast(
5458
context,

app/src/main/java/com/owncloud/android/ui/adapter/LocalFileListAdapter.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@
3939

4040
import java.io.File;
4141
import java.util.ArrayList;
42-
import java.util.HashSet;
42+
import java.util.LinkedHashSet;
4343
import java.util.List;
4444
import java.util.Locale;
4545
import java.util.Set;
@@ -88,7 +88,7 @@ public LocalFileListAdapter(boolean localFolderPickerMode,
8888
mContext = context;
8989
mLocalFolderPicker = localFolderPickerMode;
9090
this.localFileListFragmentInterface = localFileListFragmentInterface;
91-
checkedFiles = new HashSet<>();
91+
checkedFiles = new LinkedHashSet<>();
9292
this.viewThemeUtils = viewThemeUtils;
9393
this.isWithinEncryptedFolder = isWithinEncryptedFolder;
9494
setHasStableIds(true);

0 commit comments

Comments
 (0)