Updated on 2026-08-14
This commit is contained in:
parent
a0f1a6591c
commit
e993dc0647
119 changed files with 4449 additions and 720 deletions
115
app/src/main/java/com/tangem/tap/LockUserWalletsTimer.kt
Normal file
115
app/src/main/java/com/tangem/tap/LockUserWalletsTimer.kt
Normal file
|
|
@ -0,0 +1,115 @@
|
|||
package com.tangem.tap
|
||||
|
||||
import androidx.lifecycle.DefaultLifecycleObserver
|
||||
import androidx.lifecycle.LifecycleOwner
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import com.tangem.tap.common.extensions.dispatchOnMain
|
||||
import com.tangem.tap.common.redux.navigation.AppScreen
|
||||
import com.tangem.tap.common.redux.navigation.NavigationAction
|
||||
import kotlinx.coroutines.*
|
||||
import timber.log.Timber
|
||||
import kotlin.time.Duration
|
||||
|
||||
internal class LockUserWalletsTimer(
|
||||
owner: LifecycleOwner,
|
||||
private val duration: Duration = with(Duration) { 5.minutes },
|
||||
) : LifecycleOwner by owner,
|
||||
DefaultLifecycleObserver {
|
||||
|
||||
private var delayJob: Job? = null
|
||||
set(value) {
|
||||
field?.cancel()
|
||||
field = value
|
||||
}
|
||||
private var isStopped = false
|
||||
private var openWelcomeScreenWhenResumed = false
|
||||
|
||||
init {
|
||||
lifecycle.addObserver(this)
|
||||
}
|
||||
|
||||
override fun onResume(owner: LifecycleOwner) {
|
||||
Timber.d(
|
||||
"""
|
||||
Owner resumed
|
||||
|- Was stopped: $isStopped
|
||||
|- Need to open welcome screen: $openWelcomeScreenWhenResumed
|
||||
""".trimIndent(),
|
||||
)
|
||||
isStopped = false
|
||||
start()
|
||||
if (openWelcomeScreenWhenResumed) {
|
||||
store.dispatchOnMain(NavigationAction.PopBackTo(AppScreen.Welcome))
|
||||
openWelcomeScreenWhenResumed = false
|
||||
}
|
||||
}
|
||||
|
||||
override fun onStop(owner: LifecycleOwner) {
|
||||
Timber.d("Owner stopped")
|
||||
isStopped = true
|
||||
}
|
||||
|
||||
override fun onDestroy(owner: LifecycleOwner) {
|
||||
Timber.d("Owner destroyed")
|
||||
stop()
|
||||
}
|
||||
|
||||
fun restart() {
|
||||
if (delayJob == null) return
|
||||
Timber.d(
|
||||
"""
|
||||
Timer restart
|
||||
|- Duration millis: ${duration.inWholeMilliseconds}
|
||||
""".trimIndent(),
|
||||
)
|
||||
start(log = false)
|
||||
}
|
||||
|
||||
private fun start(log: Boolean = true) {
|
||||
if (log) {
|
||||
Timber.d(
|
||||
"""
|
||||
Timer start
|
||||
|- Duration millis: ${duration.inWholeMilliseconds}
|
||||
""".trimIndent(),
|
||||
)
|
||||
}
|
||||
delayJob = createDelayJob()
|
||||
}
|
||||
|
||||
private fun stop(log: Boolean = true) {
|
||||
if (log) {
|
||||
Timber.d(
|
||||
"""
|
||||
Timer stop
|
||||
|- Was started: ${delayJob?.isActive ?: false}
|
||||
""".trimIndent(),
|
||||
)
|
||||
}
|
||||
delayJob = null
|
||||
}
|
||||
|
||||
private fun createDelayJob(): Job = lifecycleScope.launch(Dispatchers.Default) {
|
||||
val startTime = System.currentTimeMillis()
|
||||
delay(duration)
|
||||
if (isActive) {
|
||||
val userWalletsListManager = userWalletsListManagerSafe ?: return@launch
|
||||
if (userWalletsListManager.hasSavedUserWallets) {
|
||||
val currentTime = System.currentTimeMillis()
|
||||
Timber.d(
|
||||
"""
|
||||
Finished
|
||||
|- App is stopped: $isStopped
|
||||
|- Millis passed: ${currentTime - startTime}
|
||||
""".trimIndent(),
|
||||
)
|
||||
userWalletsListManager.lock()
|
||||
if (isStopped) {
|
||||
openWelcomeScreenWhenResumed = true
|
||||
} else {
|
||||
store.dispatchOnMain(NavigationAction.PopBackTo(AppScreen.Welcome))
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue