From 0e18cbe733eb6fd55a5d592992718fc69f314bb5 Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 22 Apr 2026 17:07:48 +0400 Subject: [PATCH] Updated on 2026-08-14 --- .../java/com/tangem/tap/common/TestActions.kt | 13 ----- .../tangem/tap/common/extensions/Context.kt | 24 --------- .../com/tangem/tap/common/extensions/UI.kt | 45 ----------------- .../java/com/tangem/tap/domain/TapErrors.kt | 49 ------------------- .../java/com/tangem/tap/domain/TapSdkError.kt | 11 +++++ .../tap/domain/model/PendingTransaction.kt | 49 ------------------- .../tap/domain/model/WalletAddressData.kt | 10 ---- .../domain/scanCard/LegacyScanProcessor.kt | 8 +-- .../domain/scanCard/chains/DisclaimerChain.kt | 6 +-- .../tap/features/disclaimer/Disclaimer.kt | 29 ----------- .../disclaimer/DisclaimerDataProvider.kt | 11 ----- .../tap/features/disclaimer/DisclaimerType.kt | 25 ---------- .../intentHandler/AffectsNavigation.kt | 3 -- .../features/intentHandler/IntentHandler.kt | 11 ----- 14 files changed, 13 insertions(+), 281 deletions(-) delete mode 100644 app/src/main/java/com/tangem/tap/common/TestActions.kt delete mode 100644 app/src/main/java/com/tangem/tap/common/extensions/Context.kt delete mode 100644 app/src/main/java/com/tangem/tap/domain/TapErrors.kt create mode 100644 app/src/main/java/com/tangem/tap/domain/TapSdkError.kt delete mode 100644 app/src/main/java/com/tangem/tap/domain/model/PendingTransaction.kt delete mode 100644 app/src/main/java/com/tangem/tap/domain/model/WalletAddressData.kt delete mode 100644 app/src/main/java/com/tangem/tap/features/disclaimer/Disclaimer.kt delete mode 100644 app/src/main/java/com/tangem/tap/features/disclaimer/DisclaimerDataProvider.kt delete mode 100644 app/src/main/java/com/tangem/tap/features/disclaimer/DisclaimerType.kt delete mode 100644 app/src/main/java/com/tangem/tap/features/intentHandler/AffectsNavigation.kt delete mode 100644 app/src/main/java/com/tangem/tap/features/intentHandler/IntentHandler.kt diff --git a/app/src/main/java/com/tangem/tap/common/TestActions.kt b/app/src/main/java/com/tangem/tap/common/TestActions.kt deleted file mode 100644 index 95edcd851e..0000000000 --- a/app/src/main/java/com/tangem/tap/common/TestActions.kt +++ /dev/null @@ -1,13 +0,0 @@ -package com.tangem.tap.common - -/** -[REDACTED_AUTHOR] - */ - -object TestActions { - - // It used only for the test actions in debug or debug_beta builds - var isTestAmountInjectionForWalletManagerEnabled = false -} - -typealias TestAction = Pair Unit> \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/common/extensions/Context.kt b/app/src/main/java/com/tangem/tap/common/extensions/Context.kt deleted file mode 100644 index 14f4cd0dbf..0000000000 --- a/app/src/main/java/com/tangem/tap/common/extensions/Context.kt +++ /dev/null @@ -1,24 +0,0 @@ -package com.tangem.tap.common.extensions - -import android.content.* -import android.content.pm.* -import android.content.res.* -import android.net.* -import androidx.annotation.* -import androidx.core.content.* - -/** - * Get uri to any resource type via given Resource Instance - * @param resId - resource id - * @throws Resources.NotFoundException if the given ID does not exist. - * @return - Uri to resource by the given ID - */ -@Throws(Resources.NotFoundException::class) -fun Context.resourceUri(@AnyRes resId: Int): Uri { - return Uri.parse( - ContentResolver.SCHEME_ANDROID_RESOURCE + - "://" + resources.getResourcePackageName(resId) + - '/' + resources.getResourceTypeName(resId) + - '/' + resources.getResourceEntryName(resId), - ) -} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/common/extensions/UI.kt b/app/src/main/java/com/tangem/tap/common/extensions/UI.kt index 355da51669..bc653053c7 100644 --- a/app/src/main/java/com/tangem/tap/common/extensions/UI.kt +++ b/app/src/main/java/com/tangem/tap/common/extensions/UI.kt @@ -1,56 +1,11 @@ -@file:Suppress("TooManyFunctions") - package com.tangem.tap.common.extensions import android.content.Context -import android.graphics.drawable.Drawable -import android.view.View import androidx.annotation.ColorInt import androidx.annotation.ColorRes -import androidx.annotation.DrawableRes -import androidx.annotation.StringRes import androidx.core.content.ContextCompat -fun Context.getDrawableCompat(@DrawableRes drawableResId: Int): Drawable? { - return ContextCompat.getDrawable(this, drawableResId) -} - @ColorInt fun Context.getColorCompat(@ColorRes colorRes: Int): Int { return ContextCompat.getColor(this, colorRes) -} - -@ColorInt -fun View.getColor(@ColorRes colorRes: Int): Int { - return ContextCompat.getColor(context, colorRes) -} - -fun View.getString(@StringRes id: Int): String { - return context.getString(id) -} - -fun View.getString(@StringRes id: Int, vararg formatArgs: String): String { - return context.getString(id, *formatArgs) -} - -fun View.show(show: Boolean, invokeBeforeStateChanged: (() -> Unit)? = null) { - return if (show) this.show(invokeBeforeStateChanged) else this.hide(invokeBeforeStateChanged) -} - -fun View.show(invokeBeforeStateChanged: (() -> Unit)? = null) { - if (this.visibility == View.VISIBLE) return - - invokeBeforeStateChanged?.invoke() - this.visibility = View.VISIBLE -} - -fun View.hide(invokeBeforeStateChanged: (() -> Unit)? = null) { - if (this.visibility == View.GONE) return - - invokeBeforeStateChanged?.invoke() - this.visibility = View.GONE -} - -fun View.getString(resId: Int, vararg formatArgs: Any?): String { - return context.getString(resId, *formatArgs) } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/domain/TapErrors.kt b/app/src/main/java/com/tangem/tap/domain/TapErrors.kt deleted file mode 100644 index 2f1677fc5d..0000000000 --- a/app/src/main/java/com/tangem/tap/domain/TapErrors.kt +++ /dev/null @@ -1,49 +0,0 @@ -package com.tangem.tap.domain - -import androidx.annotation.StringRes -import com.tangem.common.core.TangemError -import com.tangem.wallet.R - -interface TapErrors - -interface ArgError { - val args: List? -} - -interface MultiMessageError : TapErrors { - val errorList: List - val builder: (List) -> String -} - -sealed class TapError( - @StringRes val messageResource: Int, - override val args: List? = null, -) : Throwable(), TapErrors, ArgError { - - class UnknownError : TapError(R.string.send_error_unknown) - open class CustomError(val customMessage: String) : TapError(R.string.common_custom_string, listOf(customMessage)) - - class NoInternetConnection : TapError(R.string.wallet_notification_no_internet) - - sealed class WalletManager { - class NoAccountError(amountToCreateAccount: String) : CustomError(amountToCreateAccount) - class InternalError(message: String) : CustomError(message) - class BlockchainIsUnreachableTryLater : TapError(R.string.wallet_balance_blockchain_unreachable_try_later) - } -} - -sealed class TapSdkError(override val messageResId: Int?) : TangemError(code = 50100) { - override var customMessage: String = code.toString() - - class CardForDifferentApp : TapSdkError(R.string.alert_unsupported_card) - class CardNotSupportedByRelease : TapSdkError(R.string.error_wrong_card_type) -} - -fun TapErrors.assembleErrors(): MutableList?>> { - val idList = mutableListOf?>>() - when (this) { - is MultiMessageError -> this.errorList.forEach { idList.addAll(it.assembleErrors()) } - is TapError -> idList.add(Pair(this.messageResource, this.args)) - } - return idList -} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/domain/TapSdkError.kt b/app/src/main/java/com/tangem/tap/domain/TapSdkError.kt new file mode 100644 index 0000000000..9ce9469d75 --- /dev/null +++ b/app/src/main/java/com/tangem/tap/domain/TapSdkError.kt @@ -0,0 +1,11 @@ +package com.tangem.tap.domain + +import com.tangem.common.core.TangemError +import com.tangem.wallet.R + +sealed class TapSdkError(override val messageResId: Int?) : TangemError(code = 50100) { + override var customMessage: String = code.toString() + + class CardForDifferentApp : TapSdkError(R.string.alert_unsupported_card) + class CardNotSupportedByRelease : TapSdkError(R.string.error_wrong_card_type) +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/domain/model/PendingTransaction.kt b/app/src/main/java/com/tangem/tap/domain/model/PendingTransaction.kt deleted file mode 100644 index 8548b11eba..0000000000 --- a/app/src/main/java/com/tangem/tap/domain/model/PendingTransaction.kt +++ /dev/null @@ -1,49 +0,0 @@ -package com.tangem.tap.domain.model - -import com.tangem.blockchain.common.TransactionData -import com.tangem.blockchain.common.TransactionStatus -import com.tangem.blockchain.common.Wallet - -data class PendingTransaction( - val transactionData: TransactionData.Uncompiled, - val type: PendingTransactionType, -) { - val address: String? = when (type) { - PendingTransactionType.Incoming -> nullIfUnknown(transactionData.sourceAddress) - PendingTransactionType.Outgoing -> nullIfUnknown(transactionData.destinationAddress) - PendingTransactionType.Unknown -> null - } - - val currency: String = transactionData.amount.currencySymbol - - private fun nullIfUnknown(address: String): String? = if (address == "unknown") null else address -} - -enum class PendingTransactionType { Incoming, Outgoing, Unknown } - -fun TransactionData.Uncompiled.toPendingTransaction(walletAddress: String): PendingTransaction? { - if (this.status == TransactionStatus.Confirmed) return null - - val type: PendingTransactionType = when { - this.sourceAddress == walletAddress -> PendingTransactionType.Outgoing - this.destinationAddress == walletAddress -> PendingTransactionType.Incoming - else -> PendingTransactionType.Unknown - } - return PendingTransaction(this, type) -} - -fun List.toPendingTransactions(walletAddress: String): List { - return this.mapNotNull { it.toPendingTransaction(walletAddress) } -} - -fun Wallet.getPendingTransactions(type: PendingTransactionType? = null): List { - val txs = recentTransactions.toPendingTransactions(address) - return when (type) { - null -> txs - else -> txs.filter { it.type == type } - } -} - -fun Wallet.hasPendingTransactions(): Boolean { - return getPendingTransactions().isNotEmpty() -} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/domain/model/WalletAddressData.kt b/app/src/main/java/com/tangem/tap/domain/model/WalletAddressData.kt deleted file mode 100644 index a24fe98346..0000000000 --- a/app/src/main/java/com/tangem/tap/domain/model/WalletAddressData.kt +++ /dev/null @@ -1,10 +0,0 @@ -package com.tangem.tap.domain.model - -import com.tangem.blockchain.common.address.AddressType - -internal data class WalletAddressData( - val address: String, - val type: AddressType, - val shareUrl: String, - val exploreUrl: String, -) \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/domain/scanCard/LegacyScanProcessor.kt b/app/src/main/java/com/tangem/tap/domain/scanCard/LegacyScanProcessor.kt index 10dafea284..74d2e3d21f 100644 --- a/app/src/main/java/com/tangem/tap/domain/scanCard/LegacyScanProcessor.kt +++ b/app/src/main/java/com/tangem/tap/domain/scanCard/LegacyScanProcessor.kt @@ -30,7 +30,6 @@ import com.tangem.domain.models.scan.ScanResponse import com.tangem.domain.onboarding.WasTwinsOnboardingShownUseCase import com.tangem.sdk.extensions.localizedDescriptionRes import com.tangem.tap.common.analytics.paramsInterceptor.CardContextInterceptor -import com.tangem.tap.features.disclaimer.createDisclaimer import com.tangem.tap.features.onboarding.OnboardingHelper import com.tangem.tap.mainScope import com.tangem.tap.scope @@ -145,16 +144,12 @@ internal class LegacyScanProcessor @Inject constructor( Analytics.send(analyticsEvent) } - // TODO: [REDACTED_JIRA] - @Suppress("UnusedPrivateMember") private suspend inline fun showDisclaimerIfNeed( scanResponse: ScanResponse, crossinline disclaimerWillShow: () -> Unit = {}, crossinline nextHandler: suspend (ScanResponse) -> Unit, ) { - val disclaimer = scanResponse.card.createDisclaimer(cardRepository) - - if (disclaimer.isAccepted()) { + if (cardRepository.isTangemTOSAccepted()) { nextHandler(scanResponse) } else { scope.launch { @@ -206,7 +201,6 @@ internal class LegacyScanProcessor @Inject constructor( } } - @Suppress("LongMethod", "LongParameterList", "MagicNumber") private suspend inline fun onScanSuccess( scanResponse: ScanResponse, crossinline onProgressStateChange: suspend (showProgress: Boolean) -> Unit, diff --git a/app/src/main/java/com/tangem/tap/domain/scanCard/chains/DisclaimerChain.kt b/app/src/main/java/com/tangem/tap/domain/scanCard/chains/DisclaimerChain.kt index 93a1f9feac..508b5d0255 100644 --- a/app/src/main/java/com/tangem/tap/domain/scanCard/chains/DisclaimerChain.kt +++ b/app/src/main/java/com/tangem/tap/domain/scanCard/chains/DisclaimerChain.kt @@ -8,7 +8,6 @@ import com.tangem.domain.card.repository.CardRepository import com.tangem.domain.core.chain.Chain import com.tangem.domain.core.chain.ResultChain import com.tangem.domain.models.scan.ScanResponse -import com.tangem.tap.features.disclaimer.createDisclaimer /** * Handles disclaimer display after the card scanning operation. @@ -25,14 +24,11 @@ internal class DisclaimerChain( ) : ResultChain() { override suspend fun launch(previousChainResult: ScanResponse): ScanChainResult { - val disclaimer = previousChainResult.card.createDisclaimer(cardRepository) - - return if (disclaimer.isAccepted()) { + return if (cardRepository.isTangemTOSAccepted()) { previousChainResult.right() } else { disclaimerWillShow() - // TODO: [REDACTED_JIRA] appRouter.push(route = AppRoute.Disclaimer(isTosAccepted = false)) previousChainResult.right() diff --git a/app/src/main/java/com/tangem/tap/features/disclaimer/Disclaimer.kt b/app/src/main/java/com/tangem/tap/features/disclaimer/Disclaimer.kt deleted file mode 100644 index 3524b38f40..0000000000 --- a/app/src/main/java/com/tangem/tap/features/disclaimer/Disclaimer.kt +++ /dev/null @@ -1,29 +0,0 @@ -package com.tangem.tap.features.disclaimer - -import android.net.Uri - -/** -[REDACTED_AUTHOR] - */ -interface Disclaimer { - fun getUri(): Uri - suspend fun accept() - suspend fun isAccepted(): Boolean -} - -abstract class BaseDisclaimer( - private val dataProvider: DisclaimerDataProvider, -) : Disclaimer { - - val baseUrl = "https://tangem.com" - - override suspend fun accept() { - dataProvider.accept() - } - - override suspend fun isAccepted(): Boolean = dataProvider.isAccepted() -} - -class TangemDisclaimer(dataProvider: DisclaimerDataProvider) : BaseDisclaimer(dataProvider) { - override fun getUri(): Uri = Uri.parse("$baseUrl/tangem_tos.html") -} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/disclaimer/DisclaimerDataProvider.kt b/app/src/main/java/com/tangem/tap/features/disclaimer/DisclaimerDataProvider.kt deleted file mode 100644 index ba3c82563d..0000000000 --- a/app/src/main/java/com/tangem/tap/features/disclaimer/DisclaimerDataProvider.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.tangem.tap.features.disclaimer - -/** -[REDACTED_AUTHOR] - */ -interface DisclaimerDataProvider { - fun getLanguage(): String - fun getCardId(): String - suspend fun accept() - suspend fun isAccepted(): Boolean -} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/disclaimer/DisclaimerType.kt b/app/src/main/java/com/tangem/tap/features/disclaimer/DisclaimerType.kt deleted file mode 100644 index 2f44bf9dd0..0000000000 --- a/app/src/main/java/com/tangem/tap/features/disclaimer/DisclaimerType.kt +++ /dev/null @@ -1,25 +0,0 @@ -package com.tangem.tap.features.disclaimer - -import com.tangem.domain.card.repository.CardRepository -import com.tangem.domain.models.scan.CardDTO -import java.util.Locale - -fun CardDTO.createDisclaimer(cardRepository: CardRepository): Disclaimer { - val dataProvider = provideDisclaimerDataProvider(cardId, cardRepository) - return TangemDisclaimer(dataProvider) -} - -private fun provideDisclaimerDataProvider(cardId: String, cardRepository: CardRepository): DisclaimerDataProvider { - return object : DisclaimerDataProvider { - override fun getLanguage(): String = Locale.getDefault().language - override fun getCardId(): String = cardId - - override suspend fun accept() { - cardRepository.acceptTangemTOS() - } - - override suspend fun isAccepted(): Boolean { - return cardRepository.isTangemTOSAccepted() - } - } -} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/intentHandler/AffectsNavigation.kt b/app/src/main/java/com/tangem/tap/features/intentHandler/AffectsNavigation.kt deleted file mode 100644 index e6d38c381c..0000000000 --- a/app/src/main/java/com/tangem/tap/features/intentHandler/AffectsNavigation.kt +++ /dev/null @@ -1,3 +0,0 @@ -package com.tangem.tap.features.intentHandler - -interface AffectsNavigation \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/intentHandler/IntentHandler.kt b/app/src/main/java/com/tangem/tap/features/intentHandler/IntentHandler.kt deleted file mode 100644 index 7458f759ba..0000000000 --- a/app/src/main/java/com/tangem/tap/features/intentHandler/IntentHandler.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.tangem.tap.features.intentHandler - -import android.content.Intent - -/** -[REDACTED_AUTHOR] - */ -interface IntentHandler { - - fun handleIntent(intent: Intent?): Boolean -} \ No newline at end of file