mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-10-31 14:27:57 +01:00 
			
		
		
		
	Migrate to WorkManager
This commit is contained in:
		| @@ -8,13 +8,9 @@ import androidx.lifecycle.LifecycleObserver | ||||
| import androidx.lifecycle.OnLifecycleEvent | ||||
| import androidx.lifecycle.ProcessLifecycleOwner | ||||
| import androidx.multidex.MultiDex | ||||
| import com.evernote.android.job.JobManager | ||||
| import eu.kanade.tachiyomi.data.backup.BackupCreatorJob | ||||
| import eu.kanade.tachiyomi.data.library.LibraryUpdateJob | ||||
| import eu.kanade.tachiyomi.data.notification.Notifications | ||||
| import eu.kanade.tachiyomi.data.preference.PreferencesHelper | ||||
| import eu.kanade.tachiyomi.data.preference.getOrDefault | ||||
| import eu.kanade.tachiyomi.data.updater.UpdaterJob | ||||
| import eu.kanade.tachiyomi.ui.security.SecureActivityDelegate | ||||
| import eu.kanade.tachiyomi.util.system.LocaleHelper | ||||
| import org.acra.ACRA | ||||
| @@ -42,7 +38,6 @@ open class App : Application(), LifecycleObserver { | ||||
|         Injekt.importModule(AppModule(this)) | ||||
|  | ||||
|         setupAcra() | ||||
|         setupJobManager() | ||||
|         setupNotificationChannels() | ||||
|  | ||||
|         LocaleHelper.updateConfiguration(this, resources.configuration) | ||||
| @@ -72,21 +67,6 @@ open class App : Application(), LifecycleObserver { | ||||
|         ACRA.init(this) | ||||
|     } | ||||
|  | ||||
|     protected open fun setupJobManager() { | ||||
|         try { | ||||
|             JobManager.create(this).addJobCreator { tag -> | ||||
|                 when (tag) { | ||||
|                     LibraryUpdateJob.TAG -> LibraryUpdateJob() | ||||
|                     UpdaterJob.TAG -> UpdaterJob() | ||||
|                     BackupCreatorJob.TAG -> BackupCreatorJob() | ||||
|                     else -> null | ||||
|                 } | ||||
|             } | ||||
|         } catch (e: Exception) { | ||||
|             Timber.w("Can't initialize job manager") | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     protected open fun setupNotificationChannels() { | ||||
|         Notifications.createChannels(this) | ||||
|     } | ||||
|   | ||||
| @@ -1,23 +1,28 @@ | ||||
| package eu.kanade.tachiyomi.data.backup | ||||
|  | ||||
| import android.content.Context | ||||
| import android.net.Uri | ||||
| import com.evernote.android.job.Job | ||||
| import com.evernote.android.job.JobManager | ||||
| import com.evernote.android.job.JobRequest | ||||
| import androidx.work.ExistingPeriodicWorkPolicy | ||||
| import androidx.work.PeriodicWorkRequestBuilder | ||||
| import androidx.work.WorkManager | ||||
| import androidx.work.Worker | ||||
| import androidx.work.WorkerParameters | ||||
| import eu.kanade.tachiyomi.data.preference.PreferencesHelper | ||||
| import eu.kanade.tachiyomi.data.preference.getOrDefault | ||||
| import java.util.concurrent.TimeUnit | ||||
| import uy.kohesive.injekt.Injekt | ||||
| import uy.kohesive.injekt.api.get | ||||
|  | ||||
| class BackupCreatorJob : Job() { | ||||
| class BackupCreatorJob(private val context: Context, workerParams: WorkerParameters) : | ||||
|         Worker(context, workerParams) { | ||||
|  | ||||
|     override fun onRunJob(params: Params): Result { | ||||
|     override fun doWork(): Result { | ||||
|         val preferences = Injekt.get<PreferencesHelper>() | ||||
|         val backupManager = BackupManager(context) | ||||
|         val uri = Uri.parse(preferences.backupsDirectory().getOrDefault()) | ||||
|         val flags = BackupCreateService.BACKUP_ALL | ||||
|         backupManager.createBackup(uri, flags, true) | ||||
|         return Result.SUCCESS | ||||
|         return Result.success() | ||||
|     } | ||||
|  | ||||
|     companion object { | ||||
| @@ -27,16 +32,16 @@ class BackupCreatorJob : Job() { | ||||
|             val preferences = Injekt.get<PreferencesHelper>() | ||||
|             val interval = prefInterval ?: preferences.backupInterval().getOrDefault() | ||||
|             if (interval > 0) { | ||||
|                 JobRequest.Builder(TAG) | ||||
|                         .setPeriodic(interval * 60 * 60 * 1000L, 10 * 60 * 1000) | ||||
|                         .setUpdateCurrent(true) | ||||
|                 val request = PeriodicWorkRequestBuilder<BackupCreatorJob>(interval.toLong(), TimeUnit.HOURS) | ||||
|                         .addTag(TAG) | ||||
|                         .build() | ||||
|                         .schedule() | ||||
|  | ||||
|                 WorkManager.getInstance().enqueueUniquePeriodicWork(TAG, ExistingPeriodicWorkPolicy.REPLACE, request) | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         fun cancelTask() { | ||||
|             JobManager.instance().cancelAllForTag(TAG) | ||||
|             WorkManager.getInstance().cancelAllWorkByTag(TAG) | ||||
|         } | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -1,18 +1,25 @@ | ||||
| package eu.kanade.tachiyomi.data.library | ||||
|  | ||||
| import com.evernote.android.job.Job | ||||
| import com.evernote.android.job.JobManager | ||||
| import com.evernote.android.job.JobRequest | ||||
| import android.content.Context | ||||
| import androidx.work.Constraints | ||||
| import androidx.work.ExistingPeriodicWorkPolicy | ||||
| import androidx.work.NetworkType | ||||
| import androidx.work.PeriodicWorkRequestBuilder | ||||
| import androidx.work.WorkManager | ||||
| import androidx.work.Worker | ||||
| import androidx.work.WorkerParameters | ||||
| import eu.kanade.tachiyomi.data.preference.PreferencesHelper | ||||
| import eu.kanade.tachiyomi.data.preference.getOrDefault | ||||
| import java.util.concurrent.TimeUnit | ||||
| import uy.kohesive.injekt.Injekt | ||||
| import uy.kohesive.injekt.api.get | ||||
|  | ||||
| class LibraryUpdateJob : Job() { | ||||
| class LibraryUpdateJob(private val context: Context, workerParams: WorkerParameters) : | ||||
|         Worker(context, workerParams) { | ||||
|  | ||||
|     override fun onRunJob(params: Params): Result { | ||||
|     override fun doWork(): Result { | ||||
|         LibraryUpdateService.start(context) | ||||
|         return Job.Result.SUCCESS | ||||
|         return Result.success() | ||||
|     } | ||||
|  | ||||
|     companion object { | ||||
| @@ -25,23 +32,26 @@ class LibraryUpdateJob : Job() { | ||||
|                 val restrictions = preferences.libraryUpdateRestriction()!! | ||||
|                 val acRestriction = "ac" in restrictions | ||||
|                 val wifiRestriction = if ("wifi" in restrictions) | ||||
|                     JobRequest.NetworkType.UNMETERED | ||||
|                     NetworkType.UNMETERED | ||||
|                 else | ||||
|                     JobRequest.NetworkType.CONNECTED | ||||
|                     NetworkType.CONNECTED | ||||
|  | ||||
|                 JobRequest.Builder(TAG) | ||||
|                         .setPeriodic(interval * 60 * 60 * 1000L, 10 * 60 * 1000) | ||||
|                 val constraints = Constraints.Builder() | ||||
|                         .setRequiredNetworkType(wifiRestriction) | ||||
|                         .setRequiresCharging(acRestriction) | ||||
|                         .setRequirementsEnforced(true) | ||||
|                         .setUpdateCurrent(true) | ||||
|                         .build() | ||||
|                         .schedule() | ||||
|  | ||||
|                 val request = PeriodicWorkRequestBuilder<LibraryUpdateJob>(interval.toLong(), TimeUnit.HOURS) | ||||
|                         .addTag(TAG) | ||||
|                         .setConstraints(constraints) | ||||
|                         .build() | ||||
|  | ||||
|                 WorkManager.getInstance().enqueueUniquePeriodicWork(TAG, ExistingPeriodicWorkPolicy.REPLACE, request) | ||||
|             } | ||||
|         } | ||||
|  | ||||
|         fun cancelTask() { | ||||
|             JobManager.instance().cancelAllForTag(TAG) | ||||
|             WorkManager.getInstance().cancelAllWorkByTag(TAG) | ||||
|         } | ||||
|     } | ||||
| } | ||||
|   | ||||
| @@ -1,19 +1,26 @@ | ||||
| package eu.kanade.tachiyomi.data.updater | ||||
|  | ||||
| import android.app.PendingIntent | ||||
| import android.content.Context | ||||
| import android.content.Intent | ||||
| import androidx.core.app.NotificationCompat | ||||
| import com.evernote.android.job.Job | ||||
| import com.evernote.android.job.JobManager | ||||
| import com.evernote.android.job.JobRequest | ||||
| import androidx.work.Constraints | ||||
| import androidx.work.ExistingPeriodicWorkPolicy | ||||
| import androidx.work.NetworkType | ||||
| import androidx.work.PeriodicWorkRequestBuilder | ||||
| import androidx.work.WorkManager | ||||
| import androidx.work.Worker | ||||
| import androidx.work.WorkerParameters | ||||
| import eu.kanade.tachiyomi.R | ||||
| import eu.kanade.tachiyomi.data.notification.Notifications | ||||
| import eu.kanade.tachiyomi.util.system.notificationManager | ||||
| import java.util.concurrent.TimeUnit | ||||
| import kotlinx.coroutines.runBlocking | ||||
|  | ||||
| class UpdaterJob : Job() { | ||||
| class UpdaterJob(private val context: Context, workerParams: WorkerParameters) : | ||||
|         Worker(context, workerParams) { | ||||
|  | ||||
|     override fun onRunJob(params: Params): Result { | ||||
|     override fun doWork(): Result { | ||||
|         return runBlocking { | ||||
|             try { | ||||
|                 val result = UpdateChecker.getUpdateChecker().checkForUpdate() | ||||
| @@ -35,9 +42,9 @@ class UpdaterJob : Job() { | ||||
|                                 PendingIntent.getService(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT)) | ||||
|                     } | ||||
|                 } | ||||
|                 Result.SUCCESS | ||||
|                 Result.success() | ||||
|             } catch (e: Exception) { | ||||
|                 Result.FAILURE | ||||
|                 Result.failure() | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| @@ -51,17 +58,20 @@ class UpdaterJob : Job() { | ||||
|         const val TAG = "UpdateChecker" | ||||
|  | ||||
|         fun setupTask() { | ||||
|             JobRequest.Builder(TAG) | ||||
|                     .setPeriodic(24 * 60 * 60 * 1000, 60 * 60 * 1000) | ||||
|                     .setRequiredNetworkType(JobRequest.NetworkType.CONNECTED) | ||||
|                     .setRequirementsEnforced(true) | ||||
|                     .setUpdateCurrent(true) | ||||
|             val constraints = Constraints.Builder() | ||||
|                     .setRequiredNetworkType(NetworkType.CONNECTED) | ||||
|                     .build() | ||||
|                     .schedule() | ||||
|  | ||||
|             val request = PeriodicWorkRequestBuilder<UpdaterJob>(1, TimeUnit.DAYS) | ||||
|                     .addTag(TAG) | ||||
|                     .setConstraints(constraints) | ||||
|                     .build() | ||||
|  | ||||
|             WorkManager.getInstance().enqueueUniquePeriodicWork(TAG, ExistingPeriodicWorkPolicy.REPLACE, request) | ||||
|         } | ||||
|  | ||||
|         fun cancelTask() { | ||||
|             JobManager.instance().cancelAllForTag(TAG) | ||||
|             WorkManager.getInstance().cancelAllWorkByTag(TAG) | ||||
|         } | ||||
|     } | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user