diff --git a/app/src/main/java/com/tangem/tap/domain/userWalletList/repository/implementation/DefaultSelectedUserWalletRepository.kt b/app/src/main/java/com/tangem/tap/domain/userWalletList/repository/implementation/DefaultSelectedUserWalletRepository.kt index 7a17c85cd9..b4a621fb21 100644 --- a/app/src/main/java/com/tangem/tap/domain/userWalletList/repository/implementation/DefaultSelectedUserWalletRepository.kt +++ b/app/src/main/java/com/tangem/tap/domain/userWalletList/repository/implementation/DefaultSelectedUserWalletRepository.kt @@ -4,26 +4,35 @@ import com.tangem.common.services.secure.SecureStorage import com.tangem.domain.wallets.models.UserWalletId import com.tangem.tap.domain.userWalletList.repository.SelectedUserWalletRepository import com.tangem.utils.coroutines.CoroutineDispatcherProvider +import kotlinx.coroutines.sync.Mutex +import kotlinx.coroutines.sync.withLock import kotlinx.coroutines.withContext internal class DefaultSelectedUserWalletRepository( private val secureStorage: SecureStorage, private val dispatchers: CoroutineDispatcherProvider, ) : SelectedUserWalletRepository { + + private val mutex = Mutex() + override suspend fun get(): UserWalletId? = withContext(dispatchers.io) { - secureStorage.get(StorageKey.SelectedWalletId.name) - ?.decodeToString(throwOnInvalidSequence = true) - ?.let { UserWalletId(it) } + mutex.withLock { + secureStorage.get(StorageKey.SelectedWalletId.name) + ?.decodeToString(throwOnInvalidSequence = true) + ?.let { UserWalletId(it) } + } } override suspend fun set(walletId: UserWalletId?) = withContext(dispatchers.io) { - if (walletId == null) { - secureStorage.delete(StorageKey.SelectedWalletId.name) - } else { - secureStorage.store( - data = walletId.stringValue.encodeToByteArray(throwOnInvalidSequence = true), - account = StorageKey.SelectedWalletId.name, - ) + mutex.withLock { + if (walletId == null) { + secureStorage.delete(StorageKey.SelectedWalletId.name) + } else { + secureStorage.store( + data = walletId.stringValue.encodeToByteArray(throwOnInvalidSequence = true), + account = StorageKey.SelectedWalletId.name, + ) + } } }