-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathInactivityTracker.kt
More file actions
53 lines (47 loc) · 1.7 KB
/
Copy pathInactivityTracker.kt
File metadata and controls
53 lines (47 loc) · 1.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
package to.bitkit.ui.components
import androidx.compose.foundation.layout.Box
import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleEventObserver
import androidx.lifecycle.compose.LocalLifecycleOwner
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import to.bitkit.utils.Logger
import to.bitkit.viewmodels.AppViewModel
import to.bitkit.viewmodels.SettingsViewModel
@Composable
fun InactivityTracker(
app: AppViewModel,
settings: SettingsViewModel,
modifier: Modifier = Modifier,
content: @Composable () -> Unit,
) {
val lifecycleOwner = LocalLifecycleOwner.current
val isPinEnabled by settings.isPinEnabled.collectAsStateWithLifecycle()
val isPinOnIdleEnabled by settings.isPinOnIdleEnabled.collectAsStateWithLifecycle()
val isAuthenticated by app.isAuthenticated.collectAsStateWithLifecycle()
DisposableEffect(lifecycleOwner) {
val observer = LifecycleEventObserver { _, event ->
when (event) {
Lifecycle.Event.ON_RESUME -> {
if (isPinEnabled && isPinOnIdleEnabled && isAuthenticated) {
Logger.debug("App resumed, resetting isAuthenticated.")
app.setIsAuthenticated(false)
}
}
else -> Unit
}
}
lifecycleOwner.lifecycle.addObserver(observer)
onDispose {
lifecycleOwner.lifecycle.removeObserver(observer)
}
}
Box(
modifier = modifier
) {
content()
}
}