Schedule job if necessary only

This commit is contained in:
kitsunyan
2020-06-09 01:07:58 +03:00
parent b445bc9d24
commit 858b5aaa3d
@@ -56,7 +56,7 @@ class MainApplication: Application() {
} }
Cache.cleanup(this) Cache.cleanup(this)
updateSyncJob() updateSyncJob(false)
} }
private fun listenApplications() { private fun listenApplications() {
@@ -102,7 +102,7 @@ class MainApplication: Application() {
val autoSync = Preferences[Preferences.Key.AutoSync] val autoSync = Preferences[Preferences.Key.AutoSync]
if (lastAutoSync != autoSync) { if (lastAutoSync != autoSync) {
lastAutoSync = autoSync lastAutoSync = autoSync
updateSyncJob() updateSyncJob(true)
} }
} else if (it == Preferences.Key.UpdateUnstable) { } else if (it == Preferences.Key.UpdateUnstable) {
val updateUnstable = Preferences[Preferences.Key.UpdateUnstable] val updateUnstable = Preferences[Preferences.Key.UpdateUnstable]
@@ -114,34 +114,37 @@ class MainApplication: Application() {
} }
} }
private fun updateSyncJob() { private fun updateSyncJob(force: Boolean) {
val autoSync = Preferences[Preferences.Key.AutoSync]
val jobScheduler = getSystemService(JOB_SCHEDULER_SERVICE) as JobScheduler val jobScheduler = getSystemService(JOB_SCHEDULER_SERVICE) as JobScheduler
when (autoSync) { val reschedule = force || !jobScheduler.allPendingJobs.any { it.id == Common.JOB_ID_SYNC }
Preferences.AutoSync.Never -> { if (reschedule) {
jobScheduler.cancel(Common.JOB_ID_SYNC) val autoSync = Preferences[Preferences.Key.AutoSync]
} when (autoSync) {
Preferences.AutoSync.Wifi, Preferences.AutoSync.Always -> { Preferences.AutoSync.Never -> {
val period = 12 * 60 * 60 * 1000L // 12 hours jobScheduler.cancel(Common.JOB_ID_SYNC)
val wifiOnly = autoSync == Preferences.AutoSync.Wifi }
jobScheduler.schedule(JobInfo Preferences.AutoSync.Wifi, Preferences.AutoSync.Always -> {
.Builder(Common.JOB_ID_SYNC, ComponentName(this, SyncService.Job::class.java)) val period = 12 * 60 * 60 * 1000L // 12 hours
.setRequiredNetworkType(if (wifiOnly) JobInfo.NETWORK_TYPE_UNMETERED else JobInfo.NETWORK_TYPE_ANY) val wifiOnly = autoSync == Preferences.AutoSync.Wifi
.apply { jobScheduler.schedule(JobInfo
if (Android.sdk(26)) { .Builder(Common.JOB_ID_SYNC, ComponentName(this, SyncService.Job::class.java))
setRequiresBatteryNotLow(true) .setRequiredNetworkType(if (wifiOnly) JobInfo.NETWORK_TYPE_UNMETERED else JobInfo.NETWORK_TYPE_ANY)
setRequiresStorageNotLow(true) .apply {
if (Android.sdk(26)) {
setRequiresBatteryNotLow(true)
setRequiresStorageNotLow(true)
}
if (Android.sdk(24)) {
setPeriodic(period, JobInfo.getMinFlexMillis())
} else {
setPeriodic(period)
}
} }
if (Android.sdk(24)) { .build())
setPeriodic(period, JobInfo.getMinFlexMillis()) Unit
} else { }
setPeriodic(period) }::class.java
} }
}
.build())
Unit
}
}::class.java
} }
private fun updateProxy() { private fun updateProxy() {