From 4130c07e7001b5123ee035dac87745cc57f0652d Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 13 Dec 2022 22:54:02 +0300 Subject: [PATCH 1/2] Updated on 2026-08-14 --- .../features/onboarding/OnboardingHelper.kt | 19 +++++++++++++++++++ .../saveWallet/redux/SaveWalletMiddleware.kt | 12 +++--------- 2 files changed, 22 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/OnboardingHelper.kt b/app/src/main/java/com/tangem/tap/features/onboarding/OnboardingHelper.kt index e14d6cff7d..b1ce166222 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/OnboardingHelper.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/OnboardingHelper.kt @@ -1,16 +1,20 @@ package com.tangem.tap.features.onboarding +import com.tangem.common.doOnSuccess import com.tangem.domain.common.ProductType import com.tangem.domain.common.ScanResponse import com.tangem.tap.common.extensions.dispatchOnMain import com.tangem.tap.common.extensions.onCardScanned +import com.tangem.tap.common.extensions.onUserWalletSelected 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.features.saveWallet.redux.SaveWalletAction 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 @@ -55,6 +59,18 @@ class OnboardingHelper { backupCardsIds: List? = null, ) { when { + // When should save user wallets but manager is locked, then unlock manager with card + preferencesStorage.shouldSaveUserWallets && + userWalletsListManager.isLockedSync -> scope.launch { + val userWallet = UserWalletBuilder(scanResponse).build() + + tangemSdkManager.setAccessCodeRequestPolicy(useBiometricsForAccessCode = false) + userWalletsListManager.unlockWithCard(userWallet) + .doOnSuccess { + store.onUserWalletSelected(userWallet) + } + } + // When should save user wallets, then save card without navigate to save wallet screen preferencesStorage.shouldSaveUserWallets -> scope.launch { store.dispatchOnMain( SaveWalletAction.ProvideBackupInfo( @@ -65,6 +81,8 @@ class OnboardingHelper { ) store.dispatchOnMain(SaveWalletAction.Save) } + // When should not save user wallets but device has biometry and save wallet screen has not been shown, + // then open save wallet screen tangemSdkManager.canUseBiometry && preferencesStorage.shouldShowSaveUserWalletScreen -> scope.launch { delay(timeMillis = 1_200) @@ -77,6 +95,7 @@ class OnboardingHelper { ) store.dispatchOnMain(NavigationAction.NavigateTo(AppScreen.SaveWallet)) } + // If device has no biometry and save wallet screen has been shown, then go through old scenario else -> scope.launch { store.onCardScanned(scanResponse) } diff --git a/app/src/main/java/com/tangem/tap/features/saveWallet/redux/SaveWalletMiddleware.kt b/app/src/main/java/com/tangem/tap/features/saveWallet/redux/SaveWalletMiddleware.kt index ee202bbc3a..aaa56a0789 100644 --- a/app/src/main/java/com/tangem/tap/features/saveWallet/redux/SaveWalletMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/saveWallet/redux/SaveWalletMiddleware.kt @@ -94,6 +94,7 @@ internal class SaveWalletMiddleware { saveAccessCodeIfNeeded(state.backupInfo?.accessCode, userWallet.cardsInWallet) .flatMap { userWalletsListManager.save(userWallet, canOverride = true) } + .flatMap { userWalletsListManager.selectWallet(userWallet.walletId) } .doOnFailure { error -> store.dispatchOnMain(SaveWalletAction.Save.Error(error)) } @@ -110,17 +111,10 @@ internal class SaveWalletMiddleware { userWallet.hasAccessCode, ) - val isSavedWalletSelected = - userWalletsListManager.selectedUserWalletSync?.walletId == userWallet.walletId - store.dispatchOnMain(SaveWalletAction.Save.Success) - if (isSavedWalletSelected) { - store.dispatchOnMain(NavigationAction.PopBackTo(AppScreen.Wallet)) - store.onUserWalletSelected(userWallet) - } else { - store.dispatchOnMain(NavigationAction.NavigateTo(AppScreen.WalletSelector)) - } + store.dispatchOnMain(NavigationAction.PopBackTo(AppScreen.Wallet)) + store.onUserWalletSelected(userWallet) } } } From c5ee1d0b1fb2e8172832d38f8c74c1361caea3b4 Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 13 Dec 2022 22:55:16 +0300 Subject: [PATCH 2/2] Updated on 2026-08-14 --- .../implementation/BiometricUserWalletsListManager.kt | 4 ---- .../tap/features/details/redux/DetailsMiddleware.kt | 8 ++++++-- .../tap/features/welcome/redux/WelcomeMiddleware.kt | 4 +--- 3 files changed, 7 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/domain/userWalletList/implementation/BiometricUserWalletsListManager.kt b/app/src/main/java/com/tangem/tap/domain/userWalletList/implementation/BiometricUserWalletsListManager.kt index ad4c7597c9..2267ab620b 100644 --- a/app/src/main/java/com/tangem/tap/domain/userWalletList/implementation/BiometricUserWalletsListManager.kt +++ b/app/src/main/java/com/tangem/tap/domain/userWalletList/implementation/BiometricUserWalletsListManager.kt @@ -143,10 +143,6 @@ internal class BiometricUserWalletsListManager( } override suspend fun delete(walletIds: List): CompletionResult { - if (state.value.isLocked) { - return CompletionResult.Success(Unit) - } - val walletIdsToRemove = state.value.wallets .map { it.walletId } .filter { it in walletIds } 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 fb671a9cbc..829103e4e7 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 @@ -121,8 +121,12 @@ class DetailsMiddleware { val selectedUserWallet = userWalletsListManager.selectedUserWalletSync if (selectedUserWallet != null) { - store.dispatchOnMain(NavigationAction.PopBackTo(AppScreen.Wallet)) - store.onUserWalletSelected(selectedUserWallet) + if (userWalletsListManager.isLockedSync) { + store.dispatchOnMain(NavigationAction.PopBackTo(AppScreen.Welcome)) + } else { + store.dispatchOnMain(NavigationAction.PopBackTo(AppScreen.Wallet)) + store.onUserWalletSelected(selectedUserWallet) + } } else { userWalletsListManager.lock() store.dispatchOnMain(NavigationAction.PopBackTo(AppScreen.Home)) 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 11508acf00..fb5b8a626d 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 @@ -78,14 +78,12 @@ internal class WelcomeMiddleware { scanCardInternal { scanResponse -> val userWallet = UserWalletBuilder(scanResponse).build() + tangemSdkManager.setAccessCodeRequestPolicy(useBiometricsForAccessCode = false) userWalletsListManager.unlockWithCard(userWallet) .doOnFailure { error -> 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)