1package com.peachpasswords23import android.app.Application4import androidx.hilt.work.HiltWorkerFactory5import androidx.lifecycle.DefaultLifecycleObserver6import androidx.lifecycle.LifecycleOwner7import androidx.lifecycle.ProcessLifecycleOwner8import androidx.work.Configuration9import com.peachpasswords.sync.BackgroundSyncPreference10import com.peachpasswords.sync.ForegroundSyncCoordinator11import com.peachpasswords.sync.LockedSyncSpoolHooks12import com.peachpasswords.sync.LockedSyncSpoolStore13import com.peachpasswords.updates.UpdateCheckWorker14import com.peachpasswords.vault.VaultLockTimer15import com.peachpasswords.vault.VaultRepository16import dagger.hilt.android.HiltAndroidApp17import javax.inject.Inject1819@HiltAndroidApp20class PeachApplication : Application(), Configuration.Provider {21 @Inject lateinit var vault: VaultRepository22 @Inject lateinit var lockTimer: VaultLockTimer23 @Inject lateinit var foregroundSync: ForegroundSyncCoordinator24 @Inject lateinit var backgroundSync: BackgroundSyncPreference25 @Inject lateinit var lockedSyncSpool: LockedSyncSpoolStore26 @Inject lateinit var workerFactory: HiltWorkerFactory2728 2930313233343536 var stopWasConfigurationChange = false3738 override val workManagerConfiguration: Configuration39 get() = Configuration.Builder().setWorkerFactory(workerFactory).build()4041 override fun onCreate() {42 super.onCreate()43 LockedSyncSpoolHooks.refresh = lockedSyncSpool::refresh4445 46 47 48 UpdateCheckWorker.schedulePeriodic(this)49 UpdateCheckWorker.checkNow(this)50 51 52 53 ProcessLifecycleOwner.get().lifecycle.addObserver(object : DefaultLifecycleObserver {54 override fun onStart(owner: LifecycleOwner) {55 foregroundSync.triggerForegroundSync()56 }5758 override fun onStop(owner: LifecycleOwner) {59 60 61 62 63 64 if (vault.consumeTransientBackgroundSuppression()) return65 if (stopWasConfigurationChange) {66 stopWasConfigurationChange = false67 return68 }69 if (backgroundSync.enabled.value && vault.isUnlocked.value) {70 71 72 73 runCatching { lockedSyncSpool.refresh(vault) }74 vault.lock()75 } else {76 vault.lock()77 lockTimer.cancel()78 }79 }80 })81 }82}