refactor: Extension method for WorkManager

This commit is contained in:
Ahmad Ansori Palembani 2024-09-24 06:46:29 +07:00
parent 233758b219
commit 83a8abe07c
Signed by: null2264
GPG key ID: BA64F8B60AF3EFB6
4 changed files with 22 additions and 22 deletions

View file

@ -13,7 +13,6 @@ import androidx.work.ForegroundInfo
import androidx.work.OneTimeWorkRequestBuilder import androidx.work.OneTimeWorkRequestBuilder
import androidx.work.PeriodicWorkRequestBuilder import androidx.work.PeriodicWorkRequestBuilder
import androidx.work.WorkInfo import androidx.work.WorkInfo
import androidx.work.WorkManager
import androidx.work.WorkerParameters import androidx.work.WorkerParameters
import androidx.work.workDataOf import androidx.work.workDataOf
import co.touchlab.kermit.Logger import co.touchlab.kermit.Logger
@ -23,13 +22,14 @@ import eu.kanade.tachiyomi.data.backup.restore.BackupRestoreJob
import eu.kanade.tachiyomi.data.notification.Notifications import eu.kanade.tachiyomi.data.notification.Notifications
import eu.kanade.tachiyomi.util.system.e import eu.kanade.tachiyomi.util.system.e
import eu.kanade.tachiyomi.util.system.localeContext import eu.kanade.tachiyomi.util.system.localeContext
import eu.kanade.tachiyomi.util.system.tryToSetForeground
import eu.kanade.tachiyomi.util.system.notificationManager import eu.kanade.tachiyomi.util.system.notificationManager
import eu.kanade.tachiyomi.util.system.tryToSetForeground
import eu.kanade.tachiyomi.util.system.workManager
import java.util.concurrent.TimeUnit
import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get import uy.kohesive.injekt.api.get
import yokai.domain.backup.BackupPreferences import yokai.domain.backup.BackupPreferences
import yokai.domain.storage.StorageManager import yokai.domain.storage.StorageManager
import java.util.concurrent.*
class BackupCreatorJob(private val context: Context, workerParams: WorkerParameters) : class BackupCreatorJob(private val context: Context, workerParams: WorkerParameters) :
CoroutineWorker(context, workerParams) { CoroutineWorker(context, workerParams) {
@ -82,14 +82,13 @@ class BackupCreatorJob(private val context: Context, workerParams: WorkerParamet
companion object { companion object {
fun isManualJobRunning(context: Context): Boolean { fun isManualJobRunning(context: Context): Boolean {
val list = WorkManager.getInstance(context).getWorkInfosByTag(TAG_MANUAL).get() val list = context.workManager.getWorkInfosByTag(TAG_MANUAL).get()
return list.find { it.state == WorkInfo.State.RUNNING } != null return list.find { it.state == WorkInfo.State.RUNNING } != null
} }
fun setupTask(context: Context, prefInterval: Int? = null) { fun setupTask(context: Context, prefInterval: Int? = null) {
val preferences = Injekt.get<BackupPreferences>() val preferences = Injekt.get<BackupPreferences>()
val interval = prefInterval ?: preferences.backupInterval().get() val interval = prefInterval ?: preferences.backupInterval().get()
val workManager = WorkManager.getInstance(context)
if (interval > 0) { if (interval > 0) {
val request = PeriodicWorkRequestBuilder<BackupCreatorJob>( val request = PeriodicWorkRequestBuilder<BackupCreatorJob>(
interval.toLong(), interval.toLong(),
@ -102,9 +101,9 @@ class BackupCreatorJob(private val context: Context, workerParams: WorkerParamet
.setInputData(workDataOf(IS_AUTO_BACKUP_KEY to true)) .setInputData(workDataOf(IS_AUTO_BACKUP_KEY to true))
.build() .build()
workManager.enqueueUniquePeriodicWork(TAG_AUTO, ExistingPeriodicWorkPolicy.UPDATE, request) context.workManager.enqueueUniquePeriodicWork(TAG_AUTO, ExistingPeriodicWorkPolicy.UPDATE, request)
} else { } else {
workManager.cancelUniqueWork(TAG_AUTO) context.workManager.cancelUniqueWork(TAG_AUTO)
} }
} }
@ -118,7 +117,7 @@ class BackupCreatorJob(private val context: Context, workerParams: WorkerParamet
.addTag(TAG_MANUAL) .addTag(TAG_MANUAL)
.setInputData(inputData) .setInputData(inputData)
.build() .build()
WorkManager.getInstance(context).enqueueUniqueWork(TAG_MANUAL, ExistingWorkPolicy.KEEP, request) context.workManager.enqueueUniqueWork(TAG_MANUAL, ExistingWorkPolicy.KEEP, request)
} }
} }
} }

View file

@ -9,7 +9,6 @@ import androidx.work.ExistingWorkPolicy
import androidx.work.ForegroundInfo import androidx.work.ForegroundInfo
import androidx.work.OneTimeWorkRequestBuilder import androidx.work.OneTimeWorkRequestBuilder
import androidx.work.OutOfQuotaPolicy import androidx.work.OutOfQuotaPolicy
import androidx.work.WorkManager
import androidx.work.WorkerParameters import androidx.work.WorkerParameters
import androidx.work.workDataOf import androidx.work.workDataOf
import co.touchlab.kermit.Logger import co.touchlab.kermit.Logger
@ -20,6 +19,7 @@ import eu.kanade.tachiyomi.util.system.jobIsRunning
import eu.kanade.tachiyomi.util.system.localeContext import eu.kanade.tachiyomi.util.system.localeContext
import eu.kanade.tachiyomi.util.system.tryToSetForeground import eu.kanade.tachiyomi.util.system.tryToSetForeground
import eu.kanade.tachiyomi.util.system.withIOContext import eu.kanade.tachiyomi.util.system.withIOContext
import eu.kanade.tachiyomi.util.system.workManager
import kotlinx.coroutines.CancellationException import kotlinx.coroutines.CancellationException
import yokai.i18n.MR import yokai.i18n.MR
import yokai.util.lang.getString import yokai.util.lang.getString
@ -72,14 +72,13 @@ class BackupRestoreJob(val context: Context, workerParams: WorkerParameters) : C
.setInputData(workDataOf(BackupConst.EXTRA_URI to uri.toString())) .setInputData(workDataOf(BackupConst.EXTRA_URI to uri.toString()))
.setExpedited(OutOfQuotaPolicy.RUN_AS_NON_EXPEDITED_WORK_REQUEST) .setExpedited(OutOfQuotaPolicy.RUN_AS_NON_EXPEDITED_WORK_REQUEST)
.build() .build()
WorkManager.getInstance(context) context.workManager.enqueueUniqueWork(TAG, ExistingWorkPolicy.REPLACE, request)
.enqueueUniqueWork(TAG, ExistingWorkPolicy.REPLACE, request)
} }
fun stop(context: Context) { fun stop(context: Context) {
WorkManager.getInstance(context).cancelUniqueWork(TAG) context.workManager.cancelUniqueWork(TAG)
} }
fun isRunning(context: Context) = WorkManager.getInstance(context).jobIsRunning(TAG) fun isRunning(context: Context) = context.workManager.jobIsRunning(TAG)
} }
} }

