Commits
Claus Rasmussen authored c169f8e4144
32 32 | import androidx.lifecycle.LifecycleOwner |
33 33 | import androidx.lifecycle.ViewModel |
34 34 | import androidx.lifecycle.viewModelScope |
35 35 | import dagger.hilt.android.lifecycle.HiltViewModel |
36 36 | import dk.nsp.domain.repository.SettingsRepository |
37 37 | import kotlinx.coroutines.flow.MutableSharedFlow |
38 38 | import kotlinx.coroutines.flow.MutableStateFlow |
39 39 | import kotlinx.coroutines.flow.collectLatest |
40 40 | import kotlinx.coroutines.flow.map |
41 41 | import kotlinx.coroutines.launch |
42 - | import timber.log.Timber |
43 42 | import java.time.LocalDateTime |
44 43 | import javax.inject.Inject |
45 44 | |
46 - | private const val TIMEOUT_SECONDS = 20L |
45 + | private const val TIMEOUT_SECONDS = 5 * 60L // 5 minutes |
47 46 | |
48 47 | |
49 48 | class AppInBackgroundViewModel constructor( |
50 49 | settingsRepository: SettingsRepository, |
51 50 | ) : ViewModel(), DefaultLifecycleObserver { |
52 51 | |
53 52 | private var onStopTime = MutableStateFlow<LocalDateTime?>(null) |
54 53 | |
55 54 | val logoutEvent = MutableSharedFlow<Unit?>(replay = 0) |
56 55 | |
57 56 | private val useBiometricsPreference = settingsRepository.preferences.map { |
58 57 | it.useBiometrics |
59 58 | } |
60 59 | |
61 60 | override fun onResume(owner: LifecycleOwner) { |
62 61 | super.onResume(owner) |
63 62 | |
64 63 | viewModelScope.launch { |
65 64 | // Copy of onStopTime, since collectLatest is a terminal flow operator |
66 65 | useBiometricsPreference.collectLatest { useBiometrics -> |
67 66 | if (useBiometrics && onStopTime.value?.isBefore(LocalDateTime.now().minusSeconds(TIMEOUT_SECONDS)) == true) { |
68 - | Timber.d("Log user out") |
69 67 | logoutEvent.emit(Unit) |
70 68 | } |
71 69 | |
72 70 | // Reset timer |
73 71 | onStopTime.value = null |
74 72 | } |
75 73 | } |
76 74 | } |
77 75 | |
78 76 | override fun onStop(owner: LifecycleOwner) { |