diff --git a/src/main/kotlin/nya/kitsunyan/foxydroid/MainApplication.kt b/src/main/kotlin/nya/kitsunyan/foxydroid/MainApplication.kt index defef14..f991a87 100644 --- a/src/main/kotlin/nya/kitsunyan/foxydroid/MainApplication.kt +++ b/src/main/kotlin/nya/kitsunyan/foxydroid/MainApplication.kt @@ -56,7 +56,7 @@ class MainApplication: Application() { } Cache.cleanup(this) - updateSyncJob() + updateSyncJob(false) } private fun listenApplications() { @@ -102,7 +102,7 @@ class MainApplication: Application() { val autoSync = Preferences[Preferences.Key.AutoSync] if (lastAutoSync != autoSync) { lastAutoSync = autoSync - updateSyncJob() + updateSyncJob(true) } } else if (it == Preferences.Key.UpdateUnstable) { val updateUnstable = Preferences[Preferences.Key.UpdateUnstable] @@ -114,34 +114,37 @@ class MainApplication: Application() { } } - private fun updateSyncJob() { - val autoSync = Preferences[Preferences.Key.AutoSync] + private fun updateSyncJob(force: Boolean) { val jobScheduler = getSystemService(JOB_SCHEDULER_SERVICE) as JobScheduler - when (autoSync) { - Preferences.AutoSync.Never -> { - jobScheduler.cancel(Common.JOB_ID_SYNC) - } - Preferences.AutoSync.Wifi, Preferences.AutoSync.Always -> { - val period = 12 * 60 * 60 * 1000L // 12 hours - val wifiOnly = autoSync == Preferences.AutoSync.Wifi - jobScheduler.schedule(JobInfo - .Builder(Common.JOB_ID_SYNC, ComponentName(this, SyncService.Job::class.java)) - .setRequiredNetworkType(if (wifiOnly) JobInfo.NETWORK_TYPE_UNMETERED else JobInfo.NETWORK_TYPE_ANY) - .apply { - if (Android.sdk(26)) { - setRequiresBatteryNotLow(true) - setRequiresStorageNotLow(true) + val reschedule = force || !jobScheduler.allPendingJobs.any { it.id == Common.JOB_ID_SYNC } + if (reschedule) { + val autoSync = Preferences[Preferences.Key.AutoSync] + when (autoSync) { + Preferences.AutoSync.Never -> { + jobScheduler.cancel(Common.JOB_ID_SYNC) + } + Preferences.AutoSync.Wifi, Preferences.AutoSync.Always -> { + val period = 12 * 60 * 60 * 1000L // 12 hours + val wifiOnly = autoSync == Preferences.AutoSync.Wifi + jobScheduler.schedule(JobInfo + .Builder(Common.JOB_ID_SYNC, ComponentName(this, SyncService.Job::class.java)) + .setRequiredNetworkType(if (wifiOnly) JobInfo.NETWORK_TYPE_UNMETERED else JobInfo.NETWORK_TYPE_ANY) + .apply { + if (Android.sdk(26)) { + setRequiresBatteryNotLow(true) + setRequiresStorageNotLow(true) + } + if (Android.sdk(24)) { + setPeriodic(period, JobInfo.getMinFlexMillis()) + } else { + setPeriodic(period) + } } - if (Android.sdk(24)) { - setPeriodic(period, JobInfo.getMinFlexMillis()) - } else { - setPeriodic(period) - } - } - .build()) - Unit - } - }::class.java + .build()) + Unit + } + }::class.java + } } private fun updateProxy() {