diff --git a/app/src/main/java/com/tangem/tap/common/log/TangemCardSDKLogger.kt b/app/src/main/java/com/tangem/tap/common/log/TangemCardSDKLogger.kt new file mode 100644 index 0000000000..0da020d6bf --- /dev/null +++ b/app/src/main/java/com/tangem/tap/common/log/TangemCardSDKLogger.kt @@ -0,0 +1,42 @@ +package com.tangem.tap.common.log + +import com.tangem.Log +import com.tangem.LogFormat +import com.tangem.TangemSdkLogger +import com.tangem.domain.settings.repositories.SettingsRepository +import com.tangem.utils.coroutines.CoroutineDispatcherProvider +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.launch +import kotlinx.coroutines.sync.Mutex +import kotlinx.coroutines.sync.withLock + +/** + * CardSDK logger implementation + * + * @property levels logging levels + * @property messageFormatter message formatter + * @property settingsRepository settings repository + * @property dispatchers coroutine dispatchers provider + * +[REDACTED_AUTHOR] + */ +internal class TangemCardSDKLogger( + private val levels: List, + private val messageFormatter: LogFormat, + private val settingsRepository: SettingsRepository, + private val dispatchers: CoroutineDispatcherProvider, +) : TangemSdkLogger { + + private val scope = CoroutineScope(dispatchers.main) + private val mutex = Mutex() + + override fun log(message: () -> String, level: Log.Level) { + if (!levels.contains(level)) return + + scope.launch(dispatchers.main) { + mutex.withLock { + settingsRepository.updateAppLogs(message = messageFormatter.format(message, level)) + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/data/TangemBlockchainSDKLogger.kt b/app/src/main/java/com/tangem/tap/data/TangemBlockchainSDKLogger.kt new file mode 100644 index 0000000000..903d5542ea --- /dev/null +++ b/app/src/main/java/com/tangem/tap/data/TangemBlockchainSDKLogger.kt @@ -0,0 +1,34 @@ +package com.tangem.tap.data + +import com.tangem.blockchain.common.logging.BlockchainSDKLogger +import com.tangem.domain.settings.repositories.SettingsRepository +import com.tangem.utils.coroutines.CoroutineDispatcherProvider +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.launch +import kotlinx.coroutines.sync.Mutex +import kotlinx.coroutines.sync.withLock + +/** + * BlockchainSDK logger implementation + * + * @property settingsRepository settings repository + * @property dispatchers coroutine dispatchers provider + * +[REDACTED_AUTHOR] + */ +internal class TangemBlockchainSDKLogger( + private val settingsRepository: SettingsRepository, + private val dispatchers: CoroutineDispatcherProvider, +) : BlockchainSDKLogger { + + private val scope = CoroutineScope(dispatchers.main) + private val mutex = Mutex() + + override fun log(level: BlockchainSDKLogger.Level, message: String) { + scope.launch(dispatchers.main) { + mutex.withLock { + settingsRepository.updateAppLogs(message) + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/di/data/BlockchainSDKLoggerModule.kt b/app/src/main/java/com/tangem/tap/di/data/BlockchainSDKLoggerModule.kt new file mode 100644 index 0000000000..90906e322d --- /dev/null +++ b/app/src/main/java/com/tangem/tap/di/data/BlockchainSDKLoggerModule.kt @@ -0,0 +1,25 @@ +package com.tangem.tap.di.data + +import com.tangem.blockchain.common.logging.BlockchainSDKLogger +import com.tangem.domain.settings.repositories.SettingsRepository +import com.tangem.tap.data.TangemBlockchainSDKLogger +import com.tangem.utils.coroutines.CoroutineDispatcherProvider +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +internal object BlockchainSDKLoggerModule { + + @Provides + @Singleton + fun provideBlockchainSDKLogger( + settingsRepository: SettingsRepository, + dispatchers: CoroutineDispatcherProvider, + ): BlockchainSDKLogger { + return TangemBlockchainSDKLogger(settingsRepository, dispatchers) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/di/data/CardSDKLoggerModule.kt b/app/src/main/java/com/tangem/tap/di/data/CardSDKLoggerModule.kt new file mode 100644 index 0000000000..89e6a89d62 --- /dev/null +++ b/app/src/main/java/com/tangem/tap/di/data/CardSDKLoggerModule.kt @@ -0,0 +1,44 @@ +package com.tangem.tap.di.data + +import com.tangem.Log +import com.tangem.LogFormat +import com.tangem.TangemSdkLogger +import com.tangem.domain.settings.repositories.SettingsRepository +import com.tangem.tap.common.log.TangemCardSDKLogger +import com.tangem.utils.coroutines.CoroutineDispatcherProvider +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn +import dagger.hilt.components.SingletonComponent +import javax.inject.Singleton + +@Module +@InstallIn(SingletonComponent::class) +internal object CardSDKLoggerModule { + + @Provides + @Singleton + fun provideCardSDKLogger( + settingsRepository: SettingsRepository, + dispatchers: CoroutineDispatcherProvider, + ): TangemSdkLogger { + val logLevels = listOf( + Log.Level.ApduCommand, + Log.Level.Apdu, + Log.Level.Tlv, + Log.Level.Nfc, + Log.Level.Command, + Log.Level.Session, + Log.Level.View, + Log.Level.Network, + Log.Level.Error, + ) + + return TangemCardSDKLogger( + levels = logLevels, + messageFormatter = LogFormat.StairsFormatter(), + settingsRepository = settingsRepository, + dispatchers = dispatchers, + ) + } +} \ No newline at end of file