From e74f7adde9ca01360199cafe138526ef44335d2e Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 26 Jul 2023 15:12:13 +0800 Subject: [PATCH] Updated on 2026-08-14 --- app/build.gradle.kts | 1 + .../tangem/tap/di/domain/CardDomainModule.kt | 25 ++++--- .../tap/di/domain/CardLegacyDomainModule.kt | 18 +++++ .../tangem/tap/features/demo/DemoHelper.kt | 73 +------------------ .../tap/features/demo/DemoMiddleware.kt | 12 +++ .../demo/DemoOnboardingNoteMiddleware.kt | 4 +- .../features/demo/DemoTransactionSender.kt | 51 +++++++++++++ domain/card/build.gradle.kts | 12 ++- domain/demo/.gitignore | 1 + domain/demo/build.gradle.kts | 13 ++++ .../com/tangem/domain}/demo/DemoConfig.kt | 6 +- .../tangem/domain/demo/IsDemoCardUseCase.kt | 6 ++ settings.gradle.kts | 3 +- 13 files changed, 133 insertions(+), 92 deletions(-) create mode 100644 app/src/main/java/com/tangem/tap/di/domain/CardLegacyDomainModule.kt create mode 100644 app/src/main/java/com/tangem/tap/features/demo/DemoMiddleware.kt create mode 100644 app/src/main/java/com/tangem/tap/features/demo/DemoTransactionSender.kt create mode 100644 domain/demo/.gitignore create mode 100644 domain/demo/build.gradle.kts rename domain/{legacy/src/main/java/com/tangem/domain/common => demo/src/main/java/com/tangem/domain}/demo/DemoConfig.kt (98%) create mode 100644 domain/demo/src/main/java/com/tangem/domain/demo/IsDemoCardUseCase.kt diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 0a8341a590..6e9c2b9786 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -26,6 +26,7 @@ dependencies { implementation(project(":domain:models")) implementation(project(":domain:core")) implementation(projects.domain.card) + implementation(projects.domain.demo) implementation(project(":domain:wallets")) implementation(project(":domain:wallets:models")) implementation(projects.domain.settings) diff --git a/app/src/main/java/com/tangem/tap/di/domain/CardDomainModule.kt b/app/src/main/java/com/tangem/tap/di/domain/CardDomainModule.kt index d2f09c474f..a7f064da55 100644 --- a/app/src/main/java/com/tangem/tap/di/domain/CardDomainModule.kt +++ b/app/src/main/java/com/tangem/tap/di/domain/CardDomainModule.kt @@ -3,23 +3,20 @@ package com.tangem.tap.di.domain import com.tangem.domain.card.* import com.tangem.domain.card.repository.CardRepository import com.tangem.domain.card.repository.CardSdkConfigRepository -import com.tangem.tap.domain.scanCard.DefaultScanCardProcessor +import com.tangem.domain.demo.DemoConfig +import com.tangem.domain.demo.IsDemoCardUseCase import dagger.Module import dagger.Provides import dagger.hilt.InstallIn -import dagger.hilt.components.SingletonComponent -import javax.inject.Singleton +import dagger.hilt.android.components.ViewModelComponent +import dagger.hilt.android.scopes.ViewModelScoped @Module -@InstallIn(SingletonComponent::class) +@InstallIn(ViewModelComponent::class) internal object CardDomainModule { @Provides - @Singleton - fun provideScanCardUseCase(): ScanCardProcessor = DefaultScanCardProcessor() - - @Provides - @Singleton + @ViewModelScoped fun provideGetBiometricsStatusUseCase( cardSdkConfigRepository: CardSdkConfigRepository, ): GetBiometricsStatusUseCase { @@ -27,7 +24,7 @@ internal object CardDomainModule { } @Provides - @Singleton + @ViewModelScoped fun provideSetAccessCodeRequestPolicyUseCase( cardSdkConfigRepository: CardSdkConfigRepository, ): SetAccessCodeRequestPolicyUseCase { @@ -35,7 +32,7 @@ internal object CardDomainModule { } @Provides - @Singleton + @ViewModelScoped fun provideGetAccessCodeSavingStatusUseCase( cardSdkConfigRepository: CardSdkConfigRepository, ): GetAccessCodeSavingStatusUseCase { @@ -43,8 +40,12 @@ internal object CardDomainModule { } @Provides - @Singleton + @ViewModelScoped fun provideGetCardWasScannedUseCase(cardRepository: CardRepository): GetCardWasScannedUseCase { return GetCardWasScannedUseCase(cardRepository = cardRepository) } + + @Provides + @ViewModelScoped + fun provideIsDemoCardUseCase(): IsDemoCardUseCase = IsDemoCardUseCase(config = DemoConfig()) } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/di/domain/CardLegacyDomainModule.kt b/app/src/main/java/com/tangem/tap/di/domain/CardLegacyDomainModule.kt new file mode 100644 index 0000000000..3cfbe41b23 --- /dev/null +++ b/app/src/main/java/com/tangem/tap/di/domain/CardLegacyDomainModule.kt @@ -0,0 +1,18 @@ +package com.tangem.tap.di.domain + +import com.tangem.domain.card.* +import com.tangem.tap.domain.scanCard.DefaultScanCardProcessor +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +internal object CardLegacyDomainModule { + + @Provides + @Singleton + fun provideScanCardUseCase(): ScanCardProcessor = DefaultScanCardProcessor() +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/demo/DemoHelper.kt b/app/src/main/java/com/tangem/tap/features/demo/DemoHelper.kt index ef011c6dc1..fcf584cf31 100644 --- a/app/src/main/java/com/tangem/tap/features/demo/DemoHelper.kt +++ b/app/src/main/java/com/tangem/tap/features/demo/DemoHelper.kt @@ -1,18 +1,7 @@ package com.tangem.tap.features.demo -import com.tangem.blockchain.common.Amount -import com.tangem.blockchain.common.TransactionData -import com.tangem.blockchain.common.TransactionSender -import com.tangem.blockchain.common.TransactionSigner -import com.tangem.blockchain.common.WalletManager -import com.tangem.blockchain.common.toBlockchainSdkError -import com.tangem.blockchain.common.transaction.Fee -import com.tangem.blockchain.common.transaction.TransactionFee -import com.tangem.blockchain.extensions.Result -import com.tangem.blockchain.extensions.SimpleResult -import com.tangem.common.CompletionResult +import com.tangem.domain.demo.DemoConfig import com.tangem.domain.models.scan.ScanResponse -import com.tangem.domain.common.demo.DemoConfig import com.tangem.tap.common.extensions.dispatchNotification import com.tangem.tap.common.redux.AppState import com.tangem.tap.features.details.redux.DetailsAction @@ -23,13 +12,6 @@ import com.tangem.tap.store import com.tangem.wallet.R import org.rekotlin.Action -/** -[REDACTED_AUTHOR] - */ -interface DemoMiddleware { - fun tryHandle(config: DemoConfig, scanResponse: ScanResponse, action: Action): Boolean -} - object DemoHelper { val config = DemoConfig() @@ -68,63 +50,10 @@ object DemoHelper { return false } - fun injectDemoBalance(walletManager: WalletManager?) { - val manager = walletManager ?: return - - val blockchain = walletManager.wallet.blockchain - val amount = config.getBalance(blockchain) - manager.wallet.setAmount(amount) - } - private fun getScanResponse(appState: () -> AppState?): ScanResponse? { val state = appState() ?: return null return state.globalState.onboardingState.onboardingManager?.scanResponse ?: state.globalState.scanResponse } -} - -class DemoTransactionSender(private val walletManager: WalletManager) : TransactionSender { - - override suspend fun getFee(amount: Amount, destination: String): Result { - val blockchain = walletManager.wallet.blockchain - return Result.Success( - TransactionFee.Choosable( - minimum = Fee.Common(Amount(minimumFee, blockchain)), - normal = Fee.Common(Amount(normalFee, blockchain)), - priority = Fee.Common(Amount(priorityFee, blockchain)), - ), - ) - } - - @Suppress("MagicNumber") - override suspend fun send(transactionData: TransactionData, signer: TransactionSigner): SimpleResult { - val dataToSign = randomString(32).toByteArray() - val signerResponse = signer.sign( - hash = dataToSign, - publicKey = walletManager.wallet.publicKey, - ) - return when (signerResponse) { - is CompletionResult.Success -> SimpleResult.Failure(Exception(ID).toBlockchainSdkError()) - is CompletionResult.Failure -> SimpleResult.fromTangemSdkError(signerResponse.error) - } - } - - private fun randomInt(from: Int, to: Int): Int = kotlin.random.Random.nextInt(from, to) - - private fun randomString(length: Int): String { - val charPool: List = ('a'..'z') + ('A'..'Z') + ('0'..'9') - return (1..length) - .map { randomInt(0, charPool.size) } - .map(charPool::get) - .joinToString("") - } - - companion object { - val ID = DemoTransactionSender::class.java.simpleName - - private val minimumFee = 0.0001.toBigDecimal() - private val normalFee = 0.0002.toBigDecimal() - private val priorityFee = 0.0003.toBigDecimal() - } } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/demo/DemoMiddleware.kt b/app/src/main/java/com/tangem/tap/features/demo/DemoMiddleware.kt new file mode 100644 index 0000000000..4f46273749 --- /dev/null +++ b/app/src/main/java/com/tangem/tap/features/demo/DemoMiddleware.kt @@ -0,0 +1,12 @@ +package com.tangem.tap.features.demo + +import com.tangem.domain.demo.DemoConfig +import com.tangem.domain.models.scan.ScanResponse +import org.rekotlin.Action + +/** +[REDACTED_AUTHOR] + */ +interface DemoMiddleware { + fun tryHandle(config: DemoConfig, scanResponse: ScanResponse, action: Action): Boolean +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/demo/DemoOnboardingNoteMiddleware.kt b/app/src/main/java/com/tangem/tap/features/demo/DemoOnboardingNoteMiddleware.kt index 4624db8d34..cb02be1422 100644 --- a/app/src/main/java/com/tangem/tap/features/demo/DemoOnboardingNoteMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/demo/DemoOnboardingNoteMiddleware.kt @@ -1,9 +1,9 @@ package com.tangem.tap.features.demo import com.tangem.common.extensions.guard -import com.tangem.domain.models.scan.ScanResponse -import com.tangem.domain.common.demo.DemoConfig import com.tangem.domain.common.extensions.withMainContext +import com.tangem.domain.demo.DemoConfig +import com.tangem.domain.models.scan.ScanResponse import com.tangem.tap.domain.extensions.makePrimaryWalletManager import com.tangem.tap.features.onboarding.products.note.redux.OnboardingNoteAction import com.tangem.tap.features.wallet.models.Currency diff --git a/app/src/main/java/com/tangem/tap/features/demo/DemoTransactionSender.kt b/app/src/main/java/com/tangem/tap/features/demo/DemoTransactionSender.kt new file mode 100644 index 0000000000..7e24b61c6d --- /dev/null +++ b/app/src/main/java/com/tangem/tap/features/demo/DemoTransactionSender.kt @@ -0,0 +1,51 @@ +package com.tangem.tap.features.demo + +import com.tangem.blockchain.common.* +import com.tangem.blockchain.common.transaction.Fee +import com.tangem.blockchain.common.transaction.TransactionFee +import com.tangem.blockchain.extensions.Result +import com.tangem.blockchain.extensions.SimpleResult +import com.tangem.common.CompletionResult +import kotlin.random.Random + +class DemoTransactionSender(private val walletManager: WalletManager) : TransactionSender { + + override suspend fun getFee(amount: Amount, destination: String): Result { + val blockchain = walletManager.wallet.blockchain + return Result.Success( + TransactionFee.Choosable( + minimum = Fee.Common(Amount(minimumFee, blockchain)), + normal = Fee.Common(Amount(normalFee, blockchain)), + priority = Fee.Common(Amount(priorityFee, blockchain)), + ), + ) + } + + override suspend fun send(transactionData: TransactionData, signer: TransactionSigner): SimpleResult { + val signerResponse = signer.sign( + hash = getDataToSign(), + publicKey = walletManager.wallet.publicKey, + ) + return when (signerResponse) { + is CompletionResult.Success -> SimpleResult.Failure(Exception(ID).toBlockchainSdkError()) + is CompletionResult.Failure -> SimpleResult.fromTangemSdkError(signerResponse.error) + } + } + + private fun getDataToSign(): ByteArray { + val charPool: List = ('a'..'z') + ('A'..'Z') + ('0'..'9') + return IntRange(start = 1, endInclusive = 32) + .map { Random.nextInt(from = 0, until = charPool.size) } + .map(charPool::get) + .joinToString(separator = "") + .toByteArray() + } + + companion object { + val ID: String = DemoTransactionSender::class.java.simpleName + + private val minimumFee = 0.0001.toBigDecimal() + private val normalFee = 0.0002.toBigDecimal() + private val priorityFee = 0.0003.toBigDecimal() + } +} \ No newline at end of file diff --git a/domain/card/build.gradle.kts b/domain/card/build.gradle.kts index a1266a8ba6..71512156cd 100644 --- a/domain/card/build.gradle.kts +++ b/domain/card/build.gradle.kts @@ -1,14 +1,22 @@ plugins { - alias(deps.plugins.kotlin.jvm) + alias(deps.plugins.android.library) + alias(deps.plugins.kotlin.android) id("configuration") } +android { + namespace = "com.tangem.domain.card" +} + dependencies { + implementation(projects.core.analytics.models) + + implementation(projects.domain.demo) implementation(projects.domain.core) + implementation(projects.domain.legacy) // TODO: Remove after new card scan result was implemented implementation(projects.domain.models) - implementation(projects.core.analytics.models) implementation(deps.tangem.card.core) } \ No newline at end of file diff --git a/domain/demo/.gitignore b/domain/demo/.gitignore new file mode 100644 index 0000000000..42afabfd2a --- /dev/null +++ b/domain/demo/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/domain/demo/build.gradle.kts b/domain/demo/build.gradle.kts new file mode 100644 index 0000000000..f0c56e2a73 --- /dev/null +++ b/domain/demo/build.gradle.kts @@ -0,0 +1,13 @@ +plugins { + alias(deps.plugins.android.library) + alias(deps.plugins.kotlin.android) + id("configuration") +} + +android { + namespace = "com.tangem.domain.demo" +} + +dependencies { + implementation(deps.tangem.blockchain) +} \ No newline at end of file diff --git a/domain/legacy/src/main/java/com/tangem/domain/common/demo/DemoConfig.kt b/domain/demo/src/main/java/com/tangem/domain/demo/DemoConfig.kt similarity index 98% rename from domain/legacy/src/main/java/com/tangem/domain/common/demo/DemoConfig.kt rename to domain/demo/src/main/java/com/tangem/domain/demo/DemoConfig.kt index 670e104425..6c22a84135 100644 --- a/domain/legacy/src/main/java/com/tangem/domain/common/demo/DemoConfig.kt +++ b/domain/demo/src/main/java/com/tangem/domain/demo/DemoConfig.kt @@ -1,8 +1,8 @@ -package com.tangem.domain.common.demo +package com.tangem.domain.demo +import com.tangem.blockchain.BuildConfig import com.tangem.blockchain.common.Amount import com.tangem.blockchain.common.Blockchain -import com.tangem.domain.features.BuildConfig import java.math.BigDecimal @Suppress("LargeClass") @@ -15,7 +15,7 @@ class DemoConfig { Blockchain.Solana, ) - val demoCardIds: List by lazy { + private val demoCardIds: List by lazy { val demoIds = getReleaseIds().toMutableList() if (BuildConfig.DEBUG) demoIds.addAll(debugTestDemoCardIds) diff --git a/domain/demo/src/main/java/com/tangem/domain/demo/IsDemoCardUseCase.kt b/domain/demo/src/main/java/com/tangem/domain/demo/IsDemoCardUseCase.kt new file mode 100644 index 0000000000..209d7984ba --- /dev/null +++ b/domain/demo/src/main/java/com/tangem/domain/demo/IsDemoCardUseCase.kt @@ -0,0 +1,6 @@ +package com.tangem.domain.demo + +class IsDemoCardUseCase(private val config: DemoConfig) { + + operator fun invoke(cardId: String): Boolean = config.isDemoCardId(cardId) +} \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts index 675e2f1073..15622f6a47 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -77,8 +77,9 @@ include(":features:learn2earn:impl") include(":domain:models") include(":domain:legacy") -include(":domain:core") include(":domain:card") +include(":domain:core") +include(":domain:demo") include(":domain:settings") include(":domain:tokens") include(":domain:wallets")