From e9e3340c0830907dc1d6e76ee2fb91e250cba14f Mon Sep 17 00:00:00 2001 From: Jobobby04 Date: Fri, 2 Jul 2021 17:50:22 -0400 Subject: [PATCH] Convert EH Gallery Updater from a JobService to WorkManager --- app/build.gradle.kts | 2 +- app/src/main/AndroidManifest.xml | 4 - app/src/main/java/exh/EXHMigrations.kt | 5 + app/src/main/java/exh/debug/DebugFunctions.kt | 4 +- .../main/java/exh/eh/EHentaiUpdateWorker.kt | 202 +++++------------- 5 files changed, 59 insertions(+), 158 deletions(-) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 906078249..ef9d829d3 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -34,7 +34,7 @@ android { minSdkVersion(AndroidConfig.minSdk) targetSdkVersion(AndroidConfig.targetSdk) testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" - versionCode = 20 + versionCode = 21 versionName = "1.7.0" buildConfigField("String", "COMMIT_COUNT", "\"${getCommitCount()}\"") diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 851d3bc5a..9dfc7a849 100755 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -189,10 +189,6 @@ android:exported="false" /> - >>() + val updatedManga = mutableListOf>>() val modifiedThisIteration = mutableSetOf() try { @@ -290,86 +226,50 @@ class EHentaiUpdateWorker : JobService() { private val MIN_BACKGROUND_UPDATE_FREQ = 1.days.inWholeMilliseconds - private const val JOB_ID_UPDATE_BACKGROUND = 700000 - private const val JOB_ID_UPDATE_BACKGROUND_TEST = 700001 + private const val TAG = "EHBackgroundUpdater" private val logger by lazy { XLog.tag("EHUpdaterScheduler") } - private fun Context.componentName(): ComponentName = - ComponentName(this, EHentaiUpdateWorker::class.java) - - private fun Context.baseBackgroundJobInfo(isTest: Boolean): JobInfo.Builder = - JobInfo.Builder( - if (isTest) JOB_ID_UPDATE_BACKGROUND_TEST - else JOB_ID_UPDATE_BACKGROUND, - componentName() - ) - - private fun Context.periodicBackgroundJobInfo( - period: Long, - requireCharging: Boolean, - requireUnmetered: Boolean - ): JobInfo = baseBackgroundJobInfo(false) - .setPeriodic(period) - .setPersisted(true) - .setRequiredNetworkType( - if (requireUnmetered) JobInfo.NETWORK_TYPE_UNMETERED - else JobInfo.NETWORK_TYPE_ANY - ) - .apply { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - setRequiresBatteryNotLow(true) - } - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { - setEstimatedNetworkBytes( - 15000L * UPDATES_PER_ITERATION, - 1000L * UPDATES_PER_ITERATION - ) - } - } - .setRequiresCharging(requireCharging) -// .setRequiresDeviceIdle(true) Job never seems to run with this - .build() - - private fun Context.testBackgroundJobInfo(): JobInfo = baseBackgroundJobInfo(true) - .setOverrideDeadline(1) - .build() - - fun launchBackgroundTest(context: Context): String = - if (context.jobScheduler.schedule(context.testBackgroundJobInfo()) == JobScheduler.RESULT_FAILURE) { - logger.e("Failed to schedule background test job!") - "Failed" - } else { - logger.d("Successfully scheduled background test job!") - "Success" - } + fun launchBackgroundTest(context: Context) { + WorkManager.getInstance(context).enqueue(OneTimeWorkRequestBuilder().build()) + } fun scheduleBackground(context: Context, prefInterval: Int? = null) { - cancelBackground(context) - val preferences = Injekt.get() - val duration = prefInterval ?: preferences.exhAutoUpdateFrequency().get() - if (duration > 0) { + val interval = prefInterval ?: preferences.exhAutoUpdateFrequency().get() + if (interval > 0) { val restrictions = preferences.exhAutoUpdateRequirements().get() - val acRestriction = "ac" in restrictions - val wifiRestriction = "wifi" in restrictions - - val jobInfo = context.periodicBackgroundJobInfo( - duration.hours.inWholeMilliseconds, - acRestriction, - wifiRestriction - ) - - if (context.jobScheduler.schedule(jobInfo) == JobScheduler.RESULT_FAILURE) { - logger.e("Failed to schedule background update job!") + val acRestriction = CHARGING in restrictions + val wifiRestriction = if (UNMETERED_NETWORK in restrictions) { + NetworkType.UNMETERED } else { - logger.d("Successfully scheduled background update job!") + NetworkType.CONNECTED } + + val constraints = Constraints.Builder() + .setRequiredNetworkType(wifiRestriction) + .setRequiresCharging(acRestriction) + .build() + + val request = PeriodicWorkRequestBuilder( + interval.toLong(), + TimeUnit.HOURS, + 10, + TimeUnit.MINUTES + ) + .addTag(TAG) + .setConstraints(constraints) + .build() + + WorkManager.getInstance(context).enqueueUniquePeriodicWork(TAG, ExistingPeriodicWorkPolicy.REPLACE, request) + logger.d("Successfully scheduled background update job!") + } else { + cancelBackground(context) } } fun cancelBackground(context: Context) { - context.jobScheduler.cancel(JOB_ID_UPDATE_BACKGROUND) + WorkManager.getInstance(context).cancelAllWorkByTag(TAG) } } }