diff --git a/app/src/main/java/com/nextcloud/client/jobs/upload/FileUploadBroadcastReceiver.kt b/app/src/main/java/com/nextcloud/client/jobs/upload/FileUploadBroadcastReceiver.kt index 0e5fcf90e489..830270fa6839 100644 --- a/app/src/main/java/com/nextcloud/client/jobs/upload/FileUploadBroadcastReceiver.kt +++ b/app/src/main/java/com/nextcloud/client/jobs/upload/FileUploadBroadcastReceiver.kt @@ -11,8 +11,11 @@ import android.app.NotificationManager import android.content.BroadcastReceiver import android.content.Context import android.content.Intent +import com.nextcloud.client.account.UserAccountManagerImpl import com.owncloud.android.MainApp +import com.owncloud.android.datamodel.FileDataStorageManager import com.owncloud.android.datamodel.UploadsStorageManager +import com.owncloud.android.lib.common.utils.Log_OC import javax.inject.Inject class FileUploadBroadcastReceiver : BroadcastReceiver() { @@ -21,12 +24,12 @@ class FileUploadBroadcastReceiver : BroadcastReceiver() { lateinit var uploadsStorageManager: UploadsStorageManager companion object { - // region cancel or remove actions + private const val TAG = "FileUploadBroadcastReceiver" + const val UPLOAD_ID = "UPLOAD_ID" const val ACCOUNT_NAME = "ACCOUNT_NAME" const val REMOTE_PATH = "REMOTE_PATH" const val REMOVE = "REMOVE" - // endregion } @Suppress("ReturnCount") @@ -57,9 +60,12 @@ class FileUploadBroadcastReceiver : BroadcastReceiver() { val remove = intent.getBooleanExtra(REMOVE, false) + Log_OC.d(TAG, "upload: $remotePath removed: $remove") + FileUploadWorker.cancelUpload(remotePath, accountName) if (remove) { + removeFileIfAlreadyUploaded(context, remotePath) uploadsStorageManager.removeUpload(uploadId) } else { FileUploadHelper.instance().updateUploadStatus( @@ -73,4 +79,13 @@ class FileUploadBroadcastReceiver : BroadcastReceiver() { val notificationManager = context.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager notificationManager.cancel(uploadId.toInt()) } + + @Suppress("DEPRECATION") + private fun removeFileIfAlreadyUploaded(context: Context, remotePath: String) { + val userAccountManager = UserAccountManagerImpl.fromContext(context) + val user = userAccountManager.user + val storageManager = FileDataStorageManager(user, context.contentResolver) + val ocFile = storageManager.getFileByPath(remotePath) ?: return + storageManager.removeFile(ocFile, true, false) + } } diff --git a/app/src/main/java/com/nextcloud/client/jobs/upload/FileUploadWorker.kt b/app/src/main/java/com/nextcloud/client/jobs/upload/FileUploadWorker.kt index 6524ac85714b..a23d3590eda9 100644 --- a/app/src/main/java/com/nextcloud/client/jobs/upload/FileUploadWorker.kt +++ b/app/src/main/java/com/nextcloud/client/jobs/upload/FileUploadWorker.kt @@ -27,7 +27,6 @@ import com.nextcloud.client.preferences.AppPreferences import com.nextcloud.utils.ForegroundServiceHelper import com.nextcloud.utils.extensions.getPercent import com.nextcloud.utils.extensions.toFile -import com.nextcloud.utils.extensions.updateStatus import com.owncloud.android.R import com.owncloud.android.datamodel.ForegroundServiceType import com.owncloud.android.datamodel.SyncedFolder @@ -374,14 +373,6 @@ class FileUploadWorker( fileUploadEventBroadcaster.sendUploadStarted(operation, context) } catch (e: Exception) { Log_OC.e(TAG, "Error uploading", e) - uploadsStorageManager.run { - uploadDao.getUploadById(upload.uploadId, user.accountName)?.let { entity -> - updateStatus( - entity, - UploadsStorageManager.UploadStatus.UPLOAD_FAILED - ) - } - } result = RemoteOperationResult(e) } diff --git a/app/src/main/java/com/nextcloud/client/jobs/upload/UploadBroadcastAction.kt b/app/src/main/java/com/nextcloud/client/jobs/upload/UploadBroadcastAction.kt index e502484e4144..b1778d23c453 100644 --- a/app/src/main/java/com/nextcloud/client/jobs/upload/UploadBroadcastAction.kt +++ b/app/src/main/java/com/nextcloud/client/jobs/upload/UploadBroadcastAction.kt @@ -12,6 +12,7 @@ import android.content.Context import android.content.Intent import androidx.core.app.NotificationCompat import com.owncloud.android.R +import com.owncloud.android.lib.common.utils.Log_OC import com.owncloud.android.operations.UploadFileOperation sealed class UploadBroadcastAction { @@ -48,7 +49,10 @@ sealed class UploadBroadcastAction { setPackage(context.packageName) } - val requestCode = if (remove) operation.ocUploadId.toInt() + 1000 else operation.ocUploadId.toInt() + val uploadId = operation.ocUploadId.toInt() + val requestCode = if (remove) uploadId + 1000 else uploadId + + Log_OC.i("UploadBroadcastAction", "broadcast action code: $requestCode") return PendingIntent.getBroadcast( context, diff --git a/app/src/main/java/com/owncloud/android/ui/adapter/LocalFileListAdapter.java b/app/src/main/java/com/owncloud/android/ui/adapter/LocalFileListAdapter.java index 676f911e6f49..25952309923e 100644 --- a/app/src/main/java/com/owncloud/android/ui/adapter/LocalFileListAdapter.java +++ b/app/src/main/java/com/owncloud/android/ui/adapter/LocalFileListAdapter.java @@ -39,7 +39,7 @@ import java.io.File; import java.util.ArrayList; -import java.util.HashSet; +import java.util.LinkedHashSet; import java.util.List; import java.util.Locale; import java.util.Set; @@ -88,7 +88,7 @@ public LocalFileListAdapter(boolean localFolderPickerMode, mContext = context; mLocalFolderPicker = localFolderPickerMode; this.localFileListFragmentInterface = localFileListFragmentInterface; - checkedFiles = new HashSet<>(); + checkedFiles = new LinkedHashSet<>(); this.viewThemeUtils = viewThemeUtils; this.isWithinEncryptedFolder = isWithinEncryptedFolder; setHasStableIds(true);