View file

@ -10,7 +10,6 @@ import androidx.work.NetworkType
import androidx.work.OneTimeWorkRequestBuilder import androidx.work.OneTimeWorkRequestBuilder
import androidx.work.OutOfQuotaPolicy import androidx.work.OutOfQuotaPolicy
import androidx.work.WorkInfo import androidx.work.WorkInfo
import androidx.work.WorkManager
import androidx.work.WorkerParameters import androidx.work.WorkerParameters
import androidx.work.workDataOf import androidx.work.workDataOf
import eu.kanade.tachiyomi.data.notification.Notifications import eu.kanade.tachiyomi.data.notification.Notifications
@ -19,6 +18,7 @@ import eu.kanade.tachiyomi.extension.ExtensionUpdateJob
import eu.kanade.tachiyomi.util.system.isConnectedToWifi import eu.kanade.tachiyomi.util.system.isConnectedToWifi
import eu.kanade.tachiyomi.util.system.isOnline import eu.kanade.tachiyomi.util.system.isOnline
import eu.kanade.tachiyomi.util.system.tryToSetForeground import eu.kanade.tachiyomi.util.system.tryToSetForeground
import eu.kanade.tachiyomi.util.system.workManager
import kotlinx.coroutines.CancellationException import kotlinx.coroutines.CancellationException
import kotlinx.coroutines.channels.BufferOverflow import kotlinx.coroutines.channels.BufferOverflow
import kotlinx.coroutines.delay import kotlinx.coroutines.delay
@ -111,12 +111,11 @@ class DownloadJob(val context: Context, workerParams: WorkerParameters) : Corout
} }
} }
.build() .build()
WorkManager.getInstance(context) context.workManager.enqueueUniqueWork(TAG, ExistingWorkPolicy.REPLACE, request)
.enqueueUniqueWork(TAG, ExistingWorkPolicy.REPLACE, request)
} }
fun stop(context: Context) { fun stop(context: Context) {
WorkManager.getInstance(context).cancelUniqueWork(TAG) context.workManager.cancelUniqueWork(TAG)
} }
fun callListeners(downloading: Boolean? = null, downloadManager: DownloadManager? = null) { fun callListeners(downloading: Boolean? = null, downloadManager: DownloadManager? = null) {
@ -125,7 +124,7 @@ class DownloadJob(val context: Context, workerParams: WorkerParameters) : Corout
} }
fun isRunning(context: Context): Boolean { fun isRunning(context: Context): Boolean {
return WorkManager.getInstance(context) return context.workManager
.getWorkInfosForUniqueWork(TAG) .getWorkInfosForUniqueWork(TAG)
.get() .get()
.let { list -> list.count { it.state == WorkInfo.State.RUNNING } == 1 } .let { list -> list.count { it.state == WorkInfo.State.RUNNING } == 1 }

View file

@ -40,16 +40,16 @@ import eu.kanade.tachiyomi.R
import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.data.preference.PreferencesHelper
import eu.kanade.tachiyomi.extension.util.ExtensionLoader import eu.kanade.tachiyomi.extension.util.ExtensionLoader
import eu.kanade.tachiyomi.ui.main.MainActivity import eu.kanade.tachiyomi.ui.main.MainActivity
import java.io.File
import java.util.Locale
import kotlin.math.max
import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.NonCancellable import kotlinx.coroutines.NonCancellable
import kotlinx.coroutines.delay
import kotlinx.coroutines.withContext import kotlinx.coroutines.withContext
import uy.kohesive.injekt.Injekt import uy.kohesive.injekt.Injekt
import uy.kohesive.injekt.api.get import uy.kohesive.injekt.api.get
import yokai.i18n.MR import yokai.i18n.MR
import java.io.File
import java.util.*
import kotlin.math.max
private const val TABLET_UI_MIN_SCREEN_WIDTH_DP = 720 private const val TABLET_UI_MIN_SCREEN_WIDTH_DP = 720
@ -233,6 +233,9 @@ val Context.wifiManager: WifiManager
val Context.powerManager: PowerManager val Context.powerManager: PowerManager
get() = getSystemService()!! get() = getSystemService()!!
val Context.workManager: WorkManager
get() = WorkManager.getInstance(this)
/** /**
* Returns true if device is connected to Wifi. * Returns true if device is connected to Wifi.
*/ */