diff --git a/app/src/main/java/com/tangem/tap/TapApplication.kt b/app/src/main/java/com/tangem/tap/TapApplication.kt index 4674adf0e6..d7c7fea602 100644 --- a/app/src/main/java/com/tangem/tap/TapApplication.kt +++ b/app/src/main/java/com/tangem/tap/TapApplication.kt @@ -10,6 +10,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.AndroidAssetReader import com.tangem.tap.common.analytics.GlobalAnalyticsHandler @@ -38,7 +39,6 @@ val store = Store( middleware = AppState.getMiddleware(), state = AppState(), ) -val logConfig = LogConfig() lateinit var foregroundActivityObserver: ForegroundActivityObserver @@ -69,11 +69,14 @@ class TapApplication : Application(), ImageLoaderFactory { initConfigManager(configLoader, ::initWithConfigDependency) initWarningMessagesManager() - BlockchainSdkRetrofitBuilder.enableNetworkLogging = BuildConfig.DEBUG + BlockchainSdkRetrofitBuilder.enableNetworkLogging = LogConfig.network.blockchainSdkNetwork } override fun newImageLoader(): ImageLoader { - return createCoilImageLoader(context = this) + return createCoilImageLoader( + context = this, + logEnabled = LogConfig.imageLoader + ) } private fun initConfigManager(loader: FeaturesLocalLoader, onComplete: (Config) -> Unit) { @@ -131,6 +134,7 @@ class TapApplication : Application(), ImageLoaderFactory { infoHolder = additionalFeedbackInfo, logCollector = tangemLogCollector, preferencesStorage = preferencesStorage, + logEnabled = LogConfig.zendesk, ) feedbackManager.initChat( context = context, @@ -142,10 +146,4 @@ class TapApplication : Application(), ImageLoaderFactory { private fun initWarningMessagesManager() { store.dispatch(GlobalAction.SetWarningManager(WarningMessagesManager())) } -} - -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..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.logConfig +import com.tangem.domain.common.LogConfig 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 (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..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 @@ -96,7 +97,8 @@ 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 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..56c2950141 --- /dev/null +++ b/domain/src/main/java/com/tangem/domain/common/LogConfig.kt @@ -0,0 +1,17 @@ +package com.tangem.domain.common + +import com.tangem.domain.features.BuildConfig + +object LogConfig { + val imageLoader: Boolean = false + val storeAction: Boolean = BuildConfig.DEBUG + val zendesk: Boolean = false + val network: NetworkLogConfig = NetworkLogConfig +} + +object NetworkLogConfig { + val mercuryoService: Boolean = false + val moonPayService: Boolean = false + val tangemTechService: Boolean = BuildConfig.DEBUG + val blockchainSdkNetwork: Boolean = BuildConfig.DEBUG +} \ 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..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 @@ -1,6 +1,7 @@ package com.tangem.domain.redux.global import com.tangem.domain.DomainDialog +import com.tangem.domain.common.LogConfig import com.tangem.domain.common.ScanResponse import com.tangem.network.api.tangemTech.TangemTechService @@ -17,5 +18,5 @@ data class DomainGlobalState( ) data class NetworkServices( - val tangemTechService: TangemTechService = TangemTechService() + val tangemTechService: TangemTechService = TangemTechService(LogConfig.network.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)