diff --git a/app/src/main/java/com/tangem/tap/domain/tasks/product/CreateProductWalletTask.kt b/app/src/main/java/com/tangem/tap/domain/tasks/product/CreateProductWalletTask.kt index 78d1ce464f..3c0467b1da 100644 --- a/app/src/main/java/com/tangem/tap/domain/tasks/product/CreateProductWalletTask.kt +++ b/app/src/main/java/com/tangem/tap/domain/tasks/product/CreateProductWalletTask.kt @@ -151,7 +151,9 @@ private class CreateWalletTangemWallet( ) { val config = CardConfig.createConfig(card) val walletsOnCard = card.wallets.map { it.curve }.toSet() - val curves = card.supportedCurves.intersect(config.mandatoryCurves.toSet()).subtract(walletsOnCard).toList() + val curves = config.mandatoryCurves.toSet() + .intersect(card.supportedCurves.toSet()) + .subtract(walletsOnCard).toList() if (curves.isEmpty()) { val createWalletResponses = card.wallets.map { wallet -> diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/ui/OnboardingWalletFragment.kt b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/ui/OnboardingWalletFragment.kt index 50a7af5d2a..18b8afeb88 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/ui/OnboardingWalletFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/ui/OnboardingWalletFragment.kt @@ -21,6 +21,7 @@ import com.tangem.common.CardIdFormatter import com.tangem.common.CompletionResult import com.tangem.common.core.CardIdDisplayFormat import com.tangem.core.analytics.Analytics +import com.tangem.domain.common.util.cardTypesResolver import com.tangem.feature.onboarding.data.model.CreateWalletResponse import com.tangem.feature.onboarding.presentation.wallet2.analytics.SeedPhraseSource import com.tangem.feature.onboarding.presentation.wallet2.viewmodel.SeedPhraseMediator @@ -64,6 +65,7 @@ class OnboardingWalletFragment : private val seedPhraseViewModel by viewModels() private lateinit var cardsWidget: WalletCardsWidget + private var seedPhraseRouter: SeedPhraseRouter? = null private var accessCodeDialog: AccessCodeDialog? = null private lateinit var animator: BackupAnimator @@ -77,7 +79,9 @@ class OnboardingWalletFragment : override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - seedPhraseViewModel.setRouter(makeSeedPhraseRouter()) + val newSeedPhraseRouter = makeSeedPhraseRouter() + seedPhraseRouter = newSeedPhraseRouter + seedPhraseViewModel.setRouter(newSeedPhraseRouter) seedPhraseViewModel.setMediator(makeSeedPhraseMediator()) } @@ -195,7 +199,6 @@ class OnboardingWalletFragment : OnboardingWalletStep.CreateWallet -> setupCreateWalletState() OnboardingWalletStep.Backup -> setBackupState( state = state.backupState, - isWallet2 = state.wallet2State != null, ) else -> {} @@ -220,9 +223,9 @@ class OnboardingWalletFragment : animator.setupCreateWalletState() } - private fun setBackupState(state: BackupState, isWallet2: Boolean) { + private fun setBackupState(state: BackupState) { when (state.backupStep) { - BackupStep.InitBackup -> showBackupIntro(state, isWallet2) + BackupStep.InitBackup -> showBackupIntro(state) BackupStep.ScanOriginCard -> showScanOriginCard() BackupStep.AddBackupCards -> showAddBackupCards(state) BackupStep.SetAccessCode -> showSetAccessCode() @@ -234,7 +237,7 @@ class OnboardingWalletFragment : } } - private fun showBackupIntro(state: BackupState, isWallet2: Boolean) = with(binding) { + private fun showBackupIntro(state: BackupState) = with(binding) { imvFirstBackupCard.show() imvSecondBackupCard.show() @@ -250,7 +253,7 @@ class OnboardingWalletFragment : btnWalletAlternativeAction.text = getText(R.string.onboarding_button_skip_backup) btnWalletAlternativeAction.setOnClickListener { store.dispatch(BackupAction.SkipBackup) } - btnWalletAlternativeAction.show(state.canSkipBackup && !isWallet2) + btnWalletAlternativeAction.show(state.canSkipBackup) } animator.showBackupIntro(state) } @@ -443,6 +446,19 @@ class OnboardingWalletFragment : } override fun handleOnBackPressed() { + // workaround to use right navigation back for toolbar back btn on seed phrase flow + val isWallet2 = + store.state.globalState.onboardingState.onboardingManager?.scanResponse?.cardTypesResolver?.isWallet2() + ?: false + val seedPhraseRouter = seedPhraseRouter + if (seedPhraseRouter != null && isWallet2) { + seedPhraseRouter.navigateBack() + } else { + legacyOnBackHandler() + } + } + + private fun legacyOnBackHandler() { store.dispatch(OnboardingWalletAction.OnBackPressed) } @@ -453,7 +469,7 @@ class OnboardingWalletFragment : } private fun makeSeedPhraseRouter(): SeedPhraseRouter = SeedPhraseRouter( - onBack = ::handleOnBackPressed, + onBack = ::legacyOnBackHandler, onOpenChat = { store.dispatch(GlobalAction.OpenChat(SupportInfo())) }, diff --git a/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/viewmodels/TokensListViewModel.kt b/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/viewmodels/TokensListViewModel.kt index 1cac67b7b2..78ff6ff6ce 100644 --- a/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/viewmodels/TokensListViewModel.kt +++ b/app/src/main/java/com/tangem/tap/features/tokens/impl/presentation/viewmodels/TokensListViewModel.kt @@ -378,7 +378,7 @@ internal class TokensListViewModel @Inject constructor( val supportedTokens = scanResponse.card.supportedTokens(cardTypesResolver) // refactor this later by moving all this logic in card config - if (!supportedTokens.contains(Blockchain.Solana)) { + if (blockchain == Blockchain.Solana && !supportedTokens.contains(Blockchain.Solana)) { return SupportTokensState.SolanaNetworkUnsupported } val canHandleToken = scanResponse.card.canHandleToken( diff --git a/domain/demo/src/main/java/com/tangem/domain/demo/DemoConfig.kt b/domain/demo/src/main/java/com/tangem/domain/demo/DemoConfig.kt index ad6e89bba0..864ed232f9 100644 --- a/domain/demo/src/main/java/com/tangem/domain/demo/DemoConfig.kt +++ b/domain/demo/src/main/java/com/tangem/domain/demo/DemoConfig.kt @@ -399,6 +399,12 @@ class DemoConfig { "AB02000000048063", "AB02000000023736", "AB02000000058187", + + // Wallet 2 + "AF04000000012006", + "AF04000000012014", + "AF04000000012022", + "AF04000000012030", ) @Suppress("ClassOrdering") @@ -406,6 +412,7 @@ class DemoConfig { "FB20000000000186", // Note ETH "FB10000000000196", // Note BTC "FB30000000000176", // Wallet + "FB04000000000152", // Wallet 2 ) @Suppress("ClassOrdering") diff --git a/domain/legacy/src/main/java/com/tangem/domain/common/TapWorkarounds.kt b/domain/legacy/src/main/java/com/tangem/domain/common/TapWorkarounds.kt index bd892377ae..c8f7e9fe0d 100644 --- a/domain/legacy/src/main/java/com/tangem/domain/common/TapWorkarounds.kt +++ b/domain/legacy/src/main/java/com/tangem/domain/common/TapWorkarounds.kt @@ -3,6 +3,7 @@ package com.tangem.domain.common import com.tangem.blockchain.common.Blockchain import com.tangem.common.card.Card import com.tangem.common.card.FirmwareVersion +import com.tangem.domain.demo.DemoConfig import com.tangem.domain.models.scan.CardDTO import java.util.* @@ -14,6 +15,7 @@ object TapWorkarounds { private const val TEST_CARD_BATCH = "99FF" private const val TEST_CARD_ID_STARTS_WITH = "FF99" private val backupRequiredFirmwareVersion = FirmwareVersion(major = 6, minor = 21) + private val demoConfig = DemoConfig() val CardDTO.isTangemTwins: Boolean get() = TwinsHelper.getTwinCardNumber(cardId) != null @@ -26,7 +28,7 @@ object TapWorkarounds { // for cards 6.21 and higher backup is not skippable val CardDTO.canSkipBackup: Boolean - get() = this.firmwareVersion < backupRequiredFirmwareVersion + get() = this.firmwareVersion < backupRequiredFirmwareVersion || demoConfig.isDemoCardId(cardId) val CardDTO.useOldStyleDerivation: Boolean get() = batchId == "AC01" || batchId == "AC02" || batchId == "CB95" diff --git a/domain/legacy/src/main/java/com/tangem/domain/common/configs/Wallet2CardConfig.kt b/domain/legacy/src/main/java/com/tangem/domain/common/configs/Wallet2CardConfig.kt index 231e7d7bed..0e02f053df 100644 --- a/domain/legacy/src/main/java/com/tangem/domain/common/configs/Wallet2CardConfig.kt +++ b/domain/legacy/src/main/java/com/tangem/domain/common/configs/Wallet2CardConfig.kt @@ -9,8 +9,8 @@ object Wallet2CardConfig : CardConfig { get() = listOf( EllipticCurve.Secp256k1, EllipticCurve.Ed25519, - EllipticCurve.Bip0340, EllipticCurve.Bls12381G2Aug, + EllipticCurve.Bip0340, EllipticCurve.Ed25519Slip0010, ) diff --git a/features/onboarding/src/main/java/com/tangem/feature/onboarding/presentation/wallet2/viewmodel/SeedPhraseRouter.kt b/features/onboarding/src/main/java/com/tangem/feature/onboarding/presentation/wallet2/viewmodel/SeedPhraseRouter.kt index bfe8b2da3e..4fd0dc3ee4 100644 --- a/features/onboarding/src/main/java/com/tangem/feature/onboarding/presentation/wallet2/viewmodel/SeedPhraseRouter.kt +++ b/features/onboarding/src/main/java/com/tangem/feature/onboarding/presentation/wallet2/viewmodel/SeedPhraseRouter.kt @@ -21,11 +21,11 @@ class SeedPhraseRouter( fun navigateBack() { _currentScreen.value = when (_currentScreen.value) { SeedPhraseScreen.CheckSeedPhrase -> SeedPhraseScreen.YourSeedPhrase - SeedPhraseScreen.Intro, - SeedPhraseScreen.AboutSeedPhrase, - SeedPhraseScreen.YourSeedPhrase, + SeedPhraseScreen.AboutSeedPhrase -> SeedPhraseScreen.Intro SeedPhraseScreen.ImportSeedPhrase, - -> { + SeedPhraseScreen.YourSeedPhrase, + -> SeedPhraseScreen.AboutSeedPhrase + SeedPhraseScreen.Intro -> { onBack.invoke() return }