From af5d54c2bb52ce3eb42ee8e964d19ce41eb9b9b3 Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 9 Dec 2022 18:44:32 +0300 Subject: [PATCH] Updated on 2026-08-14 --- .../com/tangem/tap/LockUserWalletsTimer.kt | 6 ++++- .../com/tangem/tap/domain/TangemSdkManager.kt | 7 ------ .../tap/domain/scanCard/ScanCardProcessor.kt | 2 -- .../details/redux/DetailsMiddleware.kt | 24 ++++++++++--------- .../tap/features/home/redux/HomeMiddleware.kt | 5 +++- .../features/tokens/redux/TokensMiddleware.kt | 2 -- .../middlewares/MultiWalletMiddleware.kt | 3 --- .../redux/WalletSelectorMiddleware.kt | 12 +++++++++- .../welcome/redux/WelcomeMiddleware.kt | 10 ++++++++ 9 files changed, 43 insertions(+), 28 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/LockUserWalletsTimer.kt b/app/src/main/java/com/tangem/tap/LockUserWalletsTimer.kt index c4b3d48e73..0bfb76a8ac 100644 --- a/app/src/main/java/com/tangem/tap/LockUserWalletsTimer.kt +++ b/app/src/main/java/com/tangem/tap/LockUserWalletsTimer.kt @@ -6,7 +6,11 @@ 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 kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.Job +import kotlinx.coroutines.delay +import kotlinx.coroutines.isActive +import kotlinx.coroutines.launch import timber.log.Timber import kotlin.time.Duration diff --git a/app/src/main/java/com/tangem/tap/domain/TangemSdkManager.kt b/app/src/main/java/com/tangem/tap/domain/TangemSdkManager.kt index 4d58f2467d..a1b2dc8e1c 100644 --- a/app/src/main/java/com/tangem/tap/domain/TangemSdkManager.kt +++ b/app/src/main/java/com/tangem/tap/domain/TangemSdkManager.kt @@ -61,10 +61,7 @@ class TangemSdkManager(private val tangemSdk: TangemSdk, private val context: Co cardId: String? = null, additionalBlockchainsToDerive: Collection? = null, messageRes: Int? = null, - useBiometricsForAccessCode: Boolean = false, ): CompletionResult { - setAccessCodeRequestPolicy(useBiometricsForAccessCode) - val message = Message(context.getString(messageRes ?: R.string.initial_message_scan_header)) return runTaskAsyncReturnOnMain( runnable = ScanProductTask( @@ -109,9 +106,7 @@ class TangemSdkManager(private val tangemSdk: TangemSdk, private val context: Co suspend fun derivePublicKeys( cardId: String, derivations: Map>, - useBiometricsForAccessCode: Boolean = false, ): CompletionResult { - setAccessCodeRequestPolicy(useBiometricsForAccessCode) return runTaskAsyncReturnOnMain(DeriveMultipleWalletPublicKeysTask(derivations), cardId) } @@ -192,9 +187,7 @@ class TangemSdkManager(private val tangemSdk: TangemSdk, private val context: Co suspend fun scanCard( cardId: String? = null, - useBiometricsForAccessCode: Boolean = false, ): CompletionResult { - setAccessCodeRequestPolicy(useBiometricsForAccessCode) return runTaskAsyncReturnOnMain( runnable = ScanTask(), cardId = cardId, diff --git a/app/src/main/java/com/tangem/tap/domain/scanCard/ScanCardProcessor.kt b/app/src/main/java/com/tangem/tap/domain/scanCard/ScanCardProcessor.kt index d1935892e4..6ab45894b9 100644 --- a/app/src/main/java/com/tangem/tap/domain/scanCard/ScanCardProcessor.kt +++ b/app/src/main/java/com/tangem/tap/domain/scanCard/ScanCardProcessor.kt @@ -44,7 +44,6 @@ import kotlinx.coroutines.launch // TODO: Create repository for that object ScanCardProcessor { suspend fun scan( - useBiometricsForAccessCode: Boolean = false, additionalBlockchainsToDerive: Collection? = null, cardId: String? = null, onProgressStateChange: suspend (showProgress: Boolean) -> Unit = {}, @@ -62,7 +61,6 @@ object ScanCardProcessor { userTokensRepository = userTokensRepository, cardId = cardId, additionalBlockchainsToDerive = additionalBlockchainsToDerive, - useBiometricsForAccessCode = useBiometricsForAccessCode, ) store.dispatchOnMain(GlobalAction.ScanFailsCounter.ChooseBehavior(result)) diff --git a/app/src/main/java/com/tangem/tap/features/details/redux/DetailsMiddleware.kt b/app/src/main/java/com/tangem/tap/features/details/redux/DetailsMiddleware.kt index d991fe21ba..0a0820e863 100644 --- a/app/src/main/java/com/tangem/tap/features/details/redux/DetailsMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/details/redux/DetailsMiddleware.kt @@ -77,11 +77,7 @@ class DetailsMiddleware { } DetailsAction.ScanCard -> { scope.launch { - tangemSdkManager.scanCard( - cardId = state.scanResponse?.card?.cardId, - useBiometricsForAccessCode = preferencesStorage.shouldSaveAccessCodes && - state.scanResponse?.card?.isAccessCodeSet == true, - ) + tangemSdkManager.scanCard(cardId = state.scanResponse?.card?.cardId) .doOnSuccess { card -> val currentCardId = store.state.globalState.scanResponse?.card ?.userWalletId @@ -220,7 +216,7 @@ class DetailsMiddleware { private fun toggleSaveWallets(state: DetailsState, enable: Boolean) = scope.launch { if (state.saveWallets == enable) return@launch if (enable) { - saveCurrentWallet() + saveCurrentWallet(state) } else { deleteSavedWallets() if (state.saveAccessCodes) { @@ -233,16 +229,16 @@ class DetailsMiddleware { if (state.saveAccessCodes == enable) return@launch if (enable) { if (!state.saveWallets) { - saveCurrentWallet() + saveCurrentWallet(state) } - saveAccessCodes() + saveAccessCodes(state) } else { deleteSavedAccessCodes() } } - private suspend fun saveCurrentWallet() { - val scanResponse = store.state.detailsState.scanResponse ?: return + private suspend fun saveCurrentWallet(state: DetailsState) { + val scanResponse = state.scanResponse ?: return val userWallet = UserWalletBuilder(scanResponse).build() userWalletsListManager.save(userWallet) @@ -277,8 +273,11 @@ class DetailsMiddleware { } } - private fun saveAccessCodes() { + private fun saveAccessCodes(state: DetailsState) { preferencesStorage.shouldSaveAccessCodes = true + tangemSdkManager.setAccessCodeRequestPolicy( + useBiometricsForAccessCode = state.scanResponse?.card?.isAccessCodeSet == true, + ) store.dispatchOnMain( DetailsAction.AppSettings.SwitchPrivacySetting.Success( setting = PrivacySetting.SaveAccessCode, @@ -291,6 +290,9 @@ class DetailsMiddleware { tangemSdkManager.clearSavedUserCodes() .doOnSuccess { preferencesStorage.shouldSaveAccessCodes = false + tangemSdkManager.setAccessCodeRequestPolicy( + useBiometricsForAccessCode = false, + ) store.dispatchOnMain( DetailsAction.AppSettings.SwitchPrivacySetting.Success( setting = PrivacySetting.SaveAccessCode, diff --git a/app/src/main/java/com/tangem/tap/features/home/redux/HomeMiddleware.kt b/app/src/main/java/com/tangem/tap/features/home/redux/HomeMiddleware.kt index c33b6d9a9b..8f4282fed9 100644 --- a/app/src/main/java/com/tangem/tap/features/home/redux/HomeMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/home/redux/HomeMiddleware.kt @@ -22,6 +22,7 @@ import com.tangem.tap.features.send.redux.states.ButtonState import com.tangem.tap.preferencesStorage import com.tangem.tap.scope import com.tangem.tap.store +import com.tangem.tap.tangemSdkManager import com.tangem.tap.userWalletsListManager import kotlinx.coroutines.delay import kotlinx.coroutines.launch @@ -71,8 +72,10 @@ private fun handleHomeAction(action: Action) { private fun readCard() = scope.launch { delay(timeMillis = 200) - ScanCardProcessor.scan( + tangemSdkManager.setAccessCodeRequestPolicy( useBiometricsForAccessCode = preferencesStorage.shouldSaveAccessCodes, + ) + ScanCardProcessor.scan( onProgressStateChange = { showProgress -> if (showProgress) { changeButtonState(ButtonState.PROGRESS) diff --git a/app/src/main/java/com/tangem/tap/features/tokens/redux/TokensMiddleware.kt b/app/src/main/java/com/tangem/tap/features/tokens/redux/TokensMiddleware.kt index eed12cb6b0..5182944017 100644 --- a/app/src/main/java/com/tangem/tap/features/tokens/redux/TokensMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/tokens/redux/TokensMiddleware.kt @@ -35,7 +35,6 @@ import com.tangem.tap.domain.tokens.LoadAvailableCoinsService import com.tangem.tap.domain.tokens.models.BlockchainNetwork import com.tangem.tap.features.wallet.models.Currency import com.tangem.tap.features.wallet.redux.WalletAction -import com.tangem.tap.preferencesStorage import com.tangem.tap.scope import com.tangem.tap.store import com.tangem.tap.tangemSdkManager @@ -206,7 +205,6 @@ class TokensMiddleware { val result = tangemSdkManager.derivePublicKeys( cardId = card.cardId, derivations = derivations, - useBiometricsForAccessCode = preferencesStorage.shouldSaveAccessCodes && card.isAccessCodeSet, ) when (result) { is CompletionResult.Success -> { diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/MultiWalletMiddleware.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/MultiWalletMiddleware.kt index 49b46f98f6..55ea7ddbfc 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/MultiWalletMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/MultiWalletMiddleware.kt @@ -29,7 +29,6 @@ import com.tangem.tap.features.wallet.redux.WalletAction import com.tangem.tap.features.wallet.redux.WalletState import com.tangem.tap.features.wallet.redux.models.WalletDialog import com.tangem.tap.features.wallet.redux.reducers.toWallet -import com.tangem.tap.preferencesStorage import com.tangem.tap.scope import com.tangem.tap.store import com.tangem.tap.userTokensRepository @@ -183,8 +182,6 @@ class MultiWalletMiddleware { state: WalletState?, ) = scope.launch { ScanCardProcessor.scan( - useBiometricsForAccessCode = preferencesStorage.shouldSaveAccessCodes && - selectedWallet.scanResponse.card.isAccessCodeSet, cardId = selectedWallet.cardId, additionalBlockchainsToDerive = state?.missingDerivations?.map { it.blockchain }, ) { scanResponse -> diff --git a/app/src/main/java/com/tangem/tap/features/walletSelector/redux/WalletSelectorMiddleware.kt b/app/src/main/java/com/tangem/tap/features/walletSelector/redux/WalletSelectorMiddleware.kt index 2b6e9f77e9..3d14fe926b 100644 --- a/app/src/main/java/com/tangem/tap/features/walletSelector/redux/WalletSelectorMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/walletSelector/redux/WalletSelectorMiddleware.kt @@ -20,6 +20,7 @@ import com.tangem.tap.domain.scanCard.ScanCardProcessor import com.tangem.tap.preferencesStorage import com.tangem.tap.scope import com.tangem.tap.store +import com.tangem.tap.tangemSdkManager import com.tangem.tap.totalFiatBalanceCalculator import com.tangem.tap.userWalletsListManager import com.tangem.tap.walletStoresManager @@ -129,6 +130,7 @@ internal class WalletSelectorMiddleware { store.dispatchOnMain(WalletSelectorAction.AddWallet.Success) if (isSavedWalletSelected) { + updateAccessCodeRequestPolicy(selectedWallet) store.dispatchOnMain(NavigationAction.PopBackTo(AppScreen.Wallet)) store.onUserWalletSelected(selectedWallet) } @@ -143,6 +145,7 @@ internal class WalletSelectorMiddleware { store.dispatchOnMain(WalletSelectorAction.HandleError(error)) } .doOnSuccess { selectedWallet -> + updateAccessCodeRequestPolicy(selectedWallet) store.dispatchOnMain(NavigationAction.PopBackTo(AppScreen.Wallet)) store.onUserWalletSelected(selectedWallet) } @@ -176,7 +179,6 @@ internal class WalletSelectorMiddleware { crossinline onCardScanned: suspend (ScanResponse) -> Unit, ) { ScanCardProcessor.scan( - useBiometricsForAccessCode = preferencesStorage.shouldSaveAccessCodes, onSuccess = { onCardScanned(it) }, @@ -210,11 +212,19 @@ internal class WalletSelectorMiddleware { val isSelectedWalletRemoved = prevSelectedWalletId != selectedWallet.walletId.stringValue if (isSelectedWalletRemoved) { + updateAccessCodeRequestPolicy(selectedWallet) store.onUserWalletSelected(selectedWallet) } } } + private fun updateAccessCodeRequestPolicy(userWallet: UserWallet) { + tangemSdkManager.setAccessCodeRequestPolicy( + useBiometricsForAccessCode = preferencesStorage.shouldSaveAccessCodes && + userWallet.scanResponse.card.isAccessCodeSet, + ) + } + private suspend fun UserWalletModel.updateWalletStoresAndCalculateFiatBalance( walletStores: List, ): UserWalletModel { diff --git a/app/src/main/java/com/tangem/tap/features/welcome/redux/WelcomeMiddleware.kt b/app/src/main/java/com/tangem/tap/features/welcome/redux/WelcomeMiddleware.kt index 73556a2d6f..9e18faf7c0 100644 --- a/app/src/main/java/com/tangem/tap/features/welcome/redux/WelcomeMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/welcome/redux/WelcomeMiddleware.kt @@ -10,8 +10,10 @@ import com.tangem.tap.common.redux.navigation.AppScreen import com.tangem.tap.common.redux.navigation.NavigationAction import com.tangem.tap.domain.model.builders.UserWalletBuilder import com.tangem.tap.domain.scanCard.ScanCardProcessor +import com.tangem.tap.preferencesStorage import com.tangem.tap.scope import com.tangem.tap.store +import com.tangem.tap.tangemSdkManager import com.tangem.tap.userWalletsListManager import kotlinx.coroutines.launch import org.rekotlin.Middleware @@ -48,6 +50,11 @@ internal class WelcomeMiddleware { } .doOnSuccess { selectedUserWallet -> if (selectedUserWallet != null) { + tangemSdkManager.setAccessCodeRequestPolicy( + useBiometricsForAccessCode = preferencesStorage.shouldSaveAccessCodes && + selectedUserWallet.scanResponse.card.isAccessCodeSet, + ) + store.dispatchOnMain(NavigationAction.NavigateTo(AppScreen.Wallet)) store.dispatchOnMain(WelcomeAction.ProceedWithBiometrics.Success) store.onUserWalletSelected(selectedUserWallet) @@ -65,6 +72,9 @@ internal class WelcomeMiddleware { store.dispatchOnMain(WelcomeAction.ProceedWithCard.Error(error)) } .doOnSuccess { + tangemSdkManager.setAccessCodeRequestPolicy( + useBiometricsForAccessCode = false, + ) store.dispatchOnMain(NavigationAction.NavigateTo(AppScreen.Wallet)) store.dispatchOnMain(WelcomeAction.ProceedWithCard.Success) store.onUserWalletSelected(userWallet)