From 4590cb4d7fe4511294aec38752503f7d41df7682 Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 19 Oct 2023 12:42:05 +0300 Subject: [PATCH] Updated on 2026-08-14 --- .../CardContextInterceptor.kt | 1 + .../com/tangem/tap/domain/TangemSdkManager.kt | 15 +++-- .../domain/tasks/product/ScanProductTask.kt | 3 + .../features/onboarding/OnboardingHelper.kt | 1 + .../redux/OnboardingWalletMiddleware.kt | 15 ++++- .../wallet/redux/OnboardingWalletReducer.kt | 2 + .../wallet/redux/OnboardingWalletState.kt | 1 + .../wallet/ui/OnboardingWalletFragment.kt | 12 +++- .../main/res/drawable/img_hand_scan_ring.xml | 54 ++++++++++++++++++ .../res/drawable/img_ring_placeholder.png | Bin 0 -> 59381 bytes .../card/DefaultCardSdkConfigRepository.kt | 1 + .../tangem/domain/common/CardTypesResolver.kt | 3 + .../domain/common/TangemCardTypesResolver.kt | 5 ++ .../domain/userwallets/UserWalletBuilder.kt | 1 + .../domain/userwallets/UserWalletIdBuilder.kt | 1 + .../com/tangem/domain/models/scan/CardDTO.kt | 4 ++ .../tangem/domain/models/scan/ScanResponse.kt | 2 +- gradle/dependencies.toml | 2 +- 18 files changed, 111 insertions(+), 12 deletions(-) create mode 100644 app/src/main/res/drawable/img_hand_scan_ring.xml create mode 100644 app/src/main/res/drawable/img_ring_placeholder.png diff --git a/app/src/main/java/com/tangem/tap/common/analytics/paramsInterceptor/CardContextInterceptor.kt b/app/src/main/java/com/tangem/tap/common/analytics/paramsInterceptor/CardContextInterceptor.kt index 6db15ac882..cf97ded034 100644 --- a/app/src/main/java/com/tangem/tap/common/analytics/paramsInterceptor/CardContextInterceptor.kt +++ b/app/src/main/java/com/tangem/tap/common/analytics/paramsInterceptor/CardContextInterceptor.kt @@ -46,6 +46,7 @@ class CardContextInterceptor( ProductType.Twins -> "Twin" ProductType.Wallet -> "Wallet" ProductType.Wallet2 -> "Wallet 2.0" + ProductType.Ring -> "Ring" ProductType.Start2Coin -> "Start2Coin" else -> if (DemoHelper.isDemoCard(scanResponse)) { if (DemoHelper.isTestDemoCard(scanResponse)) { diff --git a/app/src/main/java/com/tangem/tap/domain/TangemSdkManager.kt b/app/src/main/java/com/tangem/tap/domain/TangemSdkManager.kt index 6796da1e72..a16c860685 100644 --- a/app/src/main/java/com/tangem/tap/domain/TangemSdkManager.kt +++ b/app/src/main/java/com/tangem/tap/domain/TangemSdkManager.kt @@ -1,6 +1,7 @@ package com.tangem.tap.domain import android.content.res.Resources +import androidx.annotation.DrawableRes import androidx.annotation.StringRes import com.tangem.Message import com.tangem.TangemSdk @@ -81,12 +82,13 @@ class TangemSdkManager(private val cardSdkConfigRepository: CardSdkConfigReposit suspend fun createProductWallet(scanResponse: ScanResponse): CompletionResult { return runTaskAsync( - CreateProductWalletTask( + runnable = CreateProductWalletTask( cardTypesResolver = scanResponse.cardTypesResolver, derivationStyleProvider = scanResponse.derivationStyleProvider, ), - scanResponse.card.cardId, - Message(resources.getString(R.string.initial_message_create_wallet_body)), + cardId = scanResponse.card.cardId, + initialMessage = Message(resources.getString(R.string.initial_message_create_wallet_body)), + iconScanRes = if (scanResponse.cardTypesResolver.isRing()) R.drawable.img_hand_scan_ring else null, ) } @@ -94,7 +96,7 @@ class TangemSdkManager(private val cardSdkConfigRepository: CardSdkConfigReposit scanResponse: ScanResponse, mnemonic: String, ): CompletionResult { - val mnemonic = try { + val defaultMnemonic = try { DefaultMnemonic(mnemonic, tangemSdk.wordlist) } catch (e: TangemSdkError.MnemonicException) { return CompletionResult.Failure(e) @@ -103,7 +105,7 @@ class TangemSdkManager(private val cardSdkConfigRepository: CardSdkConfigReposit CreateProductWalletTask( scanResponse.cardTypesResolver, derivationStyleProvider = scanResponse.derivationStyleProvider, - mnemonic, + defaultMnemonic, ), scanResponse.card.cardId, Message(resources.getString(R.string.initial_message_create_wallet_body)), @@ -213,9 +215,10 @@ class TangemSdkManager(private val cardSdkConfigRepository: CardSdkConfigReposit cardId: String? = null, initialMessage: Message? = null, accessCode: String? = null, + @DrawableRes iconScanRes: Int? = null, ): CompletionResult = withContext(Dispatchers.Main) { suspendCancellableCoroutine { continuation -> - tangemSdk.startSessionWithRunnable(runnable, cardId, initialMessage, accessCode) { result -> + tangemSdk.startSessionWithRunnable(runnable, cardId, initialMessage, accessCode, iconScanRes) { result -> if (continuation.isActive) continuation.resume(result) } } diff --git a/app/src/main/java/com/tangem/tap/domain/tasks/product/ScanProductTask.kt b/app/src/main/java/com/tangem/tap/domain/tasks/product/ScanProductTask.kt index b587dee326..ba72ddb543 100644 --- a/app/src/main/java/com/tangem/tap/domain/tasks/product/ScanProductTask.kt +++ b/app/src/main/java/com/tangem/tap/domain/tasks/product/ScanProductTask.kt @@ -281,6 +281,9 @@ private class ScanWalletProcessor( } private fun getWalletProductType(card: CardDTO): ProductType { + if (card.batchId == CardDTO.RING_BATCH_ID) { + return ProductType.Ring + } return if (card.firmwareVersion >= FirmwareVersion.Ed25519Slip0010Available) { ProductType.Wallet2 } else { diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/OnboardingHelper.kt b/app/src/main/java/com/tangem/tap/features/onboarding/OnboardingHelper.kt index 68a4bb6df8..b27217cca3 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/OnboardingHelper.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/OnboardingHelper.kt @@ -54,6 +54,7 @@ object OnboardingHelper { ProductType.Note -> AppScreen.OnboardingNote ProductType.Wallet, ProductType.Wallet2, + ProductType.Ring, -> if (scanResponse.card.settings.isBackupAllowed) { AppScreen.OnboardingWallet } else { 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 b255ab3536..ad3f9d9ff2 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 @@ -33,6 +33,7 @@ import com.tangem.tap.features.onboarding.OnboardingDialog import com.tangem.tap.features.onboarding.OnboardingHelper import com.tangem.tap.features.wallet.models.toCurrencies import com.tangem.tap.proxy.redux.DaggerGraphState +import com.tangem.wallet.R import kotlinx.coroutines.launch import org.rekotlin.Action import org.rekotlin.Middleware @@ -325,7 +326,12 @@ private fun handleBackupAction(appState: () -> AppState?, action: BackupAction) } } is BackupAction.ScanPrimaryCard -> { - backupService.readPrimaryCard(cardId = card?.cardId) { result -> + val iconScanRes = if (scanResponse?.cardTypesResolver?.isRing() == true) { + R.drawable.img_hand_scan_ring + } else { + null + } + backupService.readPrimaryCard(iconScanRes = iconScanRes, cardId = card?.cardId) { result -> when (result) { is CompletionResult.Success -> { store.dispatchOnMain(BackupAction.StartAddingBackupCards) @@ -392,7 +398,12 @@ private fun handleBackupAction(appState: () -> AppState?, action: BackupAction) } } is BackupAction.WritePrimaryCard -> { - backupService.proceedBackup { result -> + val iconScanRes = if (scanResponse?.cardTypesResolver?.isRing() == true) { + R.drawable.img_hand_scan_ring + } else { + null + } + backupService.proceedBackup(iconScanRes = iconScanRes) { result -> when (result) { is CompletionResult.Success -> { store.dispatchOnMain(BackupAction.PrepareToWriteBackupCard(1)) diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/redux/OnboardingWalletReducer.kt b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/redux/OnboardingWalletReducer.kt index 077e4b82aa..1e6dc646b8 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/redux/OnboardingWalletReducer.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/redux/OnboardingWalletReducer.kt @@ -1,5 +1,6 @@ package com.tangem.tap.features.onboarding.products.wallet.redux +import com.tangem.domain.common.util.cardTypesResolver import com.tangem.tap.backupService import com.tangem.tap.common.redux.AppState import com.tangem.tap.common.redux.global.GlobalAction @@ -40,6 +41,7 @@ private object ReducerForGlobalAction { maxBackupCards = MAX_BACKUP_CARDS, canSkipBackup = action.canSkipBackup, ), + isRingOnboarding = action.scanResponse.cardTypesResolver.isRing(), ) } is GlobalAction.Onboarding.StartForUnfinishedBackup -> { diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/redux/OnboardingWalletState.kt b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/redux/OnboardingWalletState.kt index cc59a4fb61..e55ecdc885 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/redux/OnboardingWalletState.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/redux/OnboardingWalletState.kt @@ -14,6 +14,7 @@ data class OnboardingWalletState( val backupState: BackupState = BackupState(), val cardArtworkUri: Uri? = null, val showConfetti: Boolean = false, + val isRingOnboarding: Boolean = false, ) : StateType { @Suppress("MagicNumber") 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 ff40ab5ad6..75d9b4dc87 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 @@ -179,13 +179,21 @@ class OnboardingWalletFragment : seedPhraseStateHandler.newState(this, state, seedPhraseViewModel) state.cardArtworkUri?.let { seedPhraseViewModel.setCardArtworkUri(it.toString()) - loadImageIntoImageView(it, binding.imvFrontCard) + if (state.isRingOnboarding) { + binding.imvFrontCard.load(R.drawable.img_ring_placeholder) + } else { + loadImageIntoImageView(state.cardArtworkUri, binding.imvFrontCard) + } loadImageIntoImageView(it, binding.imvFirstBackupCard) loadImageIntoImageView(it, binding.imvSecondBackupCard) } } else -> { - loadImageIntoImageView(state.cardArtworkUri, binding.imvFrontCard) + if (state.isRingOnboarding) { + binding.imvFrontCard.load(R.drawable.img_ring_placeholder) + } else { + loadImageIntoImageView(state.cardArtworkUri, binding.imvFrontCard) + } loadImageIntoImageView(state.cardArtworkUri, binding.imvFirstBackupCard) loadImageIntoImageView(state.cardArtworkUri, binding.imvSecondBackupCard) handleOnboardingStep(state) diff --git a/app/src/main/res/drawable/img_hand_scan_ring.xml b/app/src/main/res/drawable/img_hand_scan_ring.xml new file mode 100644 index 0000000000..d9fd7d42f1 --- /dev/null +++ b/app/src/main/res/drawable/img_hand_scan_ring.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/img_ring_placeholder.png b/app/src/main/res/drawable/img_ring_placeholder.png new file mode 100644 index 0000000000000000000000000000000000000000..b39d9f9f7605a6c84c001a2c4fd9fb2339c432f2 GIT binary patch literal 59381 zcmeEt_cz=B`@U|arFL7Zw5VORDQZ>ecjh1?zyqvb%xsvbaZsr^`GjzprgA` zNk@171^s2(9gaw?7TU*E@256?baVnr|6b>Gf5^O|-8|>_LQjjXY>;P-_T{3hrjaHc zU1c)ksnaDoI()poj;49wxy`en8i0N{I!-ss55F@&p6$yM6R*BpeD5Bdr4S&@9k8fy z9Sg8q9>-Q#KYTvPZdUob6|Q$+&R;Yl%YM||E~Wb z@IM6phrs_3_#XoQL*Rc1{11Wue+UpcO3%^J1tt&6C7z8HsS8n|*TYv_kqUd8)r<3= zt}w3vL08�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 literal 0 HcmV?d00001 diff --git a/data/card/src/main/java/com/tangem/data/card/DefaultCardSdkConfigRepository.kt b/data/card/src/main/java/com/tangem/data/card/DefaultCardSdkConfigRepository.kt index 4e3b7acdef..a093b24ba0 100644 --- a/data/card/src/main/java/com/tangem/data/card/DefaultCardSdkConfigRepository.kt +++ b/data/card/src/main/java/com/tangem/data/card/DefaultCardSdkConfigRepository.kt @@ -51,6 +51,7 @@ internal class DefaultCardSdkConfigRepository( ProductType.Wallet, ProductType.Wallet2, ProductType.Start2Coin, + ProductType.Ring, -> CardIdDisplayFormat.Full } } diff --git a/domain/legacy/src/main/java/com/tangem/domain/common/CardTypesResolver.kt b/domain/legacy/src/main/java/com/tangem/domain/common/CardTypesResolver.kt index 10d2f401bd..660a5c13dd 100644 --- a/domain/legacy/src/main/java/com/tangem/domain/common/CardTypesResolver.kt +++ b/domain/legacy/src/main/java/com/tangem/domain/common/CardTypesResolver.kt @@ -3,6 +3,7 @@ package com.tangem.domain.common import com.tangem.blockchain.common.Blockchain import com.tangem.blockchain.common.Token +@Suppress("TooManyFunctions") interface CardTypesResolver { fun isTangemNote(): Boolean @@ -13,6 +14,8 @@ interface CardTypesResolver { fun isWallet2(): Boolean + fun isRing(): Boolean + fun isTangemTwins(): Boolean fun isStart2Coin(): Boolean diff --git a/domain/legacy/src/main/java/com/tangem/domain/common/TangemCardTypesResolver.kt b/domain/legacy/src/main/java/com/tangem/domain/common/TangemCardTypesResolver.kt index c3053f87b6..b40ad29612 100644 --- a/domain/legacy/src/main/java/com/tangem/domain/common/TangemCardTypesResolver.kt +++ b/domain/legacy/src/main/java/com/tangem/domain/common/TangemCardTypesResolver.kt @@ -12,6 +12,7 @@ import com.tangem.domain.models.scan.CardDTO import com.tangem.domain.models.scan.ProductType import com.tangem.operations.attestation.Attestation +@Suppress("TooManyFunctions") internal class TangemCardTypesResolver( private val card: CardDTO, private val productType: ProductType, @@ -33,6 +34,10 @@ internal class TangemCardTypesResolver( return card.firmwareVersion >= FirmwareVersion.Ed25519Slip0010Available && card.settings.isKeysImportAllowed } + override fun isRing(): Boolean { + return productType == ProductType.Ring + } + override fun isTangemTwins(): Boolean = productType == ProductType.Twins override fun isStart2Coin(): Boolean = card.isStart2Coin diff --git a/domain/legacy/src/main/java/com/tangem/domain/userwallets/UserWalletBuilder.kt b/domain/legacy/src/main/java/com/tangem/domain/userwallets/UserWalletBuilder.kt index b843a98ee2..c3ee686578 100644 --- a/domain/legacy/src/main/java/com/tangem/domain/userwallets/UserWalletBuilder.kt +++ b/domain/legacy/src/main/java/com/tangem/domain/userwallets/UserWalletBuilder.kt @@ -22,6 +22,7 @@ class UserWalletBuilder( ProductType.Start2Coin -> "Start2Coin" ProductType.Wallet, ProductType.Wallet2, + ProductType.Ring, -> when { card.isBackupNotAllowed -> "Tangem card" cardTypesResolver.isStart2Coin() -> "Start2Coin" diff --git a/domain/legacy/src/main/java/com/tangem/domain/userwallets/UserWalletIdBuilder.kt b/domain/legacy/src/main/java/com/tangem/domain/userwallets/UserWalletIdBuilder.kt index 40ac39de3c..a9fab74fb9 100644 --- a/domain/legacy/src/main/java/com/tangem/domain/userwallets/UserWalletIdBuilder.kt +++ b/domain/legacy/src/main/java/com/tangem/domain/userwallets/UserWalletIdBuilder.kt @@ -61,6 +61,7 @@ class UserWalletIdBuilder private constructor( ProductType.Note, ProductType.Wallet, ProductType.Wallet2, + ProductType.Ring, ProductType.Start2Coin, -> null }, diff --git a/domain/models/src/main/kotlin/com/tangem/domain/models/scan/CardDTO.kt b/domain/models/src/main/kotlin/com/tangem/domain/models/scan/CardDTO.kt index 1777aa498a..70d822c8cc 100644 --- a/domain/models/src/main/kotlin/com/tangem/domain/models/scan/CardDTO.kt +++ b/domain/models/src/main/kotlin/com/tangem/domain/models/scan/CardDTO.kt @@ -318,4 +318,8 @@ data class CardDTO( } } } + + companion object { + const val RING_BATCH_ID = "AC17" + } } \ No newline at end of file diff --git a/domain/models/src/main/kotlin/com/tangem/domain/models/scan/ScanResponse.kt b/domain/models/src/main/kotlin/com/tangem/domain/models/scan/ScanResponse.kt index 74a552e520..ece295860b 100644 --- a/domain/models/src/main/kotlin/com/tangem/domain/models/scan/ScanResponse.kt +++ b/domain/models/src/main/kotlin/com/tangem/domain/models/scan/ScanResponse.kt @@ -21,5 +21,5 @@ data class ScanResponse( typealias KeyWalletPublicKey = ByteArrayKey enum class ProductType { - Note, Twins, Wallet, Start2Coin, Wallet2 + Note, Twins, Wallet, Start2Coin, Wallet2, Ring } \ No newline at end of file diff --git a/gradle/dependencies.toml b/gradle/dependencies.toml index 843863953e..c99a8f89b6 100644 --- a/gradle/dependencies.toml +++ b/gradle/dependencies.toml @@ -84,7 +84,7 @@ spr-client = "3.6.2" # region Tangem tangemBlockchainSdk = "release-app_4.11-360" #tangemBlockchainSdk = "0.0.1" # Keep it! - used for local builds -tangemCardSdk = "release-app_4.11-295" +tangemCardSdk = "release-app_4.11-305" #tangemCardSdk = "0.0.1" # Keep it! - used for local builds # endregion Tangem