From 79d823b94faf83f0a1f67f50f0b67367c546040a Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 10 Feb 2023 15:29:38 +0300 Subject: [PATCH] Updated on 2026-08-14 --- .../java/com/tangem/tap/TapApplication.kt | 16 ++--- .../analytics/api/AnalyticsHandlerBuilder.kt | 2 +- .../tangem/tap/common/extensions/Context.kt | 4 -- .../tap/common/feedback/FeedbackManager.kt | 2 +- .../tap/common/redux/global/GlobalAction.kt | 4 +- .../tap/common/redux/global/GlobalState.kt | 2 +- .../tap/common/shop/TangemShopService.kt | 2 +- .../tap/common/shop/shopify/ShopifyService.kt | 1 + .../com/tangem/tap/domain/TapWalletManager.kt | 14 ++--- .../tangem/tap/domain/configurable/Loader.kt | 16 ----- .../tokens/LoadAvailableCoinsService.kt | 2 +- .../tap/domain/twins/TwinCardsManager.kt | 2 +- .../products/twins/redux/TwinCardsAction.kt | 2 +- .../products/twins/ui/TwinsCardsFragment.kt | 2 +- .../saltPay/SaltPayActivationManager.kt | 2 + .../saltPay/redux/OnboardingSaltPayAction.kt | 2 +- .../saltPay/redux/OnboardingSaltPayState.kt | 4 +- .../tangem/tap/proxy/UserWalletManagerImpl.kt | 11 +++- core/datasource/build.gradle.kts | 4 ++ .../tangem/datasource/config/ConfigManager.kt | 24 +++++++ .../datasource/config/ConfigManagerImpl.kt | 63 ++++++------------- .../datasource}/config/FeaturesLocalLoader.kt | 16 +++-- .../com/tangem/datasource/config/Loader.kt | 8 +++ .../tangem/datasource/config/models/Config.kt | 21 +++++++ .../datasource/config/models}/JsonModels.kt | 6 +- .../config/models}/SaltPayConfig.kt | 3 +- .../datasource/config/models}/ShopifyShop.kt | 2 +- .../config/models}/ZendeskConfig.kt | 2 +- .../com/tangem/datasource/di/ConfigModule.kt | 16 +++++ .../tangem/datasource/utils}/AssetReader.kt | 7 ++- .../feature/swap/domain/SwapInteractorImpl.kt | 2 +- .../tangem/lib/crypto/UserWalletManager.kt | 2 +- 32 files changed, 156 insertions(+), 110 deletions(-) delete mode 100644 app/src/main/java/com/tangem/tap/domain/configurable/Loader.kt create mode 100644 core/datasource/src/main/java/com/tangem/datasource/config/ConfigManager.kt rename app/src/main/java/com/tangem/tap/domain/configurable/config/ConfigManager.kt => core/datasource/src/main/java/com/tangem/datasource/config/ConfigManagerImpl.kt (61%) rename {app/src/main/java/com/tangem/tap/domain/configurable => core/datasource/src/main/java/com/tangem/datasource}/config/FeaturesLocalLoader.kt (61%) create mode 100644 core/datasource/src/main/java/com/tangem/datasource/config/Loader.kt create mode 100644 core/datasource/src/main/java/com/tangem/datasource/config/models/Config.kt rename {app/src/main/java/com/tangem/tap/domain/configurable/config => core/datasource/src/main/java/com/tangem/datasource/config/models}/JsonModels.kt (83%) rename {app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay => core/datasource/src/main/java/com/tangem/datasource/config/models}/SaltPayConfig.kt (87%) rename {app/src/main/java/com/tangem/tap/common/shop/shopify => core/datasource/src/main/java/com/tangem/datasource/config/models}/ShopifyShop.kt (85%) rename {app/src/main/java/com/tangem/tap/common/zendesk => core/datasource/src/main/java/com/tangem/datasource/config/models}/ZendeskConfig.kt (90%) create mode 100644 core/datasource/src/main/java/com/tangem/datasource/di/ConfigModule.kt rename {app/src/main/java/com/tangem/tap/common => core/datasource/src/main/java/com/tangem/datasource/utils}/AssetReader.kt (65%) diff --git a/app/src/main/java/com/tangem/tap/TapApplication.kt b/app/src/main/java/com/tangem/tap/TapApplication.kt index 0c8ba92c53..a3ce75396a 100644 --- a/app/src/main/java/com/tangem/tap/TapApplication.kt +++ b/app/src/main/java/com/tangem/tap/TapApplication.kt @@ -12,10 +12,13 @@ import com.tangem.blockchain.common.WalletManagerFactory import com.tangem.blockchain.network.BlockchainSdkRetrofitBuilder import com.tangem.core.analytics.Analytics import com.tangem.datasource.api.common.MoshiConverter +import com.tangem.datasource.config.models.Config +import com.tangem.datasource.config.ConfigManager +import com.tangem.datasource.config.FeaturesLocalLoader +import com.tangem.datasource.utils.AndroidAssetReader +import com.tangem.datasource.utils.AssetReader import com.tangem.domain.DomainLayer import com.tangem.domain.common.LogConfig -import com.tangem.tap.common.AndroidAssetReader -import com.tangem.tap.common.AssetReader import com.tangem.tap.common.IntentHandler import com.tangem.tap.common.analytics.AnalyticsFactory import com.tangem.tap.common.analytics.api.AnalyticsHandlerBuilder @@ -32,9 +35,6 @@ import com.tangem.tap.common.redux.AppState import com.tangem.tap.common.redux.appReducer import com.tangem.tap.common.redux.global.GlobalAction import com.tangem.tap.common.shop.TangemShopService -import com.tangem.tap.domain.configurable.config.Config -import com.tangem.tap.domain.configurable.config.ConfigManager -import com.tangem.tap.domain.configurable.config.FeaturesLocalLoader import com.tangem.tap.domain.configurable.warningMessage.WarningMessagesManager import com.tangem.tap.domain.tokens.UserTokensRepository import com.tangem.tap.domain.totalBalance.TotalFiatBalanceCalculator @@ -114,6 +114,9 @@ class TapApplication : Application(), ImageLoaderFactory { @Inject lateinit var appStateHolder: AppStateHolder + @Inject + lateinit var configManager: ConfigManager + override fun onCreate() { super.onCreate() @@ -139,7 +142,7 @@ class TapApplication : Application(), ImageLoaderFactory { walletConnectRepository = WalletConnectRepository(this) assetReader = AndroidAssetReader(this) - val configLoader = FeaturesLocalLoader(assetReader, MoshiConverter.sdkMoshi) + val configLoader = FeaturesLocalLoader(assetReader, MoshiConverter.sdkMoshi, BuildConfig.ENVIRONMENT) initConfigManager(configLoader, ::initWithConfigDependency) initWarningMessagesManager() @@ -162,7 +165,6 @@ class TapApplication : Application(), ImageLoaderFactory { } private fun initConfigManager(loader: FeaturesLocalLoader, onComplete: (Config) -> Unit) { - val configManager = ConfigManager() configManager.load(loader) { config -> store.dispatch(GlobalAction.SetConfigManager(configManager)) onComplete(config) diff --git a/app/src/main/java/com/tangem/tap/common/analytics/api/AnalyticsHandlerBuilder.kt b/app/src/main/java/com/tangem/tap/common/analytics/api/AnalyticsHandlerBuilder.kt index 6d23925143..4727772b38 100644 --- a/app/src/main/java/com/tangem/tap/common/analytics/api/AnalyticsHandlerBuilder.kt +++ b/app/src/main/java/com/tangem/tap/common/analytics/api/AnalyticsHandlerBuilder.kt @@ -4,7 +4,7 @@ import android.app.Application import com.tangem.common.json.MoshiJsonConverter import com.tangem.core.analytics.api.AnalyticsHandler import com.tangem.domain.common.AnalyticsHandlersLogConfig -import com.tangem.tap.domain.configurable.config.Config +import com.tangem.datasource.config.models.Config interface AnalyticsHandlerBuilder { fun build(data: Data): AnalyticsHandler? 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 index ee68830265..556f261f46 100644 --- a/app/src/main/java/com/tangem/tap/common/extensions/Context.kt +++ b/app/src/main/java/com/tangem/tap/common/extensions/Context.kt @@ -17,10 +17,6 @@ fun Context.rewriteFile(content: String, fileName: String) { } } -fun Context.readAssetAsString(fileName: String): String { - return this.assets.open("$fileName.json").bufferedReader().readText() -} - fun Context.isPermissionGranted(permission: String): Boolean { return ContextCompat.checkSelfPermission(this, permission) == PackageManager.PERMISSION_GRANTED } diff --git a/app/src/main/java/com/tangem/tap/common/feedback/FeedbackManager.kt b/app/src/main/java/com/tangem/tap/common/feedback/FeedbackManager.kt index b44db4004b..c6513c9188 100644 --- a/app/src/main/java/com/tangem/tap/common/feedback/FeedbackManager.kt +++ b/app/src/main/java/com/tangem/tap/common/feedback/FeedbackManager.kt @@ -6,7 +6,7 @@ import com.tangem.core.analytics.Analytics import com.tangem.domain.common.TapWorkarounds import com.tangem.tap.common.extensions.sendEmail import com.tangem.tap.common.log.TangemLogCollector -import com.tangem.tap.common.zendesk.ZendeskConfig +import com.tangem.datasource.config.models.ZendeskConfig import com.tangem.tap.foregroundActivityObserver import com.tangem.tap.persistence.PreferencesStorage import com.tangem.tap.withForegroundActivity diff --git a/app/src/main/java/com/tangem/tap/common/redux/global/GlobalAction.kt b/app/src/main/java/com/tangem/tap/common/redux/global/GlobalAction.kt index 1417d013d1..4017f9b32f 100644 --- a/app/src/main/java/com/tangem/tap/common/redux/global/GlobalAction.kt +++ b/app/src/main/java/com/tangem/tap/common/redux/global/GlobalAction.kt @@ -13,9 +13,9 @@ import com.tangem.tap.common.redux.ErrorAction import com.tangem.tap.common.redux.NotificationAction import com.tangem.tap.common.redux.StateDialog import com.tangem.tap.common.redux.ToastNotificationAction -import com.tangem.tap.common.zendesk.ZendeskConfig +import com.tangem.datasource.config.models.ZendeskConfig import com.tangem.tap.domain.TapError -import com.tangem.tap.domain.configurable.config.ConfigManager +import com.tangem.datasource.config.ConfigManager import com.tangem.tap.domain.configurable.warningMessage.WarningMessage import com.tangem.tap.domain.configurable.warningMessage.WarningMessagesManager import com.tangem.tap.features.details.redux.SecurityOption diff --git a/app/src/main/java/com/tangem/tap/common/redux/global/GlobalState.kt b/app/src/main/java/com/tangem/tap/common/redux/global/GlobalState.kt index b897f1b5dc..845715809d 100644 --- a/app/src/main/java/com/tangem/tap/common/redux/global/GlobalState.kt +++ b/app/src/main/java/com/tangem/tap/common/redux/global/GlobalState.kt @@ -6,7 +6,7 @@ import com.tangem.tap.common.feedback.FeedbackManager import com.tangem.tap.common.redux.StateDialog import com.tangem.tap.domain.PayIdManager import com.tangem.tap.domain.TapWalletManager -import com.tangem.tap.domain.configurable.config.ConfigManager +import com.tangem.datasource.config.ConfigManager import com.tangem.tap.domain.configurable.warningMessage.WarningMessagesManager import com.tangem.tap.features.onboarding.OnboardingManager import com.tangem.tap.network.exchangeServices.CurrencyExchangeManager diff --git a/app/src/main/java/com/tangem/tap/common/shop/TangemShopService.kt b/app/src/main/java/com/tangem/tap/common/shop/TangemShopService.kt index 8366078322..9685dd54b7 100644 --- a/app/src/main/java/com/tangem/tap/common/shop/TangemShopService.kt +++ b/app/src/main/java/com/tangem/tap/common/shop/TangemShopService.kt @@ -12,7 +12,7 @@ import com.tangem.tap.common.shop.data.TangemProduct import com.tangem.tap.common.shop.data.TotalSum import com.tangem.tap.common.shop.googlepay.GooglePayService import com.tangem.tap.common.shop.shopify.ShopifyService -import com.tangem.tap.common.shop.shopify.ShopifyShop +import com.tangem.datasource.config.models.ShopifyShop import com.tangem.tap.common.shop.shopify.data.CheckoutItem import kotlinx.coroutines.async import kotlinx.coroutines.awaitAll diff --git a/app/src/main/java/com/tangem/tap/common/shop/shopify/ShopifyService.kt b/app/src/main/java/com/tangem/tap/common/shop/shopify/ShopifyService.kt index f51fbf0c4e..71081fc7b1 100644 --- a/app/src/main/java/com/tangem/tap/common/shop/shopify/ShopifyService.kt +++ b/app/src/main/java/com/tangem/tap/common/shop/shopify/ShopifyService.kt @@ -7,6 +7,7 @@ import com.shopify.buy3.RetryHandler import com.shopify.buy3.Storefront.* import com.shopify.graphql.support.ID import com.shopify.graphql.support.Input +import com.tangem.datasource.config.models.ShopifyShop import com.tangem.tap.common.shop.shopify.data.CheckoutItem import com.tangem.tap.common.shop.shopify.data.checkoutFieldsFragment import com.tangem.tap.common.shop.shopify.data.collectionFieldsFragment diff --git a/app/src/main/java/com/tangem/tap/domain/TapWalletManager.kt b/app/src/main/java/com/tangem/tap/domain/TapWalletManager.kt index dd13b37e8d..bfafbac4ba 100644 --- a/app/src/main/java/com/tangem/tap/domain/TapWalletManager.kt +++ b/app/src/main/java/com/tangem/tap/domain/TapWalletManager.kt @@ -18,7 +18,7 @@ import com.tangem.operations.attestation.Attestation import com.tangem.tap.common.extensions.dispatchOnMain import com.tangem.tap.common.extensions.safeUpdate import com.tangem.tap.common.redux.global.GlobalAction -import com.tangem.tap.domain.configurable.config.ConfigManager +import com.tangem.datasource.config.ConfigManager import com.tangem.tap.domain.extensions.makePrimaryWalletManager import com.tangem.tap.domain.extensions.makeWalletManagersForApp import com.tangem.tap.domain.model.UserWallet @@ -181,16 +181,16 @@ class TapWalletManager { val configManager = store.state.globalState.configManager val blockchain = data.cardTypesResolver.getBlockchain() if (data.cardTypesResolver.isStart2Coin()) { - configManager?.turnOff(ConfigManager.isSendingToPayIdEnabled) - configManager?.turnOff(ConfigManager.isTopUpEnabled) + configManager?.turnOff(ConfigManager.IS_SENDING_TO_PAY_ID_ENABLED) + configManager?.turnOff(ConfigManager.IS_TOP_UP_ENABLED) } else if (blockchain == Blockchain.Bitcoin || data.walletData?.blockchain == Blockchain.Bitcoin.id ) { - configManager?.resetToDefault(ConfigManager.isSendingToPayIdEnabled) - configManager?.resetToDefault(ConfigManager.isTopUpEnabled) + configManager?.resetToDefault(ConfigManager.IS_SENDING_TO_PAY_ID_ENABLED) + configManager?.resetToDefault(ConfigManager.IS_TOP_UP_ENABLED) } else { - configManager?.resetToDefault(ConfigManager.isSendingToPayIdEnabled) - configManager?.resetToDefault(ConfigManager.isTopUpEnabled) + configManager?.resetToDefault(ConfigManager.IS_SENDING_TO_PAY_ID_ENABLED) + configManager?.resetToDefault(ConfigManager.IS_TOP_UP_ENABLED) } } diff --git a/app/src/main/java/com/tangem/tap/domain/configurable/Loader.kt b/app/src/main/java/com/tangem/tap/domain/configurable/Loader.kt deleted file mode 100644 index 5354d0b219..0000000000 --- a/app/src/main/java/com/tangem/tap/domain/configurable/Loader.kt +++ /dev/null @@ -1,16 +0,0 @@ -package com.tangem.tap.domain.configurable - -import com.tangem.wallet.BuildConfig - -/** -[REDACTED_AUTHOR] - */ -interface Loader { - fun load(onComplete: (T) -> Unit) - - companion object { - const val featuresName = "features_${BuildConfig.ENVIRONMENT}" - const val configValuesName = "tangem-app-config/config_${BuildConfig.ENVIRONMENT}" - const val warnings = "warnings_${BuildConfig.ENVIRONMENT}" - } -} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/domain/tokens/LoadAvailableCoinsService.kt b/app/src/main/java/com/tangem/tap/domain/tokens/LoadAvailableCoinsService.kt index 90a720055c..bc1f1dccc5 100644 --- a/app/src/main/java/com/tangem/tap/domain/tokens/LoadAvailableCoinsService.kt +++ b/app/src/main/java/com/tangem/tap/domain/tokens/LoadAvailableCoinsService.kt @@ -7,7 +7,7 @@ import com.tangem.datasource.api.common.MoshiConverter import com.tangem.datasource.api.tangemTech.TangemTechApi import com.tangem.datasource.api.tangemTech.models.CoinsResponse import com.tangem.domain.common.extensions.toNetworkId -import com.tangem.tap.common.AssetReader +import com.tangem.datasource.utils.AssetReader import com.tangem.utils.coroutines.CoroutineDispatcherProvider import kotlinx.coroutines.withContext 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 6b250dcef9..8e2cea35fa 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 @@ -12,7 +12,7 @@ import com.tangem.datasource.api.common.MoshiConverter import com.tangem.domain.common.CardDTO import com.tangem.domain.common.ScanResponse import com.tangem.operations.wallet.CreateWalletResponse -import com.tangem.tap.common.AssetReader +import com.tangem.datasource.utils.AssetReader import com.tangem.tap.tangemSdkManager class TwinCardsManager( diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/products/twins/redux/TwinCardsAction.kt b/app/src/main/java/com/tangem/tap/features/onboarding/products/twins/redux/TwinCardsAction.kt index bdd6ac9917..d6d15cec4c 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/products/twins/redux/TwinCardsAction.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/products/twins/redux/TwinCardsAction.kt @@ -4,7 +4,7 @@ import com.tangem.Message import com.tangem.blockchain.common.WalletManager import com.tangem.common.extensions.VoidCallback import com.tangem.domain.common.ScanResponse -import com.tangem.tap.common.AssetReader +import com.tangem.datasource.utils.AssetReader import com.tangem.tap.domain.TapError import com.tangem.tap.domain.twins.TwinCardsManager import com.tangem.tap.features.onboarding.OnboardingWalletBalance diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/products/twins/ui/TwinsCardsFragment.kt b/app/src/main/java/com/tangem/tap/features/onboarding/products/twins/ui/TwinsCardsFragment.kt index 56f0d949ce..86fb3f8c57 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/products/twins/ui/TwinsCardsFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/products/twins/ui/TwinsCardsFragment.kt @@ -18,7 +18,7 @@ import com.tangem.core.ui.fragments.setStatusBarColor import com.tangem.domain.common.ScanResponse import com.tangem.domain.common.TwinCardNumber import com.tangem.tangem_sdk_new.ui.widget.leapfrogWidget.LeapfrogWidget -import com.tangem.tap.common.AndroidAssetReader +import com.tangem.datasource.utils.AndroidAssetReader import com.tangem.tap.common.analytics.events.Onboarding import com.tangem.tap.common.extensions.beginDelayedTransition import com.tangem.tap.common.extensions.getDrawableCompat diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/SaltPayActivationManager.kt b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/SaltPayActivationManager.kt index 2e75c77dce..ddc768c890 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/SaltPayActivationManager.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/SaltPayActivationManager.kt @@ -20,6 +20,8 @@ import com.tangem.datasource.api.paymentology.models.response.AttestationRespons import com.tangem.datasource.api.paymentology.models.response.RegisterWalletResponse import com.tangem.datasource.api.paymentology.models.response.RegistrationResponse import com.tangem.datasource.api.paymentology.models.response.tryExtractError +import com.tangem.datasource.config.models.KYCProvider +import com.tangem.datasource.config.models.SaltPayConfig import com.tangem.domain.common.extensions.successOr import com.tangem.domain.common.util.UserWalletId import com.tangem.operations.attestation.AttestWalletKeyResponse diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/redux/OnboardingSaltPayAction.kt b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/redux/OnboardingSaltPayAction.kt index a8894ae74e..ea8b58f85c 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/redux/OnboardingSaltPayAction.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/redux/OnboardingSaltPayAction.kt @@ -2,7 +2,7 @@ package com.tangem.tap.features.onboarding.products.wallet.saltPay.redux import com.tangem.blockchain.common.Amount import com.tangem.tap.features.onboarding.products.wallet.saltPay.SaltPayActivationManager -import com.tangem.tap.features.onboarding.products.wallet.saltPay.SaltPayConfig +import com.tangem.datasource.config.models.SaltPayConfig import org.rekotlin.Action import java.math.BigDecimal diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/redux/OnboardingSaltPayState.kt b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/redux/OnboardingSaltPayState.kt index d62c679e37..6a556ebb91 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/redux/OnboardingSaltPayState.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/redux/OnboardingSaltPayState.kt @@ -10,9 +10,9 @@ import com.tangem.domain.common.ScanResponse import com.tangem.tap.common.toggleWidget.WidgetState import com.tangem.tap.domain.extensions.makeSaltPayWalletManager import com.tangem.tap.features.onboarding.products.wallet.saltPay.GnosisRegistrator -import com.tangem.tap.features.onboarding.products.wallet.saltPay.KYCProvider +import com.tangem.datasource.config.models.KYCProvider import com.tangem.tap.features.onboarding.products.wallet.saltPay.SaltPayActivationManager -import com.tangem.tap.features.onboarding.products.wallet.saltPay.SaltPayConfig +import com.tangem.datasource.config.models.SaltPayConfig import com.tangem.tap.features.wallet.redux.ProgressState import com.tangem.tap.store import java.math.BigDecimal diff --git a/app/src/main/java/com/tangem/tap/proxy/UserWalletManagerImpl.kt b/app/src/main/java/com/tangem/tap/proxy/UserWalletManagerImpl.kt index 5b2488a1f6..bb87e54ed9 100644 --- a/app/src/main/java/com/tangem/tap/proxy/UserWalletManagerImpl.kt +++ b/app/src/main/java/com/tangem/tap/proxy/UserWalletManagerImpl.kt @@ -31,13 +31,20 @@ class UserWalletManagerImpl( private val walletManagerFactory: WalletManagerFactory, ) : UserWalletManager { - override suspend fun getUserTokens(networkId: String): List { + override suspend fun getUserTokens(networkId: String, isExcludeCustom: Boolean): List { val card = appStateHolder.getActualCard() val userTokensRepository = requireNotNull(appStateHolder.userTokensRepository) { "userTokensRepository is null" } return if (card != null) { userTokensRepository.getUserTokens(card) - .filter { it.blockchain.toNetworkId() == networkId } + .filter { + val checkCustom = if (isExcludeCustom) { + !it.isCustomCurrency(null) + } else { + true + } + it.blockchain.toNetworkId() == networkId && checkCustom + } .map { if (it is com.tangem.tap.features.wallet.models.Currency.Token) { NonNativeToken( diff --git a/core/datasource/build.gradle.kts b/core/datasource/build.gradle.kts index 082885c1d7..e355c638cf 100644 --- a/core/datasource/build.gradle.kts +++ b/core/datasource/build.gradle.kts @@ -43,6 +43,7 @@ dependencies { implementation(project(":libs:auth")) /** Tangem libraries */ + implementation(Tangem.blockchain) implementation(Tangem.cardCore) /** DI */ @@ -65,4 +66,7 @@ dependencies { /** Time */ implementation(Library.jodatime) + + /** Security */ + implementation(Library.spongecastleCryptoCore) } \ No newline at end of file diff --git a/core/datasource/src/main/java/com/tangem/datasource/config/ConfigManager.kt b/core/datasource/src/main/java/com/tangem/datasource/config/ConfigManager.kt new file mode 100644 index 0000000000..e3325c77c2 --- /dev/null +++ b/core/datasource/src/main/java/com/tangem/datasource/config/ConfigManager.kt @@ -0,0 +1,24 @@ +package com.tangem.datasource.config + +import com.tangem.datasource.config.models.Config +import com.tangem.datasource.config.models.ConfigModel + +/** +[REDACTED_AUTHOR] + */ +interface ConfigManager { + + val config: Config + + fun load(configLoader: Loader, onComplete: ((config: Config) -> Unit)? = null) + + fun turnOff(name: String) + + fun resetToDefault(name: String) + + companion object { + const val IS_SENDING_TO_PAY_ID_ENABLED = "isSendingToPayIdEnabled" + const val IS_CREATING_TWIN_CARDS_ALLOWED = "isCreatingTwinCardsAllowed" + const val IS_TOP_UP_ENABLED = "isTopUpEnabled" + } +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/domain/configurable/config/ConfigManager.kt b/core/datasource/src/main/java/com/tangem/datasource/config/ConfigManagerImpl.kt similarity index 61% rename from app/src/main/java/com/tangem/tap/domain/configurable/config/ConfigManager.kt rename to core/datasource/src/main/java/com/tangem/datasource/config/ConfigManagerImpl.kt index a79f3452b0..05e17fa6c4 100644 --- a/app/src/main/java/com/tangem/tap/domain/configurable/config/ConfigManager.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/config/ConfigManagerImpl.kt @@ -1,42 +1,25 @@ -package com.tangem.tap.domain.configurable.config +package com.tangem.datasource.config import com.tangem.blockchain.common.BlockchainSdkConfig import com.tangem.blockchain.common.BlockchairCredentials import com.tangem.blockchain.common.QuickNodeCredentials -import com.tangem.tap.common.shop.shopify.ShopifyShop -import com.tangem.tap.common.zendesk.ZendeskConfig -import com.tangem.tap.domain.configurable.Loader -import com.tangem.tap.features.onboarding.products.wallet.saltPay.SaltPayConfig +import com.tangem.datasource.config.ConfigManager.Companion.IS_CREATING_TWIN_CARDS_ALLOWED +import com.tangem.datasource.config.ConfigManager.Companion.IS_SENDING_TO_PAY_ID_ENABLED +import com.tangem.datasource.config.ConfigManager.Companion.IS_TOP_UP_ENABLED +import com.tangem.datasource.config.models.Config +import com.tangem.datasource.config.models.ConfigModel +import com.tangem.datasource.config.models.ConfigValueModel +import com.tangem.datasource.config.models.FeatureModel +import javax.inject.Inject -/** -[REDACTED_AUTHOR] - */ -data class Config( - val coinMarketCapKey: String = "f6622117-c043-47a0-8975-9d673ce484de", - val moonPayApiKey: String = "pk_test_kc90oYTANy7UQdBavDKGfL4K9l6VEPE", - val moonPayApiSecretKey: String = "sk_test_V8w4M19LbDjjYOt170s0tGuvXAgyEb1C", - val mercuryoWidgetId: String = "", - val mercuryoSecret: String = "", - val appsFlyerDevKey: String = "", - val amplitudeApiKey: String = "", - val blockchainSdkConfig: BlockchainSdkConfig = BlockchainSdkConfig(), - val isSendingToPayIdEnabled: Boolean = true, - val isTopUpEnabled: Boolean = false, - @Deprecated("Not relevant since version 3.23") - val isCreatingTwinCardsAllowed: Boolean = false, - val shopify: ShopifyShop? = null, - val zendesk: ZendeskConfig? = null, - val saltPayConfig: SaltPayConfig? = null, -) +internal class ConfigManagerImpl @Inject constructor() : ConfigManager { -class ConfigManager { - - var config: Config = Config() + override var config: Config = Config() private set private var defaultConfig = Config() - fun load(configLoader: Loader, onComplete: ((config: Config) -> Unit)? = null) { + override fun load(configLoader: Loader, onComplete: ((config: Config) -> Unit)?) { configLoader.load { configModel -> setupFeature(configModel.features) setupConfigValues(configModel.configValues) @@ -44,20 +27,20 @@ class ConfigManager { } } - fun turnOff(name: String) { + override fun turnOff(name: String) { when (name) { - isSendingToPayIdEnabled -> config = config.copy(isSendingToPayIdEnabled = false) - isTopUpEnabled -> config = config.copy(isTopUpEnabled = false) - isCreatingTwinCardsAllowed -> config = config.copy(isCreatingTwinCardsAllowed = false) + IS_SENDING_TO_PAY_ID_ENABLED -> config = config.copy(isSendingToPayIdEnabled = false) + IS_TOP_UP_ENABLED -> config = config.copy(isTopUpEnabled = false) + IS_CREATING_TWIN_CARDS_ALLOWED -> config = config.copy(isCreatingTwinCardsAllowed = false) } } - fun resetToDefault(name: String) { + override fun resetToDefault(name: String) { when (name) { - isSendingToPayIdEnabled -> config = + IS_SENDING_TO_PAY_ID_ENABLED -> config = config.copy(isSendingToPayIdEnabled = defaultConfig.isSendingToPayIdEnabled) - isTopUpEnabled -> config = config.copy(isTopUpEnabled = defaultConfig.isTopUpEnabled) - isCreatingTwinCardsAllowed -> config = + IS_TOP_UP_ENABLED -> config = config.copy(isTopUpEnabled = defaultConfig.isTopUpEnabled) + IS_CREATING_TWIN_CARDS_ALLOWED -> config = config.copy(isCreatingTwinCardsAllowed = defaultConfig.isCreatingTwinCardsAllowed) } } @@ -116,10 +99,4 @@ class ConfigManager { saltPayConfig = configValues.saltPay, ) } - - companion object { - const val isSendingToPayIdEnabled = "isSendingToPayIdEnabled" - const val isCreatingTwinCardsAllowed = "isCreatingTwinCardsAllowed" - const val isTopUpEnabled = "isTopUpEnabled" - } } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/domain/configurable/config/FeaturesLocalLoader.kt b/core/datasource/src/main/java/com/tangem/datasource/config/FeaturesLocalLoader.kt similarity index 61% rename from app/src/main/java/com/tangem/tap/domain/configurable/config/FeaturesLocalLoader.kt rename to core/datasource/src/main/java/com/tangem/datasource/config/FeaturesLocalLoader.kt index ba33d98210..8ae508cbd3 100644 --- a/app/src/main/java/com/tangem/tap/domain/configurable/config/FeaturesLocalLoader.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/config/FeaturesLocalLoader.kt @@ -1,9 +1,11 @@ -package com.tangem.tap.domain.configurable.config +package com.tangem.datasource.config import com.squareup.moshi.JsonAdapter import com.squareup.moshi.Moshi -import com.tangem.tap.common.AssetReader -import com.tangem.tap.domain.configurable.Loader +import com.tangem.datasource.config.models.ConfigModel +import com.tangem.datasource.config.models.ConfigValueModel +import com.tangem.datasource.config.models.FeatureModel +import com.tangem.datasource.utils.AssetReader import timber.log.Timber /** @@ -12,15 +14,19 @@ import timber.log.Timber class FeaturesLocalLoader( private val assetReader: AssetReader, private val moshi: Moshi, + buildEnvironment: String, ) : Loader { + private val featuresName = "features_$buildEnvironment" + private val configValuesName = "tangem-app-config/config_$buildEnvironment" + override fun load(onComplete: (ConfigModel) -> Unit) { val config = try { val featureAdapter: JsonAdapter = moshi.adapter(FeatureModel::class.java) val valuesAdapter: JsonAdapter = moshi.adapter(ConfigValueModel::class.java) - val jsonFeatures = assetReader.readAssetAsString(Loader.featuresName) - val jsonConfigValues = assetReader.readAssetAsString(Loader.configValuesName) + val jsonFeatures = assetReader.readAssetAsString(featuresName) + val jsonConfigValues = assetReader.readAssetAsString(configValuesName) ConfigModel(featureAdapter.fromJson(jsonFeatures), valuesAdapter.fromJson(jsonConfigValues)) } catch (ex: Exception) { diff --git a/core/datasource/src/main/java/com/tangem/datasource/config/Loader.kt b/core/datasource/src/main/java/com/tangem/datasource/config/Loader.kt new file mode 100644 index 0000000000..515e2b0d23 --- /dev/null +++ b/core/datasource/src/main/java/com/tangem/datasource/config/Loader.kt @@ -0,0 +1,8 @@ +package com.tangem.datasource.config + +/** +[REDACTED_AUTHOR] + */ +interface Loader { + fun load(onComplete: (T) -> Unit) +} \ No newline at end of file diff --git a/core/datasource/src/main/java/com/tangem/datasource/config/models/Config.kt b/core/datasource/src/main/java/com/tangem/datasource/config/models/Config.kt new file mode 100644 index 0000000000..775e228d34 --- /dev/null +++ b/core/datasource/src/main/java/com/tangem/datasource/config/models/Config.kt @@ -0,0 +1,21 @@ +package com.tangem.datasource.config.models + +import com.tangem.blockchain.common.BlockchainSdkConfig + +data class Config( + val coinMarketCapKey: String = "f6622117-c043-47a0-8975-9d673ce484de", + val moonPayApiKey: String = "pk_test_kc90oYTANy7UQdBavDKGfL4K9l6VEPE", + val moonPayApiSecretKey: String = "sk_test_V8w4M19LbDjjYOt170s0tGuvXAgyEb1C", + val mercuryoWidgetId: String = "", + val mercuryoSecret: String = "", + val appsFlyerDevKey: String = "", + val amplitudeApiKey: String = "", + val blockchainSdkConfig: BlockchainSdkConfig = BlockchainSdkConfig(), + val isSendingToPayIdEnabled: Boolean = true, + val isTopUpEnabled: Boolean = false, + @Deprecated("Not relevant since version 3.23") + val isCreatingTwinCardsAllowed: Boolean = false, + val shopify: ShopifyShop? = null, + val zendesk: ZendeskConfig? = null, + val saltPayConfig: SaltPayConfig? = null, +) \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/domain/configurable/config/JsonModels.kt b/core/datasource/src/main/java/com/tangem/datasource/config/models/JsonModels.kt similarity index 83% rename from app/src/main/java/com/tangem/tap/domain/configurable/config/JsonModels.kt rename to core/datasource/src/main/java/com/tangem/datasource/config/models/JsonModels.kt index 586ba0c63b..ad23a4379d 100644 --- a/app/src/main/java/com/tangem/tap/domain/configurable/config/JsonModels.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/config/models/JsonModels.kt @@ -1,8 +1,4 @@ -package com.tangem.tap.domain.configurable.config - -import com.tangem.tap.common.shop.shopify.ShopifyShop -import com.tangem.tap.common.zendesk.ZendeskConfig -import com.tangem.tap.features.onboarding.products.wallet.saltPay.SaltPayConfig +package com.tangem.datasource.config.models /** [REDACTED_AUTHOR] diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/SaltPayConfig.kt b/core/datasource/src/main/java/com/tangem/datasource/config/models/SaltPayConfig.kt similarity index 87% rename from app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/SaltPayConfig.kt rename to core/datasource/src/main/java/com/tangem/datasource/config/models/SaltPayConfig.kt index 19048168de..65efeb65d7 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/saltPay/SaltPayConfig.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/config/models/SaltPayConfig.kt @@ -1,6 +1,5 @@ -package com.tangem.tap.features.onboarding.products.wallet.saltPay +package com.tangem.datasource.config.models -import com.tangem.tap.common.zendesk.ZendeskConfig import org.spongycastle.util.encoders.Base64.toBase64String /** diff --git a/app/src/main/java/com/tangem/tap/common/shop/shopify/ShopifyShop.kt b/core/datasource/src/main/java/com/tangem/datasource/config/models/ShopifyShop.kt similarity index 85% rename from app/src/main/java/com/tangem/tap/common/shop/shopify/ShopifyShop.kt rename to core/datasource/src/main/java/com/tangem/datasource/config/models/ShopifyShop.kt index 776374e240..cdda42d58c 100644 --- a/app/src/main/java/com/tangem/tap/common/shop/shopify/ShopifyShop.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/config/models/ShopifyShop.kt @@ -1,4 +1,4 @@ -package com.tangem.tap.common.shop.shopify +package com.tangem.datasource.config.models import com.squareup.moshi.Json import com.squareup.moshi.JsonClass diff --git a/app/src/main/java/com/tangem/tap/common/zendesk/ZendeskConfig.kt b/core/datasource/src/main/java/com/tangem/datasource/config/models/ZendeskConfig.kt similarity index 90% rename from app/src/main/java/com/tangem/tap/common/zendesk/ZendeskConfig.kt rename to core/datasource/src/main/java/com/tangem/datasource/config/models/ZendeskConfig.kt index 66569ee1b7..84e9f9c786 100644 --- a/app/src/main/java/com/tangem/tap/common/zendesk/ZendeskConfig.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/config/models/ZendeskConfig.kt @@ -1,4 +1,4 @@ -package com.tangem.tap.common.zendesk +package com.tangem.datasource.config.models import com.squareup.moshi.Json import com.squareup.moshi.JsonClass diff --git a/core/datasource/src/main/java/com/tangem/datasource/di/ConfigModule.kt b/core/datasource/src/main/java/com/tangem/datasource/di/ConfigModule.kt new file mode 100644 index 0000000000..4841d4470f --- /dev/null +++ b/core/datasource/src/main/java/com/tangem/datasource/di/ConfigModule.kt @@ -0,0 +1,16 @@ +package com.tangem.datasource.di + +import com.tangem.datasource.config.ConfigManager +import com.tangem.datasource.config.ConfigManagerImpl +import dagger.Binds +import dagger.Module +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent + +@Module +@InstallIn(SingletonComponent::class) +internal interface ConfigModule { + + @Binds + fun bindConfigManager(configManager: ConfigManagerImpl): ConfigManager +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/common/AssetReader.kt b/core/datasource/src/main/java/com/tangem/datasource/utils/AssetReader.kt similarity index 65% rename from app/src/main/java/com/tangem/tap/common/AssetReader.kt rename to core/datasource/src/main/java/com/tangem/datasource/utils/AssetReader.kt index 3f5eb10dd9..919d273aea 100644 --- a/app/src/main/java/com/tangem/tap/common/AssetReader.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/utils/AssetReader.kt @@ -1,7 +1,6 @@ -package com.tangem.tap.common +package com.tangem.datasource.utils import android.content.Context -import com.tangem.tap.common.extensions.readAssetAsString /** [REDACTED_AUTHOR] @@ -17,4 +16,8 @@ class AndroidAssetReader( override fun readAssetAsString(name: String): String { return context.readAssetAsString(name) } +} + +fun Context.readAssetAsString(fileName: String): String { + return this.assets.open("$fileName.json").bufferedReader().readText() } \ No newline at end of file diff --git a/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/SwapInteractorImpl.kt b/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/SwapInteractorImpl.kt index ddba5d7da9..7d45473ab1 100644 --- a/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/SwapInteractorImpl.kt +++ b/features/swap/domain/src/main/java/com/tangem/feature/swap/domain/SwapInteractorImpl.kt @@ -51,7 +51,7 @@ internal class SwapInteractorImpl @Inject constructor( // replace tokens in wallet tokens list with loaded same val loadedOnWalletsMap = mutableSetOf() - val tokensInWallet = userWalletManager.getUserTokens(networkId) + val tokensInWallet = userWalletManager.getUserTokens(networkId, false) .filter { it.symbol != initialCurrency.symbol } .map { token -> allLoadedTokens.firstOrNull { it.symbol == token.symbol }?.let { diff --git a/libs/crypto/src/main/java/com/tangem/lib/crypto/UserWalletManager.kt b/libs/crypto/src/main/java/com/tangem/lib/crypto/UserWalletManager.kt index 0762d247e5..39fe84e459 100644 --- a/libs/crypto/src/main/java/com/tangem/lib/crypto/UserWalletManager.kt +++ b/libs/crypto/src/main/java/com/tangem/lib/crypto/UserWalletManager.kt @@ -13,7 +13,7 @@ interface UserWalletManager { * Returns all user tokens (merged from local and backend) */ @Throws(IllegalStateException::class) - suspend fun getUserTokens(networkId: String): List + suspend fun getUserTokens(networkId: String, isExcludeCustom: Boolean): List @Throws(IllegalStateException::class) fun getNativeTokenForNetwork(networkId: String): Currency