diff --git a/app/src/main/java/com/tangem/tap/domain/twins/FinalizeTwinTask.kt b/app/src/main/java/com/tangem/tap/domain/twins/FinalizeTwinTask.kt new file mode 100644 index 0000000000..073c47b344 --- /dev/null +++ b/app/src/main/java/com/tangem/tap/domain/twins/FinalizeTwinTask.kt @@ -0,0 +1,31 @@ +package com.tangem.tap.domain.twins + +import com.tangem.CardSession +import com.tangem.CardSessionRunnable +import com.tangem.KeyPair +import com.tangem.commands.ReadCommand +import com.tangem.common.CompletionResult +import com.tangem.tap.domain.tasks.ScanNoteResponse +import com.tangem.tap.domain.tasks.ScanNoteTask + +class FinalizeTwinTask( + private val twinPublicKey: ByteArray, private val issuerKeys: KeyPair + ) : CardSessionRunnable { + override val requiresPin2 = true + + override fun run(session: CardSession, callback: (result: CompletionResult) -> Unit) { + WriteProtectedIssuerDataTask(twinPublicKey, issuerKeys).run(session) { result -> + when (result) { + is CompletionResult.Success -> { + ReadCommand().run(session) { readResult -> + when (readResult) { + is CompletionResult.Success -> ScanNoteTask(readResult.data).run(session, callback) + is CompletionResult.Failure -> callback(CompletionResult.Failure(readResult.error)) + } + } + } + is CompletionResult.Failure -> callback(CompletionResult.Failure(result.error)) + } + } + } +} \ No newline at end of file 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 f63f2b1ea3..b5e221eb08 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 @@ -2,7 +2,6 @@ package com.tangem.tap.domain.twins import com.tangem.KeyPair import com.tangem.Message -import com.tangem.blockchain.common.WalletManagerFactory import com.tangem.blockchain.extensions.Result import com.tangem.blockchain.extensions.SimpleResult import com.tangem.common.CompletionResult @@ -51,19 +50,11 @@ class TwinCardsManager(private val scanNoteResponse: ScanNoteResponse) { suspend fun complete(message: Message): Result { val response = tangemSdkManager.runTaskAsync( - WriteProtectedIssuerDataTask(secondCardPublicKey!!.hexToBytes(), issuerKeys), + FinalizeTwinTask(secondCardPublicKey!!.hexToBytes(), issuerKeys), currentCardId, message ) return when (response) { - is CompletionResult.Success -> { - val walletManager = WalletManagerFactory.makeMultisigWalletManager( - scanNoteResponse.card, secondCardPublicKey!!.hexToBytes() - ) - return Result.Success(scanNoteResponse.copy( - walletManager = walletManager, - secondTwinPublicKey = secondCardPublicKey - )) - } + is CompletionResult.Success -> Result.Success(response.data) is CompletionResult.Failure -> Result.failure(response.error) } } diff --git a/app/src/main/java/com/tangem/tap/features/details/redux/twins/CreateTwinWalletMiddleware.kt b/app/src/main/java/com/tangem/tap/features/details/redux/twins/CreateTwinWalletMiddleware.kt index 1f42e8203f..d4c2be1cf6 100644 --- a/app/src/main/java/com/tangem/tap/features/details/redux/twins/CreateTwinWalletMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/details/redux/twins/CreateTwinWalletMiddleware.kt @@ -2,7 +2,6 @@ package com.tangem.tap.features.details.redux.twins import com.tangem.blockchain.extensions.Result import com.tangem.blockchain.extensions.SimpleResult -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.domain.twins.TwinCardsManager @@ -93,8 +92,11 @@ class CreateTwinWalletMiddleware { } } is DetailsAction.CreateTwinWalletAction.LaunchThirdStep.Success -> { - store.dispatch(GlobalAction.SaveScanNoteResponse(action.scanNoteResponse)) + scope.launch { + store.state.globalState.tapWalletManager.onCardScanned(action.scanNoteResponse) + } store.dispatch(NavigationAction.PopBackTo(AppScreen.Home)) + store.dispatch(NavigationAction.NavigateTo(AppScreen.Wallet)) } DetailsAction.CreateTwinWalletAction.LaunchThirdStep.Failure -> {