From fa7577347170b478e398950cced556d601b7fc06 Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 14 Sep 2022 20:03:06 +0300 Subject: [PATCH 01/10] Updated on 2026-08-14 --- .../java/com/tangem/tap/TapApplication.kt | 18 +++---- .../tap/common/feedback/FeedbackManager.kt | 4 +- .../java/com/tangem/tap/common/images/Coil.kt | 6 +-- .../tangem/tap/common/redux/LogMiddleware.kt | 6 ++- .../common/redux/global/GlobalMidlleware.kt | 11 +++- .../mercuryo/MercuryoService.kt | 7 ++- .../moonpay/MoonPayService.kt | 7 ++- .../tangem/tap/network/payid/PayIdService.kt | 5 +- .../tap/network/payid/PayIdVerifyService.kt | 7 ++- .../com/tangem/domain/common/LogConfig.kt | 51 +++++++++++++++++++ .../domain/redux/global/DomainGlobalState.kt | 8 ++- .../api/tangemTech/TangemTechService.kt | 15 +++--- .../com/tangem/network/common/Retrofit.kt | 2 +- 13 files changed, 112 insertions(+), 35 deletions(-) create mode 100644 domain/src/main/java/com/tangem/domain/common/LogConfig.kt diff --git a/app/src/main/java/com/tangem/tap/TapApplication.kt b/app/src/main/java/com/tangem/tap/TapApplication.kt index 0c69e5de88..4e62802bb5 100644 --- a/app/src/main/java/com/tangem/tap/TapApplication.kt +++ b/app/src/main/java/com/tangem/tap/TapApplication.kt @@ -39,7 +39,6 @@ val store = Store( middleware = AppState.getMiddleware(), state = AppState() ) -val logConfig = LogConfig() lateinit var foregroundActivityObserver: ForegroundActivityObserver @@ -76,13 +75,17 @@ class TapApplication : Application(), ImageLoaderFactory { initFeedbackManager() loadConfigs() - BlockchainSdkRetrofitBuilder.enableNetworkLogging = BuildConfig.DEBUG + BlockchainSdkRetrofitBuilder.enableNetworkLogging = + store.state.domainState.globalState.logConfig.network.blockchainSdkNetwork initAppsFlyer() } override fun newImageLoader(): ImageLoader { - return createCoilImageLoader(context = this) + return createCoilImageLoader( + context = this, + logEnabled = store.state.domainState.globalState.logConfig.imageLoader + ) } private fun loadConfigs() { @@ -132,6 +135,7 @@ class TapApplication : Application(), ImageLoaderFactory { infoHolder = infoHolder, logCollector = logWriter, preferencesStorage = preferencesStorage, + logEnabled = store.state.domainState.globalState.logConfig.zendesk, ), ), ) @@ -144,10 +148,4 @@ class TapApplication : Application(), ImageLoaderFactory { val analyticsHandler = GlobalAnalyticsHandler.createDefaultAnalyticHandlers(this) store.dispatch(GlobalAction.SetAnanlyticHandlers(analyticsHandler)) } -} - -data class LogConfig( - val coil: Boolean = BuildConfig.DEBUG, - val storeAction: Boolean = BuildConfig.DEBUG, - val zendesk: Boolean = BuildConfig.DEBUG, -) \ No newline at end of file +} \ No newline at end of file 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 ddd4e6ff6d..1631952ce6 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 @@ -7,7 +7,6 @@ import com.tangem.tap.common.extensions.sendEmail import com.tangem.tap.common.log.TangemLogCollector import com.tangem.tap.common.zendesk.ZendeskConfig import com.tangem.tap.foregroundActivityObserver -import com.tangem.tap.logConfig import com.tangem.tap.persistence.PreferencesStorage import com.tangem.tap.withForegroundActivity import com.tangem.wallet.R @@ -31,6 +30,7 @@ class FeedbackManager( val infoHolder: AdditionalFeedbackInfo, private val logCollector: TangemLogCollector, private val preferencesStorage: PreferencesStorage, + private val logEnabled: Boolean = false, ) { fun initChat( context: Context, @@ -43,7 +43,7 @@ class FeedbackManager( ) // Zendesk logs - Logger.setLoggable(logConfig.zendesk) + Logger.setLoggable(logEnabled) } fun sendEmail(feedbackData: FeedbackData, onFail: ((Exception) -> Unit)? = null) { diff --git a/app/src/main/java/com/tangem/tap/common/images/Coil.kt b/app/src/main/java/com/tangem/tap/common/images/Coil.kt index 64b7b76734..5224c40df0 100644 --- a/app/src/main/java/com/tangem/tap/common/images/Coil.kt +++ b/app/src/main/java/com/tangem/tap/common/images/Coil.kt @@ -4,7 +4,6 @@ import android.content.Context import android.util.Log import coil.ImageLoader import coil.util.Logger -import com.tangem.tap.logConfig import okhttp3.OkHttpClient import okhttp3.logging.HttpLoggingInterceptor import timber.log.Timber @@ -12,11 +11,12 @@ import timber.log.Timber private const val COIL_LOG_TAG = "COIL" fun createCoilImageLoader( - context: Context + context: Context, + logEnabled: Boolean = false, ): ImageLoader { return ImageLoader.Builder(context) .apply { - if (!logConfig.coil) return@apply + if (!logEnabled) return@apply logger(CoilTimberLogger()) okHttpClient { diff --git a/app/src/main/java/com/tangem/tap/common/redux/LogMiddleware.kt b/app/src/main/java/com/tangem/tap/common/redux/LogMiddleware.kt index 5e5daf10c8..2890a4d500 100644 --- a/app/src/main/java/com/tangem/tap/common/redux/LogMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/common/redux/LogMiddleware.kt @@ -1,6 +1,6 @@ package com.tangem.tap.common.redux -import com.tangem.tap.logConfig +import com.tangem.tap.store import org.rekotlin.Middleware import timber.log.Timber @@ -10,7 +10,9 @@ import timber.log.Timber val logMiddleware: Middleware = { dispatch, appState -> { nextDispatch -> { action -> - if (logConfig.storeAction) Timber.d("Dispatch action: $action") + if (store.state.domainState.globalState.logConfig.storeAction) { + Timber.d("Dispatch action: $action") + } nextDispatch(action) } } diff --git a/app/src/main/java/com/tangem/tap/common/redux/global/GlobalMidlleware.kt b/app/src/main/java/com/tangem/tap/common/redux/global/GlobalMidlleware.kt index 4d227fcd92..b6fb33dea2 100644 --- a/app/src/main/java/com/tangem/tap/common/redux/global/GlobalMidlleware.kt +++ b/app/src/main/java/com/tangem/tap/common/redux/global/GlobalMidlleware.kt @@ -96,7 +96,9 @@ private fun handleAction(action: Action, appState: () -> AppState?, dispatch: Di ?.setWalletsInfo(action.walletManagers) } is GlobalAction.ExchangeManager.Init -> { - val config = appState()?.globalState?.configManager?.config + val appStateSafe = appState() ?: return + val config = appStateSafe.globalState.configManager?.config + val logConfig = appStateSafe.domainState.globalState.logConfig ifNotNull( config?.mercuryoWidgetId, config?.mercuryoSecret, @@ -108,8 +110,13 @@ private fun handleAction(action: Action, appState: () -> AppState?, dispatch: Di apiVersion = MercuryoApi.API_VERSION, mercuryoWidgetId = mercuryoWidgetId, secret = mercuryoSecret, + logEnabled = logConfig.network.mercuryoService, + ) + val sellService = MoonPayService( + apiKey = moonPayKey, + secretKey = moonPaySecretKey, + logEnabled = logConfig.network.moonPayService, ) - val sellService = MoonPayService(moonPayKey, moonPaySecretKey) val cardProvider = { store.state.globalState.scanResponse?.card } val exchangeManager = CurrencyExchangeManager( diff --git a/app/src/main/java/com/tangem/tap/network/exchangeServices/mercuryo/MercuryoService.kt b/app/src/main/java/com/tangem/tap/network/exchangeServices/mercuryo/MercuryoService.kt index 9e02287ff0..dec1f05bae 100644 --- a/app/src/main/java/com/tangem/tap/network/exchangeServices/mercuryo/MercuryoService.kt +++ b/app/src/main/java/com/tangem/tap/network/exchangeServices/mercuryo/MercuryoService.kt @@ -20,10 +20,13 @@ class MercuryoService( private val apiVersion: String, private val mercuryoWidgetId: String, private val secret: String, + private val logEnabled: Boolean, ) : ExchangeService, ExchangeUrlBuilder { - private val api: MercuryoApi = createRetrofitInstance(MercuryoApi.BASE_URL) - .create(MercuryoApi::class.java) + private val api: MercuryoApi = createRetrofitInstance( + baseUrl = MercuryoApi.BASE_URL, + logEnabled = logEnabled, + ).create(MercuryoApi::class.java) private val blockchainsAvailableToBuy = mutableListOf() private val tokensAvailableToBy = mutableMapOf>() diff --git a/app/src/main/java/com/tangem/tap/network/exchangeServices/moonpay/MoonPayService.kt b/app/src/main/java/com/tangem/tap/network/exchangeServices/moonpay/MoonPayService.kt index 00db516c5b..5e52716d98 100644 --- a/app/src/main/java/com/tangem/tap/network/exchangeServices/moonpay/MoonPayService.kt +++ b/app/src/main/java/com/tangem/tap/network/exchangeServices/moonpay/MoonPayService.kt @@ -20,11 +20,14 @@ import javax.crypto.spec.SecretKeySpec class MoonPayService( private val apiKey: String, private val secretKey: String, + private val logEnabled: Boolean, ) : ExchangeService, ExchangeUrlBuilder { private val api: MoonPayApi by lazy { - createRetrofitInstance(MoonPayApi.MOOONPAY_BASE_URL) - .create(MoonPayApi::class.java) + createRetrofitInstance( + baseUrl = MoonPayApi.MOOONPAY_BASE_URL, + logEnabled = logEnabled, + ).create(MoonPayApi::class.java) } private var status: MoonPayStatus? = null diff --git a/app/src/main/java/com/tangem/tap/network/payid/PayIdService.kt b/app/src/main/java/com/tangem/tap/network/payid/PayIdService.kt index b82c9d60df..f4612643d3 100644 --- a/app/src/main/java/com/tangem/tap/network/payid/PayIdService.kt +++ b/app/src/main/java/com/tangem/tap/network/payid/PayIdService.kt @@ -23,7 +23,10 @@ class PayIdService { return performRequest { payIdApi.setPayId(cardId, publicKey, payId, address, network) } } - private fun provideRetrofit(): Retrofit = createRetrofitInstance("https://tangem.com/") + private fun provideRetrofit(): Retrofit = createRetrofitInstance( + baseUrl = "https://tangem.com/", + logEnabled = false, + ) } diff --git a/app/src/main/java/com/tangem/tap/network/payid/PayIdVerifyService.kt b/app/src/main/java/com/tangem/tap/network/payid/PayIdVerifyService.kt index f3b327591b..f5e7ed1f96 100644 --- a/app/src/main/java/com/tangem/tap/network/payid/PayIdVerifyService.kt +++ b/app/src/main/java/com/tangem/tap/network/payid/PayIdVerifyService.kt @@ -8,10 +8,13 @@ import com.tangem.network.common.createRetrofitInstance [REDACTED_AUTHOR] */ class PayIdVerifyService( - private val baseUrl: String + private val baseUrl: String, ) { - private val api = createRetrofitInstance(baseUrl).create(PayIdVerifyApi::class.java) + private val api = createRetrofitInstance( + baseUrl = baseUrl, + logEnabled = false, + ).create(PayIdVerifyApi::class.java) suspend fun verifyAddress(user: String, network: String): Result { return performRequest { api.verifyAddress(user, createNetworkHeader(network)) } diff --git a/domain/src/main/java/com/tangem/domain/common/LogConfig.kt b/domain/src/main/java/com/tangem/domain/common/LogConfig.kt new file mode 100644 index 0000000000..faec8f03d5 --- /dev/null +++ b/domain/src/main/java/com/tangem/domain/common/LogConfig.kt @@ -0,0 +1,51 @@ +package com.tangem.domain.common + +import com.tangem.domain.features.BuildConfig + +data class LogConfig( + val imageLoader: Boolean, + val storeAction: Boolean, + val zendesk: Boolean, + val network: NetworkLogConfig, +) { + + companion object { + fun buildBased(): LogConfig = LogConfig( + imageLoader = BuildConfig.DEBUG, + storeAction = BuildConfig.DEBUG, + zendesk = BuildConfig.DEBUG, + network = NetworkLogConfig.buildBased(), + ) + + fun custom(): LogConfig = LogConfig( + imageLoader = false, + storeAction = false, + zendesk = false, + network = NetworkLogConfig.custom(), + ) + } +} + +data class NetworkLogConfig( + val mercuryoService: Boolean, + val moonPayService: Boolean, + val tangemTechService: Boolean, + val blockchainSdkNetwork: Boolean, +) { + + companion object { + fun buildBased(): NetworkLogConfig = NetworkLogConfig( + mercuryoService = BuildConfig.DEBUG, + moonPayService = BuildConfig.DEBUG, + tangemTechService = BuildConfig.DEBUG, + blockchainSdkNetwork = BuildConfig.DEBUG, + ) + + fun custom(): NetworkLogConfig = NetworkLogConfig( + mercuryoService = false, + moonPayService = false, + tangemTechService = false, + blockchainSdkNetwork = true, + ) + } +} \ No newline at end of file diff --git a/domain/src/main/java/com/tangem/domain/redux/global/DomainGlobalState.kt b/domain/src/main/java/com/tangem/domain/redux/global/DomainGlobalState.kt index 5bf1264638..96ab608657 100644 --- a/domain/src/main/java/com/tangem/domain/redux/global/DomainGlobalState.kt +++ b/domain/src/main/java/com/tangem/domain/redux/global/DomainGlobalState.kt @@ -1,6 +1,8 @@ package com.tangem.domain.redux.global import com.tangem.domain.DomainDialog +import com.tangem.domain.common.LogConfig +import com.tangem.domain.common.NetworkLogConfig import com.tangem.domain.common.ScanResponse import com.tangem.network.api.tangemTech.TangemTechService @@ -12,10 +14,12 @@ data class DomainGlobalState( // It updates on GlobalAction.SaveScanNoteResponse -> DomainGlobalAction.SaveScanNoteResponse(scanResponse) val scanResponse: ScanResponse? = null, // - val networkServices: NetworkServices = NetworkServices(), + val logConfig: LogConfig = LogConfig.buildBased(), + val networkServices: NetworkServices = NetworkServices(logConfig.network), val dialog: DomainDialog? = null, ) data class NetworkServices( - val tangemTechService: TangemTechService = TangemTechService() + val networkLogConfig: NetworkLogConfig, + val tangemTechService: TangemTechService = TangemTechService(networkLogConfig.tangemTechService) ) diff --git a/network/src/main/java/com/tangem/network/api/tangemTech/TangemTechService.kt b/network/src/main/java/com/tangem/network/api/tangemTech/TangemTechService.kt index 3bf3bd232e..b52b34c013 100644 --- a/network/src/main/java/com/tangem/network/api/tangemTech/TangemTechService.kt +++ b/network/src/main/java/com/tangem/network/api/tangemTech/TangemTechService.kt @@ -11,9 +11,12 @@ import kotlinx.coroutines.withContext /** [REDACTED_AUTHOR] */ -class TangemTechService { +class TangemTechService( + private val logIsEnabled: Boolean = false, +) { + private val headerInterceptors = mutableListOf( - CacheControlHttpInterceptor(cacheMaxAge) + CacheControlHttpInterceptor(cacheMaxAge), ) private var api: TangemTechApi = createApi() @@ -24,7 +27,7 @@ class TangemTechService { active: Boolean? = null, searchText: String? = null, offset: Int? = null, - limit: Int? = null + limit: Int? = null, ): Result = withContext(Dispatchers.IO) { performRequest { api.coins( @@ -33,14 +36,14 @@ class TangemTechService { active = active, searchText = searchText, offset = offset, - limit = limit + limit = limit, ) } } suspend fun rates( currency: String, - ids: List + ids: List, ): Result = withContext(Dispatchers.IO) { performRequest { api.rates(currency.lowercase(), ids.joinToString(",")) @@ -65,7 +68,7 @@ class TangemTechService { val retrofit = createRetrofitInstance( baseUrl = baseUrl, interceptors = headerInterceptors.toList(), -// logEnabled = true, + logEnabled = logIsEnabled, ) return retrofit.create(TangemTechApi::class.java) } diff --git a/network/src/main/java/com/tangem/network/common/Retrofit.kt b/network/src/main/java/com/tangem/network/common/Retrofit.kt index 86ab156c51..70bb657bce 100644 --- a/network/src/main/java/com/tangem/network/common/Retrofit.kt +++ b/network/src/main/java/com/tangem/network/common/Retrofit.kt @@ -13,7 +13,7 @@ fun createRetrofitInstance( okHttpBuilder: OkHttpClient.Builder = OkHttpClient.Builder(), interceptors: List = emptyList(), converterFactory: Converter.Factory = MoshiConverter.createFactory(), - logEnabled: Boolean = false + logEnabled: Boolean, ): Retrofit { okHttpBuilder.apply { callTimeout(10, TimeUnit.SECONDS) From 2c90913754f8a3b40159fc8890e7569f69cf4415 Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 15 Sep 2022 20:36:34 +0300 Subject: [PATCH 02/10] Updated on 2026-08-14 --- .../java/com/tangem/tap/TapApplication.kt | 8 +-- .../tangem/tap/common/redux/LogMiddleware.kt | 4 +- .../common/redux/global/GlobalMidlleware.kt | 6 +- .../com/tangem/domain/common/LogConfig.kt | 56 ++++--------------- .../domain/redux/global/DomainGlobalState.kt | 7 +-- 5 files changed, 21 insertions(+), 60 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/TapApplication.kt b/app/src/main/java/com/tangem/tap/TapApplication.kt index 4e62802bb5..703b2f5602 100644 --- a/app/src/main/java/com/tangem/tap/TapApplication.kt +++ b/app/src/main/java/com/tangem/tap/TapApplication.kt @@ -11,6 +11,7 @@ import com.tangem.Log import com.tangem.LogFormat import com.tangem.blockchain.network.BlockchainSdkRetrofitBuilder import com.tangem.domain.DomainLayer +import com.tangem.domain.common.LogConfig import com.tangem.network.common.MoshiConverter import com.tangem.tap.common.analytics.GlobalAnalyticsHandler import com.tangem.tap.common.feedback.AdditionalFeedbackInfo @@ -75,8 +76,7 @@ class TapApplication : Application(), ImageLoaderFactory { initFeedbackManager() loadConfigs() - BlockchainSdkRetrofitBuilder.enableNetworkLogging = - store.state.domainState.globalState.logConfig.network.blockchainSdkNetwork + BlockchainSdkRetrofitBuilder.enableNetworkLogging = LogConfig.network.blockchainSdkNetwork initAppsFlyer() } @@ -84,7 +84,7 @@ class TapApplication : Application(), ImageLoaderFactory { override fun newImageLoader(): ImageLoader { return createCoilImageLoader( context = this, - logEnabled = store.state.domainState.globalState.logConfig.imageLoader + logEnabled = LogConfig.imageLoader ) } @@ -135,7 +135,7 @@ class TapApplication : Application(), ImageLoaderFactory { infoHolder = infoHolder, logCollector = logWriter, preferencesStorage = preferencesStorage, - logEnabled = store.state.domainState.globalState.logConfig.zendesk, + logEnabled = LogConfig.zendesk, ), ), ) diff --git a/app/src/main/java/com/tangem/tap/common/redux/LogMiddleware.kt b/app/src/main/java/com/tangem/tap/common/redux/LogMiddleware.kt index 2890a4d500..1337effab2 100644 --- a/app/src/main/java/com/tangem/tap/common/redux/LogMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/common/redux/LogMiddleware.kt @@ -1,6 +1,6 @@ package com.tangem.tap.common.redux -import com.tangem.tap.store +import com.tangem.domain.common.LogConfig import org.rekotlin.Middleware import timber.log.Timber @@ -10,7 +10,7 @@ import timber.log.Timber val logMiddleware: Middleware = { dispatch, appState -> { nextDispatch -> { action -> - if (store.state.domainState.globalState.logConfig.storeAction) { + if (LogConfig.storeAction) { Timber.d("Dispatch action: $action") } nextDispatch(action) diff --git a/app/src/main/java/com/tangem/tap/common/redux/global/GlobalMidlleware.kt b/app/src/main/java/com/tangem/tap/common/redux/global/GlobalMidlleware.kt index b6fb33dea2..e3b1dfb9af 100644 --- a/app/src/main/java/com/tangem/tap/common/redux/global/GlobalMidlleware.kt +++ b/app/src/main/java/com/tangem/tap/common/redux/global/GlobalMidlleware.kt @@ -5,6 +5,7 @@ import com.tangem.common.core.TangemSdkError import com.tangem.common.extensions.guard import com.tangem.common.extensions.ifNotNull import com.tangem.common.services.Result +import com.tangem.domain.common.LogConfig import com.tangem.domain.common.extensions.withMainContext import com.tangem.tap.common.extensions.dispatchDebugErrorNotification import com.tangem.tap.common.extensions.dispatchDialogShow @@ -98,7 +99,6 @@ private fun handleAction(action: Action, appState: () -> AppState?, dispatch: Di is GlobalAction.ExchangeManager.Init -> { val appStateSafe = appState() ?: return val config = appStateSafe.globalState.configManager?.config - val logConfig = appStateSafe.domainState.globalState.logConfig ifNotNull( config?.mercuryoWidgetId, config?.mercuryoSecret, @@ -110,12 +110,12 @@ private fun handleAction(action: Action, appState: () -> AppState?, dispatch: Di apiVersion = MercuryoApi.API_VERSION, mercuryoWidgetId = mercuryoWidgetId, secret = mercuryoSecret, - logEnabled = logConfig.network.mercuryoService, + logEnabled = LogConfig.network.mercuryoService, ) val sellService = MoonPayService( apiKey = moonPayKey, secretKey = moonPaySecretKey, - logEnabled = logConfig.network.moonPayService, + logEnabled = LogConfig.network.moonPayService, ) val cardProvider = { store.state.globalState.scanResponse?.card } diff --git a/domain/src/main/java/com/tangem/domain/common/LogConfig.kt b/domain/src/main/java/com/tangem/domain/common/LogConfig.kt index faec8f03d5..e03fb984ba 100644 --- a/domain/src/main/java/com/tangem/domain/common/LogConfig.kt +++ b/domain/src/main/java/com/tangem/domain/common/LogConfig.kt @@ -1,51 +1,15 @@ package com.tangem.domain.common -import com.tangem.domain.features.BuildConfig - -data class LogConfig( - val imageLoader: Boolean, - val storeAction: Boolean, - val zendesk: Boolean, - val network: NetworkLogConfig, -) { - - companion object { - fun buildBased(): LogConfig = LogConfig( - imageLoader = BuildConfig.DEBUG, - storeAction = BuildConfig.DEBUG, - zendesk = BuildConfig.DEBUG, - network = NetworkLogConfig.buildBased(), - ) - - fun custom(): LogConfig = LogConfig( - imageLoader = false, - storeAction = false, - zendesk = false, - network = NetworkLogConfig.custom(), - ) - } +object LogConfig { + const val imageLoader: Boolean = false + const val storeAction: Boolean = false + const val zendesk: Boolean = false + val network: NetworkLogConfig = NetworkLogConfig } -data class NetworkLogConfig( - val mercuryoService: Boolean, - val moonPayService: Boolean, - val tangemTechService: Boolean, - val blockchainSdkNetwork: Boolean, -) { - - companion object { - fun buildBased(): NetworkLogConfig = NetworkLogConfig( - mercuryoService = BuildConfig.DEBUG, - moonPayService = BuildConfig.DEBUG, - tangemTechService = BuildConfig.DEBUG, - blockchainSdkNetwork = BuildConfig.DEBUG, - ) - - fun custom(): NetworkLogConfig = NetworkLogConfig( - mercuryoService = false, - moonPayService = false, - tangemTechService = false, - blockchainSdkNetwork = true, - ) - } +object NetworkLogConfig { + const val mercuryoService: Boolean = false + const val moonPayService: Boolean = false + const val tangemTechService: Boolean = false + const val blockchainSdkNetwork: Boolean = false } \ No newline at end of file diff --git a/domain/src/main/java/com/tangem/domain/redux/global/DomainGlobalState.kt b/domain/src/main/java/com/tangem/domain/redux/global/DomainGlobalState.kt index 96ab608657..1f2109b371 100644 --- a/domain/src/main/java/com/tangem/domain/redux/global/DomainGlobalState.kt +++ b/domain/src/main/java/com/tangem/domain/redux/global/DomainGlobalState.kt @@ -2,7 +2,6 @@ package com.tangem.domain.redux.global import com.tangem.domain.DomainDialog import com.tangem.domain.common.LogConfig -import com.tangem.domain.common.NetworkLogConfig import com.tangem.domain.common.ScanResponse import com.tangem.network.api.tangemTech.TangemTechService @@ -14,12 +13,10 @@ data class DomainGlobalState( // It updates on GlobalAction.SaveScanNoteResponse -> DomainGlobalAction.SaveScanNoteResponse(scanResponse) val scanResponse: ScanResponse? = null, // - val logConfig: LogConfig = LogConfig.buildBased(), - val networkServices: NetworkServices = NetworkServices(logConfig.network), + val networkServices: NetworkServices = NetworkServices(), val dialog: DomainDialog? = null, ) data class NetworkServices( - val networkLogConfig: NetworkLogConfig, - val tangemTechService: TangemTechService = TangemTechService(networkLogConfig.tangemTechService) + val tangemTechService: TangemTechService = TangemTechService(LogConfig.network.tangemTechService) ) From b156cc3e62e7e155a21a461653767f42cd12faef Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 19 Sep 2022 15:50:27 +0300 Subject: [PATCH 03/10] Updated on 2026-08-14 --- domain/src/main/java/com/tangem/domain/common/LogConfig.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/domain/src/main/java/com/tangem/domain/common/LogConfig.kt b/domain/src/main/java/com/tangem/domain/common/LogConfig.kt index e03fb984ba..62ed74714a 100644 --- a/domain/src/main/java/com/tangem/domain/common/LogConfig.kt +++ b/domain/src/main/java/com/tangem/domain/common/LogConfig.kt @@ -2,7 +2,7 @@ package com.tangem.domain.common object LogConfig { const val imageLoader: Boolean = false - const val storeAction: Boolean = false + const val storeAction: Boolean = true const val zendesk: Boolean = false val network: NetworkLogConfig = NetworkLogConfig } @@ -10,6 +10,6 @@ object LogConfig { object NetworkLogConfig { const val mercuryoService: Boolean = false const val moonPayService: Boolean = false - const val tangemTechService: Boolean = false - const val blockchainSdkNetwork: Boolean = false + const val tangemTechService: Boolean = true + const val blockchainSdkNetwork: Boolean = true } \ No newline at end of file From a8ff0faf0b7fa996f591501a6f7ddebabe719403 Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 19 Sep 2022 15:51:53 +0300 Subject: [PATCH 04/10] Updated on 2026-08-14 --- .../java/com/tangem/domain/common/LogConfig.kt | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/domain/src/main/java/com/tangem/domain/common/LogConfig.kt b/domain/src/main/java/com/tangem/domain/common/LogConfig.kt index 62ed74714a..56c2950141 100644 --- a/domain/src/main/java/com/tangem/domain/common/LogConfig.kt +++ b/domain/src/main/java/com/tangem/domain/common/LogConfig.kt @@ -1,15 +1,17 @@ package com.tangem.domain.common +import com.tangem.domain.features.BuildConfig + object LogConfig { - const val imageLoader: Boolean = false - const val storeAction: Boolean = true - const val zendesk: Boolean = false + val imageLoader: Boolean = false + val storeAction: Boolean = BuildConfig.DEBUG + val zendesk: Boolean = false val network: NetworkLogConfig = NetworkLogConfig } object NetworkLogConfig { - const val mercuryoService: Boolean = false - const val moonPayService: Boolean = false - const val tangemTechService: Boolean = true - const val blockchainSdkNetwork: Boolean = true + val mercuryoService: Boolean = false + val moonPayService: Boolean = false + val tangemTechService: Boolean = BuildConfig.DEBUG + val blockchainSdkNetwork: Boolean = BuildConfig.DEBUG } \ No newline at end of file From d2cd45c9323c7879bbd5c66731353a72e922084c Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 19 Sep 2022 20:52:58 +0300 Subject: [PATCH 05/10] Updated on 2026-08-14 --- app/src/main/assets/testnet_tokens.json | 11 +++++++++++ .../tangem/tap/common/extensions/Blockchain.kt | 2 ++ app/src/main/res/drawable/ic_optimism.xml | 16 ++++++++++++++++ .../main/res/drawable/ic_optimism_no_color.xml | 16 ++++++++++++++++ dependencies.gradle | 2 +- .../domain/common/extensions/Blockchain.kt | 5 +++++ 6 files changed, 51 insertions(+), 1 deletion(-) create mode 100644 app/src/main/res/drawable/ic_optimism.xml create mode 100644 app/src/main/res/drawable/ic_optimism_no_color.xml diff --git a/app/src/main/assets/testnet_tokens.json b/app/src/main/assets/testnet_tokens.json index 179a72b282..25abb76a88 100644 --- a/app/src/main/assets/testnet_tokens.json +++ b/app/src/main/assets/testnet_tokens.json @@ -430,6 +430,17 @@ "networkId" : "polkadot/test" } ] + }, + { + "id": "optimistic-ethereum", + "name": "Optimistic Ethereum", + "symbol": "ETH", + "active": true, + "networks": [ + { + "networkId": "optimistic-ethereum/test" + } + ] } ], diff --git a/app/src/main/java/com/tangem/tap/common/extensions/Blockchain.kt b/app/src/main/java/com/tangem/tap/common/extensions/Blockchain.kt index 73f63aa2a8..062023659b 100644 --- a/app/src/main/java/com/tangem/tap/common/extensions/Blockchain.kt +++ b/app/src/main/java/com/tangem/tap/common/extensions/Blockchain.kt @@ -29,6 +29,7 @@ fun Blockchain.getRoundIconRes(): Int { Blockchain.Tron, Blockchain.TronTestnet -> R.drawable.ic_tron_round Blockchain.Gnosis -> R.drawable.ic_gnosis_round Blockchain.Polkadot, Blockchain.PolkadotTestnet -> R.drawable.ic_polkadot_round + Blockchain.Optimism, Blockchain.OptimismTestnet -> R.drawable.ic_optimism else -> R.drawable.ic_tangem_logo } } @@ -57,6 +58,7 @@ fun Blockchain.getGreyedOutIconRes(): Int { Blockchain.Tron, Blockchain.TronTestnet -> R.drawable.ic_tron_no_color Blockchain.Gnosis -> R.drawable.ic_gnosis_no_color Blockchain.Polkadot, Blockchain.PolkadotTestnet -> R.drawable.ic_polkadot_no_color + Blockchain.Optimism, Blockchain.OptimismTestnet -> R.drawable.ic_optimism_no_color else -> R.drawable.ic_tangem_logo } } diff --git a/app/src/main/res/drawable/ic_optimism.xml b/app/src/main/res/drawable/ic_optimism.xml new file mode 100644 index 0000000000..fb8ce845a1 --- /dev/null +++ b/app/src/main/res/drawable/ic_optimism.xml @@ -0,0 +1,16 @@ + + + + + + + diff --git a/app/src/main/res/drawable/ic_optimism_no_color.xml b/app/src/main/res/drawable/ic_optimism_no_color.xml new file mode 100644 index 0000000000..3a9d21620b --- /dev/null +++ b/app/src/main/res/drawable/ic_optimism_no_color.xml @@ -0,0 +1,16 @@ + + + + + + + diff --git a/dependencies.gradle b/dependencies.gradle index 8762730416..405174f4ad 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -2,7 +2,7 @@ ext.versions = [ kotlin : '1.6.10', build_gradle : '7.1.3', tangem_card_sdk : 'develop-159', - tangem_blockchain_sdk: 'develop-113', + tangem_blockchain_sdk: 'develop-114', // tangem_blockchain_sdk: '0.0.1', ] diff --git a/domain/src/main/java/com/tangem/domain/common/extensions/Blockchain.kt b/domain/src/main/java/com/tangem/domain/common/extensions/Blockchain.kt index a162d197b2..67fa6e9569 100644 --- a/domain/src/main/java/com/tangem/domain/common/extensions/Blockchain.kt +++ b/domain/src/main/java/com/tangem/domain/common/extensions/Blockchain.kt @@ -40,6 +40,8 @@ fun Blockchain.Companion.fromNetworkId(networkId: String): Blockchain? { "xdai" -> Blockchain.Gnosis "polkadot" -> Blockchain.Polkadot "polkadot/test" -> Blockchain.PolkadotTestnet + "optimistic-ethereum" -> Blockchain.Optimism + "optimistic-ethereum/test" -> Blockchain.OptimismTestnet "kusama" -> Blockchain.Kusama else -> null } @@ -86,6 +88,8 @@ fun Blockchain.toNetworkId(): String { Blockchain.Polkadot -> "polkadot" Blockchain.PolkadotTestnet -> "polkadot/test" Blockchain.Kusama -> "kusama" + Blockchain.Optimism -> "optimistic-ethereum" + Blockchain.OptimismTestnet -> "optimistic-ethereum/test" } } @@ -113,6 +117,7 @@ fun Blockchain.toCoinId(): String { Blockchain.Dogecoin -> "dogecoin" Blockchain.Gnosis -> "xdai" Blockchain.Kusama -> "kusama" + Blockchain.Optimism, Blockchain.OptimismTestnet -> "ethereum" Blockchain.Unknown -> "unknown" } } \ No newline at end of file From d021bef87aaf121302faba0a0bd414c0ea9f4f2b Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 19 Sep 2022 21:26:21 +0300 Subject: [PATCH 06/10] Updated on 2026-08-14 --- .../tap/common/extensions/Blockchain.kt | 2 ++ app/src/main/res/drawable/ic_dash.xml | 19 +++++++++++++++++++ .../main/res/drawable/ic_dash_no_color.xml | 19 +++++++++++++++++++ dependencies.gradle | 2 +- .../domain/common/extensions/Blockchain.kt | 5 ++++- 5 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 app/src/main/res/drawable/ic_dash.xml create mode 100644 app/src/main/res/drawable/ic_dash_no_color.xml diff --git a/app/src/main/java/com/tangem/tap/common/extensions/Blockchain.kt b/app/src/main/java/com/tangem/tap/common/extensions/Blockchain.kt index 062023659b..71165c14df 100644 --- a/app/src/main/java/com/tangem/tap/common/extensions/Blockchain.kt +++ b/app/src/main/java/com/tangem/tap/common/extensions/Blockchain.kt @@ -30,6 +30,7 @@ fun Blockchain.getRoundIconRes(): Int { Blockchain.Gnosis -> R.drawable.ic_gnosis_round Blockchain.Polkadot, Blockchain.PolkadotTestnet -> R.drawable.ic_polkadot_round Blockchain.Optimism, Blockchain.OptimismTestnet -> R.drawable.ic_optimism + Blockchain.Dash -> R.drawable.ic_dash else -> R.drawable.ic_tangem_logo } } @@ -59,6 +60,7 @@ fun Blockchain.getGreyedOutIconRes(): Int { Blockchain.Gnosis -> R.drawable.ic_gnosis_no_color Blockchain.Polkadot, Blockchain.PolkadotTestnet -> R.drawable.ic_polkadot_no_color Blockchain.Optimism, Blockchain.OptimismTestnet -> R.drawable.ic_optimism_no_color + Blockchain.Dash -> R.drawable.ic_dash_no_color else -> R.drawable.ic_tangem_logo } } diff --git a/app/src/main/res/drawable/ic_dash.xml b/app/src/main/res/drawable/ic_dash.xml new file mode 100644 index 0000000000..67df63c241 --- /dev/null +++ b/app/src/main/res/drawable/ic_dash.xml @@ -0,0 +1,19 @@ + + + + + + + + diff --git a/app/src/main/res/drawable/ic_dash_no_color.xml b/app/src/main/res/drawable/ic_dash_no_color.xml new file mode 100644 index 0000000000..be475ecf51 --- /dev/null +++ b/app/src/main/res/drawable/ic_dash_no_color.xml @@ -0,0 +1,19 @@ + + + + + + + + diff --git a/dependencies.gradle b/dependencies.gradle index 405174f4ad..5d1d0d6fa5 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -2,7 +2,7 @@ ext.versions = [ kotlin : '1.6.10', build_gradle : '7.1.3', tangem_card_sdk : 'develop-159', - tangem_blockchain_sdk: 'develop-114', + tangem_blockchain_sdk: 'develop-115', // tangem_blockchain_sdk: '0.0.1', ] diff --git a/domain/src/main/java/com/tangem/domain/common/extensions/Blockchain.kt b/domain/src/main/java/com/tangem/domain/common/extensions/Blockchain.kt index 67fa6e9569..fb7f671eb2 100644 --- a/domain/src/main/java/com/tangem/domain/common/extensions/Blockchain.kt +++ b/domain/src/main/java/com/tangem/domain/common/extensions/Blockchain.kt @@ -40,9 +40,10 @@ fun Blockchain.Companion.fromNetworkId(networkId: String): Blockchain? { "xdai" -> Blockchain.Gnosis "polkadot" -> Blockchain.Polkadot "polkadot/test" -> Blockchain.PolkadotTestnet + "kusama" -> Blockchain.Kusama "optimistic-ethereum" -> Blockchain.Optimism "optimistic-ethereum/test" -> Blockchain.OptimismTestnet - "kusama" -> Blockchain.Kusama + "dash" -> Blockchain.Dash else -> null } } @@ -90,6 +91,7 @@ fun Blockchain.toNetworkId(): String { Blockchain.Kusama -> "kusama" Blockchain.Optimism -> "optimistic-ethereum" Blockchain.OptimismTestnet -> "optimistic-ethereum/test" + Blockchain.Dash -> "dash" } } @@ -118,6 +120,7 @@ fun Blockchain.toCoinId(): String { Blockchain.Gnosis -> "xdai" Blockchain.Kusama -> "kusama" Blockchain.Optimism, Blockchain.OptimismTestnet -> "ethereum" + Blockchain.Dash -> "dash" Blockchain.Unknown -> "unknown" } } \ No newline at end of file From 608d576b8d370298814c0e3820a583c67b1eabd1 Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 19 Sep 2022 22:41:59 +0300 Subject: [PATCH 07/10] Updated on 2026-08-14 --- .../com/tangem/tap/common/extensions/UI.kt | 28 +++++++++++-------- .../wallet/ui/wallet/MultiWalletView.kt | 6 ++-- .../wallet/ui/wallet/SingleWalletView.kt | 3 +- .../main/res/values-de/strings_plurals.xml | 6 ++++ .../main/res/values-fr/strings_plurals.xml | 7 +++++ .../main/res/values-it/strings_plurals.xml | 6 ++++ app/src/main/res/values-ru/strings.xml | 1 - .../main/res/values-ru/strings_plurals.xml | 8 ++++++ app/src/main/res/values/strings_plurals.xml | 8 ++++++ .../main/res/values/strings_untranslated.xml | 1 - 10 files changed, 57 insertions(+), 17 deletions(-) create mode 100644 app/src/main/res/values-de/strings_plurals.xml create mode 100644 app/src/main/res/values-fr/strings_plurals.xml create mode 100644 app/src/main/res/values-it/strings_plurals.xml create mode 100644 app/src/main/res/values-ru/strings_plurals.xml create mode 100644 app/src/main/res/values/strings_plurals.xml 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 617f69c36d..4be902ebf7 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,7 +1,12 @@ package com.tangem.tap.common.extensions import android.app.Activity -import android.content.* +import android.content.ActivityNotFoundException +import android.content.ClipData +import android.content.ClipboardManager +import android.content.Context +import android.content.ContextWrapper +import android.content.Intent import android.content.res.Resources import android.graphics.drawable.Drawable import android.os.Build @@ -21,7 +26,6 @@ import androidx.fragment.app.Fragment import com.google.android.material.card.MaterialCardView import com.tangem.common.extensions.VoidCallback - fun Fragment.getDrawable(@DrawableRes drawableResId: Int): Drawable? { return ContextCompat.getDrawable(requireContext(), drawableResId) } @@ -53,6 +57,10 @@ fun View.getString(@StringRes id: Int, vararg formatArgs: String): String { return context.getString(id, *formatArgs) } +fun View.getQuantityString(@StringRes id: Int, quantity: Int): String { + return context.resources.getQuantityString(id, quantity, quantity) +} + fun View.getResourceName(): String { return try { resources.getResourceEntryName(id) @@ -89,15 +97,13 @@ fun View.invisible(invisible: Boolean = true, invokeBeforeStateChanged: (() -> U } else { this.show(invokeBeforeStateChanged) } - } fun Context.dpToPixels(dp: Int): Int = TypedValue.applyDimension( - TypedValue.COMPLEX_UNIT_DIP, dp.toFloat(), this.resources.displayMetrics + TypedValue.COMPLEX_UNIT_DIP, dp.toFloat(), this.resources.displayMetrics, ).toInt() - fun Context.pixelsToDp(pixels: Int): Int { return (pixels.toFloat() / (resources.displayMetrics.densityDpi.toFloat() / DisplayMetrics.DENSITY_DEFAULT)) @@ -107,7 +113,6 @@ fun Context.pixelsToDp(pixels: Int): Int { fun Context.dpToPixels(dp: Float): Float = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dp, this.resources.displayMetrics) - fun Context.pixelsToDp(pixels: Float): Float = (pixels / (resources.displayMetrics.densityDpi.toFloat() / DisplayMetrics.DENSITY_DEFAULT)) @@ -118,14 +123,14 @@ fun MaterialCardView.setMargins( marginLeftDp: Int = 16, marginTopDp: Int = 8, marginRightDp: Int = 16, - marginBottomDp: Int = 8 + marginBottomDp: Int = 8, ) { val params = this.layoutParams (params as ViewGroup.MarginLayoutParams).setMargins( context.dpToPixels(marginLeftDp), context.dpToPixels(marginTopDp), context.dpToPixels(marginRightDp), - context.dpToPixels(marginBottomDp) + context.dpToPixels(marginBottomDp), ) this.layoutParams = params } @@ -144,7 +149,8 @@ fun Activity.setSystemBarTextColor(setTextDark: Boolean) { } fun View.hideKeyboard() { - val inputMethodManager = context.getSystemService(android.content.Context.INPUT_METHOD_SERVICE) as? InputMethodManager + val inputMethodManager = + context.getSystemService(android.content.Context.INPUT_METHOD_SERVICE) as? InputMethodManager inputMethodManager?.hideSoftInputFromWindow(this.windowToken, 0) } @@ -182,7 +188,7 @@ fun Context.safeStartActivity( intent: Intent, options: Bundle? = null, fallback: ((ActivityNotFoundException) -> Unit)? = null, - finally: VoidCallback? = null + finally: VoidCallback? = null, ) { try { this.startActivity(intent, options) @@ -200,7 +206,7 @@ fun View.getString(resId: Int, vararg formatArgs: Any?): String { fun View.animateVisibility( show: Boolean, durationMillis: Long = SHORT_ANIMATION_DURATION, - hiddenVisibility: Int = View.GONE + hiddenVisibility: Int = View.GONE, ) { if (show) { this.animate() diff --git a/app/src/main/java/com/tangem/tap/features/wallet/ui/wallet/MultiWalletView.kt b/app/src/main/java/com/tangem/tap/features/wallet/ui/wallet/MultiWalletView.kt index 73504ddbfc..19c1eb1c8a 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/ui/wallet/MultiWalletView.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/ui/wallet/MultiWalletView.kt @@ -8,6 +8,7 @@ import com.tangem.domain.common.TapWorkarounds.derivationStyle import com.tangem.domain.common.TapWorkarounds.isTestCard import com.tangem.tap.common.extensions.animateVisibility import com.tangem.tap.common.extensions.formatAmountAsSpannedString +import com.tangem.tap.common.extensions.getQuantityString import com.tangem.tap.common.extensions.hide import com.tangem.tap.common.extensions.show import com.tangem.tap.common.redux.navigation.AppScreen @@ -27,7 +28,9 @@ import com.tangem.wallet.R import com.tangem.wallet.databinding.FragmentWalletBinding class MultiWalletView : WalletView() { + private lateinit var walletsAdapter: WalletAdapter + override fun changeWalletView(fragment: WalletFragment, binding: FragmentWalletBinding) { setFragment(fragment, binding) onViewCreated() @@ -51,8 +54,7 @@ class MultiWalletView : WalletView() { if (card?.backupStatus is Card.BackupStatus.Active) { val cardCount = (card.backupStatus as Card.BackupStatus.Active).cardCount + 1 tvTwinCardNumber.show() - tvTwinCardNumber.text = - fragment?.getString(R.string.wallet_twins_chip_format, 1, cardCount) + tvTwinCardNumber.text = tvTwinCardNumber.getQuantityString(R.plurals.card_label_card_count, cardCount) } else { tvTwinCardNumber.hide() } diff --git a/app/src/main/java/com/tangem/tap/features/wallet/ui/wallet/SingleWalletView.kt b/app/src/main/java/com/tangem/tap/features/wallet/ui/wallet/SingleWalletView.kt index ab271db8fb..9b8a2e759f 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/ui/wallet/SingleWalletView.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/ui/wallet/SingleWalletView.kt @@ -89,8 +89,7 @@ class SingleWalletView : WalletView() { TwinCardNumber.First -> 1 TwinCardNumber.Second -> 2 } - tvTwinCardNumber.text = - fragment?.getString(R.string.wallet_twins_chip_format, number, 2) + tvTwinCardNumber.text = fragment?.getString(R.string.wallet_twins_chip_format, number, 2) } if (twinCardsState?.cardNumber == null) { tvTwinCardNumber.hide() diff --git a/app/src/main/res/values-de/strings_plurals.xml b/app/src/main/res/values-de/strings_plurals.xml new file mode 100644 index 0000000000..fa02d656a3 --- /dev/null +++ b/app/src/main/res/values-de/strings_plurals.xml @@ -0,0 +1,6 @@ + + + %d card + %d cards + + diff --git a/app/src/main/res/values-fr/strings_plurals.xml b/app/src/main/res/values-fr/strings_plurals.xml new file mode 100644 index 0000000000..f7ce3f895b --- /dev/null +++ b/app/src/main/res/values-fr/strings_plurals.xml @@ -0,0 +1,7 @@ + + + %d card + %d cards + %d cards + + diff --git a/app/src/main/res/values-it/strings_plurals.xml b/app/src/main/res/values-it/strings_plurals.xml new file mode 100644 index 0000000000..fa02d656a3 --- /dev/null +++ b/app/src/main/res/values-it/strings_plurals.xml @@ -0,0 +1,6 @@ + + + %d card + %d cards + + diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 9c7aef46d4..ca3e7e93f1 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -314,7 +314,6 @@ Основная карта Сканировать основную карту Перейти к моему кошельку - Карта %1s из %2s Отправка %s Подготовьте резервную карту с номером %s Подготовьте основную карту с номером %s diff --git a/app/src/main/res/values-ru/strings_plurals.xml b/app/src/main/res/values-ru/strings_plurals.xml new file mode 100644 index 0000000000..53720a4bb6 --- /dev/null +++ b/app/src/main/res/values-ru/strings_plurals.xml @@ -0,0 +1,8 @@ + + + %d карта + %d карты + %d карт + %d карт + + diff --git a/app/src/main/res/values/strings_plurals.xml b/app/src/main/res/values/strings_plurals.xml new file mode 100644 index 0000000000..530ada144e --- /dev/null +++ b/app/src/main/res/values/strings_plurals.xml @@ -0,0 +1,8 @@ + + + %d card + %d card + %d cards + %d cards + + diff --git a/app/src/main/res/values/strings_untranslated.xml b/app/src/main/res/values/strings_untranslated.xml index cc9e1a3cf3..afdc44412f 100644 --- a/app/src/main/res/values/strings_untranslated.xml +++ b/app/src/main/res/values/strings_untranslated.xml @@ -286,7 +286,6 @@ Primary card Scan the primary card Continue to my wallet - Card %1s of %2s Sending %s Prepare the backup card with number %s Prepare the primary card with number %s From 6510ea4caf79765f9275d15a34932619f5c399e0 Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 19 Sep 2022 22:44:53 +0300 Subject: [PATCH 08/10] Updated on 2026-08-14 --- .../values-de/{strings_plurals.xml => strings_plurals_final.xml} | 0 .../values-fr/{strings_plurals.xml => strings_plurals_final.xml} | 0 .../values-it/{strings_plurals.xml => strings_plurals_final.xml} | 0 .../values-ru/{strings_plurals.xml => strings_plurals_final.xml} | 0 .../res/values/{strings_plurals.xml => strings_plurals_final.xml} | 0 5 files changed, 0 insertions(+), 0 deletions(-) rename app/src/main/res/values-de/{strings_plurals.xml => strings_plurals_final.xml} (100%) rename app/src/main/res/values-fr/{strings_plurals.xml => strings_plurals_final.xml} (100%) rename app/src/main/res/values-it/{strings_plurals.xml => strings_plurals_final.xml} (100%) rename app/src/main/res/values-ru/{strings_plurals.xml => strings_plurals_final.xml} (100%) rename app/src/main/res/values/{strings_plurals.xml => strings_plurals_final.xml} (100%) diff --git a/app/src/main/res/values-de/strings_plurals.xml b/app/src/main/res/values-de/strings_plurals_final.xml similarity index 100% rename from app/src/main/res/values-de/strings_plurals.xml rename to app/src/main/res/values-de/strings_plurals_final.xml diff --git a/app/src/main/res/values-fr/strings_plurals.xml b/app/src/main/res/values-fr/strings_plurals_final.xml similarity index 100% rename from app/src/main/res/values-fr/strings_plurals.xml rename to app/src/main/res/values-fr/strings_plurals_final.xml diff --git a/app/src/main/res/values-it/strings_plurals.xml b/app/src/main/res/values-it/strings_plurals_final.xml similarity index 100% rename from app/src/main/res/values-it/strings_plurals.xml rename to app/src/main/res/values-it/strings_plurals_final.xml diff --git a/app/src/main/res/values-ru/strings_plurals.xml b/app/src/main/res/values-ru/strings_plurals_final.xml similarity index 100% rename from app/src/main/res/values-ru/strings_plurals.xml rename to app/src/main/res/values-ru/strings_plurals_final.xml diff --git a/app/src/main/res/values/strings_plurals.xml b/app/src/main/res/values/strings_plurals_final.xml similarity index 100% rename from app/src/main/res/values/strings_plurals.xml rename to app/src/main/res/values/strings_plurals_final.xml From 9a029d45e49c7ad1ce1bb755574606777f7924e1 Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 20 Sep 2022 00:00:04 +0300 Subject: [PATCH 09/10] Updated on 2026-08-14 --- .../features/tokens/ui/compose/CurrenciesWarning.kt | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/CurrenciesWarning.kt b/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/CurrenciesWarning.kt index 0e7a4341df..b5c11c60b8 100644 --- a/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/CurrenciesWarning.kt +++ b/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/CurrenciesWarning.kt @@ -24,7 +24,10 @@ fun CurrenciesWarning() { contentAlignment = Alignment.Center, modifier = Modifier .padding(16.dp) - .background(Color(0xFFF2F2F2), shape = RoundedCornerShape(10.dp)) + .background( + color = Color(0xFFF2F2F2), + shape = RoundedCornerShape(10.dp), + ), ) { val warning = stringResource(id = R.string.alert_manage_tokens_addresses_message) @@ -33,18 +36,18 @@ fun CurrenciesWarning() { AnnotatedString.Range( SpanStyle(fontWeight = FontWeight.Bold), start = 0, - end = end - ) + end = end, + ), ) Text( text = AnnotatedString(text = warning, spanStyles = spanStyles), - textAlign = TextAlign.Center, + textAlign = TextAlign.Start, color = Color(0xFF848488), modifier = Modifier.padding( top = 8.dp, bottom = 8.dp, start = 16.dp, - end = 16.dp + end = 16.dp, ), fontSize = 13.sp, fontWeight = FontWeight.Normal, From e2fe42f145401ef23f1c56d4866a22dac74e30b1 Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 20 Sep 2022 00:12:15 +0300 Subject: [PATCH 10/10] Updated on 2026-08-14 --- .../tokens/ui/compose/currencyItem/CurrencyItemHeader.kt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/currencyItem/CurrencyItemHeader.kt b/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/currencyItem/CurrencyItemHeader.kt index f3d40a401b..b029341439 100644 --- a/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/currencyItem/CurrencyItemHeader.kt +++ b/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/currencyItem/CurrencyItemHeader.kt @@ -10,6 +10,7 @@ import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.heightIn import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size import androidx.compose.foundation.shape.CircleShape @@ -50,7 +51,7 @@ fun CurrencyItemHeader( Row( modifier = Modifier .fillMaxWidth() - .height(62.dp) + .heightIn(min = 62.dp) .clickable( interactionSource = remember { MutableInteractionSource() }, indication = null, @@ -172,8 +173,7 @@ private fun BlockchainNetworkItem( addedBlockchains: List, ) { val added = addedBlockchains.contains(blockchain) - val icon = - if (added) blockchain?.getRoundIconRes() else blockchain?.getGreyedOutIconRes() + val icon = if (added) blockchain?.getRoundIconRes() else blockchain?.getGreyedOutIconRes() if (icon != null) { Box( Modifier