diff --git a/blockchain-demo/src/main/java/com/tangem/blockchain_demo/BlockchainDemoActivity.kt b/blockchain-demo/src/main/java/com/tangem/blockchain_demo/BlockchainDemoActivity.kt index 0028ee31c5..76d9ce0ffa 100644 --- a/blockchain-demo/src/main/java/com/tangem/blockchain_demo/BlockchainDemoActivity.kt +++ b/blockchain-demo/src/main/java/com/tangem/blockchain_demo/BlockchainDemoActivity.kt @@ -4,24 +4,23 @@ import android.os.Bundle import android.text.Editable import android.widget.Toast import androidx.appcompat.app.AppCompatActivity -import com.tangem.CardManager +import com.tangem.SessionError +import com.tangem.TangemSdk import com.tangem.blockchain.common.* import com.tangem.blockchain.common.extensions.Result import com.tangem.blockchain.common.extensions.Signer import com.tangem.blockchain.common.extensions.SimpleResult import com.tangem.blockchain_demo.databinding.ActivityBlockchainDemoBinding import com.tangem.commands.Card +import com.tangem.common.CompletionResult import com.tangem.tangem_sdk_new.extensions.init -import com.tangem.tasks.ScanEvent -import com.tangem.tasks.TaskError -import com.tangem.tasks.TaskEvent import kotlinx.coroutines.* import java.math.BigDecimal import kotlin.coroutines.CoroutineContext class BlockchainDemoActivity : AppCompatActivity() { - private lateinit var cardManager: CardManager + private lateinit var tangemSdk: TangemSdk private lateinit var signer: TransactionSigner private lateinit var card: Card private lateinit var walletManager: WalletManager @@ -47,8 +46,8 @@ class BlockchainDemoActivity : AppCompatActivity() { val view = binding.root setContentView(view) - cardManager = CardManager.init(this) - signer = Signer(cardManager) + tangemSdk = TangemSdk.init(this) + signer = Signer(tangemSdk) binding.btnScan.setOnClickListener { scan() } @@ -59,27 +58,20 @@ class BlockchainDemoActivity : AppCompatActivity() { private fun scan() { - cardManager.scanCard { taskEvent -> - when (taskEvent) { - is TaskEvent.Event -> { - when (taskEvent.data) { - is ScanEvent.OnReadEvent -> { - card = (taskEvent.data as ScanEvent.OnReadEvent).card - walletManager = WalletManagerFactory.makeWalletManager(card)!! + tangemSdk.scanCard { result -> + when (result) { + is CompletionResult.Success -> { + walletManager = WalletManagerFactory.makeWalletManager(result.data)!! getInfo() } - } - } - is TaskEvent.Completion -> { - if (taskEvent.error != null) { - if (taskEvent.error !is TaskError.UserCancelled) { - handleError(taskEvent.error.toString()) + is CompletionResult.Failure -> { + if (result.error !is SessionError.UserCancelled) { + handleError(result.error.toString()) } } } } } - } private fun getInfo() { scope.launch { diff --git a/blockchain/src/main/java/com/tangem/blockchain/bitcoin/BitcoinWalletManager.kt b/blockchain/src/main/java/com/tangem/blockchain/bitcoin/BitcoinWalletManager.kt index 58ae155e27..72a18f08fc 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/bitcoin/BitcoinWalletManager.kt +++ b/blockchain/src/main/java/com/tangem/blockchain/bitcoin/BitcoinWalletManager.kt @@ -8,8 +8,8 @@ import com.tangem.blockchain.common.* import com.tangem.blockchain.common.extensions.Result import com.tangem.blockchain.common.extensions.SimpleResult import com.tangem.blockchain.wallets.CurrencyWallet +import com.tangem.common.CompletionResult import com.tangem.common.extensions.toHexString -import com.tangem.tasks.TaskEvent import java.math.BigDecimal class BitcoinWalletManager( @@ -66,11 +66,11 @@ class BitcoinWalletManager( is Result.Failure -> return SimpleResult.Failure(buildTransactionResult.error) is Result.Success -> { when (val signerResponse = signer.sign(buildTransactionResult.data.toTypedArray(), cardId)) { - is TaskEvent.Event -> { + is CompletionResult.Success -> { val transactionToSend = transactionBuilder.buildToSend(signerResponse.data.signature, walletPublicKey) return networkManager.sendTransaction(transactionToSend.toHexString()) } - is TaskEvent.Completion -> return SimpleResult.Failure(signerResponse.error) + is CompletionResult.Failure -> return SimpleResult.Failure(signerResponse.error) } } } diff --git a/blockchain/src/main/java/com/tangem/blockchain/cardano/CardanoWalletManager.kt b/blockchain/src/main/java/com/tangem/blockchain/cardano/CardanoWalletManager.kt index edf2acefbb..86b5f25a51 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/cardano/CardanoWalletManager.kt +++ b/blockchain/src/main/java/com/tangem/blockchain/cardano/CardanoWalletManager.kt @@ -8,7 +8,7 @@ import com.tangem.blockchain.common.extensions.Result import com.tangem.blockchain.common.extensions.SimpleResult import com.tangem.blockchain.common.extensions.encodeBase64NoWrap import com.tangem.blockchain.wallets.CurrencyWallet -import com.tangem.tasks.TaskEvent +import com.tangem.common.CompletionResult class CardanoWalletManager( private val cardId: String, @@ -47,11 +47,11 @@ class CardanoWalletManager( val transactionHash = transactionBuilder.buildToSign(transactionData) when (val signerResponse = signer.sign(arrayOf(transactionHash), cardId)) { - is TaskEvent.Event -> { + is CompletionResult.Success -> { val transactionToSend = transactionBuilder.buildToSend(signerResponse.data.signature, walletPublicKey) return networkManager.sendTransaction(transactionToSend.encodeBase64NoWrap()) } - is TaskEvent.Completion -> return SimpleResult.Failure(signerResponse.error) + is CompletionResult.Failure -> return SimpleResult.Failure(signerResponse.error) } } diff --git a/blockchain/src/main/java/com/tangem/blockchain/common/WalletManager.kt b/blockchain/src/main/java/com/tangem/blockchain/common/WalletManager.kt index c39d9b6c0e..6fe5a862ea 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/common/WalletManager.kt +++ b/blockchain/src/main/java/com/tangem/blockchain/common/WalletManager.kt @@ -4,7 +4,7 @@ import com.tangem.blockchain.common.extensions.Result import com.tangem.blockchain.common.extensions.SimpleResult import com.tangem.blockchain.wallets.CurrencyWallet import com.tangem.commands.SignResponse -import com.tangem.tasks.TaskEvent +import com.tangem.common.CompletionResult interface WalletManager { var wallet: CurrencyWallet @@ -18,7 +18,7 @@ interface TransactionSender { } interface TransactionSigner { - suspend fun sign(hashes: Array, cardId: String): TaskEvent + suspend fun sign(hashes: Array, cardId: String): CompletionResult } interface FeeProvider { diff --git a/blockchain/src/main/java/com/tangem/blockchain/common/extensions/Coroutines.kt b/blockchain/src/main/java/com/tangem/blockchain/common/extensions/Coroutines.kt index cdf9edd92e..8451a23b67 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/common/extensions/Coroutines.kt +++ b/blockchain/src/main/java/com/tangem/blockchain/common/extensions/Coroutines.kt @@ -1,9 +1,9 @@ package com.tangem.blockchain.common.extensions -import com.tangem.CardManager +import com.tangem.TangemSdk import com.tangem.blockchain.common.TransactionSigner import com.tangem.commands.SignResponse -import com.tangem.tasks.TaskEvent +import com.tangem.common.CompletionResult import kotlinx.coroutines.delay import kotlinx.coroutines.suspendCancellableCoroutine import java.io.IOException @@ -54,10 +54,10 @@ sealed class SimpleResult { data class Failure(val error: Throwable?) : SimpleResult() } -class Signer(private val cardManager: CardManager) : TransactionSigner { - override suspend fun sign(hashes: Array, cardId: String): TaskEvent = +class Signer(private val tangemSdk: TangemSdk) : TransactionSigner { + override suspend fun sign(hashes: Array, cardId: String): CompletionResult = suspendCancellableCoroutine { continuation -> - cardManager.sign(hashes, cardId) { result -> + tangemSdk.sign(hashes, cardId) { result -> if (continuation.isActive) continuation.resume(result) } } diff --git a/blockchain/src/main/java/com/tangem/blockchain/ethereum/EthereumWalletManager.kt b/blockchain/src/main/java/com/tangem/blockchain/ethereum/EthereumWalletManager.kt index d7c26e526e..3999bdf7a3 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/ethereum/EthereumWalletManager.kt +++ b/blockchain/src/main/java/com/tangem/blockchain/ethereum/EthereumWalletManager.kt @@ -8,8 +8,8 @@ import com.tangem.blockchain.common.extensions.SimpleResult import com.tangem.blockchain.ethereum.network.EthereumNetworkManager import com.tangem.blockchain.ethereum.network.EthereumResponse import com.tangem.blockchain.wallets.CurrencyWallet +import com.tangem.common.CompletionResult import com.tangem.common.extensions.toHexString -import com.tangem.tasks.TaskEvent import org.kethereum.DEFAULT_GAS_LIMIT import org.kethereum.crypto.api.ec.ECDSASignature import org.kethereum.crypto.determineRecId @@ -81,11 +81,11 @@ class EthereumWalletManager( val transactionToSign = builder.buildToSign(transactionData, txCount.toBigInteger()) ?: return SimpleResult.Failure(Exception("Not enough data")) when (val signerResponse = signer.sign(transactionToSign.hashes.toTypedArray(), cardId)) { - is TaskEvent.Event -> { + is CompletionResult.Success -> { val transactionToSend = builder.buildToSend(signerResponse.data.signature, transactionToSign, walletPublicKey) return networkManager.sendTransaction(String.format("0x%s", transactionToSend.toHexString())) } - is TaskEvent.Completion -> return SimpleResult.Failure(signerResponse.error) + is CompletionResult.Failure -> return SimpleResult.Failure(signerResponse.error) } } diff --git a/blockchain/src/main/java/com/tangem/blockchain/stellar/StellarWalletManager.kt b/blockchain/src/main/java/com/tangem/blockchain/stellar/StellarWalletManager.kt index e65278fa35..754cf7fa60 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/stellar/StellarWalletManager.kt +++ b/blockchain/src/main/java/com/tangem/blockchain/stellar/StellarWalletManager.kt @@ -5,7 +5,7 @@ import com.tangem.blockchain.common.* import com.tangem.blockchain.common.extensions.Result import com.tangem.blockchain.common.extensions.SimpleResult import com.tangem.blockchain.wallets.CurrencyWallet -import com.tangem.tasks.TaskEvent +import com.tangem.common.CompletionResult import java.math.BigDecimal import java.util.* @@ -58,11 +58,11 @@ class StellarWalletManager( override suspend fun send(transactionData: TransactionData, signer: TransactionSigner): SimpleResult { val hashes = builder.buildToSign(transactionData, sequence, baseFee.toStroops()) when (val signerResponse = signer.sign(hashes.toTypedArray(), cardId)) { - is TaskEvent.Event -> { + is CompletionResult.Success -> { val transactionToSend = builder.buildToSend(signerResponse.data.signature) return networkManager.sendTransaction(transactionToSend) } - is TaskEvent.Completion -> return SimpleResult.Failure(signerResponse.error) + is CompletionResult.Failure -> return SimpleResult.Failure(signerResponse.error) } } diff --git a/blockchain/src/main/java/com/tangem/blockchain/xrp/XrpWalletManager.kt b/blockchain/src/main/java/com/tangem/blockchain/xrp/XrpWalletManager.kt index bba2e26427..cf6c8206a8 100644 --- a/blockchain/src/main/java/com/tangem/blockchain/xrp/XrpWalletManager.kt +++ b/blockchain/src/main/java/com/tangem/blockchain/xrp/XrpWalletManager.kt @@ -7,7 +7,7 @@ import com.tangem.blockchain.common.extensions.SimpleResult import com.tangem.blockchain.wallets.CurrencyWallet import com.tangem.blockchain.xrp.network.XrpInfoResponse import com.tangem.blockchain.xrp.network.XrpNetworkManager -import com.tangem.tasks.TaskEvent +import com.tangem.common.CompletionResult class XrpWalletManager( private val cardId: String, @@ -68,11 +68,11 @@ class XrpWalletManager( val transactionHash = transactionBuilder.buildToSign(transactionData) when (val signerResponse = signer.sign(arrayOf(transactionHash), cardId)) { - is TaskEvent.Event -> { + is CompletionResult.Success -> { val transactionToSend = transactionBuilder.buildToSend(signerResponse.data.signature) return networkManager.sendTransaction(transactionToSend) } - is TaskEvent.Completion -> return SimpleResult.Failure(signerResponse.error) + is CompletionResult.Failure -> return SimpleResult.Failure(signerResponse.error) } } diff --git a/blockchain/src/test/java/com/tangem/blockchain/common/WalletManagerFactoryTest.kt b/blockchain/src/test/java/com/tangem/blockchain/common/WalletManagerFactoryTest.kt index a476130557..58034631e7 100644 --- a/blockchain/src/test/java/com/tangem/blockchain/common/WalletManagerFactoryTest.kt +++ b/blockchain/src/test/java/com/tangem/blockchain/common/WalletManagerFactoryTest.kt @@ -1,7 +1,7 @@ package com.tangem.blockchain.common import com.google.common.truth.Truth -import com.tangem.common.CardEnvironment +import com.tangem.CardEnvironment import com.tangem.blockchain.bitcoin.BitcoinWalletManager import com.tangem.blockchain.cardano.CardanoWalletManager import com.tangem.blockchain.ethereum.EthereumWalletManager