Updated on 2026-08-14

This commit is contained in:
Tangem 2026-03-20 21:54:46 +04:00
parent 8b75e37e30
commit a9bca131c3
386 changed files with 1369 additions and 1347 deletions

View file

@ -72,7 +72,6 @@ dependencies {
implementation(deps.arrow.core)
implementation(deps.kotlin.immutable.collections)
implementation(deps.kotlin.serialization)
implementation(deps.timber)
implementation(deps.firebase.crashlytics)
/** DI */

View file

@ -26,7 +26,7 @@ import com.tangem.utils.coroutines.saveIn
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.*
import kotlinx.coroutines.launch
import timber.log.Timber
import com.tangem.utils.logging.TangemLogger
import javax.inject.Inject
@ModelScoped
@ -53,7 +53,7 @@ internal class HotAccessCodeRequestModel @Inject constructor(
suspend fun show(attemptRequest: HotWalletPasswordRequester.AttemptRequest) {
if (userWalletExists(attemptRequest.hotWalletId).not()) {
Timber.e("User wallet with id ${attemptRequest.hotWalletId} does not exist")
TangemLogger.e("User wallet with id ${attemptRequest.hotWalletId} does not exist")
result.value = HotWalletPasswordRequester.Result.Dismiss
return
}

View file

@ -1,5 +1,6 @@
package com.tangem.features.hotwallet.addexistingwallet.im.port.model
import com.tangem.utils.logging.TangemLogger
import com.tangem.core.analytics.api.AnalyticsEventHandler
import com.tangem.core.analytics.models.AnalyticsParam
import com.tangem.core.analytics.models.event.OnboardingAnalyticsEvent
@ -28,7 +29,6 @@ import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.update
import kotlinx.coroutines.launch
import timber.log.Timber
import javax.inject.Inject
@Suppress("LongParameterList")
@ -96,10 +96,10 @@ internal class AddExistingWalletImportModel @Inject constructor(
val hotUserWalletBuilder = hotUserWalletBuilderFactory.create(hotWalletId)
val userWallet = hotUserWalletBuilder.build()
saveUserWalletUseCase.invoke(userWallet.copy(backedUp = true))
.onLeft {
.onLeft { error ->
setImportProgress(false)
when (it) {
is SaveWalletError.DataError -> Timber.e(it.toString(), "Unable to save user wallet")
when (error) {
is SaveWalletError.DataError -> TangemLogger.e("Unable to save user wallet: $error")
is SaveWalletError.WalletAlreadySaved -> {
uiMessageSender.send(
SnackbarMessage(resourceReference(R.string.hw_import_seed_phrase_already_imported)),
@ -129,8 +129,8 @@ internal class AddExistingWalletImportModel @Inject constructor(
)
params.callbacks.onWalletImported(userWallet.walletId)
}
}.onFailure {
Timber.e(it)
}.onFailure { throwable ->
TangemLogger.e("Error", throwable)
setImportProgress(false)
}
}

View file

@ -34,7 +34,7 @@ import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.update
import kotlinx.coroutines.launch
import timber.log.Timber
import com.tangem.utils.logging.TangemLogger
import javax.inject.Inject
private const val HIDE_PROGRESS_DELAY = 400L
@ -129,7 +129,7 @@ internal class CreateHardwareWalletModel @Inject constructor(
val userWallet = coldUserWalletBuilderFactory.create(scanResponse = scanResponse).build()
if (userWallet == null) {
Timber.e("User wallet not created")
TangemLogger.e("User wallet not created")
setLoading(false)
return
}
@ -142,7 +142,7 @@ internal class CreateHardwareWalletModel @Inject constructor(
delay(HIDE_PROGRESS_DELAY)
setLoading(false)
when (saveWalletError) {
is SaveWalletError.DataError -> Timber.e(saveWalletError.toString(), "Unable to save user wallet")
is SaveWalletError.DataError -> TangemLogger.e("Unable to save user wallet: $saveWalletError")
is SaveWalletError.WalletAlreadySaved -> handleAlreadySavedCard(
saveWalletError.messageId,
walletId = userWallet.walletId,
@ -164,8 +164,8 @@ internal class CreateHardwareWalletModel @Inject constructor(
private fun handleScanError(error: TangemError) {
when (error) {
is TangemSdkError.NfcFeatureIsUnavailable -> handleNfcFeatureUnavailable()
is TangemSdkError -> Timber.e(error, "Scan error occurred")
else -> Timber.e(error, "Error happened")
is TangemSdkError -> TangemLogger.e("Scan error occurred", error)
else -> TangemLogger.e("Error happened", error)
}
}

View file

@ -28,7 +28,7 @@ import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.update
import kotlinx.coroutines.launch
import timber.log.Timber
import com.tangem.utils.logging.TangemLogger
import javax.inject.Inject
@Suppress("LongParameterList")
@ -112,7 +112,7 @@ internal class CreateMobileWalletModel @Inject constructor(
router.replaceAll(AppRoute.Wallet)
}.onFailure { throwable ->
Timber.e(throwable)
TangemLogger.e("Error", throwable)
uiState.update { it.copy(createButtonLoading = false) }
}

View file

@ -1,6 +1,7 @@
package com.tangem.features.hotwallet.forgetwallet
import arrow.core.getOrElse
import com.tangem.utils.logging.TangemLogger
import com.tangem.common.routing.AppRoute
import com.tangem.core.decompose.di.ModelScoped
import com.tangem.core.decompose.model.Model
@ -20,7 +21,6 @@ import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.update
import kotlinx.coroutines.launch
import timber.log.Timber
import javax.inject.Inject
@ModelScoped
@ -80,8 +80,8 @@ internal class ForgetWalletModel @Inject constructor(
private fun forgetWallet() {
modelScope.launch {
val hasUserWallets = deleteWalletUseCase(params.userWalletId)
.getOrElse {
Timber.e("Unable to delete wallet: $it")
.getOrElse { error ->
TangemLogger.e("Unable to delete wallet: $error")
uiMessageSender.send(
message = SnackbarMessage(resourceReference(R.string.common_unknown_error)),

View file

@ -3,6 +3,7 @@ package com.tangem.features.hotwallet.manualbackup.check.model
import androidx.compose.runtime.Stable
import androidx.compose.ui.text.input.TextFieldValue
import arrow.core.getOrElse
import com.tangem.utils.logging.TangemLogger
import com.tangem.core.decompose.di.ModelScoped
import com.tangem.core.decompose.model.Model
import com.tangem.core.decompose.model.ParamsContainer
@ -20,15 +21,7 @@ import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.update
import kotlinx.coroutines.launch
import timber.log.Timber
import javax.inject.Inject
import kotlin.Boolean
import kotlin.Int
import kotlin.String
import kotlin.Suppress
import kotlin.collections.List
import kotlin.collections.all
import kotlin.collections.map
@Stable
@ModelScoped
@ -63,7 +56,7 @@ internal class ManualBackupCheckModel @Inject constructor(
}
}
}.onFailure {
Timber.e(it)
TangemLogger.e("Error", it)
}
}
}
@ -114,8 +107,8 @@ internal class ManualBackupCheckModel @Inject constructor(
uiState.update {
it.copy(completeButtonProgress = false)
}
}.onFailure {
Timber.e(it)
}.onFailure { throwable ->
TangemLogger.e("Error", throwable)
uiState.update {
it.copy(completeButtonProgress = false)

View file

@ -19,7 +19,7 @@ import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.update
import kotlinx.coroutines.launch
import timber.log.Timber
import com.tangem.utils.logging.TangemLogger
import javax.inject.Inject
@Stable
@ -58,7 +58,7 @@ internal class ManualBackupPhraseModel @Inject constructor(
}
}
}.onFailure {
Timber.e(it)
TangemLogger.e("Error", it)
}
}
}

View file

@ -19,7 +19,7 @@ import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.update
import kotlinx.coroutines.launch
import timber.log.Timber
import com.tangem.utils.logging.TangemLogger
import javax.inject.Inject
@Stable
@ -53,7 +53,7 @@ internal class ViewPhraseModel @Inject constructor(
modelScope.launch {
val words = exportSeedPhraseUseCase.invoke(userWallet.hotWalletId)
.getOrElse { error -> Timber.e(error); throw error }
.getOrElse { error -> TangemLogger.e("Error", error); throw error }
.mnemonic.mnemonicComponents
uiState.update {

View file

@ -21,7 +21,7 @@ import com.tangem.features.hotwallet.walletbackup.entity.WalletBackupUM
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
import kotlinx.coroutines.flow.*
import kotlinx.coroutines.launch
import timber.log.Timber
import com.tangem.utils.logging.TangemLogger
import java.util.concurrent.atomic.AtomicBoolean
import javax.inject.Inject
@ -71,7 +71,7 @@ internal class WalletBackupModel @Inject constructor(
.onEach { either ->
either.fold(
ifLeft = {
Timber.e("Error on getting user wallet: $it")
TangemLogger.e("Error on getting user wallet: $it")
},
ifRight = { userWallet ->
if (!isScreenOpenedEventSent.get() && userWallet is UserWallet.Hot) {
@ -128,13 +128,13 @@ internal class WalletBackupModel @Inject constructor(
getUserWalletUseCase.invoke(params.userWalletId)
.fold(
ifLeft = {
Timber.e("Error on getting user wallet: $it")
TangemLogger.e("Error on getting user wallet: $it")
},
ifRight = { userWallet ->
when (userWallet) {
is UserWallet.Cold -> {
val userWalletId = userWallet.walletId
Timber.e("Unexpected cold wallet when request seed phrase: $userWalletId")
TangemLogger.e("Unexpected cold wallet when request seed phrase: $userWalletId")
}
is UserWallet.Hot -> showSeedPhrase(userWallet)
}
@ -155,7 +155,7 @@ internal class WalletBackupModel @Inject constructor(
unlockHotWalletContextualUseCase.invoke(hotWallet.hotWalletId)
.fold(
ifLeft = {
Timber.e("Error while export seed phrase: $it")
TangemLogger.e("Error while export seed phrase: $it")
},
ifRight = { seedPhrasePrivateInfo ->
router.push(AppRoute.ViewPhrase(params.userWalletId))

View file

@ -35,7 +35,7 @@ import kotlinx.collections.immutable.persistentListOf
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.launch
import timber.log.Timber
import com.tangem.utils.logging.TangemLogger
import javax.inject.Inject
@Suppress("LongParameterList")
@ -147,7 +147,7 @@ internal class WalletHardwareBackupModel @Inject constructor(
-> modelScope.launch {
unlockHotWalletContextualUseCase.invoke(hotWalletId)
.onLeft {
Timber.e(it, "Unable to unlock wallet with id ${params.userWalletId}")
TangemLogger.e("Unable to unlock wallet with id ${params.userWalletId}", it)
}
.onRight {
router.push(AppRoute.UpgradeWallet(userWalletId = params.userWalletId))