From 7ef9e9b9eb68c188a4be33eddca578144513a598 Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 10 Aug 2022 23:00:35 +0400 Subject: [PATCH] Updated on 2026-08-14 --- .../tangem/tap/features/demo/DemoHelper.kt | 4 +- .../features/details/redux/DetailsAction.kt | 1 + .../details/redux/DetailsMiddleware.kt | 107 ++++++++++-------- .../ui/cardsettings/CardSettingsViewModel.kt | 4 +- 4 files changed, 64 insertions(+), 52 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/features/demo/DemoHelper.kt b/app/src/main/java/com/tangem/tap/features/demo/DemoHelper.kt index 53a0878b74..72b7c51672 100644 --- a/app/src/main/java/com/tangem/tap/features/demo/DemoHelper.kt +++ b/app/src/main/java/com/tangem/tap/features/demo/DemoHelper.kt @@ -14,6 +14,7 @@ import com.tangem.common.CompletionResult import com.tangem.domain.common.ScanResponse import com.tangem.tap.common.extensions.dispatchNotification import com.tangem.tap.common.redux.AppState +import com.tangem.tap.features.details.redux.DetailsAction import com.tangem.tap.features.details.redux.walletconnect.WalletConnectAction import com.tangem.tap.features.onboarding.products.wallet.redux.BackupAction import com.tangem.tap.features.wallet.redux.WalletAction @@ -42,7 +43,8 @@ object DemoHelper { WalletAction.TradeCryptoAction.Buy::class.java, WalletAction.TradeCryptoAction.Sell::class.java, BackupAction.StartBackup::class.java, - WalletAction.ExploreAddress::class.java + WalletAction.ExploreAddress::class.java, + DetailsAction.ResetToFactory.Start::class.java, ) fun isDemoCard(scanResponse: ScanResponse): Boolean = isDemoCardId(scanResponse.card.cardId) diff --git a/app/src/main/java/com/tangem/tap/features/details/redux/DetailsAction.kt b/app/src/main/java/com/tangem/tap/features/details/redux/DetailsAction.kt index 9cb5cfe537..b421b69730 100644 --- a/app/src/main/java/com/tangem/tap/features/details/redux/DetailsAction.kt +++ b/app/src/main/java/com/tangem/tap/features/details/redux/DetailsAction.kt @@ -19,6 +19,7 @@ sealed class DetailsAction : Action { object ReCreateTwinsWallet : DetailsAction() sealed class ResetToFactory : DetailsAction() { + object Start : ResetToFactory() object Proceed : ResetToFactory() data class Confirm(val confirmed: Boolean) : ResetToFactory() object Failure : ResetToFactory() 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 c8213d7d8c..7825d58a8f 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 @@ -12,6 +12,7 @@ import com.tangem.tap.common.redux.global.GlobalAction import com.tangem.tap.common.redux.navigation.AppScreen import com.tangem.tap.common.redux.navigation.NavigationAction import com.tangem.tap.currenciesRepository +import com.tangem.tap.features.demo.DemoHelper import com.tangem.tap.features.onboarding.products.twins.redux.CreateTwinWalletMode import com.tangem.tap.features.onboarding.products.twins.redux.TwinCardsAction import com.tangem.tap.features.wallet.models.hasSendableAmountsOrPendingTransactions @@ -21,67 +22,74 @@ import com.tangem.tap.tangemSdkManager import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext +import org.rekotlin.Action import org.rekotlin.Middleware class DetailsMiddleware { private val eraseWalletMiddleware = EraseWalletMiddleware() private val manageSecurityMiddleware = ManageSecurityMiddleware() private val managePrivacyMiddleware = ManagePrivacyMiddleware() - val detailsMiddleware: Middleware = { _, _ -> + val detailsMiddleware: Middleware = { _, state -> { next -> { action -> - when (action) { - is DetailsAction.ResetToFactory -> eraseWalletMiddleware.handle(action) - is DetailsAction.ManageSecurity -> manageSecurityMiddleware.handle(action) - is DetailsAction.AppSettings -> managePrivacyMiddleware.handle(action) - is DetailsAction.ShowDisclaimer -> { - val uri = store.state.detailsState.cardTermsOfUseUrl - if (uri != null) { - store.dispatch(NavigationAction.OpenDocument(uri)) - } + handleAction(state, action) + next(action) + } + } + } + + private fun handleAction(state: () -> AppState?, action: Action) { + if (DemoHelper.tryHandle(state, action)) return + + when (action) { + is DetailsAction.ResetToFactory -> eraseWalletMiddleware.handle(action) + is DetailsAction.ManageSecurity -> manageSecurityMiddleware.handle(action) + is DetailsAction.AppSettings -> managePrivacyMiddleware.handle(action) + is DetailsAction.ShowDisclaimer -> { + val uri = store.state.detailsState.cardTermsOfUseUrl + if (uri != null) { + store.dispatch(NavigationAction.OpenDocument(uri)) + } + } + is DetailsAction.ReCreateTwinsWallet -> { + val wallet = + store.state.walletState.walletManagers.map { it.wallet }.firstOrNull() + if (wallet == null) { + store.dispatch(TwinCardsAction.SetMode(CreateTwinWalletMode.RecreateWallet)) + store.dispatch(NavigationAction.NavigateTo(AppScreen.OnboardingTwins)) + } else { + if (wallet.hasSendableAmountsOrPendingTransactions()) { + val walletIsNotEmpty = + store.state.globalState.resources.strings.walletIsNotEmpty + store.dispatchNotification(walletIsNotEmpty) + } else { + store.dispatch(TwinCardsAction.SetMode(CreateTwinWalletMode.RecreateWallet)) + store.dispatch(NavigationAction.NavigateTo(AppScreen.OnboardingTwins)) } - is DetailsAction.ReCreateTwinsWallet -> { - val wallet = - store.state.walletState.walletManagers.map { it.wallet }.firstOrNull() - if (wallet == null) { - store.dispatch(TwinCardsAction.SetMode(CreateTwinWalletMode.RecreateWallet)) - store.dispatch(NavigationAction.NavigateTo(AppScreen.OnboardingTwins)) - } else { - if (wallet.hasSendableAmountsOrPendingTransactions()) { - val walletIsNotEmpty = - store.state.globalState.resources.strings.walletIsNotEmpty - store.dispatchNotification(walletIsNotEmpty) - } else { - store.dispatch(TwinCardsAction.SetMode(CreateTwinWalletMode.RecreateWallet)) - store.dispatch(NavigationAction.NavigateTo(AppScreen.OnboardingTwins)) - } + } + } + is DetailsAction.CreateBackup -> { + store.state.detailsState.scanResponse?.let { + store.dispatch(NavigationAction.NavigateTo(AppScreen.OnboardingWallet)) + store.dispatch( + GlobalAction.Onboarding.Start( + it, + fromHomeScreen = false, + ), + ) + } + } + DetailsAction.ScanCard -> { + scope.launch { + when (val result = tangemSdkManager.scanCard()) { + is CompletionResult.Success -> { + val card = result.data + store.dispatchOnMain(DetailsAction.PrepareCardSettingsData(card)) } - } - is DetailsAction.CreateBackup -> { - store.state.detailsState.scanResponse?.let { - store.dispatch(NavigationAction.NavigateTo(AppScreen.OnboardingWallet)) - store.dispatch( - GlobalAction.Onboarding.Start( - it, - fromHomeScreen = false, - ), - ) - } - } - DetailsAction.ScanCard -> { - scope.launch { - when (val result = tangemSdkManager.scanCard()) { - is CompletionResult.Success -> { - val card = result.data - store.dispatchOnMain(DetailsAction.PrepareCardSettingsData(card)) - } - is CompletionResult.Failure -> { - } - } + is CompletionResult.Failure -> { } } } - next(action) } } } @@ -89,6 +97,9 @@ class DetailsMiddleware { class EraseWalletMiddleware { fun handle(action: DetailsAction.ResetToFactory) { when (action) { + is DetailsAction.ResetToFactory.Start -> { + store.dispatch(NavigationAction.NavigateTo(AppScreen.ResetToFactory)) + } is DetailsAction.ResetToFactory.Proceed -> { val card = store.state.detailsState.cardSettingsState?.card ?: return if (card.isTangemTwins()) { diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/cardsettings/CardSettingsViewModel.kt b/app/src/main/java/com/tangem/tap/features/details/ui/cardsettings/CardSettingsViewModel.kt index a90886ff81..60affefd8b 100644 --- a/app/src/main/java/com/tangem/tap/features/details/ui/cardsettings/CardSettingsViewModel.kt +++ b/app/src/main/java/com/tangem/tap/features/details/ui/cardsettings/CardSettingsViewModel.kt @@ -3,8 +3,6 @@ package com.tangem.tap.features.details.ui.cardsettings import com.tangem.domain.common.getTwinCardIdForUser import com.tangem.domain.common.isTangemTwins import com.tangem.tap.common.redux.AppState -import com.tangem.tap.common.redux.navigation.AppScreen -import com.tangem.tap.common.redux.navigation.NavigationAction import com.tangem.tap.features.details.redux.CardSettingsState import com.tangem.tap.features.details.redux.DetailsAction import org.rekotlin.Store @@ -64,7 +62,7 @@ class CardSettingsViewModel(private val store: Store) { store.dispatch(DetailsAction.ManageSecurity.ChangeAccessCode) } is CardInfo.ResetToFactorySettings -> { - store.dispatch(NavigationAction.NavigateTo(AppScreen.ResetToFactory)) + store.dispatch(DetailsAction.ResetToFactory.Start) } is CardInfo.SecurityMode -> { store.dispatch(DetailsAction.ManageSecurity.OpenSecurity)