1package com.peachpasswords.vault23import androidx.annotation.VisibleForTesting4import kotlinx.coroutines.CoroutineScope5import kotlinx.coroutines.Dispatchers6import kotlinx.coroutines.Job7import kotlinx.coroutines.SupervisorJob8import kotlinx.coroutines.delay9import kotlinx.coroutines.launch10import javax.inject.Inject11import javax.inject.Singleton121314151617181920@Singleton21class VaultLockTimer @Inject constructor(22 private val vault: VaultRepository,23) {24 25 26 @VisibleForTesting27 internal var scope: CoroutineScope = CoroutineScope(Dispatchers.Default + SupervisorJob())2829 private var timerJob: Job? = null3031 32 fun poke() {33 val minutes = vault.settings.value.autoLockMinutes34 if (minutes == null || minutes <= 0 || !vault.isUnlocked.value) {35 cancel()36 return37 }38 timerJob?.cancel()39 timerJob = scope.launch {40 delay(minutes * 60_000L)41 vault.lock()42 }43 }4445 46 fun start() = poke()4748 49 fun cancel() {50 timerJob?.cancel()51 timerJob = null52 }53}