Updated on 2026-08-14

This commit is contained in:
Tangem 2026-02-10 04:50:44 +03:00
parent f89ab30e5a
commit 64fda96648
9 changed files with 56 additions and 23 deletions

View file

@ -31,6 +31,8 @@ import com.tangem.hot.sdk.TangemHotSdk
import com.tangem.hot.sdk.model.HotAuth
import com.tangem.hot.sdk.model.HotWalletId
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
import com.tangem.utils.coroutines.JobHolder
import com.tangem.utils.coroutines.saveIn
import kotlinx.coroutines.*
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
@ -63,6 +65,8 @@ internal class AccessCodeModel @Inject constructor(
private val params = paramsContainer.require<AccessCodeComponent.Params>()
private val settingCodeJobHolder = JobHolder()
internal val uiState: StateFlow<AccessCodeUM>
field = MutableStateFlow(getInitialState())
@ -197,23 +201,25 @@ internal class AccessCodeModel @Inject constructor(
}
}
private fun setCode(userWalletId: UserWalletId, accessCode: String) {
private suspend fun setCode(userWalletId: UserWalletId, accessCode: String) = coroutineScope {
if (settingCodeJobHolder.isActive) {
return@coroutineScope
}
params.callbacks.onAccessCodeUpdateStarted(params.userWalletId)
modelScope.launch {
val userWallet = getUserWalletUseCase(userWalletId)
.getOrElse { error("User wallet with id $userWalletId not found") }
.requireHotWallet()
val userWallet = getUserWalletUseCase(userWalletId)
.getOrElse { error("User wallet with id $userWalletId not found") }
.requireHotWallet()
tryToAskForBiometry()
tryToAskForBiometry()
val settingCodeJob = launch(dispatchers.main) {
setCodeOperation(userWallet, accessCode)
params.callbacks.onAccessCodeUpdated(params.userWalletId)
}
val settingCodeJob = launch(dispatchers.main) {
setCodeOperation(userWallet, accessCode)
params.callbacks.onAccessCodeUpdated(params.userWalletId)
}.saveIn(settingCodeJobHolder)
setLoadingIfLongJob(settingCodeJob)
}
setLoadingIfLongJob(settingCodeJob)
}
/**
@ -246,7 +252,7 @@ internal class AccessCodeModel @Inject constructor(
lockMethod = UserWalletsListRepository.LockMethod.AccessCode(accessCode.toCharArray()),
)
if (walletsRepository.requireAccessCode().not() && canUseBiometryUseCase()) {
if (walletsRepository.requireAccessCode().not() && canUseBiometryUseCase.strict()) {
val newHotWalletIdWithBiometry = tangemHotSdk.changeAuth(
unlockHotWallet = unlockHotWallet,
auth = HotAuth.Biometry,

View file

@ -219,7 +219,7 @@ internal class HotAccessCodeRequestModel @Inject constructor(
}
private suspend fun HotWalletPasswordRequester.AttemptRequest.isBiometryButtonVisible(): Boolean =
hasBiometry && canUseBiometryUseCase()
hasBiometry && canUseBiometryUseCase.strict()
private fun dismissState() {
uiState.update {

View file

@ -254,7 +254,7 @@ internal class WelcomeModel @Inject constructor(
}
private suspend fun canUnlockWithBiometrics(): Boolean {
return canUseBiometryUseCase() && walletsRepository.useBiometricAuthentication()
return canUseBiometryUseCase.strict() && walletsRepository.useBiometricAuthentication()
}
suspend fun nonBiometricUnlockWallet(userWalletId: UserWalletId) {