From 402220cb5ed3a3d3280f1310fe4028f256143d58 Mon Sep 17 00:00:00 2001 From: alperozturk Date: Thu, 9 Jan 2025 16:44:36 +0100 Subject: [PATCH] fix Signed-off-by: alperozturk --- .../client/jobs/BackgroundJobManagerImpl.kt | 5 ++++ .../client/jobs/upload/FileUploadWorker.kt | 27 ++++++++++++++++++- .../jobs/upload/UploadNotificationManager.kt | 12 +++++++++ app/src/main/res/values/strings.xml | 1 + 4 files changed, 44 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/nextcloud/client/jobs/BackgroundJobManagerImpl.kt b/app/src/main/java/com/nextcloud/client/jobs/BackgroundJobManagerImpl.kt index 422d5a924c9d..0f48003db9cd 100644 --- a/app/src/main/java/com/nextcloud/client/jobs/BackgroundJobManagerImpl.kt +++ b/app/src/main/java/com/nextcloud/client/jobs/BackgroundJobManagerImpl.kt @@ -584,9 +584,14 @@ internal class BackgroundJobManagerImpl( val tag = startFileUploadJobTag(user) + val constraints = Constraints.Builder() + .setRequiredNetworkType(NetworkType.CONNECTED) + .build() + val request = oneTimeRequestBuilder(FileUploadWorker::class, JOB_FILES_UPLOAD, user) .addTag(tag) .setInputData(data) + .setConstraints(constraints) .build() workManager.enqueueUniqueWork(tag, ExistingWorkPolicy.KEEP, request) 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 6422b0efa71b..dad0fd7297bc 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 @@ -9,6 +9,7 @@ package com.nextcloud.client.jobs.upload import android.app.PendingIntent import android.content.Context +import android.provider.Settings import androidx.localbroadcastmanager.content.LocalBroadcastManager import androidx.work.Worker import androidx.work.WorkerParameters @@ -148,6 +149,12 @@ class FileUploadWorker( return Result.success() } + if (canExitEarly()) { + Log_OC.d(TAG, "Airplane mode is enabled or no internet connection, stopping worker.") + notificationManager.showConnectionErrorNotification() + return Result.failure() + } + Log_OC.d(TAG, "Handling ${uploadsPerPage.size} uploads for account $accountName") val lastId = uploadsPerPage.last().uploadId uploadFiles(totalUploadSize, uploadsPerPage, accountName) @@ -163,14 +170,32 @@ class FileUploadWorker( return Result.success() } + private fun canExitEarly(): Boolean { + return !connectivityService.isConnected || + connectivityService.isInternetWalled || + isStopped || + isAirplaneModeEnabled() + } + + private fun isAirplaneModeEnabled(): Boolean { + return Settings.Global.getInt(context.contentResolver, Settings.Global.AIRPLANE_MODE_ON, 0) != 0 + } + @Suppress("NestedBlockDepth") private fun uploadFiles(totalUploadSize: Int, uploadsPerPage: List, accountName: String) { val user = userAccountManager.getUser(accountName) setWorkerState(user.get(), uploadsPerPage) + if (canExitEarly()) { + Log_OC.d(TAG, "Airplane mode is enabled or no internet connection, stopping worker.") + notificationManager.showConnectionErrorNotification() + return + } + run uploads@{ uploadsPerPage.forEach { upload -> - if (isStopped) { + if (canExitEarly()) { + notificationManager.showConnectionErrorNotification() return@uploads } diff --git a/app/src/main/java/com/nextcloud/client/jobs/upload/UploadNotificationManager.kt b/app/src/main/java/com/nextcloud/client/jobs/upload/UploadNotificationManager.kt index bade8ed798fa..e3ec0121fe43 100644 --- a/app/src/main/java/com/nextcloud/client/jobs/upload/UploadNotificationManager.kt +++ b/app/src/main/java/com/nextcloud/client/jobs/upload/UploadNotificationManager.kt @@ -143,6 +143,18 @@ class UploadNotificationManager(private val context: Context, viewThemeUtils: Vi ) } + fun showConnectionErrorNotification() { + notificationBuilder.run { + setContentTitle(context.getString(R.string.file_upload_worker_error_notification_title)) + setContentText("") + } + + notificationManager.notify( + FileUploadWorker.NOTIFICATION_ERROR_ID, + notificationBuilder.build() + ) + } + fun dismissOldErrorNotification(operation: UploadFileOperation?) { if (operation == null) { return diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 3ddcab24f4f2..f2f394a68b51 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -196,6 +196,7 @@ No uploads available Upload some content or activate auto upload. folder + Upload failed. No internet connection Download Sync File renamed %1$s during upload