From fff302e7fb7c332480a2266f2d53b3c9feefb7aa Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 24 Oct 2022 18:41:26 +0500 Subject: [PATCH] Updated on 2026-08-14 --- .../com/tangem/tap/common/DialogManager.kt | 18 ++++---- .../tangem/tap/common/redux/StateDialog.kt | 1 + .../onboarding/OnboardingSaltPayHelper.kt | 27 ++++-------- .../redux/OnboardingWalletMiddleware.kt | 43 ++++++++++++++----- .../wallet/saltPay/SaltPayExceptionHandler.kt | 4 +- .../saltPay/dialog/RegistrationErrorDialog.kt | 2 +- .../wallet/saltPay/dialog/SaltPayDialog.kt | 8 +++- .../TryToInterruptRegistrationDialog.kt | 26 +++++++++++ .../saltPay/ui/OnboardingSaltPayView.kt | 2 +- 9 files changed, 86 insertions(+), 45 deletions(-) create mode 100644 app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/dialog/TryToInterruptRegistrationDialog.kt diff --git a/app/src/main/java/com/tangem/tap/common/DialogManager.kt b/app/src/main/java/com/tangem/tap/common/DialogManager.kt index 0508230bba..8e36ea5a94 100644 --- a/app/src/main/java/com/tangem/tap/common/DialogManager.kt +++ b/app/src/main/java/com/tangem/tap/common/DialogManager.kt @@ -20,6 +20,7 @@ import com.tangem.tap.features.onboarding.products.wallet.redux.BackupDialog import com.tangem.tap.features.onboarding.products.wallet.saltPay.dialog.NoFundsForActivationDialog import com.tangem.tap.features.onboarding.products.wallet.saltPay.dialog.RegistrationErrorDialog import com.tangem.tap.features.onboarding.products.wallet.saltPay.dialog.SaltPayDialog +import com.tangem.tap.features.onboarding.products.wallet.saltPay.dialog.TryToInterruptRegistrationDialog import com.tangem.tap.features.onboarding.products.wallet.ui.dialogs.AddMoreBackupCardsDialog import com.tangem.tap.features.onboarding.products.wallet.ui.dialogs.BackupInProgressDialog import com.tangem.tap.features.onboarding.products.wallet.ui.dialogs.ConfirmDiscardingBackupDialog @@ -130,16 +131,13 @@ class DialogManager : StoreSubscriber { is BackupDialog.BackupInProgress -> BackupInProgressDialog.create(context) is BackupDialog.UnfinishedBackupFound -> UnfinishedBackupFoundDialog.create(context) is BackupDialog.ConfirmDiscardingBackup -> ConfirmDiscardingBackupDialog.create(context) - is SaltPayDialog.NoFundsForActivation -> NoFundsForActivationDialog.create(context) - is SaltPayDialog.RegistrationError -> RegistrationErrorDialog.create(context, state.dialog) - is WalletDialog.CurrencySelectionDialog -> - CurrencySelectionDialog.create(state.dialog, context) - is WalletDialog.ChooseTradeActionDialog -> - ChooseTradeActionBottomSheetDialog(context) - is WalletDialog.SelectAmountToSendDialog -> - AmountToSendBottomSheetDialog(context, state.dialog) - is WalletDialog.SignedHashesMultiWalletDialog -> - SignedHashesWarningDialog.create(context) + is SaltPayDialog.Activation.NoFunds -> NoFundsForActivationDialog.create(context) + is SaltPayDialog.Activation.TryToInterrupt -> TryToInterruptRegistrationDialog.create(context, state.dialog) + is SaltPayDialog.Activation.OnError -> RegistrationErrorDialog.create(context, state.dialog) + is WalletDialog.CurrencySelectionDialog -> CurrencySelectionDialog.create(state.dialog, context) + is WalletDialog.ChooseTradeActionDialog -> ChooseTradeActionBottomSheetDialog(context) + is WalletDialog.SelectAmountToSendDialog -> AmountToSendBottomSheetDialog(context, state.dialog) + is WalletDialog.SignedHashesMultiWalletDialog -> SignedHashesWarningDialog.create(context) is WalletDialog.TokensAreLinkedDialog -> SimpleAlertDialog.create( title = context.getString(state.dialog.titleRes, state.dialog.currencySymbol), message = context.getString( diff --git a/app/src/main/java/com/tangem/tap/common/redux/StateDialog.kt b/app/src/main/java/com/tangem/tap/common/redux/StateDialog.kt index 0b30d72ff0..e216493dd6 100644 --- a/app/src/main/java/com/tangem/tap/common/redux/StateDialog.kt +++ b/app/src/main/java/com/tangem/tap/common/redux/StateDialog.kt @@ -21,6 +21,7 @@ sealed class AppDialog : StateDialog { ) : AppDialog() object ScanFailsDialog : AppDialog() + data class AddressInfoDialog( val currency: Currency, val addressData: AddressData, diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/OnboardingSaltPayHelper.kt b/app/src/main/java/com/tangem/tap/features/onboarding/OnboardingSaltPayHelper.kt index 2b4ad93ab0..ed11c57eed 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/OnboardingSaltPayHelper.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/OnboardingSaltPayHelper.kt @@ -34,25 +34,14 @@ class OnboardingSaltPayHelper { } } - suspend fun testProceedToOnboarding(scanResponse: ScanResponse): Result { - return try { - val isBackupOnboardingCase = scanResponse.card.backupStatus?.isActive == false - Result.Success(isBackupOnboardingCase) - } catch (ex: Exception) { - Result.Failure(ex) - } catch (error: SaltPayRegistrationError) { - Result.Failure(error) - } - } + suspend fun testProceedToOnboarding( + scanResponse: ScanResponse, + manager: SaltPayRegistrationManager, + ): Result = Result.Success(true) - suspend fun testProceedToMainScreen(scanResponse: ScanResponse): Result { - return try { - Result.Success(false) - } catch (ex: Exception) { - Result.Failure(ex) - } catch (error: SaltPayRegistrationError) { - Result.Failure(error) - } - } + suspend fun testProceedToMainScreen( + scanResponse: ScanResponse, + manager: SaltPayRegistrationManager, + ): Result = Result.Success(false) } } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/redux/OnboardingWalletMiddleware.kt b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/redux/OnboardingWalletMiddleware.kt index 745dee84fd..b03729bda9 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/redux/OnboardingWalletMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/redux/OnboardingWalletMiddleware.kt @@ -9,6 +9,7 @@ import com.tangem.domain.common.ScanResponse import com.tangem.domain.common.extensions.withMainContext import com.tangem.operations.backup.BackupService import com.tangem.tap.backupService +import com.tangem.tap.common.extensions.dispatchDialogShow import com.tangem.tap.common.extensions.dispatchOnMain import com.tangem.tap.common.redux.AppState import com.tangem.tap.common.redux.global.GlobalAction @@ -18,6 +19,7 @@ import com.tangem.tap.domain.extensions.hasWallets import com.tangem.tap.domain.tokens.models.BlockchainNetwork import com.tangem.tap.features.demo.DemoHelper import com.tangem.tap.features.home.redux.HomeAction +import com.tangem.tap.features.onboarding.products.wallet.saltPay.dialog.SaltPayDialog import com.tangem.tap.features.onboarding.products.wallet.saltPay.redux.OnboardingSaltPayAction import com.tangem.tap.features.onboarding.products.wallet.saltPay.redux.OnboardingSaltPayState import com.tangem.tap.features.wallet.redux.Artwork @@ -173,16 +175,9 @@ private fun handleWalletAction(action: Action, state: () -> AppState?, dispatch: newAction?.let { store.dispatch(it) } } OnboardingWalletAction.OnBackPressed -> { - when (onboardingWalletState.backupState.backupStep) { - BackupStep.InitBackup, BackupStep.Finished -> store.dispatch(NavigationAction.PopBackTo()) - BackupStep.ScanOriginCard, BackupStep.AddBackupCards, BackupStep.EnterAccessCode, - BackupStep.ReenterAccessCode, BackupStep.SetAccessCode, BackupStep.WritePrimaryCard, - -> { - store.dispatch(BackupAction.DiscardBackup) - store.dispatch(NavigationAction.PopBackTo()) - } - is BackupStep.WriteBackupCard -> - store.dispatch(GlobalAction.ShowDialog(BackupDialog.BackupInProgress)) + when { + onboardingWalletState.isSaltPay -> handleOnBackPressedSaltPay(onboardingWalletState) + else -> handleOnBackPressed(onboardingWalletState) } } } @@ -365,4 +360,32 @@ private fun initSaltPayOnBackupFinishedIfNeeded( store.dispatchOnMain(OnboardingSaltPayAction.Init.SetDependencies(manager, config)) store.dispatchOnMain(OnboardingSaltPayAction.Update) } +} + +private fun handleOnBackPressedSaltPay(state: OnboardingWalletState) { + when (state.backupState.backupStep) { + BackupStep.Finished -> { + store.dispatchDialogShow( + SaltPayDialog.Activation.TryToInterrupt( + onOk = { store.dispatch(NavigationAction.PopBackTo()) }, + onCancel = { /* do nothing */ }, + ), + ) + } + else -> handleOnBackPressed(state) + } +} + +private fun handleOnBackPressed(state: OnboardingWalletState) { + when (state.backupState.backupStep) { + BackupStep.InitBackup, BackupStep.Finished -> store.dispatch(NavigationAction.PopBackTo()) + BackupStep.ScanOriginCard, BackupStep.AddBackupCards, BackupStep.EnterAccessCode, + BackupStep.ReenterAccessCode, BackupStep.SetAccessCode, BackupStep.WritePrimaryCard, + -> { + store.dispatch(BackupAction.DiscardBackup) + store.dispatch(NavigationAction.PopBackTo()) + } + is BackupStep.WriteBackupCard -> + store.dispatch(GlobalAction.ShowDialog(BackupDialog.BackupInProgress)) + } } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/SaltPayExceptionHandler.kt b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/SaltPayExceptionHandler.kt index 90e35d1bbd..7be228dcde 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/SaltPayExceptionHandler.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/SaltPayExceptionHandler.kt @@ -16,8 +16,8 @@ class SaltPayExceptionHandler { when (throwable) { is SaltPayRegistrationError -> { val dialog = when (throwable) { - is SaltPayRegistrationError.NoGas -> SaltPayDialog.NoFundsForActivation - else -> SaltPayDialog.RegistrationError(throwable) + is SaltPayRegistrationError.NoGas -> SaltPayDialog.Activation.NoFunds + else -> SaltPayDialog.Activation.OnError(throwable) } store.dispatchDialogShow(dialog) } diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/dialog/RegistrationErrorDialog.kt b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/dialog/RegistrationErrorDialog.kt index f7ddfbea66..831d097783 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/dialog/RegistrationErrorDialog.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/dialog/RegistrationErrorDialog.kt @@ -14,7 +14,7 @@ import com.tangem.wallet.R */ class RegistrationErrorDialog { companion object { - fun create(context: Context, dialog: SaltPayDialog.RegistrationError): Dialog { + fun create(context: Context, dialog: SaltPayDialog.Activation.OnError): Dialog { val convertedMessage = SaltPayErrorConverter(context).convert(dialog.error) as ConvertedDialogMessage return AlertDialog.Builder(context).apply { diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/dialog/SaltPayDialog.kt b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/dialog/SaltPayDialog.kt index 5bd2e1aac0..f28a3a29a2 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/dialog/SaltPayDialog.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/dialog/SaltPayDialog.kt @@ -1,5 +1,6 @@ package com.tangem.tap.features.onboarding.products.wallet.saltPay.dialog +import com.tangem.common.extensions.VoidCallback import com.tangem.tap.common.redux.StateDialog import com.tangem.tap.features.onboarding.products.wallet.saltPay.message.SaltPayRegistrationError @@ -7,6 +8,9 @@ import com.tangem.tap.features.onboarding.products.wallet.saltPay.message.SaltPa [REDACTED_AUTHOR] */ sealed class SaltPayDialog : StateDialog { - object NoFundsForActivation : SaltPayDialog() - data class RegistrationError(val error: SaltPayRegistrationError) : SaltPayDialog() + sealed class Activation : SaltPayDialog() { + object NoFunds : SaltPayDialog() + data class OnError(val error: SaltPayRegistrationError) : SaltPayDialog() + data class TryToInterrupt(val onOk: VoidCallback, val onCancel: VoidCallback) : SaltPayDialog() + } } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/dialog/TryToInterruptRegistrationDialog.kt b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/dialog/TryToInterruptRegistrationDialog.kt new file mode 100644 index 0000000000..6f02df9120 --- /dev/null +++ b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/dialog/TryToInterruptRegistrationDialog.kt @@ -0,0 +1,26 @@ +package com.tangem.tap.features.onboarding.products.wallet.saltPay.dialog + +import android.app.Dialog +import android.content.Context +import androidx.appcompat.app.AlertDialog +import com.tangem.tap.common.extensions.dispatchDialogHide +import com.tangem.tap.store +import com.tangem.wallet.R + +/** +[REDACTED_AUTHOR] + */ +class TryToInterruptRegistrationDialog { + companion object { + fun create(context: Context, dialog: SaltPayDialog.Activation.TryToInterrupt): Dialog { + return AlertDialog.Builder(context).apply { + setTitle(context.getString(R.string.onboarding_exit_alert_title)) + setMessage(context.getString(R.string.onboarding_exit_alert_message)) + setPositiveButton(R.string.common_ok) { _, _ -> dialog.onOk() } + setNegativeButton(R.string.common_cancel) { _, _ -> dialog.onCancel() } + setOnDismissListener { store.dispatchDialogHide() } + setCancelable(false) + }.create() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/ui/OnboardingSaltPayView.kt b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/ui/OnboardingSaltPayView.kt index b7840bf99e..b721043f3d 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/ui/OnboardingSaltPayView.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/ui/OnboardingSaltPayView.kt @@ -150,7 +150,7 @@ internal class OnboardingSaltPayView( private fun handleNoGas() { // normally this shouldn't happen store.dispatch(NavigationAction.PopBackTo(AppScreen.Home)) - store.dispatchDialogShow(SaltPayDialog.NoFundsForActivation) + store.dispatchDialogShow(SaltPayDialog.Activation.NoFunds) } private fun handleNeedPin() = with(walletFragment.bindingSaltPay) {