From e660ac89f875cd7dcbb40d3e93d1189a5dde779e Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 21 Nov 2024 11:52:38 +0300 Subject: [PATCH 01/16] Updated on 2026-08-14 --- gradle/dependencies.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/dependencies.toml b/gradle/dependencies.toml index a57d4ded92..489719b73a 100644 --- a/gradle/dependencies.toml +++ b/gradle/dependencies.toml @@ -87,7 +87,7 @@ markdownComposeView = "0.5.4" # endregion Other libraries # region Tangem -tangemBlockchainSdk = "release-app_5.18-869" +tangemBlockchainSdk = "release-app_5.18-870" #tangemBlockchainSdk = "0.0.1" # Keep it! - used for local builds tangemCardSdk = "release-app_5.18-402" #tangemCardSdk = "0.0.1" # Keep it! - used for local builds ^ From 3fc2815385ff0ba5bcadced4ee92978a25a7e3c6 Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 21 Nov 2024 11:37:02 +0200 Subject: [PATCH 02/16] Updated on 2026-08-14 --- app/src/main/assets/tangem-app-config | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/assets/tangem-app-config b/app/src/main/assets/tangem-app-config index adbdabe422..f859554840 160000 --- a/app/src/main/assets/tangem-app-config +++ b/app/src/main/assets/tangem-app-config @@ -1 +1 @@ -Subproject commit adbdabe422b0513640d1750f276298683d342f61 +Subproject commit f859554840df30c25a8fe266de2db7ef71cf5652 From dcb83d1a5141190090709bb6691113d58b49acce Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 21 Nov 2024 14:14:45 +0300 Subject: [PATCH 03/16] Updated on 2026-08-14 --- .../domain/WcSessionRequestConverter.kt | 4 ++- .../mapper/SolanaTransactionMappings.kt | 30 ---------------- .../models/solana/SolanaTransactionRequest.kt | 35 ++----------------- 3 files changed, 5 insertions(+), 64 deletions(-) delete mode 100644 app/src/main/java/com/tangem/tap/domain/walletconnect2/domain/mapper/SolanaTransactionMappings.kt diff --git a/app/src/main/java/com/tangem/tap/domain/walletconnect2/domain/WcSessionRequestConverter.kt b/app/src/main/java/com/tangem/tap/domain/walletconnect2/domain/WcSessionRequestConverter.kt index 367d7b6a9e..04bab1fa69 100644 --- a/app/src/main/java/com/tangem/tap/domain/walletconnect2/domain/WcSessionRequestConverter.kt +++ b/app/src/main/java/com/tangem/tap/domain/walletconnect2/domain/WcSessionRequestConverter.kt @@ -163,7 +163,9 @@ internal class WcSessionRequestConverter( return sessionsRepository.loadSessions(userWalletId) .firstOrNull { it.topic == sessionRequest.topic } ?.accounts?.firstOrNull { - it.chainId == sessionRequest.chainId && it.walletAddress.lowercase() == walletAddress?.lowercase() + // if walletAddress == null take first account + it.chainId == sessionRequest.chainId && + (walletAddress == null || it.walletAddress.lowercase() == walletAddress.lowercase()) }?.derivationPath } diff --git a/app/src/main/java/com/tangem/tap/domain/walletconnect2/domain/mapper/SolanaTransactionMappings.kt b/app/src/main/java/com/tangem/tap/domain/walletconnect2/domain/mapper/SolanaTransactionMappings.kt deleted file mode 100644 index c97506bb7e..0000000000 --- a/app/src/main/java/com/tangem/tap/domain/walletconnect2/domain/mapper/SolanaTransactionMappings.kt +++ /dev/null @@ -1,30 +0,0 @@ -package com.tangem.tap.domain.walletconnect2.domain.mapper - -import com.tangem.blockchain.blockchains.solana.solanaj.core.SolanaTransaction -import com.tangem.tap.domain.walletconnect2.domain.models.solana.SolanaTransactionRequest -import org.p2p.solanaj.core.AccountMeta -import org.p2p.solanaj.core.PublicKey -import org.p2p.solanaj.core.TransactionInstruction - -internal fun SolanaTransactionRequest.mapToTransaction(): SolanaTransaction { - val from = PublicKey(feePayer) - val instructions = instructions.map(SolanaTransactionRequest.Instruction::mapToInstruction) - - return SolanaTransaction(from) - .apply { - instructions.forEach(::addInstruction) - setRecentBlockHash(recentBlockhash) - } -} - -private fun SolanaTransactionRequest.Instruction.mapToInstruction() = TransactionInstruction( - /* programId = */ PublicKey(programId), - /* keys = */ keys.map(SolanaTransactionRequest.Key::mapToAccountMeta), - /* data = */ data.toByteArray(), -) - -private fun SolanaTransactionRequest.Key.mapToAccountMeta() = AccountMeta( - /* publicKey = */ PublicKey(publicKey), - /* isSigner = */ isSigner, - /* isWritable = */ isWritable, -) \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/domain/walletconnect2/domain/models/solana/SolanaTransactionRequest.kt b/app/src/main/java/com/tangem/tap/domain/walletconnect2/domain/models/solana/SolanaTransactionRequest.kt index b77ecffae0..bed9fd3897 100644 --- a/app/src/main/java/com/tangem/tap/domain/walletconnect2/domain/models/solana/SolanaTransactionRequest.kt +++ b/app/src/main/java/com/tangem/tap/domain/walletconnect2/domain/models/solana/SolanaTransactionRequest.kt @@ -7,39 +7,8 @@ import com.tangem.tap.domain.walletconnect2.domain.WcRequestData @JsonClass(generateAdapter = true) data class SolanaTransactionRequest( @Json(name = "feePayer") - val feePayer: String, - - @Json(name = "recentBlockhash") - val recentBlockhash: String, - - @Json(name = "instructions") - val instructions: List, + val feePayer: String?, @Json(name = "transaction") val transaction: String, -) : WcRequestData { - - @JsonClass(generateAdapter = true) - data class Instruction( - @Json(name = "programId") - val programId: String, - - @Json(name = "data") - val data: String, - - @Json(name = "keys") - val keys: List, - ) - - @JsonClass(generateAdapter = true) - data class Key( - @Json(name = "isSigner") - val isSigner: Boolean, - - @Json(name = "isWritable") - val isWritable: Boolean, - - @Json(name = "pubkey") - val publicKey: String, - ) -} \ No newline at end of file +) : WcRequestData \ No newline at end of file From fc2b63bdb9a683a83384967d6b534d6c19e533b7 Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 21 Nov 2024 18:10:30 +0300 Subject: [PATCH 04/16] Updated on 2026-08-14 --- .../details/ui/walletconnect/dialogs/SignTransactionDialog.kt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/walletconnect/dialogs/SignTransactionDialog.kt b/app/src/main/java/com/tangem/tap/features/details/ui/walletconnect/dialogs/SignTransactionDialog.kt index a21b7a4d75..d985adc26b 100644 --- a/app/src/main/java/com/tangem/tap/features/details/ui/walletconnect/dialogs/SignTransactionDialog.kt +++ b/app/src/main/java/com/tangem/tap/features/details/ui/walletconnect/dialogs/SignTransactionDialog.kt @@ -11,7 +11,8 @@ import com.tangem.wallet.R internal object SignTransactionDialog { fun create(preparedData: WcPreparedRequest.SignTransaction, context: Context): AlertDialog { - val message = context.getString(R.string.wallet_connect_alert_sign_message, "") + val signMessage = context.getString(R.string.wallet_connect_alert_sign_message, "") + val message = "${preparedData.preparedRequestData.dAppName}\n$signMessage" return AlertDialog.Builder(context).apply { setTitle(context.getString(R.string.wallet_connect_title)) setMessage(message) From 5dcf2a986e3904958b5256cc319c067c8d8a39d2 Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 22 Nov 2024 14:54:07 +0300 Subject: [PATCH 05/16] Updated on 2026-08-14 --- .../features/details/redux/DetailsReducer.kt | 3 +++ core/res/src/main/res/values-de/strings.xml | 3 ++- core/res/src/main/res/values-es/strings.xml | 13 ++++++++---- core/res/src/main/res/values-fr/strings.xml | 20 +++++++++++++++++-- core/res/src/main/res/values-ja/strings.xml | 1 + core/res/src/main/res/values-ru/strings.xml | 4 ++++ .../src/main/res/values-uk-rUA/strings.xml | 3 ++- core/res/src/main/res/values/strings.xml | 6 +++++- 8 files changed, 44 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/features/details/redux/DetailsReducer.kt b/app/src/main/java/com/tangem/tap/features/details/redux/DetailsReducer.kt index 1f56b4bf2f..e9b44c3240 100644 --- a/app/src/main/java/com/tangem/tap/features/details/redux/DetailsReducer.kt +++ b/app/src/main/java/com/tangem/tap/features/details/redux/DetailsReducer.kt @@ -53,6 +53,9 @@ private fun handlePrepareScreen(action: DetailsAction.PrepareScreen): DetailsSta store.inject(DaggerGraphState::balanceHidingRepository) .getBalanceHidingSettings().isHidingEnabledInSettings }, + needEnrollBiometrics = runBlocking { + runCatching(tangemSdkManager::needEnrollBiometrics).getOrNull() ?: false + }, ), ) } diff --git a/core/res/src/main/res/values-de/strings.xml b/core/res/src/main/res/values-de/strings.xml index d8c34ccdc5..79686ce460 100644 --- a/core/res/src/main/res/values-de/strings.xml +++ b/core/res/src/main/res/values-de/strings.xml @@ -296,7 +296,7 @@ Empfohlen Gekauft %s Kauf %s - Kauf %s... + Kauf %s… Keine Token gefunden. Bitte versuche eine andere Anfrage ID: %s Transaktions-ID kopiert @@ -908,6 +908,7 @@ Diese Aktion ist unumkehrbar. Du hast keinen Zugriff mehr auf die alte Wallet. Tippe auf die Doppelkarte oder Ring mit der Nummer %s und entferne sie erst am Ende des Vorgangs. Verwende %s oder scanne eine Karte oder Ring, um Zugriff auf deine Wallet zu erhalten. + Verbindung fehlgeschlagen: Diese dApp verwendet Wallet Connect Version 1.0, die nicht unterstützt wird. Bitte stelle sicher, dass die dApp Wallet Connect Version 2.0 unterstützt, um eine erfolgreiche Verbindung herzustellen. Bleib auf dem Laufenden mit den neuesten Funktionen und Neuigkeiten Sei der Erste, der von neuen Aktionen erfährt Möchtest du Push-Benachrichtigungen verwenden? diff --git a/core/res/src/main/res/values-es/strings.xml b/core/res/src/main/res/values-es/strings.xml index b77f4a6456..38c53c5104 100644 --- a/core/res/src/main/res/values-es/strings.xml +++ b/core/res/src/main/res/values-es/strings.xml @@ -294,6 +294,9 @@ No disponible para este par Permiso requerido Recomendado + Comprado %s + Comprando %s + Comprando %s... No se encontraron fichas. Por favor intenta con otra solicitud ID : %s ID de transacción copiado @@ -429,7 +432,6 @@ El valor teórico total de una criptomoneda si todas las monedas que podrían existir estuvieran en circulación, incluidas las que actualmente no circulan. Valoración totalmente diluida Dato de Genesis - Vacío Alto Titulares El cambio en el número de poseedores de tokens dentro de un período de tiempo específico @@ -440,7 +442,6 @@ El cambio en la cantidad de liquidez disponible para el token durante el período de tiempo especificado Liquidez Índice de liquidez - Vacío Listado en Bajo Capital. de mercado @@ -514,12 +515,12 @@ Creando un backup Leer más sobre seed phrase - Vacío + Escriba estas %d palabras en el orden que se indica a continuación y guárdelas en un lugar seguro y secreto. Su seed phrase - Vacío + %d palabras Para importar su billetera, ingrese su seed phrase en el campo de abajo @@ -907,6 +908,7 @@ Esta acción es irreversible. No tendrá acceso la billetera antigua. Toque la tarjeta gemela con el número %s y no la retira hasta el final de la operación Use %s o escanee una tarjeta/anillo para tener acceso a su billetera + Error de conexión: Esta dApp utiliza la versión 1.0 de Wallet Connect, que no es compatible. Asegúrese de que la dApp sea compatible con la versión 2.0 de Wallet Connect para conectarse correctamente. Manténgase actualizado con las últimas funciones y noticias Sea el primero en enterarte de nuevas promociones ¿Quiere utilizar\nnotificaciones push? @@ -1006,6 +1008,9 @@ Este token debe estar asociado con su cuenta de Hedera antes de poder recibirlo. Asocie su token No hay suficiente %s. Recargue su cuenta de Hedera para asociar este token + ¿Está seguro(a) de que desea cancelar la transacción? No podrá volver a intentar realizarla. + Su transacción con un importe de %1$s %2$s no se ha completado. Puede volver a intentarlo para completarla. + Tiene una transacción sin terminar Solo quedan %s firmas en esta tarjeta. Deba retirar todos sus fondos. Recuento de firmas bajo Los tokens en diferentes redes pueden tener direcciones diferentes. Verifique que su dirección coincida con la red cuando transfieras fondos. diff --git a/core/res/src/main/res/values-fr/strings.xml b/core/res/src/main/res/values-fr/strings.xml index 346d3081e5..d2e529b9cb 100644 --- a/core/res/src/main/res/values-fr/strings.xml +++ b/core/res/src/main/res/values-fr/strings.xml @@ -180,6 +180,7 @@ Conditions d\'utilisation Aujourd\'hui La transaction a échoué + Statut de la transaction Transactions Transfert Je comprends @@ -187,6 +188,7 @@ Inaccessible Unstakez semaine + avec Oui Adresse du contrat copiée ! Réseaux disponibles @@ -292,6 +294,9 @@ Indisponible pour cette paire Permission requise Recommandé + Acheté %s + Achat en cours %s + Achat en cours %s... Aucun jeton trouvé. Veuillez essayer une autre demande ID : %s ID de transaction copié @@ -453,6 +458,7 @@ Performance des prix Dépôt Score de sécurité + Le score de sécurité d\'un jeton est une mesure qui évalue le niveau de sécurité d\'une blockchain ou d\'un jeton en fonction de divers facteurs. Ceci est compilé à partir des sources répertoriées ci-dessous. Social Approvisionnement total Le nombre maximal de pièces ou de jetons pouvant exister pour une crypto-monnaie particulière @@ -566,12 +572,15 @@ Le montant à acheter doit être au moins %s Aucun fournisseur disponible pour cette devise Payer avec + Vous pourrez finaliser votre transaction sur le fournisseur tiers, %s + Redirection vers %s... Nos services ne sont pas disponibles dans ce pays Modifiez-le ou confirmez-le Votre résidence a été identifiée comme Résidence Veuillez sélectionner le bon pays pour garantir des options de paiement et des services précis. Paramètres + Vous pouvez vérifier l\'état de la transaction à partir de la page du jeton Via Grouper Par solde @@ -596,9 +605,9 @@ pour le portefeuille %d pour les portefeuilles %d - Obtiendras ^^%1$s^^ pour chaque portefeuille acheté par votre ami sur votre adresse de réseau %2$s %3$s ^^30 jours après^^ + Obtiendrez ^^%1$s^^ pour chaque portefeuille acheté par votre ami sur votre adresse de réseau %2$s %3$s ^^30 jours après^^ Vous - Obtiendrez + Obtiendra lors de l\'achat d\'un portefeuille sur tangem.com %s réduction Votre ami @@ -899,6 +908,7 @@ Cette action est irréversible. Vous n\'aurez plus accès à l\'ancien portefeuille. Appuyez sur la carte jumelle avec le numéro %s et ne la retirez pas jusqu\'à la fin de l\'opération Utilisez %s ou scannez une carte/bague pour avoir accès à votre portefeuille + Échec de la connexion : Cette dApp utilise Wallet Connect version1.0, qui n\'est pas prise en charge. Veuillez vous assurer que la dApp prend en charge Wallet Connect version2.0 pour réussir la connexion. Restez à jour avec les dernières fonctionnalités et actualités Soyez le premier informé des nouvelles promotions Souhaitez-vous utiliser les\nnotifications push? @@ -950,6 +960,9 @@ %s réseau L\'adresse a été copiée avec succès Pas de connexion internet + Obtenez-le maintenant avec 10 %% de réduction + Accédez à plus de 13 000 cryptomonnaies. Achetez, vendez, échangez et stakez en un seul clic.\nAssociez jusqu\'à trois cartes pour une sauvegarde. + Découvrez le Portefeuille Tangem Paramètres du portefeuille Tangem Utilisez %s ou scannez une carte/bague pour déverrouiller l\'accès à votre portefeuille @@ -995,6 +1008,9 @@ Ce jeton doit être associé à votre compte Hedera avant que vous puissiez le recevoir Associez votre jeton %s insuffisant. Renflouez votre compte Hedera pour associer ce jeton + Êtes-vous sûr(e) de vouloir annuler la transaction ? Vous ne pourrez plus réessayer. + Votre transaction d\'un montant de %1$s %2$s n\'a pas été finalisée. Vous pouvez réessayer plus tard pour la finaliser. + Vous avez une transaction inachevée Il ne reste que %s signatures sur cette carte. Vous devez retirer tous vos fonds. Faible nombre de signatures Les jetons sur différents réseaux peuvent avoir des adresses différentes. Vérifiez bien que votre adresse correspond au réseau lorsque vous transférez des fonds. diff --git a/core/res/src/main/res/values-ja/strings.xml b/core/res/src/main/res/values-ja/strings.xml index 0c5037ec1c..9f3c536b40 100644 --- a/core/res/src/main/res/values-ja/strings.xml +++ b/core/res/src/main/res/values-ja/strings.xml @@ -898,6 +898,7 @@ この操作は元に戻せません。古いウォレットにはアクセスできなくなります。 番号%sのツインカードをタップし、操作が終了するまで取り外さないでください。 %sを使用するか、カード / リングをスキャンしてウォレットにアクセスしてください + 接続に失敗しました:このdAppは、サポートされていないWallet Connectバージョン1.0を使用しています。正常に接続するには、dAppがWallet Connectバージョン2.0をサポートしていることを確認してください。 最新の機能とニュースをお届けします 新しいプロモーション情報をいち早く入手しましょう プッシュ通知を使用しますか? diff --git a/core/res/src/main/res/values-ru/strings.xml b/core/res/src/main/res/values-ru/strings.xml index 280a951d4b..dfbc4e21cc 100644 --- a/core/res/src/main/res/values-ru/strings.xml +++ b/core/res/src/main/res/values-ru/strings.xml @@ -297,6 +297,8 @@ Недоступно для этой пары Требуется разрешение Рекомендовано + Покупка %s + Покупка %s... Токены не найдены. Пожалуйста, попробуйте другой запрос ID: %s ID транзакции скопирован @@ -889,6 +891,7 @@ Обменять Недоступно для покупки Недоступно для продажи + Недоступно для обмена с %s контракт: %s У вас еще нет транзакций Не удалось загрузить историю транзакций.\nНажмите на кнопку перезагрузки, чтобы обновить информацию. @@ -913,6 +916,7 @@ Это действие необратимо. У вас не будет доступа к старому кошельку. Приложите twin-карту с номером %s и не убирайте до окончания операции Используйте %s или отсканируйте карту/кольцо, чтобы получить доступ к своему кошельку + Соединение не удалось: это dApp использует Wallet Connect версии 1.0, которая не поддерживается. Убедитесь, что dApp поддерживает Wallet Connect версии 2.0 для успешного подключения. Будьте в курсе новых функций и новостей Узнавайте первым о новых акциях Хотите использовать Push-уведомления? diff --git a/core/res/src/main/res/values-uk-rUA/strings.xml b/core/res/src/main/res/values-uk-rUA/strings.xml index c446190dcc..25e1a4419d 100644 --- a/core/res/src/main/res/values-uk-rUA/strings.xml +++ b/core/res/src/main/res/values-uk-rUA/strings.xml @@ -301,7 +301,7 @@ Потрібен дозвіл Рекомендовано Купив %s - Купівля %s... + Купівля %s Купівля %s... Токенів не знайдено. Будь ласка, спробуйте інший запит ID: %s @@ -927,6 +927,7 @@ Ця дія є незворотною. Ви не матимете доступу до старого гаманця. Прикладіть twin-картку з номером %s та не прибирайте її до завершення операції Використовуйте %s або відскануйте картку/кільце, щоб отримати доступ до свого гаманця + Не вдалося встановити з\'єднання: Цей dApp використовує Wallet Connect версії 1.0, яка не підтримується. Будь ласка, переконайтеся, що dApp підтримує Wallet Connect версії 2.0 для успішного підключення. Будьте в курсі останніх функцій та новин Дізнавайтеся першими про нові акції Бажаєте використовувати Push-повідомлення? diff --git a/core/res/src/main/res/values/strings.xml b/core/res/src/main/res/values/strings.xml index 08a7924ae5..4f1dea27fa 100644 --- a/core/res/src/main/res/values/strings.xml +++ b/core/res/src/main/res/values/strings.xml @@ -1,7 +1,7 @@ Token not found in your portfolio? Check the Markets to find and add it for purchase - Token not found in your portfolio? Check the Markets to find and add it for sell + Token not found in your portfolio? Check the Markets to find and add it for selling Choose the Token Token not found in your portfolio? Check the Markets to find and add it for swap There are no available tokens to swap with the selected token. Please choose another one. @@ -590,8 +590,11 @@ Settings You have not given access to your camera Camera access denied + No memo required %1$s (%2$s) on %3$s network + Sending any other currency will result in its irreversible loss. Send only %s to this address. Sending any other currency will result in its irreversible loss. + Send only %s to this address. Transfer funds from any wallet or exchange Participate Failed to load the information about the referral program. Please try again later. @@ -908,6 +911,7 @@ This action is irreversible. You will not have access to the old wallet. Tap the twin card with number %s and do not remove until the end of the operation Use %s or scan a card/ring to have access to your wallet + Connection failed: This dApp uses Wallet Connect version 1.0, which is not supported. Please ensure the dApp supports Wallet Connect version 2.0 to connect successfully. Stay up to date with the latest features and news Be the first to know about new promotions Would you like to use\nPush-notifications? From b07d4788884b3fa9be9fba24f396db5802c6c8fe Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 22 Nov 2024 19:51:04 +0200 Subject: [PATCH 06/16] Updated on 2026-08-14 --- .../domain/GetSingleWalletWarningsFactory.kt | 43 +++++++++++++------ 1 file changed, 30 insertions(+), 13 deletions(-) diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/domain/GetSingleWalletWarningsFactory.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/domain/GetSingleWalletWarningsFactory.kt index 81e435fa5e..21f40750f2 100644 --- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/domain/GetSingleWalletWarningsFactory.kt +++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/domain/GetSingleWalletWarningsFactory.kt @@ -9,6 +9,7 @@ import com.tangem.domain.tokens.GetPrimaryCurrencyStatusUpdatesUseCase import com.tangem.domain.tokens.error.CurrencyStatusError import com.tangem.domain.tokens.model.CryptoCurrencyStatus import com.tangem.domain.wallets.models.UserWallet +import com.tangem.domain.wallets.usecase.GetWalletsUseCase import com.tangem.domain.wallets.usecase.IsNeedToBackupUseCase import com.tangem.feature.wallet.presentation.wallet.state.model.WalletNotification import com.tangem.feature.wallet.presentation.wallet.viewmodels.intents.WalletClickIntents @@ -25,6 +26,7 @@ internal class GetSingleWalletWarningsFactory @Inject constructor( private val isReadyToShowRateAppUseCase: IsReadyToShowRateAppUseCase, private val isNeedToBackupUseCase: IsNeedToBackupUseCase, private val hasSingleWalletSignedHashesUseCase: HasSingleWalletSignedHashesUseCase, + private val getWalletsUseCase: GetWalletsUseCase, ) { private var readyForRateAppNotification = false @@ -36,22 +38,32 @@ internal class GetSingleWalletWarningsFactory @Inject constructor( flow = getPrimaryCurrencyStatusUpdatesUseCase(userWallet.walletId), flow2 = isReadyToShowRateAppUseCase().conflate(), flow3 = isNeedToBackupUseCase(userWallet.walletId).conflate(), - ) { primaryCurrencyStatus, isReadyToShowRating, isNeedToBackup -> + flow4 = getWalletsUseCase().conflate(), + ) { maybePrimaryCurrencyStatus, isReadyToShowRating, isNeedToBackup, userWallets -> readyForRateAppNotification = true buildList { - addCriticalNotifications(cardTypesResolver) - - addInformationalNotifications(cardTypesResolver, clickIntents) - - addWarningNotifications( - userWallet, - cardTypesResolver, - primaryCurrencyStatus, - isNeedToBackup, - clickIntents, + addCriticalNotifications( + cardTypesResolver = cardTypesResolver, ) - addRateTheAppNotification(isReadyToShowRating, clickIntents) + addInformationalNotifications( + userWallets = userWallets, + cardTypesResolver = cardTypesResolver, + clickIntents = clickIntents, + ) + + addWarningNotifications( + userWallet = userWallet, + cardTypesResolver = cardTypesResolver, + maybePrimaryCurrencyStatus = maybePrimaryCurrencyStatus, + isNeedToBackup = isNeedToBackup, + clickIntents = clickIntents, + ) + + addRateTheAppNotification( + isReadyToShowRating = isReadyToShowRating, + clickIntents = clickIntents, + ) }.toImmutableList() } } @@ -76,14 +88,19 @@ internal class GetSingleWalletWarningsFactory @Inject constructor( } private fun MutableList.addInformationalNotifications( + userWallets: List, cardTypesResolver: CardTypesResolver, clickIntents: WalletClickIntents, ) { + val userHasWalletOrWallet2 = userWallets.any { + val typesResolver = it.scanResponse.cardTypesResolver + typesResolver.isTangemWallet() || typesResolver.isWallet2() + } addIf( element = WalletNotification.NoteMigration( onClick = { clickIntents.onNoteMigrationButtonClick(NOTE_MIGRATION_URL) }, ), - condition = cardTypesResolver.isTangemNote(), + condition = cardTypesResolver.isTangemNote() && !userHasWalletOrWallet2, ) addIf( From 299f10a1f6cc06f544b31f92382c1cbcd8007975 Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 25 Nov 2024 15:32:35 +0300 Subject: [PATCH 07/16] Updated on 2026-08-14 --- gradle/dependencies.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/dependencies.toml b/gradle/dependencies.toml index 489719b73a..e32d4d13c7 100644 --- a/gradle/dependencies.toml +++ b/gradle/dependencies.toml @@ -87,7 +87,7 @@ markdownComposeView = "0.5.4" # endregion Other libraries # region Tangem -tangemBlockchainSdk = "release-app_5.18-870" +tangemBlockchainSdk = "release-app_5.18-872" #tangemBlockchainSdk = "0.0.1" # Keep it! - used for local builds tangemCardSdk = "release-app_5.18-402" #tangemCardSdk = "0.0.1" # Keep it! - used for local builds ^ From 486f9a6c340501dd8df2c0e1714d21ccc481ee36 Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 25 Nov 2024 14:50:39 +0300 Subject: [PATCH 08/16] Updated on 2026-08-14 --- .../main/java/com/tangem/tap/MainActivity.kt | 11 ++++++++++- .../local/preferences/PreferencesDataStore.kt | 3 +++ .../preferences/utils/CleanupKeyMigration.kt | 18 ++++++++++++++++++ 3 files changed, 31 insertions(+), 1 deletion(-) create mode 100644 core/datasource/src/main/java/com/tangem/datasource/local/preferences/utils/CleanupKeyMigration.kt diff --git a/app/src/main/java/com/tangem/tap/MainActivity.kt b/app/src/main/java/com/tangem/tap/MainActivity.kt index cc4284cc7a..e456f93295 100644 --- a/app/src/main/java/com/tangem/tap/MainActivity.kt +++ b/app/src/main/java/com/tangem/tap/MainActivity.kt @@ -89,6 +89,7 @@ import kotlinx.coroutines.flow.* import timber.log.Timber import javax.inject.Inject import kotlin.coroutines.CoroutineContext +import kotlin.time.Duration.Companion.seconds lateinit var tangemSdkManager: TangemSdkManager lateinit var backupService: BackupService @@ -314,7 +315,11 @@ class MainActivity : AppCompatActivity(), SnackbarHandler, ActivityResultCallbac private fun installAppTheme() { appThemeModeFlow = createAppThemeModeFlow() - val mode = runBlocking { appThemeModeFlow.first() } + val mode = runBlocking { + withTimeoutOrNull(APP_THEME_LOAD_TIMEOUT.seconds) { + appThemeModeFlow.first() + } ?: AppThemeMode.DEFAULT + } updateAppTheme(mode) } @@ -581,4 +586,8 @@ class MainActivity : AppCompatActivity(), SnackbarHandler, ActivityResultCallbac .onRight { Timber.d("Submitting hashes succeeded") } } } + + companion object { + private const val APP_THEME_LOAD_TIMEOUT = 2 + } } \ No newline at end of file diff --git a/core/datasource/src/main/java/com/tangem/datasource/local/preferences/PreferencesDataStore.kt b/core/datasource/src/main/java/com/tangem/datasource/local/preferences/PreferencesDataStore.kt index 9e9b278b7e..9e326cc62c 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/local/preferences/PreferencesDataStore.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/local/preferences/PreferencesDataStore.kt @@ -10,6 +10,8 @@ import androidx.datastore.preferences.core.Preferences import androidx.datastore.preferences.core.emptyPreferences import androidx.datastore.preferences.preferencesDataStoreFile import com.tangem.datasource.local.preferences.PreferencesDataStore.INSTANCE +import com.tangem.datasource.local.preferences.PreferencesKeys.APP_LOGS_KEY +import com.tangem.datasource.local.preferences.utils.CleanupKeyMigration import com.tangem.datasource.local.preferences.utils.SharedPreferencesKeyMigration import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.SupervisorJob @@ -77,6 +79,7 @@ internal object PreferencesDataStore { legacyKeyName = LEGACY_DEFAULT_KEY_NAME, keyName = PreferencesKeys.BALANCE_HIDING_SETTINGS_KEY.name, ), + CleanupKeyMigration(key = APP_LOGS_KEY), ) } } \ No newline at end of file diff --git a/core/datasource/src/main/java/com/tangem/datasource/local/preferences/utils/CleanupKeyMigration.kt b/core/datasource/src/main/java/com/tangem/datasource/local/preferences/utils/CleanupKeyMigration.kt new file mode 100644 index 0000000000..8b5e3fa149 --- /dev/null +++ b/core/datasource/src/main/java/com/tangem/datasource/local/preferences/utils/CleanupKeyMigration.kt @@ -0,0 +1,18 @@ +package com.tangem.datasource.local.preferences.utils + +import androidx.datastore.core.DataMigration +import androidx.datastore.preferences.core.Preferences + +internal class CleanupKeyMigration(private val key: Preferences.Key) : DataMigration { + + override suspend fun cleanUp() { + // do nothing + } + + override suspend fun shouldMigrate(currentData: Preferences): Boolean = currentData.contains(key) + + override suspend fun migrate(currentData: Preferences): Preferences { + currentData.toMutablePreferences().remove(key) + return currentData + } +} \ No newline at end of file From b0694b67985897caab7cd7873d7df88a6dcf7465 Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 26 Nov 2024 14:54:02 +0300 Subject: [PATCH 09/16] Updated on 2026-08-14 --- .../models/response/ExpressErrorResponse.kt | 6 ++++++ core/res/src/main/res/values-de/strings.xml | 5 +++-- core/res/src/main/res/values-es/strings.xml | 2 -- core/res/src/main/res/values-fr/strings.xml | 4 +--- core/res/src/main/res/values-ja/strings.xml | 8 +++++--- core/res/src/main/res/values-ru/strings.xml | 4 +--- .../res/src/main/res/values-uk-rUA/strings.xml | 2 -- core/res/src/main/res/values/strings.xml | 8 +++++--- .../swap/converters/ErrorsDataConverter.kt | 17 +++++++++++++++++ .../swap/domain/models/ExpressDataError.kt | 7 +++++++ .../com/tangem/feature/swap/ui/StateBuilder.kt | 18 ++++++++++++++---- .../com/tangem/feature/swap/utils/SwapUtils.kt | 7 +++++++ 12 files changed, 66 insertions(+), 22 deletions(-) diff --git a/core/datasource/src/main/java/com/tangem/datasource/api/express/models/response/ExpressErrorResponse.kt b/core/datasource/src/main/java/com/tangem/datasource/api/express/models/response/ExpressErrorResponse.kt index d3e2fd0694..183965a431 100644 --- a/core/datasource/src/main/java/com/tangem/datasource/api/express/models/response/ExpressErrorResponse.kt +++ b/core/datasource/src/main/java/com/tangem/datasource/api/express/models/response/ExpressErrorResponse.kt @@ -37,4 +37,10 @@ data class ExpressErrorValue( @Json(name = "expressFromDecimals") val expressFromDecimals: Int?, + + @Json(name = "fromAmount") + val fromAmount: String?, + + @Json(name = "fromAmountProvider") + val fromAmountProvider: String?, ) \ No newline at end of file diff --git a/core/res/src/main/res/values-de/strings.xml b/core/res/src/main/res/values-de/strings.xml index 79686ce460..e278f45b3c 100644 --- a/core/res/src/main/res/values-de/strings.xml +++ b/core/res/src/main/res/values-de/strings.xml @@ -6,8 +6,6 @@ Token nicht in Deinem Portfolio gefunden? Überprüfe die Märkte, um es für Swaps zu finden und hinzuzufügen Es gibt keine verfügbaren Token, die mit dem ausgewählten Token getauscht werden können. Bitte wähle einen anderen. Kein verfügbares Paar - Du möchtest erhalten - Du möchtest tauschen Netzwerk wählen Token anlegen Token verwalten @@ -590,8 +588,11 @@ Einstellungen Du hast keinen Zugriff auf deine Kamera gewährt Kamerazugriff verweigert + Kein Memo erforderlich %1$s ( %2$s ) im %3$s Netzwerk + Das Senden einer anderen Währung führt zu deren irreversiblem Verlust. Sende nur %s an diese Adresse. Der Versand einer anderen Währung führt zu ihrem unwiderruflichen Verlust. + Sende nur %s an diese Adresse. Überweise Geld von einem anderen Wallet oder einer anderen Börse Teilnehmen Die Informationen zum Empfehlungsprogramm konnten nicht geladen werden. Bitte versuche es später noch einmal. diff --git a/core/res/src/main/res/values-es/strings.xml b/core/res/src/main/res/values-es/strings.xml index 38c53c5104..24e4fe0863 100644 --- a/core/res/src/main/res/values-es/strings.xml +++ b/core/res/src/main/res/values-es/strings.xml @@ -6,8 +6,6 @@ ¿No encuentras el token en tu billetera? Consulte los mercados para encontrarlo y agregarlo al intercambio No hay tokens disponibles para intercambiar con el token seleccionado. Por favor elige otro. No hay par disponible - Desea recibir - Quiere intercambiar Elige red Agregue un token personalizado Gestionar tokens diff --git a/core/res/src/main/res/values-fr/strings.xml b/core/res/src/main/res/values-fr/strings.xml index d2e529b9cb..2b0fc6e1be 100644 --- a/core/res/src/main/res/values-fr/strings.xml +++ b/core/res/src/main/res/values-fr/strings.xml @@ -6,8 +6,6 @@ Jeton non trouvé dans votre portefeuille ? Consultez les marchés pour le trouver et l\'ajouter à l\'échange Il n\'y a pas de token disponible pour échanger avec le token sélectionné. Veuillez en choisir un autre. Aucune paire disponible - Vous souhaitez recevoir - Vous souhaitez échanger Choisissez le réseau Ajouter un jeton personnalisé Gérer les jetons @@ -370,7 +368,7 @@ Choisissez un portefeuille Le portefeuille ne prend pas en charge plus d\'un réseau Pour acheter, échanger ou recevoir cet actif, ajoutez-le à votre portefeuille - Cet actif n\'est plus pris en charge dans le portefeuille + Cet actif n\'est pas pris en charge dans le portefeuille Cet actif n\'est pas disponible pour ce portefeuille Ajouter au portfolio Ajoutez un jeton diff --git a/core/res/src/main/res/values-ja/strings.xml b/core/res/src/main/res/values-ja/strings.xml index 9f3c536b40..b3c7c07c53 100644 --- a/core/res/src/main/res/values-ja/strings.xml +++ b/core/res/src/main/res/values-ja/strings.xml @@ -6,8 +6,6 @@ ポートフォリオにトークンが見つかりませんか?マーケットから見つけ、スワップのために追加してください 選択したトークンと交換できるトークンがありません。別のトークンを選択してください。 利用可能なペアがありません - 受け取りたい - 交換したい ネットワークを選択 カスタムトークンの追加 トークンの管理 @@ -123,7 +121,7 @@ マーケット 遅い 速度と料金 - アドレスを取得する + アドレスを同期する プロバイダーへ移動 トークンへ移動 時間 @@ -557,6 +555,7 @@ アクセスコードの復元 同一のカード アクセスコード + プロバイダーは取引を促進し、スムーズで効率的なトークン交換を保証します 国で検索 利用不可 通貨で検索 @@ -582,8 +581,11 @@ 設定 カメラへのアクセスを許可していません。 カメラへのアクセスが拒否されました + メモ不要 %3$sネットワーク上の%1$s ( %2$s ) + 他の暗号資産を送信すると、取り返しのつかない損失が発生します。 このアドレスには%sのみを送金してください。他のトークンを送信すると、取り返しのつかない損失が発生します。 + このアドレスには%sのみを送信してください。 ウォレットや取引所から資金を送金する 参加する 紹介プログラムに関する情報を読み込めませんでした。しばらくしてからもう一度お試しください。 diff --git a/core/res/src/main/res/values-ru/strings.xml b/core/res/src/main/res/values-ru/strings.xml index dfbc4e21cc..6e9a779cef 100644 --- a/core/res/src/main/res/values-ru/strings.xml +++ b/core/res/src/main/res/values-ru/strings.xml @@ -3,8 +3,6 @@ Выберите токен Нет доступных токенов для обмена с выбранным токеном, пожалуйста, выберите другой. Нет доступных пар - Вы хотите получить - Вы хотите обменять Выберите сеть Добавить токен Валюты @@ -129,7 +127,7 @@ По рынку Медленно Скорость и комиссия - Получить ваши адреса + Синхронизировать адреса К провайдеру Перейти в токен час diff --git a/core/res/src/main/res/values-uk-rUA/strings.xml b/core/res/src/main/res/values-uk-rUA/strings.xml index 25e1a4419d..0422f45055 100644 --- a/core/res/src/main/res/values-uk-rUA/strings.xml +++ b/core/res/src/main/res/values-uk-rUA/strings.xml @@ -6,8 +6,6 @@ Токен не знайдено у вашому портфелі? Перевірте ринки, щоб знайти та додати його для обміну Немає доступних токенів для обміну з обраним токеном. Будь ласка, оберіть інший. Немає вільної пари - Ви хочете отримати - Ви хочете обміняти Оберіть мережу Додати токен Токени diff --git a/core/res/src/main/res/values/strings.xml b/core/res/src/main/res/values/strings.xml index 4f1dea27fa..1f7c527b60 100644 --- a/core/res/src/main/res/values/strings.xml +++ b/core/res/src/main/res/values/strings.xml @@ -6,8 +6,8 @@ Token not found in your portfolio? Check the Markets to find and add it for swap There are no available tokens to swap with the selected token. Please choose another one. No available pair - You want to Receive - You want to Swap + Choose the Token you want to Receive + Choose the Token you want to Swap Choose network Add custom token Manage tokens @@ -126,7 +126,7 @@ Market Slow Speed and fee - Get your addresses + Synchronize addresses Go to provider Go to token hour @@ -251,6 +251,7 @@ Tangem offers token swaps via 3rd-party providers according to each provider\'s terms Choose provider An error occurred. Code: %s + Error %1$s. The selected provider cannot process the specified transaction. Please round the value up to %2$s or change it Selected provider is unavailable at the moment. Please try again later. (Code: %s) Swaps are unavailable at the moment. Please try again later. (Code: %s) Estimated amount @@ -565,6 +566,7 @@ Access code restore Identical cards Access code + Providers facilitate transactions, ensuring smooth and efficient token exchanges Search by country Unavailable Search by currency diff --git a/features/swap/data/src/main/java/com/tangem/feature/swap/converters/ErrorsDataConverter.kt b/features/swap/data/src/main/java/com/tangem/feature/swap/converters/ErrorsDataConverter.kt index 9fc5d1725d..71196ab9a7 100644 --- a/features/swap/data/src/main/java/com/tangem/feature/swap/converters/ErrorsDataConverter.kt +++ b/features/swap/data/src/main/java/com/tangem/feature/swap/converters/ErrorsDataConverter.kt @@ -30,6 +30,7 @@ internal class ErrorsDataConverter( 2270 -> ExpressDataError.ExchangeNotEnoughBalanceError(code = error.code) 2280 -> ExpressDataError.ExchangeInvalidAddressError(code = error.code) 2290 -> tryParseExchangeInvalidFromDecimalsError(error = error) + 2320 -> tryParseProviderDifferentAmountError(error = error) else -> ExpressDataError.UnknownErrorWithCode(error.code) } } catch (e: Exception) { @@ -79,4 +80,20 @@ internal class ErrorsDataConverter( expressFromDecimals = expressFromDecimals, ) } + + private fun tryParseProviderDifferentAmountError(error: ExpressError): ExpressDataError { + val decimals = error.value?.decimals ?: return ExpressDataError.UnknownErrorWithCode(error.code) + + val fromAmount = error.value?.fromAmount?.toBigDecimalOrNull() + ?: return ExpressDataError.UnknownErrorWithCode(error.code) + val fromAmountProvider = error.value?.fromAmountProvider?.toBigDecimalOrNull() + ?: return ExpressDataError.UnknownErrorWithCode(error.code) + + return ExpressDataError.ProviderDifferentAmountError( + code = error.code, + decimals = decimals, + fromAmount = fromAmount, + fromProviderAmount = fromAmountProvider, + ) + } } \ No newline at end of file diff --git a/features/swap/domain/models/src/main/java/com/tangem/feature/swap/domain/models/ExpressDataError.kt b/features/swap/domain/models/src/main/java/com/tangem/feature/swap/domain/models/ExpressDataError.kt index b2ac31292d..1446dd81b2 100644 --- a/features/swap/domain/models/src/main/java/com/tangem/feature/swap/domain/models/ExpressDataError.kt +++ b/features/swap/domain/models/src/main/java/com/tangem/feature/swap/domain/models/ExpressDataError.kt @@ -39,6 +39,13 @@ sealed class ExpressDataError { val expressFromDecimals: Int, ) : ExpressDataError() + data class ProviderDifferentAmountError( + override val code: Int, + val fromAmount: BigDecimal, + val fromProviderAmount: BigDecimal, + val decimals: Int, + ) : ExpressDataError() + data class UnknownErrorWithCode(override val code: Int) : ExpressDataError() data class InvalidSignatureError(override val code: Int = 990) : ExpressDataError() diff --git a/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/StateBuilder.kt b/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/StateBuilder.kt index 3e33131d7d..519dd8d27f 100644 --- a/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/StateBuilder.kt +++ b/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/StateBuilder.kt @@ -10,10 +10,7 @@ import com.tangem.core.ui.components.notifications.NotificationConfig import com.tangem.core.ui.event.consumedEvent import com.tangem.core.ui.event.triggeredEvent import com.tangem.core.ui.extensions.* -import com.tangem.core.ui.format.bigdecimal.anyDecimals -import com.tangem.core.ui.format.bigdecimal.crypto -import com.tangem.core.ui.format.bigdecimal.format -import com.tangem.core.ui.format.bigdecimal.uncapped +import com.tangem.core.ui.format.bigdecimal.* import com.tangem.core.ui.utils.BigDecimalFormatter import com.tangem.core.ui.utils.parseBigDecimal import com.tangem.domain.appcurrency.model.AppCurrency @@ -777,6 +774,19 @@ internal class StateBuilder( iconResId = R.drawable.ic_alert_circle_24, ), ) + is ExpressDataError.ProviderDifferentAmountError -> SwapWarning.GeneralError( + notificationConfig = NotificationConfig( + title = resourceReference(id = R.string.common_error), + subtitle = resourceReference( + R.string.express_error_provider_amount_roundup, + formatArgs = wrappedList( + expressDataError.code, + expressDataError.fromProviderAmount.format { simple(decimals = expressDataError.decimals) }, + ), + ), + iconResId = R.drawable.ic_alert_circle_24, + ), + ) else -> SwapWarning.GeneralWarning( notificationConfig = NotificationConfig( title = providerErrorTitle, diff --git a/features/swap/presentation/src/main/java/com/tangem/feature/swap/utils/SwapUtils.kt b/features/swap/presentation/src/main/java/com/tangem/feature/swap/utils/SwapUtils.kt index 44c918c906..a0ef72bd20 100644 --- a/features/swap/presentation/src/main/java/com/tangem/feature/swap/utils/SwapUtils.kt +++ b/features/swap/presentation/src/main/java/com/tangem/feature/swap/utils/SwapUtils.kt @@ -28,6 +28,13 @@ internal fun getExpressErrorMessage(expressDataError: ExpressDataError): TextRef id = R.string.express_error_swap_pair_unavailable, formatArgs = wrappedList(expressDataError.code), ) + is ExpressDataError.ProviderDifferentAmountError -> resourceReference( + R.string.express_error_provider_amount_roundup, + formatArgs = wrappedList( + expressDataError.code, + expressDataError.fromProviderAmount.format { simple(decimals = expressDataError.decimals) }, + ), + ) else -> resourceReference(R.string.express_error_code, wrappedList(expressDataError.code.toString())) } } From 8baa8844041029c8c7123c6278e2c44dff7b6c39 Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 26 Nov 2024 18:15:27 +0300 Subject: [PATCH 10/16] Updated on 2026-08-14 --- gradle/dependencies.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle/dependencies.toml b/gradle/dependencies.toml index e32d4d13c7..dae5edfbd0 100644 --- a/gradle/dependencies.toml +++ b/gradle/dependencies.toml @@ -87,9 +87,9 @@ markdownComposeView = "0.5.4" # endregion Other libraries # region Tangem -tangemBlockchainSdk = "release-app_5.18-872" +tangemBlockchainSdk = "release-app_5.18-873" #tangemBlockchainSdk = "0.0.1" # Keep it! - used for local builds -tangemCardSdk = "release-app_5.18-402" +tangemCardSdk = "release-app_5.18-405" #tangemCardSdk = "0.0.1" # Keep it! - used for local builds ^ tangemVico = "2.0.0-alpha.25-tangem17" #tangemVico = "0.0.1" # Keep it! - used for local builds ^ From c2c95b8d896050c67b3d4a88b683d7a688e795f4 Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 26 Nov 2024 18:32:04 +0300 Subject: [PATCH 11/16] Updated on 2026-08-14 --- gradle/dependencies.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/dependencies.toml b/gradle/dependencies.toml index dae5edfbd0..c086ede1d7 100644 --- a/gradle/dependencies.toml +++ b/gradle/dependencies.toml @@ -89,7 +89,7 @@ markdownComposeView = "0.5.4" # region Tangem tangemBlockchainSdk = "release-app_5.18-873" #tangemBlockchainSdk = "0.0.1" # Keep it! - used for local builds -tangemCardSdk = "release-app_5.18-405" +tangemCardSdk = "release-app_5.18-406" #tangemCardSdk = "0.0.1" # Keep it! - used for local builds ^ tangemVico = "2.0.0-alpha.25-tangem17" #tangemVico = "0.0.1" # Keep it! - used for local builds ^ From bfea5c6ca1a45a45332c6167a7965cc94dd6b66b Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 27 Nov 2024 00:02:33 +0300 Subject: [PATCH 12/16] Updated on 2026-08-14 --- features/qr-scanning/impl/build.gradle.kts | 4 ++++ .../qrscanning/viewmodel/QrScanningViewModel.kt | 14 ++++++++++++++ gradle/dependencies.toml | 2 +- 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/features/qr-scanning/impl/build.gradle.kts b/features/qr-scanning/impl/build.gradle.kts index f2dfb02aa4..87bb1cc68e 100644 --- a/features/qr-scanning/impl/build.gradle.kts +++ b/features/qr-scanning/impl/build.gradle.kts @@ -47,6 +47,9 @@ dependencies { implementation(projects.domain.qrScanning) implementation(projects.domain.qrScanning.models) + /** Data */ + implementation(projects.data.card) + /** Compose */ implementation(deps.compose.foundation) implementation(deps.compose.ui) @@ -57,4 +60,5 @@ dependencies { /** Other dependencies */ implementation(deps.arrow.core) implementation(deps.timber) + implementation(deps.tangem.card.core) } \ No newline at end of file diff --git a/features/qr-scanning/impl/src/main/java/com/tangem/feature/qrscanning/viewmodel/QrScanningViewModel.kt b/features/qr-scanning/impl/src/main/java/com/tangem/feature/qrscanning/viewmodel/QrScanningViewModel.kt index 49b23ff8cd..a504e00e9f 100644 --- a/features/qr-scanning/impl/src/main/java/com/tangem/feature/qrscanning/viewmodel/QrScanningViewModel.kt +++ b/features/qr-scanning/impl/src/main/java/com/tangem/feature/qrscanning/viewmodel/QrScanningViewModel.kt @@ -4,6 +4,7 @@ import androidx.lifecycle.SavedStateHandle import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.tangem.common.routing.AppRoute +import com.tangem.data.card.sdk.CardSdkProvider import com.tangem.domain.qrscanning.models.SourceType import com.tangem.feature.qrscanning.navigation.QrScanningInnerRouter import com.tangem.feature.qrscanning.presentation.QrScanningState @@ -20,6 +21,7 @@ import javax.inject.Inject internal class QrScanningViewModel @Inject constructor( private val stateHolder: QrScanningStateController, private val clickIntents: QrScanningClickIntentsImplementor, + private val cardSdkProvider: CardSdkProvider, savedStateHandle: SavedStateHandle, ) : ViewModel() { @@ -31,6 +33,12 @@ internal class QrScanningViewModel @Inject constructor( val uiState: StateFlow = stateHolder.uiState val launchGalleryEvent: SharedFlow = clickIntents.launchGallery + init { + // samsung for some reason disables reader mode, and then it works unstable + // to prevent this disable ir manually before scan QR + cardSdkProvider.sdk.forceDisableReaderMode() + } + fun setRouter(router: QrScanningInnerRouter) { clickIntents.initialize( router = router, @@ -49,4 +57,10 @@ internal class QrScanningViewModel @Inject constructor( fun onDismissBottomSheetState() { stateHolder.update(DismissBottomSheetTransformer()) } + + override fun onCleared() { + super.onCleared() + // don't forget enable reader mode after scan complete + cardSdkProvider.sdk.forceEnableReaderMode() + } } \ No newline at end of file diff --git a/gradle/dependencies.toml b/gradle/dependencies.toml index c086ede1d7..43982c3906 100644 --- a/gradle/dependencies.toml +++ b/gradle/dependencies.toml @@ -89,7 +89,7 @@ markdownComposeView = "0.5.4" # region Tangem tangemBlockchainSdk = "release-app_5.18-873" #tangemBlockchainSdk = "0.0.1" # Keep it! - used for local builds -tangemCardSdk = "release-app_5.18-406" +tangemCardSdk = "release-app_5.18-407" #tangemCardSdk = "0.0.1" # Keep it! - used for local builds ^ tangemVico = "2.0.0-alpha.25-tangem17" #tangemVico = "0.0.1" # Keep it! - used for local builds ^ From bf281c19291f0fa0822b1d48f5aef9785e9e4737 Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 27 Nov 2024 15:53:04 +0400 Subject: [PATCH 13/16] Updated on 2026-08-14 --- gradle/dependencies.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/dependencies.toml b/gradle/dependencies.toml index 43982c3906..baaba703a2 100644 --- a/gradle/dependencies.toml +++ b/gradle/dependencies.toml @@ -89,7 +89,7 @@ markdownComposeView = "0.5.4" # region Tangem tangemBlockchainSdk = "release-app_5.18-873" #tangemBlockchainSdk = "0.0.1" # Keep it! - used for local builds -tangemCardSdk = "release-app_5.18-407" +tangemCardSdk = "release-app_5.18-408" #tangemCardSdk = "0.0.1" # Keep it! - used for local builds ^ tangemVico = "2.0.0-alpha.25-tangem17" #tangemVico = "0.0.1" # Keep it! - used for local builds ^ From f347cb2c8cb78e107b2b624c701b3505f0ae1a49 Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 28 Nov 2024 14:10:18 +0300 Subject: [PATCH 14/16] Updated on 2026-08-14 --- .../com/tangem/feature/swap/converters/ErrorsDataConverter.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/features/swap/data/src/main/java/com/tangem/feature/swap/converters/ErrorsDataConverter.kt b/features/swap/data/src/main/java/com/tangem/feature/swap/converters/ErrorsDataConverter.kt index 71196ab9a7..2df4aa2f11 100644 --- a/features/swap/data/src/main/java/com/tangem/feature/swap/converters/ErrorsDataConverter.kt +++ b/features/swap/data/src/main/java/com/tangem/feature/swap/converters/ErrorsDataConverter.kt @@ -92,8 +92,8 @@ internal class ErrorsDataConverter( return ExpressDataError.ProviderDifferentAmountError( code = error.code, decimals = decimals, - fromAmount = fromAmount, - fromProviderAmount = fromAmountProvider, + fromAmount = fromAmount.movePointLeft(decimals), + fromProviderAmount = fromAmountProvider.movePointLeft(decimals), ) } } \ No newline at end of file From fef9d0f593a14f356c27df30eff9397eb11974f5 Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 28 Nov 2024 14:12:38 +0300 Subject: [PATCH 15/16] Updated on 2026-08-14 --- app/src/main/assets/tangem-app-config | 2 +- gradle/dependencies.toml | 2 +- .../main/java/com/tangem/blockchainsdk/utils/ProviderTypeExt.kt | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/app/src/main/assets/tangem-app-config b/app/src/main/assets/tangem-app-config index f859554840..f1aa2f2cbf 160000 --- a/app/src/main/assets/tangem-app-config +++ b/app/src/main/assets/tangem-app-config @@ -1 +1 @@ -Subproject commit f859554840df30c25a8fe266de2db7ef71cf5652 +Subproject commit f1aa2f2cbf374ecba5da753d9f51c9df81749ef2 diff --git a/gradle/dependencies.toml b/gradle/dependencies.toml index baaba703a2..59dbe7832a 100644 --- a/gradle/dependencies.toml +++ b/gradle/dependencies.toml @@ -87,7 +87,7 @@ markdownComposeView = "0.5.4" # endregion Other libraries # region Tangem -tangemBlockchainSdk = "release-app_5.18-873" +tangemBlockchainSdk = "release-app_5.18-874" #tangemBlockchainSdk = "0.0.1" # Keep it! - used for local builds tangemCardSdk = "release-app_5.18-408" #tangemCardSdk = "0.0.1" # Keep it! - used for local builds ^ diff --git a/libs/blockchain-sdk/src/main/java/com/tangem/blockchainsdk/utils/ProviderTypeExt.kt b/libs/blockchain-sdk/src/main/java/com/tangem/blockchainsdk/utils/ProviderTypeExt.kt index 1d88ec5f27..3b32c69ae9 100644 --- a/libs/blockchain-sdk/src/main/java/com/tangem/blockchainsdk/utils/ProviderTypeExt.kt +++ b/libs/blockchain-sdk/src/main/java/com/tangem/blockchainsdk/utils/ProviderTypeExt.kt @@ -13,6 +13,7 @@ fun createPrivateProviderType(name: String): ProviderType? { "tangemRosetta" -> ProviderType.Cardano.Rosetta "fireAcademy" -> ProviderType.Chia.FireAcademy "tangemChia" -> ProviderType.Chia.Tangem + "tangemChia3" -> ProviderType.Chia.TangemNew "infura" -> ProviderType.EthereumLike.Infura "getblock" -> ProviderType.GetBlock "arkhiaHedera" -> ProviderType.Hedera.Arkhia From a6569014e5b5bee5273408ed7c742a8415a86103 Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 28 Nov 2024 16:00:28 +0300 Subject: [PATCH 16/16] Updated on 2026-08-14 --- gradle/dependencies.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/dependencies.toml b/gradle/dependencies.toml index 59dbe7832a..2d7317203b 100644 --- a/gradle/dependencies.toml +++ b/gradle/dependencies.toml @@ -89,7 +89,7 @@ markdownComposeView = "0.5.4" # region Tangem tangemBlockchainSdk = "release-app_5.18-874" #tangemBlockchainSdk = "0.0.1" # Keep it! - used for local builds -tangemCardSdk = "release-app_5.18-408" +tangemCardSdk = "release-app_5.18-409" #tangemCardSdk = "0.0.1" # Keep it! - used for local builds ^ tangemVico = "2.0.0-alpha.25-tangem17" #tangemVico = "0.0.1" # Keep it! - used for local builds ^