From ba7ffc8051b25deafece70a7495d694ab9af1d41 Mon Sep 17 00:00:00 2001 From: SK <126724070+u7665680@users.noreply.github.com> Date: Sun, 27 Oct 2024 17:38:24 +0900 Subject: [PATCH] Fix issue #5831 Add new checking for the display of pause button --- .../upload/worker/WorkRequestHelper.kt | 155 +++++++++--------- 1 file changed, 81 insertions(+), 74 deletions(-) diff --git a/app/src/main/java/fr/free/nrw/commons/upload/worker/WorkRequestHelper.kt b/app/src/main/java/fr/free/nrw/commons/upload/worker/WorkRequestHelper.kt index 39d59a8d5..ce21fac32 100644 --- a/app/src/main/java/fr/free/nrw/commons/upload/worker/WorkRequestHelper.kt +++ b/app/src/main/java/fr/free/nrw/commons/upload/worker/WorkRequestHelper.kt @@ -1,74 +1,81 @@ -package fr.free.nrw.commons.upload.worker - -import android.content.Context -import androidx.work.BackoffPolicy -import androidx.work.Constraints -import androidx.work.ExistingWorkPolicy -import androidx.work.NetworkType -import androidx.work.OneTimeWorkRequest -import androidx.work.WorkManager -import androidx.work.WorkRequest.Companion.MIN_BACKOFF_MILLIS -import timber.log.Timber -import java.util.concurrent.TimeUnit - -/** - * Helper class for all the one time work requests - */ -class WorkRequestHelper { - companion object { - private var isUploadWorkerRunning = false - private val lock = Object() - - fun makeOneTimeWorkRequest( - context: Context, - existingWorkPolicy: ExistingWorkPolicy, - ) { - synchronized(lock) { - if (isUploadWorkerRunning) { - Timber.e("UploadWorker is already running. Cannot start another instance.") - return - } else { - Timber.e("Setting isUploadWorkerRunning to true") - isUploadWorkerRunning = true - } - } - - /* Set backoff criteria for the work request - The default backoff policy is EXPONENTIAL, but while testing we found that it - too long for the uploads to finish. So, set the backoff policy as LINEAR with the - minimum backoff delay value of 10 seconds. - - More details on when exactly it is retried: - https://developer.android.com/guide/background/persistent/getting-started/define-work#retries_backoff - */ - val constraints: Constraints = - Constraints - .Builder() - .setRequiredNetworkType(NetworkType.CONNECTED) - .build() - val uploadRequest: OneTimeWorkRequest = - OneTimeWorkRequest - .Builder(UploadWorker::class.java) - .setBackoffCriteria( - BackoffPolicy.LINEAR, - MIN_BACKOFF_MILLIS, - TimeUnit.MILLISECONDS, - ).setConstraints(constraints) - .build() - WorkManager.getInstance(context).enqueueUniqueWork( - UploadWorker::class.java.simpleName, - existingWorkPolicy, - uploadRequest, - ) - } - - /** - * Sets the flag isUploadWorkerRunning to`false` allowing new worker to be started. - */ - fun markUploadWorkerAsStopped() { - synchronized(lock) { - isUploadWorkerRunning = false - } - } - } -} +package fr.free.nrw.commons.upload.worker + +import android.content.Context +import androidx.work.BackoffPolicy +import androidx.work.Constraints +import androidx.work.ExistingWorkPolicy +import androidx.work.NetworkType +import androidx.work.OneTimeWorkRequest +import androidx.work.WorkManager +import androidx.work.WorkRequest.Companion.MIN_BACKOFF_MILLIS +import timber.log.Timber +import java.util.concurrent.TimeUnit + +/** + * Helper class for all the one time work requests + */ +class WorkRequestHelper { + companion object { + private var isUploadWorkerRunning = false + private val lock = Object() + + fun makeOneTimeWorkRequest( + context: Context, + existingWorkPolicy: ExistingWorkPolicy, + ) { + synchronized(lock) { + if (isUploadWorkerRunning) { + Timber.e("UploadWorker is already running. Cannot start another instance.") + return + } else { + Timber.e("Setting isUploadWorkerRunning to true") + isUploadWorkerRunning = true + } + } + + /* Set backoff criteria for the work request + The default backoff policy is EXPONENTIAL, but while testing we found that it + too long for the uploads to finish. So, set the backoff policy as LINEAR with the + minimum backoff delay value of 10 seconds. + + More details on when exactly it is retried: + https://developer.android.com/guide/background/persistent/getting-started/define-work#retries_backoff + */ + val constraints: Constraints = + Constraints + .Builder() + .setRequiredNetworkType(NetworkType.CONNECTED) + .build() + val uploadRequest: OneTimeWorkRequest = + OneTimeWorkRequest + .Builder(UploadWorker::class.java) + .setBackoffCriteria( + BackoffPolicy.LINEAR, + MIN_BACKOFF_MILLIS, + TimeUnit.MILLISECONDS, + ).setConstraints(constraints) + .build() + WorkManager.getInstance(context).enqueueUniqueWork( + UploadWorker::class.java.simpleName, + existingWorkPolicy, + uploadRequest, + ) + } + + /** + * Sets the flag isUploadWorkerRunning to`false` allowing new worker to be started. + */ + fun markUploadWorkerAsStopped() { + synchronized(lock) { + isUploadWorkerRunning = false + } + } + + /** + * Provide a function for other class to get the flag isUploadWorkerRunning + */ + fun getisUploadWorkerRunning(): Boolean { + return isUploadWorkerRunning; + } + } +}