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)
}
}
}