diff --git a/app/src/main/java/com/tangem/tap/domain/tasks/ScanNoteTask.kt b/app/src/main/java/com/tangem/tap/domain/tasks/ScanNoteTask.kt index 22a7e5ca87..820b159123 100644 --- a/app/src/main/java/com/tangem/tap/domain/tasks/ScanNoteTask.kt +++ b/app/src/main/java/com/tangem/tap/domain/tasks/ScanNoteTask.kt @@ -1,6 +1,8 @@ package com.tangem.tap.domain.tasks import com.tangem.* +import com.tangem.blockchain.common.BlockchainSdkConfig +import com.tangem.blockchain.common.WalletManagerFactory import com.tangem.common.CompletionResult import com.tangem.common.card.Card import com.tangem.common.card.FirmwareVersion @@ -121,4 +123,11 @@ class ScanNoteTask(val card: Card? = null) : CardSessionRunnable { // if (card.isMultiCurrencyWallet()) return UpdateAppToUseThisCard() return null } + + private fun getWalletManagerFactory(): WalletManagerFactory { + val blockchainSdkConfig = store.state.globalState.configManager?.config + ?.blockchainSdkConfig ?: BlockchainSdkConfig() + return WalletManagerFactory(blockchainSdkConfig) + } + } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/domain/twins/CreateSecondTwinWalletTask.kt b/app/src/main/java/com/tangem/tap/domain/twins/CreateSecondTwinWalletTask.kt index 826e57090b..966fe4f1d1 100644 --- a/app/src/main/java/com/tangem/tap/domain/twins/CreateSecondTwinWalletTask.kt +++ b/app/src/main/java/com/tangem/tap/domain/twins/CreateSecondTwinWalletTask.kt @@ -6,6 +6,7 @@ import com.tangem.common.KeyPair import com.tangem.common.card.EllipticCurve import com.tangem.common.core.CardSession import com.tangem.common.core.CardSessionRunnable +import com.tangem.common.core.TangemSdkError import com.tangem.common.extensions.hexToBytes import com.tangem.operations.wallet.CreateWalletCommand import com.tangem.operations.wallet.CreateWalletResponse @@ -13,14 +14,21 @@ import com.tangem.operations.wallet.PurgeWalletCommand import com.tangem.tap.domain.extensions.getSingleWallet class CreateSecondTwinWalletTask( - private val firstPublicKey: String, - private val issuerKeys: KeyPair, - private val preparingMessage: Message, - private val creatingWalletMessage: Message + private val firstPublicKey: String, + private val firstCardId: String, + private val issuerKeys: KeyPair, + private val preparingMessage: Message, + private val creatingWalletMessage: Message ) : CardSessionRunnable { override fun run(session: CardSession, callback: (result: CompletionResult) -> Unit) { - val publicKey = session.environment.card?.getSingleWallet()?.publicKey + val card = session.environment.card + val publicKey = card?.getSingleWallet()?.publicKey if (publicKey != null) { + if (!card.cardId.startsWith(TwinsHelper.getPairCardSeries(firstCardId) ?: "")) { + callback(CompletionResult.Failure(TangemSdkError.WrongCardType())) + return + } + session.setInitialMessage(preparingMessage) PurgeWalletCommand(publicKey).run(session) { response -> when (response) { diff --git a/app/src/main/java/com/tangem/tap/domain/twins/TwinCardsManager.kt b/app/src/main/java/com/tangem/tap/domain/twins/TwinCardsManager.kt index 39c203e744..0024a37cd8 100644 --- a/app/src/main/java/com/tangem/tap/domain/twins/TwinCardsManager.kt +++ b/app/src/main/java/com/tangem/tap/domain/twins/TwinCardsManager.kt @@ -19,9 +19,6 @@ class TwinCardsManager(private val scanResponse: ScanResponse, assetReader: Asse private val currentCardId: String = scanResponse.card.cardId - // private val secondCardId: Strings? = TwinsHelper.getTwinsCardId(currentCardId) - private val secondCardId: String? = null - private var currentCardPublicKey: String? = null private var secondCardPublicKey: String? = null @@ -56,14 +53,14 @@ class TwinCardsManager(private val scanResponse: ScanResponse, assetReader: Asse preparingMessage: Message, creatingWalletMessage: Message, ): SimpleResult { - val response = tangemSdkManager.runTaskAsync( - CreateSecondTwinWalletTask( - firstPublicKey = currentCardPublicKey!!, - issuerKeys = issuerKeyPair, - preparingMessage = preparingMessage, - creatingWalletMessage = creatingWalletMessage), - secondCardId, initialMessage + val task = CreateSecondTwinWalletTask( + firstPublicKey = currentCardPublicKey!!, + firstCardId = currentCardId, + issuerKeys = issuerKeyPair, + preparingMessage = preparingMessage, + creatingWalletMessage = creatingWalletMessage ) + val response = tangemSdkManager.runTaskAsync(task, null, initialMessage) when (response) { is CompletionResult.Success -> { secondCardPublicKey = response.data.wallet.publicKey.toHexString() diff --git a/app/src/main/java/com/tangem/tap/domain/twins/TwinsHelper.kt b/app/src/main/java/com/tangem/tap/domain/twins/TwinsHelper.kt index d74d5ccf0d..8196f39b22 100644 --- a/app/src/main/java/com/tangem/tap/domain/twins/TwinsHelper.kt +++ b/app/src/main/java/com/tangem/tap/domain/twins/TwinsHelper.kt @@ -29,6 +29,19 @@ class TwinsHelper { } } + fun getPairCardSeries(cardId: String): String? { + return when (getTwinCardNumber(cardId) ?: return null) { + TwinCardNumber.First -> { + val index = firstCardSeries.indexOf(cardId.take(4)) + secondCardSeries[index] + } + TwinCardNumber.Second -> { + val index = secondCardSeries.indexOf(cardId.take(4)) + firstCardSeries[index] + } + } + } + fun getTwinCardIdForUser(cardId: String): String { if (cardId.length < 16) return cardId diff --git a/app/src/main/java/com/tangem/tap/domain/walletconnect/WalletConnectSdkHelper.kt b/app/src/main/java/com/tangem/tap/domain/walletconnect/WalletConnectSdkHelper.kt index 5ebfb1cb14..e2ac447999 100644 --- a/app/src/main/java/com/tangem/tap/domain/walletconnect/WalletConnectSdkHelper.kt +++ b/app/src/main/java/com/tangem/tap/domain/walletconnect/WalletConnectSdkHelper.kt @@ -61,7 +61,7 @@ class WalletConnectSdkHelper { val decimals = blockchain.decimals() - val value = transaction.value?.hexToBigDecimal() + val value = (transaction.value ?: "0").hexToBigDecimal() ?.movePointLeft(decimals) ?: return null val gasPrice = transaction.gasPrice?.hexToBigDecimal() diff --git a/app/src/main/java/com/tangem/tap/features/details/redux/DetailsReducer.kt b/app/src/main/java/com/tangem/tap/features/details/redux/DetailsReducer.kt index 52c9652e68..14884b13f6 100644 --- a/app/src/main/java/com/tangem/tap/features/details/redux/DetailsReducer.kt +++ b/app/src/main/java/com/tangem/tap/features/details/redux/DetailsReducer.kt @@ -149,11 +149,15 @@ private fun handleSecurityAction( state.copy(confirmScreenState = confirmScreenState) } is DetailsAction.ManageSecurity.SaveChanges.Success -> { - // Setting options to show only LongTap from now on + // Setting options to show only LongTap from now on for non-twins state.copy( securityScreenState = state.securityScreenState?.copy( currentOption = state.securityScreenState.selectedOption, - allowedOptions = EnumSet.of(SecurityOption.LongTap) + allowedOptions = state.card?.let { + prepareAllowedSecurityOptions( + it, state.securityScreenState.selectedOption + ) + } ?: EnumSet.of(SecurityOption.LongTap) )) } @@ -167,6 +171,10 @@ private fun prepareAllowedSecurityOptions( val prohibitDefaultPin = card?.settings?.isResettingUserCodesAllowed != true val allowedSecurityOptions = EnumSet.noneOf(SecurityOption::class.java) + + if (card?.isTangemTwin() == true) { + allowedSecurityOptions.add(SecurityOption.PassCode) + } if ((currentSecurityOption == SecurityOption.LongTap) || !prohibitDefaultPin) { allowedSecurityOptions.add(SecurityOption.LongTap) } diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/products/twins/OnboardingTwinsFragment.kt b/app/src/main/java/com/tangem/tap/features/onboarding/products/twins/OnboardingTwinsFragment.kt index 5262141edd..791c31589c 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/products/twins/OnboardingTwinsFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/products/twins/OnboardingTwinsFragment.kt @@ -37,11 +37,10 @@ class OnboardingTwinsFragment : Fragment(R.layout.fragment_twin_cards_welcome) { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - store.dispatch(TwinCardsAction.SetOnboardingShown) - - val secondCardId = store.state.twinCardsState.secondCardId ?: "" - val secondTwinCardId = TwinsHelper.getTwinCardIdForUser(secondCardId) - val text = getString(R.string.twins_onboarding_description_format, secondTwinCardId) + store.dispatch(TwinCardsAction.SetOnboardingShown)) + val secondTwinNumber = + store.state.twinCardsState?.cardNumber?.pairNumber()?.number ?: "" + val text = getString(R.string.twins_onboarding_description_format, secondTwinNumber) tv_twin_cards_description_1.text = text setOnClickListeners() diff --git a/app/src/main/java/com/tangem/tap/features/wallet/ui/WalletFragment.kt b/app/src/main/java/com/tangem/tap/features/wallet/ui/WalletFragment.kt index fd65f1b619..b12080f1bd 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/ui/WalletFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/ui/WalletFragment.kt @@ -94,7 +94,10 @@ class WalletFragment : Fragment(R.layout.fragment_wallet), StoreSubscriber