From 5439c4777b9f87e63e6586a7248eb363e2a25c54 Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 5 May 2022 16:02:25 +0400 Subject: [PATCH 001/177] Updated on 2026-08-14 --- app/src/main/res/values-de/strings.xml | 19 ----------------- .../main/res/values-de/strings_blockchain.xml | 20 ++++++++++++++++++ app/src/main/res/values-fr/strings.xml | 18 ---------------- .../main/res/values-fr/strings_blockchain.xml | 20 ++++++++++++++++++ app/src/main/res/values-it/strings.xml | 20 +----------------- .../main/res/values-it/strings_blockchain.xml | 20 ++++++++++++++++++ app/src/main/res/values-ru/strings.xml | 18 +--------------- .../main/res/values-ru/strings_blockchain.xml | 20 ++++++++++++++++++ app/src/main/res/values/strings.xml | 21 +------------------ .../main/res/values/strings_blockchain.xml | 20 ++++++++++++++++++ 10 files changed, 103 insertions(+), 93 deletions(-) create mode 100644 app/src/main/res/values-de/strings_blockchain.xml create mode 100644 app/src/main/res/values-fr/strings_blockchain.xml create mode 100644 app/src/main/res/values-it/strings_blockchain.xml create mode 100644 app/src/main/res/values-ru/strings_blockchain.xml create mode 100644 app/src/main/res/values/strings_blockchain.xml diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index 97c8b2d0af..a74c2f7407 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -59,11 +59,6 @@ Gebühr Gesamt Höchstbetrag - Ungültige Adresse - Ungültiger Betrag - Der Betrag geht über die Bilanz hinaus - Der Gesamtbetrag geht über die Bilanz hinaus - Die Gebühr geht über die Bilanz hinaus Niedrig Normal Priorität @@ -73,7 +68,6 @@ %s %s und %s %s werden gesendet Bilanz: %s %s Die Transaktion wurde erfolgreich signiert und an den Blockchain-Knoten gesendet. Die Walletbilanz wird aktualisiert - Um ein Konto zu erstellen, senden Sie 1+ XLM an diese Adresse Details KartenID Emittent @@ -165,21 +159,12 @@ RECHTLICHER HAFTUNGSAUSSCHLUSS Nutzungsbedingungen Keine Internetverbindung - Das Zielkonto ist nicht erstellt. Der abzusendende Betrag soll %1$s %2$s + Gebühr oder mehr sein - Erhalt der Gebühr fehlgeschlagen - - Unbekannter Fehler Verifikation der PayString ist fehlgeschlagen PayString wird von der Blockchain nicht unterstützt PayString ist nicht registriert PayString-Anfrage ist fehlgeschlagen Die Adresse stimmt mit der Adresse Ihrer Brieftasche überein - Nicht genug Geld - Interner Fehler der Blockchain - Falsche Gebühr - Minimaler Betrag ist %s - Restbestand zu klein Die Adresse wurde erfolgreich kopiert @@ -192,8 +177,4 @@ RECHTLICHER HAFTUNGSAUSSCHLUSS Ihr Kontostand in dieser Brieftasche ist nicht Null, oder Sie haben unbestätigte Transaktionen. Es ist unmöglich die Funktion der Brieftasche zu löschen. Dies ist die derzeit aktive Wahl - Damit Sie beim nächsten Aufladen Ihrer Brieftasche keine erhöhte Provision zahlen, soll der Betrag um %s XTZ reduziert werden - Um %s XTZ reduzieren - Nein, alles senden - \ No newline at end of file diff --git a/app/src/main/res/values-de/strings_blockchain.xml b/app/src/main/res/values-de/strings_blockchain.xml new file mode 100644 index 0000000000..e60757c7c1 --- /dev/null +++ b/app/src/main/res/values-de/strings_blockchain.xml @@ -0,0 +1,20 @@ + + + Nicht genug Geld + Interner Fehler der Blockchain + Falsche Gebühr + Minimaler Betrag ist %s + Restbestand zu klein + Das Zielkonto ist nicht erstellt. Der abzusendende Betrag soll %1$s %2$s + Gebühr oder mehr sein + Um ein Konto zu erstellen, senden Sie 1+ XLM an diese Adresse + Erhalt der Gebühr fehlgeschlagen + Unbekannter Fehler + Damit Sie beim nächsten Aufladen Ihrer Brieftasche keine erhöhte Provision zahlen, soll der Betrag um %s XTZ reduziert werden + Um %s XTZ reduzieren + Nein, alles senden + Ungültige Adresse + Ungültiger Betrag + Der Betrag geht über die Bilanz hinaus + Der Gesamtbetrag geht über die Bilanz hinaus + Die Gebühr geht über die Bilanz hinaus + \ No newline at end of file diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 9e6777a914..3b06614517 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -60,11 +60,6 @@ Commissions Total Somme maximale - Adresse incorrecte - Somme incorrecte - Le montant dépasse le solde - Le total dépasse le solde - Les commissions dépassent le solde Bas Normal Priorité @@ -74,7 +69,6 @@ Sera envoyé %s %s et %s %s Solde : %s %s La transaction a été signée avec succès et envoyée au nœud de blockchain. Le solde du portefeuille sera mis à jour après un certain temps - Pour créer un compte, envoyez 1+ XLM à cette adresse Référénces ID de la carte Emetteur @@ -163,20 +157,11 @@ Avertissement Conditions d\'utilisation Pas de connexion internet - Le compte cible n\'a pas été créé. Le montant à envoyer doit être de %1$s %2$s + commissions ou plus - Échec de réception des commissions - - Erreur inconnue La vérification de PayString a échoué PayString non pris en charge par la blockchain PayString non enregistré La demande de PayString a échoué L\'adresse est la même que celle de votre portefeuille - Solde insuffisant - Erreur interne de la blockchain - Commission non valide - Le montant minimal est de %ы - Le reste est trop petit L\'adresse a été copiée avec succès Saisissez d\'abord le PayString requis Posez pour scanner @@ -184,8 +169,5 @@ Avertissement Votre solde sur ce portefeuille n\'est pas nul, ou vous avez des transactions non confirmées. Impossible de supprimer la fonction du portefeuille Cette option est déjà active - Pour ne pas payer une commission élevée la prochaine fois que vous rechargez votre portefeuille, veuillez réduire le montant de %s XTZ - Réduire de% s XTZ - Non, envoyer toute la somme \ No newline at end of file diff --git a/app/src/main/res/values-fr/strings_blockchain.xml b/app/src/main/res/values-fr/strings_blockchain.xml new file mode 100644 index 0000000000..c9b37afb06 --- /dev/null +++ b/app/src/main/res/values-fr/strings_blockchain.xml @@ -0,0 +1,20 @@ + + + Solde insuffisant + Erreur interne de la blockchain + Commission non valide + Le montant minimal est de %ы + Le reste est trop petit + Le compte cible n\'a pas été créé. Le montant à envoyer doit être de %1$s %2$s + commissions ou plus + Pour créer un compte, envoyez 1+ XLM à cette adresse + Échec de réception des commissions + Erreur inconnue + Adresse incorrecte + Somme incorrecte + Le montant dépasse le solde + Le total dépasse le solde + Les commissions dépassent le solde + Pour ne pas payer une commission élevée la prochaine fois que vous rechargez votre portefeuille, veuillez réduire le montant de %s XTZ + Réduire de% s XTZ + Non, envoyer toute la somme + \ No newline at end of file diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index a7011d4bcc..b45dafe795 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -58,10 +58,7 @@ Commissione Totale Importo totale - Indirizzo non valido - Importo non valido - Il totale supera il saldo - La commissione supera il saldo + Insufficiente Normale Prioritario @@ -71,7 +68,6 @@ Sarà inviato %1$s %2$s e %1$s %2$s Saldo: %1$s %2$s La transazione è stata firmata con successo e inviata al nodo blockchain. Il saldo del portafoglio verrà aggiornato dopo un po\' di tempo - Per creare un account, invia 1+ XLM a questo indirizzo Requisiti ID carta Emittente @@ -159,26 +155,16 @@ Salvo quanto diversamente previsto dalla legge, i proprietari o i contributori d Questa nota legale è stata modificata l\'ultima volta 01.10.2020. - - Per creare un account, invia %1$s %2$s a questo indirizzo - Impossibile ottenere la commissione Accetta - L\'importo supera il saldo Termini del servizio Nessuna connessione a Internet - Errore sconosciuto Verifica del PayString fallita PayString non supportato dalla blockchain PayString non registrato Richiesta PayString fallita L\'indirizzo corrisponde all\'indirizzo del tuo portafoglio - Saldo insufficiente - Errore interno della blockchain - Commissione non valida - L\'importo minimo è di %s - L\'importo residuo è molto basso L\'indirizzo è stato copiato con successo @@ -191,8 +177,4 @@ Questa nota legale è stata modificata l\'ultima volta 01.10.2020. Il tuo saldo su questo portafoglio non è pari a zero o hai transazioni non confermate. Non è possibile eliminare la funzione portafoglio. E\' l\'opzione attualmente attiva - Per evitare di pagare una commissione maggiore la prossima volta che ricarichi il tuo portafoglio, riduci l\'importo di %s XTZ - Riduci di %s XTZ - No, invia l\'intero importo - \ No newline at end of file diff --git a/app/src/main/res/values-it/strings_blockchain.xml b/app/src/main/res/values-it/strings_blockchain.xml new file mode 100644 index 0000000000..924ecda0df --- /dev/null +++ b/app/src/main/res/values-it/strings_blockchain.xml @@ -0,0 +1,20 @@ + + + Saldo insufficiente + Errore interno della blockchain + Commissione non valida + L\'importo minimo è di %s + L\'importo residuo è molto basso + Errore sconosciuto + L\'importo supera il saldo + Per creare un account, invia %1$s %2$s a questo indirizzo + Impossibile ottenere la commissione + Per creare un account, invia 1+ XLM a questo indirizzo + Indirizzo non valido + Importo non valido + Il totale supera il saldo + La commissione supera il saldo + Per evitare di pagare una commissione maggiore la prossima volta che ricarichi il tuo portafoglio, riduci l\'importo di %s XTZ + Riduci di %s XTZ + No, invia l\'intero importo + \ No newline at end of file diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 9a0a6881fd..c2670fbbdf 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -60,11 +60,6 @@ Комиссия Всего Максимальная сумма - Неверный адрес - Недопустимая сумма - Сумма превышает баланс - Общая сумма превышает баланс - Комиссия превышает баланс Низкий Нормальный Приоритетный @@ -108,30 +103,19 @@ Приложите, чтобы изменить пароль Неверный PayString Условия использования - Не удалось получить комиссию - Целевая учетная запись не создана. Сумма для отправки должна быть %1$s %2$s + плата за создание или больше Нет соединения с интернетом - Неизвестная ошибка Ошибка проверки PayString PayString не поддерживается блокчейном PayString не зарегистрирован Не удалось выполнить запрос PayString Адрес совпадает с адресом кошелька - Недостаточный баланс - Внутренняя ошибка блокчейна - Неверная комиссия - Минимальная сумма: %s - Сдача слишком мала - Для создания учетной записи отправьте 1+ XLM на этот адрес + Адрес скопирован в буфер обмена Сначала введите желаемую PayString Приложите, чтобы отсканировать Приложите карту Ваш баланс на этом кошельке не равен нулю, или у Вас есть неподтвержденные транзакции Это текущая активная опция - Чтобы не платить повышенную комиссию при следующем пополнении кошелька, уменьшите сумму на %s XTZ - Уменьшить на %s XTZ - Нет, отправить все Ошибка сканирования карты. Попробуй снова. Купить Продать diff --git a/app/src/main/res/values-ru/strings_blockchain.xml b/app/src/main/res/values-ru/strings_blockchain.xml new file mode 100644 index 0000000000..98b7ad7194 --- /dev/null +++ b/app/src/main/res/values-ru/strings_blockchain.xml @@ -0,0 +1,20 @@ + + + Недостаточный баланс + Внутренняя ошибка блокчейна + Неверная комиссия + Минимальная сумма: %s + Сдача слишком мала + Для создания учетной записи отправьте 1+ XLM на этот адрес + Не удалось получить комиссию + Целевая учетная запись не создана. Сумма для отправки должна быть %1$s %2$s + плата за создание или больше + Неизвестная ошибка + Неверный адрес + Недопустимая сумма + Сумма превышает баланс + Общая сумма превышает баланс + Комиссия превышает баланс + Чтобы не платить повышенную комиссию при следующем пополнении кошелька, уменьшите сумму на %s XTZ + Уменьшить на %s XTZ + Нет, отправить все + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index c3e70dee2f..23ff1e496f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -70,11 +70,6 @@ Fee Total Maximum amount - Invalid address - Invalid amount - Amount Exceeds Balance - Total Exceeds Balance - Fee Exceeds Balance Low Normal Priority @@ -173,23 +168,14 @@ \nThis disclaimer was amended for the last time on October 1st, 2020. Terms of service - Failed to get fee - Target account is not created. Amount to send should be %1$s %2$s + fee or more to create - No internet connection + No internet connection - Unknown error PayString verification failed PayString unsupported by blockchain PayString not registered PayString request failed Address is the same as wallet address - Insufficient balance - Blockchain internal error - Invalid Fee - Minimum amount is %s - Change is too small - To create account send 1+ XLM to this address Address was copied to clipboard @@ -201,9 +187,4 @@ Your balance on this wallet is not zero, or you have unconfirmed transactions This is the currently active option - - - To avoid paying an increased commission the next time you top up your wallet, reduce the amount by %s XTZ - Reduce by %s XTZ - No, send all \ No newline at end of file diff --git a/app/src/main/res/values/strings_blockchain.xml b/app/src/main/res/values/strings_blockchain.xml new file mode 100644 index 0000000000..424f164b75 --- /dev/null +++ b/app/src/main/res/values/strings_blockchain.xml @@ -0,0 +1,20 @@ + + + Insufficient balance + Blockchain internal error + Invalid Fee + Minimum amount is %s + Change is too small + To create account send 1+ XLM to this address + Failed to get fee + Target account is not created. Amount to send should be %1$s %2$s + fee or more to create + Unknown error + Invalid address + Invalid amount + Amount Exceeds Balance + Total Exceeds Balance + Fee Exceeds Balance + To avoid paying an increased commission the next time you top up your wallet, reduce the amount by %s XTZ + Reduce by %s XTZ + No, send all + \ No newline at end of file From 2bcc9da473324fce9a0809977cbe6bdb7ddb3075 Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 2 Jun 2022 16:50:16 +0400 Subject: [PATCH 002/177] Updated on 2026-08-14 --- app/src/main/assets/tangem-app-config | 2 +- .../tap/common/shop/TangemShopService.kt | 31 +++++++++---------- .../tap/common/shop/data/ProductType.kt | 12 ++++++- .../tap/features/shop/redux/ShopAction.kt | 5 +++ .../tap/features/shop/redux/ShopMiddleware.kt | 12 ++++--- .../tap/features/shop/redux/ShopReducer.kt | 1 + app/src/main/res/values-de/strings_final.xml | 1 + app/src/main/res/values-fr/strings_final.xml | 1 + app/src/main/res/values-it/strings_final.xml | 1 + app/src/main/res/values-ru/strings_final.xml | 1 + app/src/main/res/values/strings_final.xml | 1 + 11 files changed, 45 insertions(+), 23 deletions(-) diff --git a/app/src/main/assets/tangem-app-config b/app/src/main/assets/tangem-app-config index 64ae04d208..7f058ec409 160000 --- a/app/src/main/assets/tangem-app-config +++ b/app/src/main/assets/tangem-app-config @@ -1 +1 @@ -Subproject commit 64ae04d2086e5a605dd4da3cba4af32a60d46c79 +Subproject commit 7f058ec409b4eaaf8688ecd4bf944ef8d58d3564 diff --git a/app/src/main/java/com/tangem/tap/common/shop/TangemShopService.kt b/app/src/main/java/com/tangem/tap/common/shop/TangemShopService.kt index 3da94dc568..f5281cc796 100644 --- a/app/src/main/java/com/tangem/tap/common/shop/TangemShopService.kt +++ b/app/src/main/java/com/tangem/tap/common/shop/TangemShopService.kt @@ -5,6 +5,7 @@ import android.content.Intent import com.google.android.gms.wallet.PaymentData import com.shopify.buy3.Storefront import com.tangem.tap.common.analytics.AnalyticsHandler +import com.tangem.tap.common.extensions.filterNotNull import com.tangem.tap.common.shop.data.ProductType import com.tangem.tap.common.shop.data.TangemProduct import com.tangem.tap.common.shop.data.TotalSum @@ -21,7 +22,6 @@ class TangemShopService(application: Application, shopifyShop: ShopifyShop) { private val shopifyService = ShopifyService(application, shopifyShop) - private lateinit var product: Storefront.Product private val checkouts = mutableMapOf() private val variants = mutableMapOf() @@ -31,22 +31,19 @@ class TangemShopService(application: Application, shopifyShop: ShopifyShop) { suspend fun getProducts(): Result> { val result = shopifyService.getProducts() - result.onSuccess { - product = it.first { - val variantsSku = it.variants.edges.map { it.node.sku } - variantsSku.contains(ProductType.WALLET_2_CARDS.sku) && variantsSku.contains( - ProductType.WALLET_3_CARDS.sku - ) - } - product.variants.edges.map { it.node } - .forEach { variant -> - if (variant.sku == ProductType.WALLET_2_CARDS.sku) { - variants[ProductType.WALLET_2_CARDS] = variant - } else if (variant.sku == ProductType.WALLET_3_CARDS.sku) { - variants[ProductType.WALLET_3_CARDS] = variant - } - } + return result.mapCatching { product -> + val availableVariants = product + .flatMap { it.variants.edges.map { it.node } } + .filter { SKUS_TO_DISPLAY.contains(it.sku) } + .associateBy { ProductType.fromSku(it.sku) } + .filterNotNull() + variants.putAll(availableVariants) + if (variants.size < SKUS_TO_DISPLAY.size) { + return Result.failure(Exception( + "Shopify: products are missing, " + + "\nproducts available: ${variants.keys.map { it.sku }}")) + } val twoCardsProduct = TangemProduct( type = ProductType.WALLET_2_CARDS, @@ -65,7 +62,6 @@ class TangemShopService(application: Application, shopifyShop: ShopifyShop) { createCheckouts() return Result.success(listOf(twoCardsProduct, threeCardsProduct)) } - return Result.failure(result.exceptionOrNull()!!) } private suspend fun createCheckouts() { @@ -214,6 +210,7 @@ class TangemShopService(application: Application, shopifyShop: ShopifyShop) { companion object { const val TANGEM_WALLET_2_CARDS_SKU = "TG115x2" const val TANGEM_WALLET_3_CARDS_SKU = "TG115x3" + val SKUS_TO_DISPLAY = listOf(TANGEM_WALLET_2_CARDS_SKU, TANGEM_WALLET_3_CARDS_SKU) } } diff --git a/app/src/main/java/com/tangem/tap/common/shop/data/ProductType.kt b/app/src/main/java/com/tangem/tap/common/shop/data/ProductType.kt index 89116f8096..d8db451147 100644 --- a/app/src/main/java/com/tangem/tap/common/shop/data/ProductType.kt +++ b/app/src/main/java/com/tangem/tap/common/shop/data/ProductType.kt @@ -4,5 +4,15 @@ import com.tangem.tap.common.shop.TangemShopService enum class ProductType(val sku: String) { WALLET_2_CARDS(TangemShopService.TANGEM_WALLET_2_CARDS_SKU), - WALLET_3_CARDS(TangemShopService.TANGEM_WALLET_3_CARDS_SKU) + WALLET_3_CARDS(TangemShopService.TANGEM_WALLET_3_CARDS_SKU); + + companion object { + fun fromSku(sku: String): ProductType? { + return when (sku) { + WALLET_2_CARDS.sku -> WALLET_2_CARDS + WALLET_3_CARDS.sku -> WALLET_3_CARDS + else -> null + } + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/shop/redux/ShopAction.kt b/app/src/main/java/com/tangem/tap/features/shop/redux/ShopAction.kt index 500cc39285..27a4a5b9e5 100644 --- a/app/src/main/java/com/tangem/tap/features/shop/redux/ShopAction.kt +++ b/app/src/main/java/com/tangem/tap/features/shop/redux/ShopAction.kt @@ -1,15 +1,20 @@ package com.tangem.tap.features.shop.redux import android.content.Intent +import com.tangem.tap.common.redux.NotificationAction import com.tangem.tap.common.shop.GooglePayService import com.tangem.tap.common.shop.data.ProductType import com.tangem.tap.common.shop.data.TangemProduct +import com.tangem.wallet.R import org.rekotlin.Action sealed class ShopAction : Action { object LoadProducts : ShopAction() { data class Success(val products: List) : ShopAction() + object Failure : ShopAction(), NotificationAction { + override val messageResource = R.string.common_server_unavailable + } } data class ApplyPromoCode(val promoCode: String) : ShopAction() { diff --git a/app/src/main/java/com/tangem/tap/features/shop/redux/ShopMiddleware.kt b/app/src/main/java/com/tangem/tap/features/shop/redux/ShopMiddleware.kt index 464a99de96..f3734950da 100644 --- a/app/src/main/java/com/tangem/tap/features/shop/redux/ShopMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/shop/redux/ShopMiddleware.kt @@ -11,6 +11,7 @@ import com.tangem.tap.store import kotlinx.coroutines.launch import org.rekotlin.Action import org.rekotlin.Middleware +import timber.log.Timber class ShopMiddleware { @@ -88,10 +89,13 @@ private fun handle(action: Action) { } ShopAction.LoadProducts -> { scope.launch { - val result = shopService.getProducts() - result.onSuccess { - store.dispatchOnMain(ShopAction.LoadProducts.Success(it)) - } + shopService.getProducts().fold( + onSuccess = { store.dispatchOnMain(ShopAction.LoadProducts.Success(it)) }, + onFailure = { + Timber.e(it) + store.dispatchOnMain(ShopAction.LoadProducts.Failure) + } + ) } } is ShopAction.CheckIfGooglePayAvailable -> { diff --git a/app/src/main/java/com/tangem/tap/features/shop/redux/ShopReducer.kt b/app/src/main/java/com/tangem/tap/features/shop/redux/ShopReducer.kt index ee12f53109..001c48a46f 100644 --- a/app/src/main/java/com/tangem/tap/features/shop/redux/ShopReducer.kt +++ b/app/src/main/java/com/tangem/tap/features/shop/redux/ShopReducer.kt @@ -65,5 +65,6 @@ private fun internalReduce(action: Action, state: ShopState): ShopState { } ShopAction.FinishSuccessfulOrder -> state ShopAction.ResetState -> ShopState() + ShopAction.LoadProducts.Failure -> state } } \ No newline at end of file diff --git a/app/src/main/res/values-de/strings_final.xml b/app/src/main/res/values-de/strings_final.xml index de09eb54fd..0e388163a0 100644 --- a/app/src/main/res/values-de/strings_final.xml +++ b/app/src/main/res/values-de/strings_final.xml @@ -45,5 +45,6 @@ If you chose the wrong network during your crypto transfer from the exchange, this guide will help you recover your funds Custom + The server is not available, please try again later \ No newline at end of file diff --git a/app/src/main/res/values-fr/strings_final.xml b/app/src/main/res/values-fr/strings_final.xml index de09eb54fd..0e388163a0 100644 --- a/app/src/main/res/values-fr/strings_final.xml +++ b/app/src/main/res/values-fr/strings_final.xml @@ -45,5 +45,6 @@ If you chose the wrong network during your crypto transfer from the exchange, this guide will help you recover your funds Custom + The server is not available, please try again later \ No newline at end of file diff --git a/app/src/main/res/values-it/strings_final.xml b/app/src/main/res/values-it/strings_final.xml index de09eb54fd..0e388163a0 100644 --- a/app/src/main/res/values-it/strings_final.xml +++ b/app/src/main/res/values-it/strings_final.xml @@ -45,5 +45,6 @@ If you chose the wrong network during your crypto transfer from the exchange, this guide will help you recover your funds Custom + The server is not available, please try again later \ No newline at end of file diff --git a/app/src/main/res/values-ru/strings_final.xml b/app/src/main/res/values-ru/strings_final.xml index ea424b57b6..626d6eb7d8 100644 --- a/app/src/main/res/values-ru/strings_final.xml +++ b/app/src/main/res/values-ru/strings_final.xml @@ -45,6 +45,7 @@ Если вы совершили ошибку с выбором сети при переводе средств с биржи, эта инструкция поможет вам восстановить средства Пользовательский + Сервер недоступен, повторите попытку позднее Баланс Обработка полной суммы… diff --git a/app/src/main/res/values/strings_final.xml b/app/src/main/res/values/strings_final.xml index 2478dee488..0733b14d9c 100644 --- a/app/src/main/res/values/strings_final.xml +++ b/app/src/main/res/values/strings_final.xml @@ -45,6 +45,7 @@ If you chose the wrong network during your crypto transfer from the exchange, this guide will help you recover your funds Custom + The server is not available, please try again later Total balance Some networks are unreachable From df6e1bf7a2732ff00530947d5352e1de22a67bf9 Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 6 Jun 2022 10:47:49 +0400 Subject: [PATCH 003/177] Updated on 2026-08-14 --- fastlane/Fastfile | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/fastlane/Fastfile b/fastlane/Fastfile index 06543032c9..a9d631e668 100644 --- a/fastlane/Fastfile +++ b/fastlane/Fastfile @@ -56,6 +56,17 @@ platform :android do "android.injected.signing.key.alias" => options[:key_alias], "android.injected.signing.key.password" => options[:key_password], }) + gradle( + task: "assemble", + build_type: "Release", + properties: { + 'versionCode' => options[:versionCode], + 'versionName' => options[:versionName], + "android.injected.signing.store.file" => options[:keystore], + "android.injected.signing.store.password" => options[:store_password], + "android.injected.signing.key.alias" => options[:key_alias], + "android.injected.signing.key.password" => options[:key_password], + }) end desc "Submit a new Beta Build to Firebase App Distribution" From e44dcb4e0b2573a8579d3f2cd476d49cbf20966a Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 7 Jun 2022 12:03:31 +0400 Subject: [PATCH 004/177] Updated on 2026-08-14 --- .../com/tangem/tap/common/DialogManager.kt | 31 +++--- .../tangem/tap/common/redux/StateDialog.kt | 2 +- .../tangem/tap/common/ui/SimpleAlertDialog.kt | 59 ++++++++++ .../com/tangem/tap/domain/RatesRepository.kt | 2 +- .../extensions/CurrencyExchangeManager.kt | 2 +- .../domain/extensions/WalletManagerFactory.kt | 2 +- .../tap/features/demo/DemoMiddlewares.kt | 2 +- .../walletconnect/WalletConnectMiddleware.kt | 2 +- .../features/details/ui/DetailsFragment.kt | 2 +- .../dialogs/SimpleAlertDialog.kt | 28 ----- .../AddressInfoBottomSheetDialog.kt | 2 +- .../features/onboarding/OnboardingManager.kt | 2 +- .../note/redux/OnboardingNoteMiddleware.kt | 2 +- .../twins/redux/TwinCardsMiddleware.kt | 2 +- .../features/tokens/redux/TokensMiddleware.kt | 7 +- .../tap/features/tokens/redux/TokensState.kt | 8 +- .../tap/features/wallet/models/Currency.kt | 97 +++++++++++++++++ .../tap/features/wallet/redux/WalletAction.kt | 4 +- .../tap/features/wallet/redux/WalletState.kt | 102 +----------------- .../middlewares/AppCurrencyMiddleware.kt | 2 +- .../middlewares/MultiWalletMiddleware.kt | 63 +++++++++-- .../middlewares/TradeCryptoMiddleware.kt | 2 +- .../middlewares/WalletDialogsMiddleware.kt | 2 +- .../redux/middlewares/WalletMiddleware.kt | 6 +- .../wallet/redux/models/WalletDialog.kt | 39 +++++++ .../redux/reducers/MultiWalletReducer.kt | 10 +- .../redux/reducers/OnWalletLoadedReducer.kt | 3 +- .../wallet/redux/reducers/WalletReducer.kt | 17 +-- .../wallet/ui/WalletDetailsFragment.kt | 57 ++++------ .../wallet/ui/adapters/WalletAdapter.kt | 2 +- .../dialogs/AmountToSendBottomSheetDialog.kt | 8 +- .../ui/wallet/CurrencySelectionDialog.kt | 2 +- .../wallet/ui/wallet/SingleWalletView.kt | 8 +- app/src/main/res/values-de/strings_final.xml | 8 ++ app/src/main/res/values-fr/strings_final.xml | 8 ++ app/src/main/res/values-it/strings_final.xml | 8 ++ app/src/main/res/values-ru/strings_final.xml | 9 ++ app/src/main/res/values/strings_final.xml | 9 ++ 38 files changed, 379 insertions(+), 242 deletions(-) create mode 100644 app/src/main/java/com/tangem/tap/common/ui/SimpleAlertDialog.kt delete mode 100644 app/src/main/java/com/tangem/tap/features/details/ui/walletconnect/dialogs/SimpleAlertDialog.kt create mode 100644 app/src/main/java/com/tangem/tap/features/wallet/models/Currency.kt create mode 100644 app/src/main/java/com/tangem/tap/features/wallet/redux/models/WalletDialog.kt diff --git a/app/src/main/java/com/tangem/tap/common/DialogManager.kt b/app/src/main/java/com/tangem/tap/common/DialogManager.kt index 8af2818c0a..2895613815 100644 --- a/app/src/main/java/com/tangem/tap/common/DialogManager.kt +++ b/app/src/main/java/com/tangem/tap/common/DialogManager.kt @@ -4,13 +4,10 @@ import android.app.Dialog import android.content.Context import com.tangem.tap.common.redux.AppDialog import com.tangem.tap.common.redux.global.GlobalState +import com.tangem.tap.common.ui.SimpleAlertDialog +import com.tangem.tap.common.ui.SimpleCancelableAlertDialog import com.tangem.tap.features.details.redux.walletconnect.WalletConnectDialog -import com.tangem.tap.features.details.ui.walletconnect.dialogs.ApproveWcSessionDialog -import com.tangem.tap.features.details.ui.walletconnect.dialogs.BnbTransactionDialog -import com.tangem.tap.features.details.ui.walletconnect.dialogs.ClipboardOrScanQrDialog -import com.tangem.tap.features.details.ui.walletconnect.dialogs.PersonalSignDialog -import com.tangem.tap.features.details.ui.walletconnect.dialogs.SimpleAlertDialog -import com.tangem.tap.features.details.ui.walletconnect.dialogs.TransactionDialog +import com.tangem.tap.features.details.ui.walletconnect.dialogs.* import com.tangem.tap.features.onboarding.AddressInfoBottomSheetDialog import com.tangem.tap.features.onboarding.products.twins.redux.TwinCardsAction import com.tangem.tap.features.onboarding.products.twins.ui.dialog.CreateWalletInterruptDialog @@ -19,12 +16,8 @@ import com.tangem.tap.features.onboarding.products.wallet.ui.dialogs.AddMoreBack import com.tangem.tap.features.onboarding.products.wallet.ui.dialogs.BackupInProgressDialog import com.tangem.tap.features.onboarding.products.wallet.ui.dialogs.ConfirmDiscardingBackupDialog import com.tangem.tap.features.onboarding.products.wallet.ui.dialogs.UnfinishedBackupFoundDialog -import com.tangem.tap.features.wallet.redux.WalletDialog -import com.tangem.tap.features.wallet.ui.dialogs.AmountToSendBottomSheetDialog -import com.tangem.tap.features.wallet.ui.dialogs.ChooseTradeActionBottomSheetDialog -import com.tangem.tap.features.wallet.ui.dialogs.ScanFailsDialog -import com.tangem.tap.features.wallet.ui.dialogs.SignedHashesWarningDialog -import com.tangem.tap.features.wallet.ui.dialogs.SimpleOkDialog +import com.tangem.tap.features.wallet.redux.models.WalletDialog +import com.tangem.tap.features.wallet.ui.dialogs.* import com.tangem.tap.features.wallet.ui.wallet.CurrencySelectionDialog import com.tangem.tap.store import com.tangem.wallet.R @@ -115,6 +108,20 @@ class DialogManager : StoreSubscriber { AmountToSendBottomSheetDialog(context, state.dialog) is WalletDialog.SignedHashesMultiWalletDialog -> SignedHashesWarningDialog.create(context) + is WalletDialog.TokensAreLinkedDialog -> SimpleAlertDialog.create( + title = context.getString(state.dialog.titleRes, state.dialog.currencySymbol), + message = context.getString( + state.dialog.messageRes, state.dialog.currencySymbol, state.dialog.currencyTitle + ), + context = context, + ) + is WalletDialog.RemoveWalletDialog -> SimpleCancelableAlertDialog.create( + title = context.getString(state.dialog.titleRes, state.dialog.currencyTitle), + messageRes = state.dialog.messageRes, + context = context, + primaryButtonRes = state.dialog.primaryButtonRes, + primaryButtonAction = state.dialog.action + ) else -> null } dialog?.show() diff --git a/app/src/main/java/com/tangem/tap/common/redux/StateDialog.kt b/app/src/main/java/com/tangem/tap/common/redux/StateDialog.kt index 591a20e896..89d609b32c 100644 --- a/app/src/main/java/com/tangem/tap/common/redux/StateDialog.kt +++ b/app/src/main/java/com/tangem/tap/common/redux/StateDialog.kt @@ -2,8 +2,8 @@ package com.tangem.tap.common.redux import com.tangem.common.extensions.VoidCallback import com.tangem.tap.common.TestAction +import com.tangem.tap.features.wallet.models.Currency import com.tangem.tap.features.wallet.redux.AddressData -import com.tangem.tap.features.wallet.redux.Currency /** [REDACTED_AUTHOR] diff --git a/app/src/main/java/com/tangem/tap/common/ui/SimpleAlertDialog.kt b/app/src/main/java/com/tangem/tap/common/ui/SimpleAlertDialog.kt new file mode 100644 index 0000000000..8cd6e7e5ba --- /dev/null +++ b/app/src/main/java/com/tangem/tap/common/ui/SimpleAlertDialog.kt @@ -0,0 +1,59 @@ +package com.tangem.tap.common.ui + +import android.content.Context +import androidx.appcompat.app.AlertDialog +import com.tangem.tap.common.redux.global.GlobalAction +import com.tangem.tap.store +import com.tangem.wallet.R + +class SimpleAlertDialog { + companion object { + fun create( + titleRes: Int? = null, + messageRes: Int? = null, + title: String? = null, + message: String? = null, + primaryButtonRes: Int = R.string.common_ok, + context: Context, + ): AlertDialog { + return SimpleCancelableAlertDialog.create( + titleRes = titleRes, + messageRes = messageRes, + title = title, + message = message, + primaryButtonRes = primaryButtonRes, + secondaryButtonRes = null, + context = context + ) + } + } +} + +class SimpleCancelableAlertDialog { + companion object { + fun create( + titleRes: Int? = null, + messageRes: Int? = null, + title: String? = null, + message: String? = null, + primaryButtonRes: Int = R.string.common_ok, + secondaryButtonRes: Int? = R.string.common_cancel, + primaryButtonAction: () -> Unit = {}, + secondaryButtonAction: () -> Unit = {}, + context: Context, + ): AlertDialog { + + return AlertDialog.Builder(context).apply { + setTitle(titleRes?.let { context.getString(it) } ?: title ) + setMessage(messageRes?.let { context.getString(it) } ?: message) + setPositiveButton(context.getText(primaryButtonRes)) { _, _ -> primaryButtonAction() } + if (secondaryButtonRes != null) { + setNegativeButton(context.getText(secondaryButtonRes)) { _, _ -> secondaryButtonAction()} + } + setOnDismissListener { + store.dispatch(GlobalAction.HideDialog) + } + }.create() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/domain/RatesRepository.kt b/app/src/main/java/com/tangem/tap/domain/RatesRepository.kt index 4c9cafbdee..51252c819c 100644 --- a/app/src/main/java/com/tangem/tap/domain/RatesRepository.kt +++ b/app/src/main/java/com/tangem/tap/domain/RatesRepository.kt @@ -3,7 +3,7 @@ package com.tangem.tap.domain import com.tangem.common.services.Result import com.tangem.domain.common.ThrottlerWithValues import com.tangem.network.api.tangemTech.TangemTechService -import com.tangem.tap.features.wallet.redux.Currency +import com.tangem.tap.features.wallet.models.Currency import com.tangem.tap.store import java.math.BigDecimal diff --git a/app/src/main/java/com/tangem/tap/domain/extensions/CurrencyExchangeManager.kt b/app/src/main/java/com/tangem/tap/domain/extensions/CurrencyExchangeManager.kt index d3f7730510..86288ba9aa 100644 --- a/app/src/main/java/com/tangem/tap/domain/extensions/CurrencyExchangeManager.kt +++ b/app/src/main/java/com/tangem/tap/domain/extensions/CurrencyExchangeManager.kt @@ -1,7 +1,7 @@ package com.tangem.tap.domain.extensions import com.tangem.blockchain.common.Blockchain -import com.tangem.tap.features.wallet.redux.Currency +import com.tangem.tap.features.wallet.models.Currency import com.tangem.tap.network.exchangeServices.CurrencyExchangeManager import com.tangem.tap.network.exchangeServices.CurrencyExchangeStatus import com.tangem.tap.store diff --git a/app/src/main/java/com/tangem/tap/domain/extensions/WalletManagerFactory.kt b/app/src/main/java/com/tangem/tap/domain/extensions/WalletManagerFactory.kt index bff4c0c3b7..e636c4fa07 100644 --- a/app/src/main/java/com/tangem/tap/domain/extensions/WalletManagerFactory.kt +++ b/app/src/main/java/com/tangem/tap/domain/extensions/WalletManagerFactory.kt @@ -11,7 +11,7 @@ import com.tangem.domain.common.ScanResponse import com.tangem.domain.common.TapWorkarounds.isTestCard import com.tangem.domain.common.TapWorkarounds.useOldStyleDerivation import com.tangem.tap.domain.tokens.models.BlockchainNetwork -import com.tangem.tap.features.wallet.redux.Currency +import com.tangem.tap.features.wallet.models.Currency fun WalletManagerFactory.makeWalletManagerForApp( scanResponse: ScanResponse, diff --git a/app/src/main/java/com/tangem/tap/features/demo/DemoMiddlewares.kt b/app/src/main/java/com/tangem/tap/features/demo/DemoMiddlewares.kt index 92551d6411..87af003060 100644 --- a/app/src/main/java/com/tangem/tap/features/demo/DemoMiddlewares.kt +++ b/app/src/main/java/com/tangem/tap/features/demo/DemoMiddlewares.kt @@ -5,7 +5,7 @@ import com.tangem.domain.common.ScanResponse import com.tangem.domain.common.extensions.withMainContext import com.tangem.tap.domain.extensions.makePrimaryWalletManager import com.tangem.tap.features.onboarding.products.note.redux.OnboardingNoteAction -import com.tangem.tap.features.wallet.redux.Currency +import com.tangem.tap.features.wallet.models.Currency import com.tangem.tap.features.wallet.redux.ProgressState import com.tangem.tap.scope import com.tangem.tap.store diff --git a/app/src/main/java/com/tangem/tap/features/details/redux/walletconnect/WalletConnectMiddleware.kt b/app/src/main/java/com/tangem/tap/features/details/redux/walletconnect/WalletConnectMiddleware.kt index 8dbaafc988..2bdc6edf5f 100644 --- a/app/src/main/java/com/tangem/tap/features/details/redux/walletconnect/WalletConnectMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/details/redux/walletconnect/WalletConnectMiddleware.kt @@ -21,7 +21,7 @@ import com.tangem.tap.domain.walletconnect.BnbHelper import com.tangem.tap.domain.walletconnect.WalletConnectManager import com.tangem.tap.domain.walletconnect.WalletConnectNetworkUtils import com.tangem.tap.features.demo.DemoHelper -import com.tangem.tap.features.wallet.redux.Currency +import com.tangem.tap.features.wallet.models.Currency import com.tangem.tap.features.wallet.redux.WalletAction import com.tangem.tap.scope import com.tangem.tap.store diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/DetailsFragment.kt b/app/src/main/java/com/tangem/tap/features/details/ui/DetailsFragment.kt index d4ad890b8b..8270345132 100644 --- a/app/src/main/java/com/tangem/tap/features/details/ui/DetailsFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/details/ui/DetailsFragment.kt @@ -66,7 +66,7 @@ class DetailsFragment : Fragment(R.layout.fragment_details), StoreSubscriber } - setOnDismissListener { - store.dispatch(GlobalAction.HideDialog) - } - }.create() - } - } -} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/AddressInfoBottomSheetDialog.kt b/app/src/main/java/com/tangem/tap/features/onboarding/AddressInfoBottomSheetDialog.kt index e9f47acef9..50faf24376 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/AddressInfoBottomSheetDialog.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/AddressInfoBottomSheetDialog.kt @@ -10,8 +10,8 @@ import com.tangem.tap.common.extensions.dispatchDialogHide import com.tangem.tap.common.extensions.dispatchShare import com.tangem.tap.common.extensions.dispatchToastNotification import com.tangem.tap.common.redux.AppDialog +import com.tangem.tap.features.wallet.models.Currency import com.tangem.tap.features.wallet.redux.AddressData -import com.tangem.tap.features.wallet.redux.Currency import com.tangem.tap.store import com.tangem.wallet.R import com.tangem.wallet.databinding.DialogOnboardingAddressInfoBinding diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/OnboardingManager.kt b/app/src/main/java/com/tangem/tap/features/onboarding/OnboardingManager.kt index f0873595ff..26d719d0c6 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/OnboardingManager.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/OnboardingManager.kt @@ -12,8 +12,8 @@ import com.tangem.tap.common.extensions.isPositive import com.tangem.tap.common.extensions.safeUpdate import com.tangem.tap.domain.TapError import com.tangem.tap.domain.extensions.getOrLoadCardArtworkUrl +import com.tangem.tap.features.wallet.models.Currency import com.tangem.tap.features.wallet.models.hasPendingTransactions -import com.tangem.tap.features.wallet.redux.Currency import com.tangem.tap.features.wallet.redux.ProgressState import com.tangem.tap.persistence.UsedCardsPrefStorage import timber.log.Timber diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/products/note/redux/OnboardingNoteMiddleware.kt b/app/src/main/java/com/tangem/tap/features/onboarding/products/note/redux/OnboardingNoteMiddleware.kt index 2c854ab5a0..34c0d381b2 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/products/note/redux/OnboardingNoteMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/products/note/redux/OnboardingNoteMiddleware.kt @@ -15,7 +15,7 @@ import com.tangem.tap.domain.TapError import com.tangem.tap.domain.extensions.hasWallets import com.tangem.tap.domain.extensions.makePrimaryWalletManager import com.tangem.tap.features.demo.DemoHelper -import com.tangem.tap.features.wallet.redux.Currency +import com.tangem.tap.features.wallet.models.Currency import com.tangem.tap.features.wallet.redux.ProgressState import com.tangem.tap.scope import com.tangem.tap.store diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/products/twins/redux/TwinCardsMiddleware.kt b/app/src/main/java/com/tangem/tap/features/onboarding/products/twins/redux/TwinCardsMiddleware.kt index 3ba1648a4b..e95d03c36e 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/products/twins/redux/TwinCardsMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/products/twins/redux/TwinCardsMiddleware.kt @@ -16,7 +16,7 @@ import com.tangem.tap.common.redux.navigation.NavigationAction import com.tangem.tap.domain.TapError import com.tangem.tap.domain.extensions.makePrimaryWalletManager import com.tangem.tap.domain.twins.TwinCardsManager -import com.tangem.tap.features.wallet.redux.Currency +import com.tangem.tap.features.wallet.models.Currency import com.tangem.tap.features.wallet.redux.ProgressState import com.tangem.tap.preferencesStorage import com.tangem.tap.scope diff --git a/app/src/main/java/com/tangem/tap/features/tokens/redux/TokensMiddleware.kt b/app/src/main/java/com/tangem/tap/features/tokens/redux/TokensMiddleware.kt index 48f848e65a..03ad95cbb0 100644 --- a/app/src/main/java/com/tangem/tap/features/tokens/redux/TokensMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/tokens/redux/TokensMiddleware.kt @@ -30,7 +30,7 @@ import com.tangem.tap.domain.TapError import com.tangem.tap.domain.extensions.makeWalletManagerForApp import com.tangem.tap.domain.tokens.LoadAvailableCoinsService import com.tangem.tap.domain.tokens.models.BlockchainNetwork -import com.tangem.tap.features.wallet.redux.Currency +import com.tangem.tap.features.wallet.models.Currency import com.tangem.tap.features.wallet.redux.WalletAction import kotlinx.coroutines.delay import kotlinx.coroutines.launch @@ -303,7 +303,10 @@ class TokensMiddleware { if (currencies.isNotEmpty()) { currencies.forEach { currency -> store.state.walletState.getWalletData(currency)?.let { - store.dispatch(WalletAction.MultiWallet.RemoveWallet(it)) + store.dispatch(WalletAction.MultiWallet.RemoveWallet( + walletData = it, + fromWalletDetails = false + )) } } } diff --git a/app/src/main/java/com/tangem/tap/features/tokens/redux/TokensState.kt b/app/src/main/java/com/tangem/tap/features/tokens/redux/TokensState.kt index 1c60655d24..5fcc7510f2 100644 --- a/app/src/main/java/com/tangem/tap/features/tokens/redux/TokensState.kt +++ b/app/src/main/java/com/tangem/tap/features/tokens/redux/TokensState.kt @@ -34,18 +34,18 @@ data class TokensState( typealias ContractAddress = String fun List.toTokensContractAddresses(): List { - return mapNotNull { (it.currency as? com.tangem.tap.features.wallet.redux.Currency.Token)?.token?.contractAddress }.distinct() + return mapNotNull { (it.currency as? com.tangem.tap.features.wallet.models.Currency.Token)?.token?.contractAddress }.distinct() } fun List.toNonCustomTokens(derivationStyle: DerivationStyle?): List { return filter { !it.currency.isCustomCurrency(derivationStyle) } - .mapNotNull { (it.currency as? com.tangem.tap.features.wallet.redux.Currency.Token)?.token } + .mapNotNull { (it.currency as? com.tangem.tap.features.wallet.models.Currency.Token)?.token } .distinct() } fun List.toNonCustomTokensWithBlockchains(derivationStyle: DerivationStyle?): List { return mapNotNull { - if (it.currency !is com.tangem.tap.features.wallet.redux.Currency.Token) return@mapNotNull null + if (it.currency !is com.tangem.tap.features.wallet.models.Currency.Token) return@mapNotNull null if (it.currency.isCustomCurrency(derivationStyle)) return@mapNotNull null TokenWithBlockchain(it.currency.token, it.currency.blockchain) }.distinct() @@ -56,7 +56,7 @@ fun List.toNonCustomBlockchains(derivationStyle: DerivationStyle?): if (it.currency.isCustomCurrency(derivationStyle)) { null } else { - (it.currency as? com.tangem.tap.features.wallet.redux.Currency.Blockchain)?.blockchain + (it.currency as? com.tangem.tap.features.wallet.models.Currency.Blockchain)?.blockchain } }.distinct() } diff --git a/app/src/main/java/com/tangem/tap/features/wallet/models/Currency.kt b/app/src/main/java/com/tangem/tap/features/wallet/models/Currency.kt new file mode 100644 index 0000000000..76945c588f --- /dev/null +++ b/app/src/main/java/com/tangem/tap/features/wallet/models/Currency.kt @@ -0,0 +1,97 @@ +package com.tangem.tap.features.wallet.models + +import com.tangem.blockchain.common.Blockchain +import com.tangem.blockchain.common.DerivationStyle +import com.tangem.blockchain.common.Token +import com.tangem.domain.common.extensions.toCoinId +import com.tangem.domain.features.addCustomToken.CustomCurrency +import com.tangem.tap.common.redux.global.CryptoCurrencyName +import com.tangem.tap.domain.tokens.models.BlockchainNetwork +import com.tangem.tap.features.tokens.redux.TokenWithBlockchain + +sealed interface Currency { + + val coinId: String? + get() = when (this) { + is Blockchain -> blockchain.toCoinId() + is Token -> token.id + } + val blockchain: com.tangem.blockchain.common.Blockchain + val currencySymbol: CryptoCurrencyName + val derivationPath: String? + + val currencyName: String + get() = when (this) { + is Blockchain -> blockchain.fullName + is Token -> token.name + } + + data class Token( + val token: com.tangem.blockchain.common.Token, + override val blockchain: com.tangem.blockchain.common.Blockchain, + override val derivationPath: String? + ) : Currency { + override val currencySymbol = token.symbol + } + + data class Blockchain( + override val blockchain: com.tangem.blockchain.common.Blockchain, + override val derivationPath: String? + ) : Currency { + override val currencySymbol: CryptoCurrencyName = blockchain.currency + } + + fun isCustomCurrency(derivationStyle: DerivationStyle?): Boolean { + if (this is Token && this.token.id == null) return true + + if (derivationPath == null || derivationStyle == null) return false + + return derivationPath != blockchain.derivationPath(derivationStyle)?.rawPath + } + + fun isBlockchain(): Boolean = this is Blockchain + + fun isToken(): Boolean = this is Token + + companion object { + fun fromBlockchainNetwork( + blockchainNetwork: BlockchainNetwork, + token: com.tangem.blockchain.common.Token? = null + ): Currency { + return if (token != null) { + Token( + token = token, + blockchain = blockchainNetwork.blockchain, + derivationPath = blockchainNetwork.derivationPath + ) + } else { + Blockchain( + blockchain = blockchainNetwork.blockchain, + derivationPath = blockchainNetwork.derivationPath + ) + } + } + + fun fromCustomCurrency(customCurrency: CustomCurrency): Currency { + return when (customCurrency) { + is CustomCurrency.CustomBlockchain -> Blockchain( + blockchain = customCurrency.network, + derivationPath = customCurrency.derivationPath?.rawPath + ) + is CustomCurrency.CustomToken -> Token( + token = customCurrency.token, + blockchain = customCurrency.network, + derivationPath = customCurrency.derivationPath?.rawPath, + ) + } + } + + fun fromTokenWithBlockchain(tokenWithBlockchain: TokenWithBlockchain): Token { + return Token( + token = tokenWithBlockchain.token, + blockchain = tokenWithBlockchain.blockchain, + derivationPath = null + ) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletAction.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletAction.kt index 6ca5098dd8..5d75dcfc48 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletAction.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletAction.kt @@ -10,6 +10,7 @@ import com.tangem.tap.common.redux.NotificationAction import com.tangem.tap.domain.TapError import com.tangem.tap.domain.configurable.warningMessage.WarningMessage import com.tangem.tap.domain.tokens.models.BlockchainNetwork +import com.tangem.tap.features.wallet.models.Currency import com.tangem.wallet.R import org.rekotlin.Action import java.math.BigDecimal @@ -69,7 +70,8 @@ sealed class WalletAction : Action { ) : MultiWallet() data class SelectWallet(val walletData: WalletData?) : MultiWallet() - data class RemoveWallet(val walletData: WalletData) : MultiWallet() + data class RemoveWallet(val walletData: WalletData, val fromWalletDetails: Boolean = true) : MultiWallet() + data class TryToRemoveWallet(val walletData: WalletData) : MultiWallet() data class SetPrimaryBlockchain(val blockchain: Blockchain) : MultiWallet() data class SetPrimaryToken(val token: Token) : MultiWallet() } diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletState.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletState.kt index aecdd574e8..991a27a047 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletState.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletState.kt @@ -1,16 +1,15 @@ package com.tangem.tap.features.wallet.redux import android.graphics.Bitmap -import com.tangem.blockchain.common.* +import com.tangem.blockchain.common.Blockchain +import com.tangem.blockchain.common.Token +import com.tangem.blockchain.common.Wallet +import com.tangem.blockchain.common.WalletManager import com.tangem.blockchain.common.address.AddressType import com.tangem.common.extensions.isZero import com.tangem.domain.common.extensions.canHandleToken -import com.tangem.domain.common.extensions.toCoinId -import com.tangem.domain.features.addCustomToken.CustomCurrency import com.tangem.tap.common.entities.Button -import com.tangem.tap.common.entities.FiatCurrency import com.tangem.tap.common.extensions.toQrCode -import com.tangem.tap.common.redux.StateDialog import com.tangem.tap.common.redux.global.CryptoCurrencyName import com.tangem.tap.common.toggleWidget.WidgetState import com.tangem.tap.domain.configurable.warningMessage.WarningMessage @@ -18,7 +17,6 @@ import com.tangem.tap.domain.extensions.buyIsAllowed import com.tangem.tap.domain.extensions.sellIsAllowed import com.tangem.tap.domain.tokens.models.BlockchainNetwork import com.tangem.tap.features.onboarding.products.twins.redux.TwinCardsState -import com.tangem.tap.features.tokens.redux.TokenWithBlockchain import com.tangem.tap.features.wallet.models.* import com.tangem.tap.features.wallet.redux.reducers.calculateTotalFiatAmount import com.tangem.tap.features.wallet.redux.reducers.findTotalBalanceState @@ -211,6 +209,7 @@ data class WalletState( } fun removeWallet(walletData: WalletData?): WalletState { + if (walletData == null) return this if (walletData == null) return this return if (walletData.currency is Currency.Blockchain) { val walletStores = wallets.filterNot { @@ -285,16 +284,6 @@ data class WalletState( } } -sealed interface WalletDialog : StateDialog { - data class SelectAmountToSendDialog(val amounts: List?) : WalletDialog - object SignedHashesMultiWalletDialog : WalletDialog - object ChooseTradeActionDialog : WalletDialog - data class CurrencySelectionDialog( - val currenciesList: List, - val currentAppCurrency: FiatCurrency, - ) : WalletDialog -} - enum class ProgressState : WidgetState { Loading, Done, Error } enum class ErrorType { NoInternetConnection } @@ -407,87 +396,6 @@ data class WalletData( private fun tokenAmountIsEmpty(): Boolean = currencyData.amount?.isZero() == true } -sealed interface Currency { - - val coinId: String? - get() = when (this) { - is Blockchain -> blockchain.toCoinId() - is Token -> token.id - } - val blockchain: com.tangem.blockchain.common.Blockchain - val currencySymbol: CryptoCurrencyName - val derivationPath: String? - - data class Token( - val token: com.tangem.blockchain.common.Token, - override val blockchain: com.tangem.blockchain.common.Blockchain, - override val derivationPath: String? - ) : Currency { - override val currencySymbol = token.symbol - } - - data class Blockchain( - override val blockchain: com.tangem.blockchain.common.Blockchain, - override val derivationPath: String? - ) : Currency { - override val currencySymbol: CryptoCurrencyName = blockchain.currency - } - - fun isCustomCurrency(derivationStyle: DerivationStyle?): Boolean { - if (this is Token && this.token.id == null) return true - - if (derivationPath == null || derivationStyle == null) return false - - return derivationPath != blockchain.derivationPath(derivationStyle)?.rawPath - } - - fun isBlockchain(): Boolean = this is Blockchain - - fun isToken(): Boolean = this is Token - - companion object { - fun fromBlockchainNetwork( - blockchainNetwork: BlockchainNetwork, - token: com.tangem.blockchain.common.Token? = null - ): Currency { - return if (token != null) { - Token( - token = token, - blockchain = blockchainNetwork.blockchain, - derivationPath = blockchainNetwork.derivationPath - ) - } else { - Blockchain( - blockchain = blockchainNetwork.blockchain, - derivationPath = blockchainNetwork.derivationPath - ) - } - } - - fun fromCustomCurrency(customCurrency: CustomCurrency): Currency { - return when (customCurrency) { - is CustomCurrency.CustomBlockchain -> Blockchain( - blockchain = customCurrency.network, - derivationPath = customCurrency.derivationPath?.rawPath - ) - is CustomCurrency.CustomToken -> Token( - token = customCurrency.token, - blockchain = customCurrency.network, - derivationPath = customCurrency.derivationPath?.rawPath, - ) - } - } - - fun fromTokenWithBlockchain(tokenWithBlockchain: TokenWithBlockchain): Token { - return Token( - token = tokenWithBlockchain.token, - blockchain = tokenWithBlockchain.blockchain, - derivationPath = null - ) - } - } -} - data class WalletStore( val walletManager: WalletManager?, val blockchainNetwork: BlockchainNetwork, diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/AppCurrencyMiddleware.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/AppCurrencyMiddleware.kt index 904aecab65..2aa438dc24 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/AppCurrencyMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/AppCurrencyMiddleware.kt @@ -8,7 +8,7 @@ import com.tangem.tap.common.extensions.dispatchDialogShow import com.tangem.tap.common.redux.global.GlobalAction import com.tangem.tap.domain.TapWalletManager import com.tangem.tap.features.wallet.redux.WalletAction -import com.tangem.tap.features.wallet.redux.WalletDialog +import com.tangem.tap.features.wallet.redux.models.WalletDialog import com.tangem.tap.persistence.FiatCurrenciesPrefStorage import com.tangem.tap.scope import com.tangem.tap.store diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/MultiWalletMiddleware.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/MultiWalletMiddleware.kt index ace70c1988..97a35f59c2 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/MultiWalletMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/MultiWalletMiddleware.kt @@ -3,6 +3,8 @@ package com.tangem.tap.features.wallet.redux.middlewares import com.tangem.blockchain.common.AmountType import com.tangem.blockchain.common.Token import com.tangem.blockchain.common.WalletManager +import com.tangem.common.extensions.guard +import com.tangem.tap.common.extensions.dispatchDialogShow import com.tangem.tap.common.extensions.safeUpdate import com.tangem.tap.common.redux.global.GlobalState import com.tangem.tap.common.redux.navigation.AppScreen @@ -12,9 +14,10 @@ import com.tangem.tap.domain.extensions.makeWalletManagerForApp import com.tangem.tap.domain.tokens.models.BlockchainNetwork import com.tangem.tap.features.demo.DemoHelper import com.tangem.tap.features.demo.isDemoCard -import com.tangem.tap.features.wallet.redux.Currency +import com.tangem.tap.features.wallet.models.Currency import com.tangem.tap.features.wallet.redux.WalletAction import com.tangem.tap.features.wallet.redux.WalletState +import com.tangem.tap.features.wallet.redux.models.WalletDialog import com.tangem.tap.scope import com.tangem.tap.store import kotlinx.coroutines.Dispatchers @@ -55,23 +58,55 @@ class MultiWalletMiddleware { blockchainNetwork = action.blockchain ) } - store.dispatch(WalletAction.LoadFiatRate( - coinsList = listOf( - Currency.Blockchain( - action.blockchain.blockchain, - action.blockchain.derivationPath + store.dispatch( + WalletAction.LoadFiatRate( + coinsList = listOf( + Currency.Blockchain( + action.blockchain.blockchain, + action.blockchain.derivationPath + ) ) ) - )) - store.dispatch(WalletAction.LoadWallet( - action.blockchain, action.walletManager - )) + ) + store.dispatch( + WalletAction.LoadWallet( + action.blockchain, action.walletManager + ) + ) } is WalletAction.MultiWallet.SaveCurrencies -> { globalState.scanResponse?.card?.cardId?.let { currenciesRepository.saveCurrencies(it, action.blockchainNetworks) } } + is WalletAction.MultiWallet.TryToRemoveWallet -> { + val walletState = store.state.walletState + val currency = action.walletData.currency + val walletCanBeRemoved = store.state.walletState.canBeRemoved( + store.state.walletState.getSelectedWalletData() + ) + if (walletCanBeRemoved) { + store.dispatch(WalletAction.MultiWallet.RemoveWallet(action.walletData)) + return + } + + val walletManager = walletState.getWalletManager(currency).guard { + store.dispatch(WalletAction.MultiWallet.RemoveWallet(action.walletData)) + return + } + + val dialog = when { + currency is Currency.Blockchain && + walletManager.cardTokens.isNotEmpty() -> + WalletDialog.TokensAreLinkedDialog( + currency.currencyName, currency.currencySymbol + ) + + else -> + WalletDialog.RemoveWalletDialog(currency.currencyName, action.walletData) + } + store.dispatchDialogShow(dialog) + } is WalletAction.MultiWallet.RemoveWallet -> { val cardId = globalState.scanResponse?.card?.cardId when (val currency = action.walletData.currency) { @@ -94,12 +129,18 @@ class MultiWalletMiddleware { currenciesRepository.removeToken( cardId = it, token = currency.token, - blockchainNetwork = BlockchainNetwork.fromWalletManager(walletManager) + blockchainNetwork = BlockchainNetwork.fromWalletManager( + walletManager + ) ) } } } } + if (action.fromWalletDetails) { + store.dispatch(WalletAction.MultiWallet.SelectWallet(null)) + store.dispatch(NavigationAction.PopBackTo()) + } } // is WalletAction.MultiWallet.FindBlockchainsInUse -> { // val scanResponse = globalState.scanResponse ?: return diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/TradeCryptoMiddleware.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/TradeCryptoMiddleware.kt index 3e4210fe42..9590452975 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/TradeCryptoMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/TradeCryptoMiddleware.kt @@ -10,7 +10,7 @@ import com.tangem.tap.common.redux.navigation.NavigationAction import com.tangem.tap.features.demo.DemoHelper import com.tangem.tap.features.send.redux.PrepareSendScreen import com.tangem.tap.features.send.redux.SendAction -import com.tangem.tap.features.wallet.redux.Currency +import com.tangem.tap.features.wallet.models.Currency import com.tangem.tap.features.wallet.redux.WalletAction import com.tangem.tap.network.exchangeServices.CurrencyExchangeManager import com.tangem.tap.network.exchangeServices.buyErc20Tokens diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/WalletDialogsMiddleware.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/WalletDialogsMiddleware.kt index e495c55c94..9ae3127317 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/WalletDialogsMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/WalletDialogsMiddleware.kt @@ -4,7 +4,7 @@ import com.tangem.tap.common.extensions.dispatchDialogHide import com.tangem.tap.common.extensions.dispatchDialogShow import com.tangem.tap.common.redux.AppDialog import com.tangem.tap.features.wallet.redux.WalletAction -import com.tangem.tap.features.wallet.redux.WalletDialog +import com.tangem.tap.features.wallet.redux.models.WalletDialog import com.tangem.tap.store class WalletDialogsMiddleware { diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/WalletMiddleware.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/WalletMiddleware.kt index a4862b21b8..c0993defc4 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/WalletMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/WalletMiddleware.kt @@ -25,10 +25,14 @@ import com.tangem.tap.domain.loadedRates import com.tangem.tap.features.demo.DemoHelper import com.tangem.tap.features.home.redux.HomeAction import com.tangem.tap.features.send.redux.PrepareSendScreen +import com.tangem.tap.features.wallet.models.Currency import com.tangem.tap.features.wallet.models.PendingTransactionType import com.tangem.tap.features.wallet.models.getPendingTransactions import com.tangem.tap.features.wallet.models.getSendableAmounts -import com.tangem.tap.features.wallet.redux.* +import com.tangem.tap.features.wallet.redux.WalletAction +import com.tangem.tap.features.wallet.redux.WalletData +import com.tangem.tap.features.wallet.redux.WalletState +import com.tangem.tap.features.wallet.redux.WalletStore import com.tangem.tap.network.NetworkStateChanged import com.tangem.tap.preferencesStorage import com.tangem.tap.scope diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/models/WalletDialog.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/models/WalletDialog.kt new file mode 100644 index 0000000000..5e2458c15d --- /dev/null +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/models/WalletDialog.kt @@ -0,0 +1,39 @@ +package com.tangem.tap.features.wallet.redux.models + +import com.tangem.blockchain.common.Amount +import com.tangem.tap.common.entities.FiatCurrency +import com.tangem.tap.common.redux.StateDialog +import com.tangem.tap.features.wallet.redux.WalletAction +import com.tangem.tap.features.wallet.redux.WalletData +import com.tangem.tap.store +import com.tangem.wallet.R + +sealed interface WalletDialog : StateDialog { + data class SelectAmountToSendDialog(val amounts: List?) : WalletDialog + object SignedHashesMultiWalletDialog : WalletDialog + object ChooseTradeActionDialog : WalletDialog + data class CurrencySelectionDialog( + val currenciesList: List, + val currentAppCurrency: FiatCurrency, + ) : WalletDialog + + data class RemoveWalletDialog( + val currencyTitle: String, + private val walletData: WalletData + ): WalletDialog { + val messageRes: Int = R.string.token_details_hide_alert_message + val titleRes: Int = R.string.token_details_hide_alert_title + val primaryButtonRes: Int = R.string.token_details_hide_alert_hide + val action = { store.dispatch(WalletAction.MultiWallet.RemoveWallet(walletData)) } + } + + data class TokensAreLinkedDialog( + val currencyTitle: String, + val currencySymbol: String + ): WalletDialog { + val messageRes: Int = R.string.token_details_unable_hide_alert_message + val titleRes: Int = R.string.token_details_unable_hide_alert_title + } + + +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/MultiWalletReducer.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/MultiWalletReducer.kt index 28a7675472..bcaca36f3c 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/MultiWalletReducer.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/MultiWalletReducer.kt @@ -8,16 +8,11 @@ import com.tangem.tap.common.extensions.toFiatString import com.tangem.tap.common.extensions.toFormattedCurrencyString import com.tangem.tap.domain.getFirstToken import com.tangem.tap.domain.tokens.models.BlockchainNetwork +import com.tangem.tap.features.wallet.models.Currency import com.tangem.tap.features.wallet.models.filterByToken import com.tangem.tap.features.wallet.models.getPendingTransactions import com.tangem.tap.features.wallet.models.removeUnknownTransactions -import com.tangem.tap.features.wallet.models.toPendingTransactions -import com.tangem.tap.features.wallet.redux.Currency -import com.tangem.tap.features.wallet.redux.WalletAction -import com.tangem.tap.features.wallet.redux.WalletData -import com.tangem.tap.features.wallet.redux.WalletMainButton -import com.tangem.tap.features.wallet.redux.WalletState -import com.tangem.tap.features.wallet.redux.WalletStore +import com.tangem.tap.features.wallet.redux.* import com.tangem.tap.features.wallet.ui.BalanceStatus import com.tangem.tap.features.wallet.ui.BalanceWidgetData import com.tangem.tap.features.wallet.ui.TokenData @@ -163,6 +158,7 @@ class MultiWalletReducer { // is WalletAction.MultiWallet.FindTokensInUse -> state // is WalletAction.MultiWallet.FindBlockchainsInUse -> state is WalletAction.MultiWallet.SaveCurrencies -> state + is WalletAction.MultiWallet.TryToRemoveWallet -> state } } } diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/OnWalletLoadedReducer.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/OnWalletLoadedReducer.kt index 442cbf46ec..b8be48e6cf 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/OnWalletLoadedReducer.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/OnWalletLoadedReducer.kt @@ -9,11 +9,10 @@ import com.tangem.tap.common.extensions.toFormattedCurrencyString import com.tangem.tap.common.extensions.toFormattedFiatValue import com.tangem.tap.domain.getFirstToken import com.tangem.tap.domain.tokens.models.BlockchainNetwork +import com.tangem.tap.features.wallet.models.Currency import com.tangem.tap.features.wallet.models.filterByToken import com.tangem.tap.features.wallet.models.getPendingTransactions import com.tangem.tap.features.wallet.models.removeUnknownTransactions -import com.tangem.tap.features.wallet.models.toPendingTransactions -import com.tangem.tap.features.wallet.redux.Currency import com.tangem.tap.features.wallet.redux.ProgressState import com.tangem.tap.features.wallet.redux.TradeCryptoState import com.tangem.tap.features.wallet.redux.WalletMainButton diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/WalletReducer.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/WalletReducer.kt index 11ea7236c0..baad6ad45e 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/WalletReducer.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/WalletReducer.kt @@ -15,25 +15,14 @@ import com.tangem.tap.domain.TapError import com.tangem.tap.domain.extensions.getArtworkUrl import com.tangem.tap.domain.getFirstToken import com.tangem.tap.domain.tokens.models.BlockchainNetwork +import com.tangem.tap.features.wallet.models.Currency import com.tangem.tap.features.wallet.models.WalletRent -import com.tangem.tap.features.wallet.redux.AddressData -import com.tangem.tap.features.wallet.redux.Artwork -import com.tangem.tap.features.wallet.redux.Currency -import com.tangem.tap.features.wallet.redux.ErrorType -import com.tangem.tap.features.wallet.redux.ProgressState -import com.tangem.tap.features.wallet.redux.TradeCryptoState -import com.tangem.tap.features.wallet.redux.WalletAction -import com.tangem.tap.features.wallet.redux.WalletAddresses -import com.tangem.tap.features.wallet.redux.WalletData -import com.tangem.tap.features.wallet.redux.WalletDialog -import com.tangem.tap.features.wallet.redux.WalletMainButton -import com.tangem.tap.features.wallet.redux.WalletState -import com.tangem.tap.features.wallet.redux.WalletStore +import com.tangem.tap.features.wallet.redux.* import com.tangem.tap.features.wallet.ui.BalanceStatus import com.tangem.tap.features.wallet.ui.BalanceWidgetData import com.tangem.tap.store -import java.math.BigDecimal import org.rekotlin.Action +import java.math.BigDecimal class WalletReducer { companion object { diff --git a/app/src/main/java/com/tangem/tap/features/wallet/ui/WalletDetailsFragment.kt b/app/src/main/java/com/tangem/tap/features/wallet/ui/WalletDetailsFragment.kt index 77ed03ebfa..a01e075a8b 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/ui/WalletDetailsFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/ui/WalletDetailsFragment.kt @@ -1,11 +1,7 @@ package com.tangem.tap.features.wallet.ui import android.os.Bundle -import android.view.Menu -import android.view.MenuInflater -import android.view.MenuItem -import android.view.View -import android.view.ViewGroup +import android.view.* import android.widget.TextView import androidx.activity.OnBackPressedCallback import androidx.annotation.ColorRes @@ -18,26 +14,14 @@ import by.kirich1409.viewbindingdelegate.viewBinding import com.squareup.picasso.Picasso import com.tangem.tap.common.SnackbarHandler import com.tangem.tap.common.TestActions -import com.tangem.tap.common.extensions.appendIfNotNull -import com.tangem.tap.common.extensions.beginDelayedTransition -import com.tangem.tap.common.extensions.fitChipsByGroupWidth -import com.tangem.tap.common.extensions.getColor -import com.tangem.tap.common.extensions.getString -import com.tangem.tap.common.extensions.hide -import com.tangem.tap.common.extensions.loadCurrenciesIcon -import com.tangem.tap.common.extensions.show -import com.tangem.tap.common.extensions.toQrCode +import com.tangem.tap.common.extensions.* import com.tangem.tap.common.recyclerView.SpaceItemDecoration import com.tangem.tap.common.redux.navigation.NavigationAction import com.tangem.tap.domain.tokens.models.BlockchainNetwork import com.tangem.tap.features.onboarding.getQRReceiveMessage +import com.tangem.tap.features.wallet.models.Currency import com.tangem.tap.features.wallet.models.PendingTransaction -import com.tangem.tap.features.wallet.redux.Currency -import com.tangem.tap.features.wallet.redux.ErrorType -import com.tangem.tap.features.wallet.redux.ProgressState -import com.tangem.tap.features.wallet.redux.WalletAction -import com.tangem.tap.features.wallet.redux.WalletData -import com.tangem.tap.features.wallet.redux.WalletState +import com.tangem.tap.features.wallet.redux.* import com.tangem.tap.features.wallet.ui.adapters.PendingTransactionsAdapter import com.tangem.tap.features.wallet.ui.adapters.WalletDetailWarningMessagesAdapter import com.tangem.tap.features.wallet.ui.test.TestWalletDetails @@ -146,13 +130,15 @@ class WalletDetailsFragment : Fragment(R.layout.fragment_wallet_details), binding.srlWalletDetails.setOnRefreshListener { if (selectedWallet.currencyData.status != BalanceStatus.Loading) { - store.dispatch(WalletAction.LoadWallet( - blockchain = BlockchainNetwork( - selectedWallet.currency.blockchain, - selectedWallet.currency.derivationPath, - emptyList() + store.dispatch( + WalletAction.LoadWallet( + blockchain = BlockchainNetwork( + selectedWallet.currency.blockchain, + selectedWallet.currency.derivationPath, + emptyList() + ) ) - )) + ) } } @@ -295,7 +281,10 @@ class WalletDetailsFragment : Fragment(R.layout.fragment_wallet_details), lBalance.root.show() lBalance.groupBalance.hide() lBalance.tvError.show() - lBalance.tvError.setWarningStatus(R.string.wallet_balance_blockchain_unreachable, data.errorMessage) + lBalance.tvError.setWarningStatus( + R.string.wallet_balance_blockchain_unreachable, + data.errorMessage + ) } BalanceStatus.NoAccount -> { lBalance.root.hide() @@ -314,9 +303,7 @@ class WalletDetailsFragment : Fragment(R.layout.fragment_wallet_details), return when (item.itemId) { R.id.menu_remove -> { store.state.walletState.getSelectedWalletData()?.let { walletData -> - store.dispatch(WalletAction.MultiWallet.RemoveWallet(walletData)) - store.dispatch(WalletAction.MultiWallet.SelectWallet(null)) - store.dispatch(NavigationAction.PopBackTo()) + store.dispatch(WalletAction.MultiWallet.TryToRemoveWallet(walletData)) true } false @@ -327,10 +314,6 @@ class WalletDetailsFragment : Fragment(R.layout.fragment_wallet_details), override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) { inflater.inflate(R.menu.wallet_details, menu) - val walletCanBeRemoved = store.state.walletState.canBeRemoved( - store.state.walletState.getSelectedWalletData() - ) - menu.getItem(0).isEnabled = walletCanBeRemoved } private fun TextView.setWarningStatus(mainMessage: Int, error: String? = null) { @@ -346,7 +329,11 @@ class WalletDetailsFragment : Fragment(R.layout.fragment_wallet_details), setStatus(getString(mainMessage), R.color.darkGray4, null) } - private fun TextView.setStatus(text: String, @ColorRes color: Int, @DrawableRes drawable: Int?) { + private fun TextView.setStatus( + text: String, + @ColorRes color: Int, + @DrawableRes drawable: Int? + ) { this.text = text setTextColor(getColor(color)) setCompoundDrawablesWithIntrinsicBounds(drawable ?: 0, 0, 0, 0) diff --git a/app/src/main/java/com/tangem/tap/features/wallet/ui/adapters/WalletAdapter.kt b/app/src/main/java/com/tangem/tap/features/wallet/ui/adapters/WalletAdapter.kt index 6230fd27a3..a883fbc62f 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/ui/adapters/WalletAdapter.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/ui/adapters/WalletAdapter.kt @@ -14,7 +14,7 @@ import com.tangem.tap.common.extensions.getString import com.tangem.tap.common.extensions.hide import com.tangem.tap.common.extensions.loadCurrenciesIcon import com.tangem.tap.common.extensions.show -import com.tangem.tap.features.wallet.redux.Currency +import com.tangem.tap.features.wallet.models.Currency import com.tangem.tap.features.wallet.redux.WalletAction import com.tangem.tap.features.wallet.redux.WalletData import com.tangem.tap.features.wallet.ui.BalanceStatus diff --git a/app/src/main/java/com/tangem/tap/features/wallet/ui/dialogs/AmountToSendBottomSheetDialog.kt b/app/src/main/java/com/tangem/tap/features/wallet/ui/dialogs/AmountToSendBottomSheetDialog.kt index 2f9e597096..ff82942f2b 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/ui/dialogs/AmountToSendBottomSheetDialog.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/ui/dialogs/AmountToSendBottomSheetDialog.kt @@ -5,16 +5,12 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.ViewGroup import androidx.appcompat.view.ContextThemeWrapper -import androidx.recyclerview.widget.DiffUtil -import androidx.recyclerview.widget.DividerItemDecoration -import androidx.recyclerview.widget.LinearLayoutManager -import androidx.recyclerview.widget.ListAdapter -import androidx.recyclerview.widget.RecyclerView +import androidx.recyclerview.widget.* import com.google.android.material.bottomsheet.BottomSheetDialog import com.tangem.blockchain.common.Amount import com.tangem.tap.common.extensions.toFormattedString import com.tangem.tap.features.wallet.redux.WalletAction -import com.tangem.tap.features.wallet.redux.WalletDialog +import com.tangem.tap.features.wallet.redux.models.WalletDialog import com.tangem.tap.store import com.tangem.wallet.R import com.tangem.wallet.databinding.DialogWalletSendBinding diff --git a/app/src/main/java/com/tangem/tap/features/wallet/ui/wallet/CurrencySelectionDialog.kt b/app/src/main/java/com/tangem/tap/features/wallet/ui/wallet/CurrencySelectionDialog.kt index 78b665cde6..4e80ebb489 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/ui/wallet/CurrencySelectionDialog.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/ui/wallet/CurrencySelectionDialog.kt @@ -4,7 +4,7 @@ import android.content.Context import androidx.appcompat.app.AlertDialog import com.tangem.tap.common.extensions.dispatchDialogHide import com.tangem.tap.features.wallet.redux.WalletAction -import com.tangem.tap.features.wallet.redux.WalletDialog +import com.tangem.tap.features.wallet.redux.models.WalletDialog import com.tangem.tap.store import com.tangem.wallet.R 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 4fb9b0ca0b..7ea7acf213 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 @@ -10,13 +10,9 @@ import com.tangem.tap.common.extensions.fitChipsByGroupWidth import com.tangem.tap.common.extensions.hide import com.tangem.tap.common.extensions.show import com.tangem.tap.features.onboarding.products.twins.redux.TwinCardsState +import com.tangem.tap.features.wallet.models.Currency import com.tangem.tap.features.wallet.models.PendingTransaction -import com.tangem.tap.features.wallet.redux.Currency -import com.tangem.tap.features.wallet.redux.TradeCryptoState -import com.tangem.tap.features.wallet.redux.WalletAction -import com.tangem.tap.features.wallet.redux.WalletData -import com.tangem.tap.features.wallet.redux.WalletMainButton -import com.tangem.tap.features.wallet.redux.WalletState +import com.tangem.tap.features.wallet.redux.* import com.tangem.tap.features.wallet.ui.BalanceWidget import com.tangem.tap.features.wallet.ui.MultipleAddressUiHelper import com.tangem.tap.features.wallet.ui.WalletFragment diff --git a/app/src/main/res/values-de/strings_final.xml b/app/src/main/res/values-de/strings_final.xml index de09eb54fd..d2c6336c24 100644 --- a/app/src/main/res/values-de/strings_final.xml +++ b/app/src/main/res/values-de/strings_final.xml @@ -45,5 +45,13 @@ If you chose the wrong network during your crypto transfer from the exchange, this guide will help you recover your funds Custom + Notice + Attention + + Hide %s + Hide + You hide the token from the main screen, but you can add it back at any time. + Unable to hide %s + The %s token is the main currency on the %s network and cannot be hidden as long as you have other tokens on this network in the list. \ No newline at end of file diff --git a/app/src/main/res/values-fr/strings_final.xml b/app/src/main/res/values-fr/strings_final.xml index de09eb54fd..d2c6336c24 100644 --- a/app/src/main/res/values-fr/strings_final.xml +++ b/app/src/main/res/values-fr/strings_final.xml @@ -45,5 +45,13 @@ If you chose the wrong network during your crypto transfer from the exchange, this guide will help you recover your funds Custom + Notice + Attention + + Hide %s + Hide + You hide the token from the main screen, but you can add it back at any time. + Unable to hide %s + The %s token is the main currency on the %s network and cannot be hidden as long as you have other tokens on this network in the list. \ No newline at end of file diff --git a/app/src/main/res/values-it/strings_final.xml b/app/src/main/res/values-it/strings_final.xml index de09eb54fd..d2c6336c24 100644 --- a/app/src/main/res/values-it/strings_final.xml +++ b/app/src/main/res/values-it/strings_final.xml @@ -45,5 +45,13 @@ If you chose the wrong network during your crypto transfer from the exchange, this guide will help you recover your funds Custom + Notice + Attention + + Hide %s + Hide + You hide the token from the main screen, but you can add it back at any time. + Unable to hide %s + The %s token is the main currency on the %s network and cannot be hidden as long as you have other tokens on this network in the list. \ No newline at end of file diff --git a/app/src/main/res/values-ru/strings_final.xml b/app/src/main/res/values-ru/strings_final.xml index ea424b57b6..569ce107b5 100644 --- a/app/src/main/res/values-ru/strings_final.xml +++ b/app/src/main/res/values-ru/strings_final.xml @@ -45,9 +45,18 @@ Если вы совершили ошибку с выбором сети при переводе средств с биржи, эта инструкция поможет вам восстановить средства Пользовательский + Уведомление + Внимание Баланс Обработка полной суммы… Управление токенами Нет цены + + Скрыть %s + Скрыть + Вы скрываете токен с главного экрана, но в любой момент сможете добавить его обратно. + Невозможно скрыть %s + Токен %s является основной валютой в сети %s и не может быть скрыт, до тех пор пока у вас в списке есть другие токены этой сети. + diff --git a/app/src/main/res/values/strings_final.xml b/app/src/main/res/values/strings_final.xml index 2478dee488..ef91b7dcc3 100644 --- a/app/src/main/res/values/strings_final.xml +++ b/app/src/main/res/values/strings_final.xml @@ -45,9 +45,18 @@ If you chose the wrong network during your crypto transfer from the exchange, this guide will help you recover your funds Custom + Notice + Attention Total balance Some networks are unreachable Manage tokens No rate + + Hide %s + Hide + You hide the token from the main screen, but you can add it back at any time. + Unable to hide %s + The %s token is the main currency on the %s network and cannot be hidden as long as you have other tokens on this network in the list. + From 0df972955a71b9011b6203dfd68692241bfd3568 Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 8 Jun 2022 04:07:06 +0300 Subject: [PATCH 005/177] Updated on 2026-08-14 --- app/src/main/assets/tangem-app-config | 2 +- .../tap/common/compose/extensions/Dp.kt | 14 + .../com/tangem/tap/common/extensions/UI.kt | 53 ++-- .../home/compose/FirstStoriesContent.kt | 153 ----------- .../tap/features/home/compose/Stories.kt | 38 ++- .../home/compose/StoriesGeneralContent.kt | 162 ----------- .../features/home/compose/content/Content.kt | 251 ++++++++++++++++++ .../compose/content/CurrenciesWeb3Content.kt | 161 +++++++++++ .../compose/content/FirstStoriesContent.kt | 161 +++++++++++ .../compose/content/FloatingCardsContent.kt | 103 +++++++ .../home/compose/uiTools/AnimatedValue.kt | 47 ++++ .../home/compose/uiTools/StoriesAnimtion.kt | 174 ++++++++++++ .../home/compose/uiTools/StoriesPreviews.kt | 51 ++++ .../home/compose/{ => views}/AutoSizeText.kt | 4 +- .../home/compose/{ => views}/HomeButtons.kt | 2 +- .../compose/{ => views}/StoriesProgressBar.kt | 2 +- app/src/main/res/drawable/currency0.png | Bin 0 -> 49525 bytes app/src/main/res/drawable/currency1.png | Bin 0 -> 40631 bytes app/src/main/res/drawable/currency2.png | Bin 0 -> 43333 bytes app/src/main/res/drawable/currency3.png | Bin 0 -> 50694 bytes app/src/main/res/drawable/currency4.png | Bin 0 -> 41017 bytes app/src/main/res/drawable/dapps0.png | Bin 0 -> 35960 bytes app/src/main/res/drawable/dapps1.png | Bin 0 -> 38699 bytes app/src/main/res/drawable/dapps2.png | Bin 0 -> 41074 bytes app/src/main/res/drawable/dapps3.png | Bin 0 -> 43259 bytes app/src/main/res/drawable/dapps4.png | Bin 0 -> 38143 bytes app/src/main/res/drawable/dapps5.png | Bin 0 -> 38203 bytes 27 files changed, 1013 insertions(+), 365 deletions(-) create mode 100644 app/src/main/java/com/tangem/tap/common/compose/extensions/Dp.kt delete mode 100644 app/src/main/java/com/tangem/tap/features/home/compose/FirstStoriesContent.kt delete mode 100644 app/src/main/java/com/tangem/tap/features/home/compose/StoriesGeneralContent.kt create mode 100644 app/src/main/java/com/tangem/tap/features/home/compose/content/Content.kt create mode 100644 app/src/main/java/com/tangem/tap/features/home/compose/content/CurrenciesWeb3Content.kt create mode 100644 app/src/main/java/com/tangem/tap/features/home/compose/content/FirstStoriesContent.kt create mode 100644 app/src/main/java/com/tangem/tap/features/home/compose/content/FloatingCardsContent.kt create mode 100644 app/src/main/java/com/tangem/tap/features/home/compose/uiTools/AnimatedValue.kt create mode 100644 app/src/main/java/com/tangem/tap/features/home/compose/uiTools/StoriesAnimtion.kt create mode 100644 app/src/main/java/com/tangem/tap/features/home/compose/uiTools/StoriesPreviews.kt rename app/src/main/java/com/tangem/tap/features/home/compose/{ => views}/AutoSizeText.kt (93%) rename app/src/main/java/com/tangem/tap/features/home/compose/{ => views}/HomeButtons.kt (97%) rename app/src/main/java/com/tangem/tap/features/home/compose/{ => views}/StoriesProgressBar.kt (97%) create mode 100644 app/src/main/res/drawable/currency0.png create mode 100644 app/src/main/res/drawable/currency1.png create mode 100644 app/src/main/res/drawable/currency2.png create mode 100644 app/src/main/res/drawable/currency3.png create mode 100644 app/src/main/res/drawable/currency4.png create mode 100644 app/src/main/res/drawable/dapps0.png create mode 100644 app/src/main/res/drawable/dapps1.png create mode 100644 app/src/main/res/drawable/dapps2.png create mode 100644 app/src/main/res/drawable/dapps3.png create mode 100644 app/src/main/res/drawable/dapps4.png create mode 100644 app/src/main/res/drawable/dapps5.png diff --git a/app/src/main/assets/tangem-app-config b/app/src/main/assets/tangem-app-config index 7f058ec409..64ae04d208 160000 --- a/app/src/main/assets/tangem-app-config +++ b/app/src/main/assets/tangem-app-config @@ -1 +1 @@ -Subproject commit 7f058ec409b4eaaf8688ecd4bf944ef8d58d3564 +Subproject commit 64ae04d2086e5a605dd4da3cba4af32a60d46c79 diff --git a/app/src/main/java/com/tangem/tap/common/compose/extensions/Dp.kt b/app/src/main/java/com/tangem/tap/common/compose/extensions/Dp.kt new file mode 100644 index 0000000000..3ba4555c3f --- /dev/null +++ b/app/src/main/java/com/tangem/tap/common/compose/extensions/Dp.kt @@ -0,0 +1,14 @@ +package com.tangem.tap.common.compose.extensions + +import androidx.compose.runtime.Composable +import androidx.compose.ui.platform.LocalDensity +import androidx.compose.ui.unit.Dp + +/** +[REDACTED_AUTHOR] + */ +@Composable +fun Dp.toPx(): Float { + val currentDp = this + return with(LocalDensity.current) { currentDp.toPx() } +} \ No newline at end of file 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 8c2184ae50..9cf8354a70 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 @@ -93,32 +93,39 @@ fun View.invisible(invisible: Boolean = true, invokeBeforeStateChanged: (() -> U } fun Context.dpToPixels(dp: Int): Int = - TypedValue.applyDimension( - TypedValue.COMPLEX_UNIT_DIP, dp.toFloat(), this.resources.displayMetrics - ).toInt() + TypedValue.applyDimension( + 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)) + (resources.displayMetrics.densityDpi.toFloat() / DisplayMetrics.DENSITY_DEFAULT)) .toInt() } +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)) + tailrec fun Context?.getActivity(): Activity? = this as? Activity - ?: (this as? ContextWrapper)?.baseContext?.getActivity() + ?: (this as? ContextWrapper)?.baseContext?.getActivity() fun MaterialCardView.setMargins( - marginLeftDp: Int = 16, - marginTopDp: Int = 8, - marginRightDp: Int = 16, - marginBottomDp: Int = 8 + marginLeftDp: Int = 16, + marginTopDp: Int = 8, + marginRightDp: Int = 16, + 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(marginLeftDp), + context.dpToPixels(marginTopDp), + context.dpToPixels(marginRightDp), + context.dpToPixels(marginBottomDp) ) this.layoutParams = params } @@ -128,11 +135,11 @@ fun Activity.setSystemBarTextColor(setTextDark: Boolean) { val flags = this.window.decorView.systemUiVisibility // Update the SystemUiVisibility dependening on whether we want a Light or Dark theme. this.window.decorView.systemUiVisibility = - if (setTextDark) { - flags and View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR.inv() - } else { - flags or View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR - } + if (setTextDark) { + flags and View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR.inv() + } else { + flags or View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR + } } } @@ -150,7 +157,7 @@ fun Context.copyToClipboard(value: Any, label: String = "") { fun Context.getFromClipboard(default: CharSequence? = null): CharSequence? { val clipboard = getSystemService(Context.CLIPBOARD_SERVICE) as? ClipboardManager - ?: return default + ?: return default val clipData = clipboard.primaryClip ?: return default if (clipData.itemCount == 0) return default @@ -172,10 +179,10 @@ fun Fragment.shareText(text: String) { } fun Context.safeStartActivity( - intent: Intent, - options: Bundle? = null, - fallback: ((ActivityNotFoundException) -> Unit)? = null, - finally: VoidCallback? = null + intent: Intent, + options: Bundle? = null, + fallback: ((ActivityNotFoundException) -> Unit)? = null, + finally: VoidCallback? = null ) { try { this.startActivity(intent, options) diff --git a/app/src/main/java/com/tangem/tap/features/home/compose/FirstStoriesContent.kt b/app/src/main/java/com/tangem/tap/features/home/compose/FirstStoriesContent.kt deleted file mode 100644 index 30e72ec626..0000000000 --- a/app/src/main/java/com/tangem/tap/features/home/compose/FirstStoriesContent.kt +++ /dev/null @@ -1,153 +0,0 @@ -package com.tangem.tap.features.home.compose - -import androidx.compose.animation.AnimatedVisibility -import androidx.compose.animation.ExperimentalAnimationApi -import androidx.compose.animation.core.Animatable -import androidx.compose.animation.core.LinearEasing -import androidx.compose.animation.core.tween -import androidx.compose.animation.scaleIn -import androidx.compose.animation.slideInVertically -import androidx.compose.foundation.Image -import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.padding -import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.draw.alpha -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.layout.ContentScale -import androidx.compose.ui.res.painterResource -import androidx.compose.ui.res.stringResource -import androidx.compose.ui.text.TextStyle -import androidx.compose.ui.text.font.FontWeight -import androidx.compose.ui.text.style.TextAlign -import androidx.compose.ui.tooling.preview.Preview -import androidx.compose.ui.unit.dp -import androidx.compose.ui.unit.sp -import com.tangem.wallet.R - -@OptIn(ExperimentalAnimationApi::class) -@Composable -fun FirstStoriesContent( - paused: Boolean, duration: Int = 8_000, - hideContent: (Boolean) -> Unit -) { - val screenState = remember { mutableStateOf(StartingScreenState.INIT) } - val progress = remember { Animatable(0f) } - - LaunchedEffect(paused) { - if (paused) { - progress.stop() - } else { - progress.animateTo( - targetValue = 2f, - animationSpec = tween( - durationMillis = duration, - easing = LinearEasing - ) - ) - } - } - - when (progress.value) { - in 0f..0.2f -> screenState.value = StartingScreenState.INIT - in 0.2f..0.3f -> screenState.value = StartingScreenState.BUY - in 0.3f..0.4f -> screenState.value = StartingScreenState.STORE - in 0.4f..0.5f -> screenState.value = StartingScreenState.SEND - in 0.5f..0.6f -> screenState.value = StartingScreenState.PAY - in 0.6f..0.7f -> screenState.value = StartingScreenState.EXCHANGE - in 0.7f..0.8f -> screenState.value = StartingScreenState.BORROW - in 0.8f..1f -> screenState.value = StartingScreenState.LEND - in 1f..1.2f -> screenState.value = StartingScreenState.SHOW_CARD - in 1.2f..2f -> screenState.value = StartingScreenState.MEET_TANGEM - } - - if (screenState.value == StartingScreenState.INIT) hideContent(true) - if (screenState.value == StartingScreenState.BUY) hideContent(false) - - Column( - horizontalAlignment = Alignment.CenterHorizontally, - verticalArrangement = Arrangement.Center, - modifier = - Modifier - .fillMaxSize(), - ) { - - val text = when (screenState.value) { - StartingScreenState.INIT -> null - StartingScreenState.BUY -> R.string.story_meet_buy - StartingScreenState.STORE -> R.string.story_meet_store - StartingScreenState.SEND -> R.string.story_meet_send - StartingScreenState.PAY -> R.string.story_meet_pay - StartingScreenState.EXCHANGE -> R.string.story_meet_exchange - StartingScreenState.BORROW -> R.string.story_meet_borrow - StartingScreenState.LEND -> R.string.story_meet_lend - StartingScreenState.SHOW_CARD -> R.string.story_meet_title - StartingScreenState.MEET_TANGEM -> R.string.story_meet_title - } - - val style = TextStyle( - fontSize = 60.sp, - fontWeight = FontWeight.SemiBold, - color = Color.White, - textAlign = TextAlign.Center, - ) - - if (screenState.value != StartingScreenState.MEET_TANGEM) { - TextAutoSize( - modifier = Modifier - .padding(start = 20.dp, end = 20.dp, bottom = 100.dp) - .alpha(if (screenState.value == StartingScreenState.SHOW_CARD) 0f else 1f), - text = text?.let { stringResource(text) } ?: "", - textStyle = style, - fontSizeRange = FontSizeRange(20.sp, 60.sp) - ) - } - - AnimatedVisibility( - visible = screenState.value == StartingScreenState.MEET_TANGEM, - enter = slideInVertically() { it / 2 } - ) { - TextAutoSize( - modifier = Modifier - .fillMaxWidth() - .padding(start = 40.dp, end = 40.dp), - text = text?.let { stringResource(text) } ?: "", - textStyle = style, - fontSizeRange = FontSizeRange(20.sp, 60.sp) - ) - } - - AnimatedVisibility( - visible = screenState.value == StartingScreenState.SHOW_CARD || - screenState.value == StartingScreenState.MEET_TANGEM, - enter = scaleIn(initialScale = 3f) - ) { - Image( - painter = painterResource( - id = R.drawable.meet_tangem - ), - contentDescription = null, - contentScale = ContentScale.FillWidth, - modifier = Modifier.fillMaxWidth() - ) - } - } -} - -enum class StartingScreenState { - INIT, BUY, STORE, SEND, PAY, EXCHANGE, BORROW, LEND, SHOW_CARD, MEET_TANGEM -} - - -@Preview -@Composable -fun Stories1Preview() { - FirstStoriesContent(false, 7_000) {} -} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/home/compose/Stories.kt b/app/src/main/java/com/tangem/tap/features/home/compose/Stories.kt index 4bfac1e8a0..2179b5be44 100644 --- a/app/src/main/java/com/tangem/tap/features/home/compose/Stories.kt +++ b/app/src/main/java/com/tangem/tap/features/home/compose/Stories.kt @@ -22,10 +22,12 @@ import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign -import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp -import com.tangem.tap.common.compose.SpacerS24 import androidx.compose.ui.unit.sp +import com.tangem.tap.common.compose.SpacerS24 +import com.tangem.tap.features.home.compose.content.* +import com.tangem.tap.features.home.compose.views.HomeButtons +import com.tangem.tap.features.home.compose.views.StoriesProgressBar import com.tangem.tap.features.home.redux.HomeState import com.tangem.tap.features.wallet.redux.ProgressState import com.tangem.wallet.R @@ -39,8 +41,6 @@ fun StoriesScreen( onSearchTokensClick: () -> Unit, ) { val steps = 6 - val stepDuration = 8_000 - val currentStep = remember { mutableStateOf(1) } val isDarkBackground = currentStep.value !in 3..5 @@ -55,7 +55,7 @@ fun StoriesScreen( val isPressed = remember { mutableStateOf(false) } val needsToBePaused = remember(homeState) { mutableStateOf(homeState.value.btnScanState.progressState == ProgressState.Loading) } - val pause = isPressed.value || needsToBePaused.value + val isPaused = isPressed.value || needsToBePaused.value val hideContent = remember { mutableStateOf(true) } @@ -122,9 +122,8 @@ fun StoriesScreen( StoriesProgressBar( steps = steps, currentStep = currentStep.value, -// paused = isPressed.value, - stepDuration = stepDuration, - paused = pause, + stepDuration = currentStep.duration(), + paused = isPaused, onStepFinished = goToNextScreen, ) Image( @@ -139,12 +138,12 @@ fun StoriesScreen( colorFilter = if (isDarkBackground) null else ColorFilter.tint(Color.Black) ) when (currentStep.value) { - 1 -> FirstStoriesContent(pause, stepDuration) { hideContent.value = it } - 2 -> StoriesRevolutionaryWallet() - 3 -> StoriesUltraSecureBackup() - 4 -> StoriesThousandsOfCurrencies() - 5 -> StoriesWeb3() - 6 -> StoriesWalletForEveryone() + 1 -> FirstStoriesContent(isPaused, currentStep.duration()) { hideContent.value = it } + 2 -> StoriesRevolutionaryWallet(currentStep.duration()) + 3 -> StoriesUltraSecureBackup(isPaused, currentStep.duration()) + 4 -> StoriesCurrencies(isPaused, currentStep.duration()) + 5 -> StoriesWeb3(isPaused, currentStep.duration()) + 6 -> StoriesWalletForEveryone(currentStep.duration()) } } Column( @@ -157,8 +156,7 @@ fun StoriesScreen( modifier = Modifier .fillMaxWidth() .padding(start = 16.dp, end = 16.dp, bottom = 16.dp) - .height(48.dp) - , + .height(48.dp), colors = ButtonDefaults.textButtonColors( backgroundColor = Color.White, contentColor = Color(0xFF080C10) @@ -188,9 +186,7 @@ fun StoriesScreen( } } - -@Preview -@Composable -fun InstagramScreenPreview() { - StoriesScreen(onScanButtonClick = {}, onShopButtonClick = {}, onSearchTokensClick = {}) +private fun MutableState.duration(): Int = when (this.value) { + 1 -> 8000 + else -> 6000 } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/home/compose/StoriesGeneralContent.kt b/app/src/main/java/com/tangem/tap/features/home/compose/StoriesGeneralContent.kt deleted file mode 100644 index 410a8118aa..0000000000 --- a/app/src/main/java/com/tangem/tap/features/home/compose/StoriesGeneralContent.kt +++ /dev/null @@ -1,162 +0,0 @@ -package com.tangem.tap.features.home.compose - -import android.content.Context -import android.graphics.Typeface -import android.util.TypedValue -import android.view.View -import android.view.ViewGroup -import android.widget.TextView -import androidx.compose.foundation.Image -import androidx.compose.foundation.layout.* -import androidx.compose.material.Text -import androidx.compose.runtime.Composable -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.layout.ContentScale -import androidx.compose.ui.res.painterResource -import androidx.compose.ui.res.stringResource -import androidx.compose.ui.text.font.FontWeight -import androidx.compose.ui.text.style.TextAlign -import androidx.compose.ui.unit.dp -import androidx.compose.ui.unit.sp -import androidx.compose.ui.viewinterop.AndroidView -import com.tangem.tangem_sdk_new.extensions.dpToPx -import com.tangem.tap.common.compose.SpacerS16 -import com.tangem.tap.common.compose.SpacerS24 -import com.tangem.tap.common.compose.extensions.toAndroidGraphicsColor -import com.tangem.wallet.R - -@Composable -fun StoriesGeneralContent( - titleText: String, - subtitleText: String, - imageSource: Int?, - isDarkBackground: Boolean, - subtitleTextId: Int? = null, - imageComposable: (() -> Unit)? = null, -) { - Column( - horizontalAlignment = Alignment.CenterHorizontally, - verticalArrangement = Arrangement.Center, - modifier = - Modifier - .fillMaxWidth() - .fillMaxHeight(), - ) { - - Text( - text = titleText, - fontSize = 32.sp, - fontWeight = FontWeight.SemiBold, - modifier = Modifier - .padding(start = 40.dp, end = 40.dp), - color = if (isDarkBackground) Color.White else Color(0xFF090E13), - textAlign = TextAlign.Center - ) - - SpacerS16() - - SubtitleText(subtitleText, subtitleTextId) - - SpacerS24() - - if (imageSource != null) { - Image( - painter = painterResource(id = imageSource), - contentDescription = null, - contentScale = if (isDarkBackground) ContentScale.Inside else ContentScale.FillWidth, - modifier = Modifier.fillMaxWidth() - ) - } - imageComposable?.invoke() - } -} - -@Composable -fun SubtitleText(subtitleText: String, subtitleTextId: Int?) { - val color = Color(0xFFA6AAAD) - - if (subtitleTextId == null) { - Text( - text = subtitleText, - fontSize = 20.sp, - fontWeight = FontWeight.Normal, - modifier = Modifier.padding(start = 40.dp, end = 40.dp), - color = color, - textAlign = TextAlign.Center - ) - } else { - HtmlText(subtitleTextId) { context -> - val padding = context.dpToPx(40f).toInt() - TextView(context).apply { - layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT) - setPadding(padding, 0, padding, 0) - textAlignment = View.TEXT_ALIGNMENT_CENTER - typeface = Typeface.DEFAULT - setTextSize(TypedValue.COMPLEX_UNIT_SP, 20f) - setTextColor(color.toAndroidGraphicsColor()) - } - } - } -} - -@Composable -fun StoriesRevolutionaryWallet() { - StoriesGeneralContent( - titleText = stringResource(id = R.string.story_awe_title), - subtitleText = stringResource(id = R.string.story_awe_description), - imageSource = R.drawable.revolutionary_wallet, - isDarkBackground = true - ) -} - -@Composable -fun StoriesUltraSecureBackup() { - StoriesGeneralContent( - titleText = stringResource(id = R.string.story_backup_title), - subtitleText = stringResource(id = R.string.story_backup_description), - imageSource = R.drawable.floating_cards, - subtitleTextId = R.string.story_backup_description, - isDarkBackground = false - ) -} - -@Composable -fun StoriesThousandsOfCurrencies() { - StoriesGeneralContent( - titleText = stringResource(id = R.string.story_currencies_title), - subtitleText = stringResource(id = R.string.story_currencies_description), - imageSource = R.drawable.thousands_of_currencies, - isDarkBackground = false - ) -} - -@Composable -fun StoriesWeb3() { - StoriesGeneralContent( - titleText = stringResource(id = R.string.story_web3_title), - subtitleText = stringResource(id = R.string.story_web3_description), - imageSource = R.drawable.web_3, - isDarkBackground = false - ) -} - -@Composable -fun StoriesWalletForEveryone() { - StoriesGeneralContent( - titleText = stringResource(id = R.string.story_finish_title), - subtitleText = stringResource(id = R.string.story_finish_description), - imageSource = R.drawable.wallet_for_everyone, - isDarkBackground = true - ) -} - -@Composable -fun HtmlText( - stringResId: Int, - modifier: Modifier = Modifier, - factory: (Context) -> TextView -) { - AndroidView(factory, modifier) { it.text = it.context.getText(stringResId) } -} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/home/compose/content/Content.kt b/app/src/main/java/com/tangem/tap/features/home/compose/content/Content.kt new file mode 100644 index 0000000000..d7f5443f6e --- /dev/null +++ b/app/src/main/java/com/tangem/tap/features/home/compose/content/Content.kt @@ -0,0 +1,251 @@ +package com.tangem.tap.features.home.compose.content + +import android.content.Context +import android.graphics.Typeface +import android.util.TypedValue +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.annotation.DrawableRes +import androidx.compose.foundation.Image +import androidx.compose.foundation.layout.* +import androidx.compose.material.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.layout.ContentScale +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import androidx.compose.ui.viewinterop.AndroidView +import com.tangem.tangem_sdk_new.extensions.dpToPx +import com.tangem.tap.common.compose.SpacerH +import com.tangem.tap.common.compose.SpacerH16 +import com.tangem.tap.common.compose.extensions.toAndroidGraphicsColor +import com.tangem.tap.features.home.compose.uiTools.StoriesBottomImageAnimation +import com.tangem.tap.features.home.compose.uiTools.StoriesTextAnimation +import com.tangem.wallet.R + +@Composable +fun StoriesRevolutionaryWallet(stepDuration: Int) { + SplitContent( + topContent = { + TopContent( + titleText = stringResource(id = R.string.story_awe_title), + subtitleText = stringResource(id = R.string.story_awe_description), + isDarkBackground = true, + ) + }, + bottomContent = { + StoriesBottomImageAnimation( + totalDuration = stepDuration, + firstStepDuration = 300, + ) { modifier -> + StoriesImage( + modifier = modifier, + drawableResId = R.drawable.revolutionary_wallet, + isDarkBackground = true, + ) + } + } + ) +} + +@Composable +fun StoriesUltraSecureBackup(isPaused: Boolean, stepDuration: Int) { + SplitContent( + topContent = { + TopContent( + titleText = stringResource(id = R.string.story_backup_title), + subtitleText = stringResource(id = R.string.story_backup_description), + isDarkBackground = false, + ) + }, + bottomContent = { + FloatingCardsContent(isPaused, stepDuration) + } + ) +} + +@Composable +fun StoriesCurrencies(isPaused: Boolean, stepDuration: Int) { + SplitContent( + topContent = { + TopContent( + titleText = stringResource(id = R.string.story_currencies_title), + subtitleText = stringResource(id = R.string.story_currencies_description), + isDarkBackground = false, + ) + }, + bottomContent = { + StoriesCurrenciesContent(paused = isPaused, duration = stepDuration) + } + ) +} + +@Composable +fun StoriesWeb3(isPaused: Boolean, stepDuration: Int) { + SplitContent( + topContent = { + TopContent( + titleText = stringResource(id = R.string.story_web3_title), + subtitleText = stringResource(id = R.string.story_web3_description), + isDarkBackground = false, + ) + }, + bottomContent = { + StoriesWeb3Content(paused = isPaused, duration = stepDuration) + } + ) +} + +@Composable +fun StoriesWalletForEveryone(stepDuration: Int) { + SplitContent( + topContent = { + TopContent( + titleText = stringResource(id = R.string.story_finish_title), + subtitleText = stringResource(id = R.string.story_finish_description), + isDarkBackground = true, + ) + }, + bottomContent = { + StoriesBottomImageAnimation( + totalDuration = stepDuration, + firstStepDuration = 500, + ) { modifier -> + StoriesImage( + modifier = modifier, + drawableResId = R.drawable.wallet_for_everyone, + isDarkBackground = true, + ) + } + } + ) +} + +@Composable +private fun SplitContent( + topContent: @Composable () -> Unit, + bottomContent: @Composable () -> Unit, +) { + Column( + modifier = Modifier + .fillMaxSize(), + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.Top + ) { + topContent() + bottomContent() + } +} + +@Composable +private fun TopContent( + titleText: String, + subtitleText: String, + isDarkBackground: Boolean, + subtitleTextId: Int? = null, +) { + SpacerH(32.dp) + StoriesTitleText( + text = titleText, + isDarkBackground = isDarkBackground, + ) + SpacerH16() + StoriesSubtitleText( + subtitleText = subtitleText, + subtitleTextId = subtitleTextId, + ) + SpacerH(32.dp) +} + +@Composable +private fun StoriesTitleText( + text: String, + isDarkBackground: Boolean, +) { + StoriesTextAnimation( + slideInDuration = 500, + slideInDelay = 150, + ) { modifier -> + Text( + modifier = modifier + .padding(start = 40.dp, end = 40.dp), + text = text, + fontSize = 32.sp, + fontWeight = FontWeight.SemiBold, + color = if (isDarkBackground) Color.White else Color(0xFF090E13), + textAlign = TextAlign.Center + ) + } +} + +@Composable +private fun StoriesSubtitleText( + subtitleText: String, + subtitleTextId: Int?, +) { + val color = Color(0xFFA6AAAD) + + StoriesTextAnimation( + slideInDuration = 500, + slideInDelay = 400, + ) { modifier -> + val internalModifier = modifier + .padding(start = 40.dp, end = 40.dp) + + if (subtitleTextId == null) { + Text( + text = subtitleText, + fontSize = 20.sp, + fontWeight = FontWeight.Normal, + modifier = internalModifier, + color = color, + textAlign = TextAlign.Center + ) + } else { + HtmlText( + modifier = internalModifier, + stringResId = subtitleTextId, + ) { context -> + val padding = context.dpToPx(40f).toInt() + TextView(context).apply { + layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT) + setPadding(padding, 0, padding, 0) + textAlignment = View.TEXT_ALIGNMENT_CENTER + typeface = Typeface.DEFAULT + setTextSize(TypedValue.COMPLEX_UNIT_SP, 20f) + setTextColor(color.toAndroidGraphicsColor()) + } + } + } + } +} + +@Composable +private fun HtmlText( + stringResId: Int, + modifier: Modifier = Modifier, + factory: (Context) -> TextView +) { + AndroidView(factory, modifier) { it.text = it.context.getText(stringResId) } +} + +@Composable +fun StoriesImage( + modifier: Modifier = Modifier, + @DrawableRes drawableResId: Int, + isDarkBackground: Boolean, +) { + Image( + painter = painterResource(id = drawableResId), + contentDescription = null, + contentScale = if (isDarkBackground) ContentScale.Inside else ContentScale.FillWidth, + modifier = modifier.fillMaxWidth() + ) +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/home/compose/content/CurrenciesWeb3Content.kt b/app/src/main/java/com/tangem/tap/features/home/compose/content/CurrenciesWeb3Content.kt new file mode 100644 index 0000000000..480a2a23e2 --- /dev/null +++ b/app/src/main/java/com/tangem/tap/features/home/compose/content/CurrenciesWeb3Content.kt @@ -0,0 +1,161 @@ +package com.tangem.tap.features.home.compose.content + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.padding +import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Brush +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.graphicsLayer +import androidx.compose.ui.graphics.painter.Painter +import androidx.compose.ui.platform.LocalConfiguration +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.DpSize +import androidx.compose.ui.unit.dp +import com.tangem.tangem_sdk_new.extensions.dpToPx +import com.tangem.tangem_sdk_new.extensions.pxToDp +import com.tangem.tap.common.compose.SpacerH +import com.tangem.tap.common.compose.extensions.toPx +import com.tangem.tap.common.extensions.isEven +import com.tangem.tap.features.home.compose.uiTools.HorizontalSlidingImage +import com.tangem.wallet.R + +@Composable +fun StoriesCurrenciesContent( + paused: Boolean, + duration: Int, +) { + val currencyDrawableList = remember { + listOf( + R.drawable.currency0, + R.drawable.currency1, + R.drawable.currency2, + R.drawable.currency3, + R.drawable.currency4, + ) + } + + val screenWidth = LocalConfiguration.current.screenWidthDp.dp + val decreaseRate = remember { 1f / currencyDrawableList.size } + val designItemHeight = remember { 82.dp } + + LightenBox { + Column(modifier = Modifier.graphicsLayer(clip = false)) { + currencyDrawableList.forEachIndexed { index, drawableResId -> + val painter = painterResource(id = drawableResId) + val scaledItemSize = scaleToDesignSize(painter.dpSize(), designItemHeight = designItemHeight) + val itemOversizedScreenWidthBy = scaledItemSize.width - screenWidth + val moveItemToStartOfScreen = itemOversizedScreenWidthBy / 2 + + val chessOffset = if (index.isEven()) 0.dp else scaledItemSize.halfHeight() + val animateFrom = chessOffset - moveItemToStartOfScreen + val animateTo = 50.dp - (50.dp * index * decreaseRate) + + HorizontalSlidingImage( + paused = paused, + duration = duration, + painter = painter, + itemSize = scaledItemSize, + startOffset = animateFrom.toPx(), + targetOffset = animateTo.toPx(), + contentDescription = "Currency row", + ) + SpacerH(12.dp) + } + } + } +} + +@Composable +fun StoriesWeb3Content( + paused: Boolean, + duration: Int, +) { + val dappsItemList = remember { + listOf( + R.drawable.dapps0, + R.drawable.dapps1, + R.drawable.dapps2, + R.drawable.dapps3, + R.drawable.dapps4, + R.drawable.dapps5, + ) + } + val screenWidth = LocalConfiguration.current.screenWidthDp.dp + val decreaseRate = remember { 1f / dappsItemList.size } + val designItemHeight = 50.dp + + LightenBox { + Column(modifier = Modifier.graphicsLayer(clip = false)) { + dappsItemList.forEachIndexed { index, drawableResId -> + val painter = painterResource(id = drawableResId) + val scaledItemSize = scaleToDesignSize(painter.dpSize(), designItemHeight = designItemHeight) + val itemOversizedScreenWidthBy = scaledItemSize.width - screenWidth + val moveItemToStartOfScreen = itemOversizedScreenWidthBy / 2 + + val chessOffset = if (index.isEven()) 0.dp else scaledItemSize.width / 3 + val animateFrom = chessOffset - moveItemToStartOfScreen + val animateTo = 90.dp - (90.dp * index * decreaseRate) + + HorizontalSlidingImage( + paused = paused, + duration = duration, + painter = painter, + itemSize = scaledItemSize, + startOffset = animateFrom.toPx(), + targetOffset = animateTo.toPx(), + contentDescription = "Web3 row", + ) + SpacerH(14.dp) + } + } + + } +} + +@Composable +private fun LightenBox(content: @Composable () -> Unit) { + Box() { + content() + Box( + modifier = Modifier + .fillMaxSize() + .padding(top = 170.dp) + .background( + brush = Brush.verticalGradient( + colors = listOf( + Color.White.copy(alpha = 0.3f), + Color.White + ) + ) + ) + ) {} + } +} + +@Composable +private fun Painter.dpSize(): DpSize = DpSize( + intrinsicSize.width.pxToDp().dp, + intrinsicSize.height.pxToDp().dp, +) + +@Composable +private fun Float.dpToPx(): Float = LocalContext.current.dpToPx(this) + +@Composable +private fun Float.pxToDp(): Float = LocalContext.current.pxToDp(this) + +private fun scaleToDesignSize(itemSize: DpSize, designItemHeight: Dp): DpSize { + val scaleRate = itemSize.height / designItemHeight + return itemSize / scaleRate +} + +private fun DpSize.halfWidth(): Dp = this.width / 2 + +private fun DpSize.halfHeight(): Dp = this.height / 2 \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/home/compose/content/FirstStoriesContent.kt b/app/src/main/java/com/tangem/tap/features/home/compose/content/FirstStoriesContent.kt new file mode 100644 index 0000000000..af7e3d586a --- /dev/null +++ b/app/src/main/java/com/tangem/tap/features/home/compose/content/FirstStoriesContent.kt @@ -0,0 +1,161 @@ +package com.tangem.tap.features.home.compose.content + +import androidx.annotation.StringRes +import androidx.compose.animation.core.Animatable +import androidx.compose.animation.core.LinearEasing +import androidx.compose.animation.core.tween +import androidx.compose.foundation.Image +import androidx.compose.foundation.layout.* +import androidx.compose.runtime.* +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.alpha +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.layout.ContentScale +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import com.tangem.tap.features.home.compose.uiTools.StoriesBottomImageAnimation +import com.tangem.tap.features.home.compose.uiTools.StoriesTextAnimation +import com.tangem.tap.features.home.compose.views.FontSizeRange +import com.tangem.tap.features.home.compose.views.TextAutoSize +import com.tangem.wallet.R + +@Composable +fun FirstStoriesContent( + isPaused: Boolean, duration: Int = 8_000, + hideContent: (Boolean) -> Unit +) { + val screenState = remember { mutableStateOf(StartingScreenState.INIT) } + val progress = remember { Animatable(0f) } + + LaunchedEffect(isPaused) { + if (isPaused) { + progress.stop() + } else { + progress.animateTo( + targetValue = 2f, + animationSpec = tween( + durationMillis = duration, + easing = LinearEasing + ) + ) + } + } + + when (progress.value) { + in 0f..0.2f -> screenState.value = StartingScreenState.INIT + in 0.2f..0.3f -> screenState.value = StartingScreenState.BUY + in 0.3f..0.4f -> screenState.value = StartingScreenState.STORE + in 0.4f..0.5f -> screenState.value = StartingScreenState.SEND + in 0.5f..0.6f -> screenState.value = StartingScreenState.PAY + in 0.6f..0.7f -> screenState.value = StartingScreenState.EXCHANGE + in 0.7f..0.8f -> screenState.value = StartingScreenState.BORROW + in 0.8f..1f -> screenState.value = StartingScreenState.LEND + in 1f..1.2f -> screenState.value = StartingScreenState.SHOW_CARD + in 1.2f..2f -> screenState.value = StartingScreenState.MEET_TANGEM + } + + if (screenState.value == StartingScreenState.INIT) hideContent(true) + if (screenState.value == StartingScreenState.BUY) hideContent(false) + + val style = TextStyle( + fontSize = 60.sp, + fontWeight = FontWeight.SemiBold, + color = Color.White, + textAlign = TextAlign.Center, + ) + val textId = screenState.textId() + + Box(modifier = Modifier.fillMaxSize()) { + + if (screenState.isSplashingTextDisplaying()) { + TextAutoSize( + modifier = Modifier + .align(Alignment.Center) + .padding(start = 20.dp, end = 20.dp, bottom = 100.dp), + text = textId?.let { stringResource(textId) } ?: "", + textStyle = style, + fontSizeRange = FontSizeRange(20.sp, 60.sp) + ) + } else { + Column( + horizontalAlignment = Alignment.CenterHorizontally, + ) { + Box( + modifier = Modifier + .weight(0.7f) + ) { + if (screenState.isMeetTangemDisplaying()) { + StoriesTextAnimation( + slideInDelay = 0, + ) { modifier -> + TextAutoSize( + modifier = modifier + .padding(start = 20.dp, end = 20.dp, top = 50.dp) + .alpha(if (screenState.value == StartingScreenState.SHOW_CARD) 0f else 1f), + text = textId?.let { stringResource(textId) } ?: "", + textStyle = style, + fontSizeRange = FontSizeRange(20.sp, 60.sp) + ) + } + + } + } + Box( + modifier = Modifier + .fillMaxWidth() + .weight(1.25f) + ) { + StoriesBottomImageAnimation( + totalDuration = duration, + firstStepDuration = 500, + ) { modifier -> + Image( + modifier = modifier.fillMaxWidth(), + painter = painterResource(id = R.drawable.meet_tangem), + contentDescription = "Tangem Wallet card", + contentScale = ContentScale.FillWidth, + ) + } + } + } + } + } +} + +enum class StartingScreenState { + INIT, BUY, STORE, SEND, PAY, EXCHANGE, BORROW, LEND, SHOW_CARD, MEET_TANGEM +} + +@StringRes +private fun MutableState.textId(): Int? = when (this.value) { + StartingScreenState.INIT -> null + StartingScreenState.BUY -> R.string.story_meet_buy + StartingScreenState.STORE -> R.string.story_meet_store + StartingScreenState.SEND -> R.string.story_meet_send + StartingScreenState.PAY -> R.string.story_meet_pay + StartingScreenState.EXCHANGE -> R.string.story_meet_exchange + StartingScreenState.BORROW -> R.string.story_meet_borrow + StartingScreenState.LEND -> R.string.story_meet_lend + StartingScreenState.SHOW_CARD -> R.string.story_meet_title + StartingScreenState.MEET_TANGEM -> R.string.story_meet_title +} + +private fun MutableState.isSplashingTextDisplaying(): Boolean { + return this.value != StartingScreenState.MEET_TANGEM && + this.value != StartingScreenState.SHOW_CARD +} + +private fun MutableState.isTangemCardDisplaying(): Boolean { + return this.value == StartingScreenState.SHOW_CARD || + this.value == StartingScreenState.MEET_TANGEM +} + +private fun MutableState.isMeetTangemDisplaying(): Boolean { + return this.value == StartingScreenState.MEET_TANGEM +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/home/compose/content/FloatingCardsContent.kt b/app/src/main/java/com/tangem/tap/features/home/compose/content/FloatingCardsContent.kt new file mode 100644 index 0000000000..221f3329ca --- /dev/null +++ b/app/src/main/java/com/tangem/tap/features/home/compose/content/FloatingCardsContent.kt @@ -0,0 +1,103 @@ +package com.tangem.tap.features.home.compose.content + +import androidx.compose.foundation.Image +import androidx.compose.foundation.layout.Box +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.ImageBitmap +import androidx.compose.ui.graphics.graphicsLayer +import com.tangem.tap.features.home.compose.uiTools.AnimatedValue +import com.tangem.tap.features.home.compose.uiTools.asImageBitmap +import com.tangem.tap.features.home.compose.uiTools.toAnimatable +import com.tangem.wallet.R + +/** +[REDACTED_AUTHOR] + */ +@Composable +fun FloatingCardsContent( + isPaused: Boolean, + stepDuration: Int, +) { + + val imageBitmap = asImageBitmap(R.drawable.card_placeholder_wallet) + val cards = listOf( + FloatingCard.first(), + FloatingCard.second(), + FloatingCard.third(), + ) + Box() { + cards.forEach { floatingCard -> + FloatingCard.Item( + isPaused = isPaused, + imageBitmap = imageBitmap, + cardValues = floatingCard, + stepDuration = stepDuration, + ) + } + } +} + +private data class CardValues( + val translateX: AnimatedValue = AnimatedValue(0f, 0f), + val translateY: AnimatedValue = AnimatedValue(0f, 0f), + val rotationX: AnimatedValue = AnimatedValue(0f, 0f), + val rotationY: AnimatedValue = AnimatedValue(0f, 0f), + val rotationZ: AnimatedValue = AnimatedValue(0f, 0f), + val scale: AnimatedValue = AnimatedValue(1f, 1f), +) + +private class FloatingCard { + companion object { + + @Composable + fun Item( + isPaused: Boolean, + stepDuration: Int, + imageBitmap: ImageBitmap, + cardValues: CardValues, + ) { + Image( + bitmap = imageBitmap, + contentDescription = "Floating Tangem card", + modifier = Modifier + .graphicsLayer( + translationX = cardValues.translateX.toAnimatable(isPaused, stepDuration).value, + translationY = cardValues.translateY.toAnimatable(isPaused, stepDuration).value, + rotationX = cardValues.rotationX.toAnimatable(isPaused, stepDuration).value, + rotationY = cardValues.rotationY.toAnimatable(isPaused, stepDuration).value, + rotationZ = cardValues.rotationZ.toAnimatable(isPaused, stepDuration).value, + scaleX = cardValues.scale.toAnimatable(isPaused, stepDuration).value, + scaleY = cardValues.scale.toAnimatable(isPaused, stepDuration).value, + ), + ) + } + + fun first(): CardValues = CardValues( + translateX = -400f to -350f, + translateY = 30f to 32f, + rotationX = 10f to 12f, + rotationY = 15f to 15f, + rotationZ = 40f to 27f, + scale = 0.6f to 0.6f, + ) + + fun second(): CardValues = CardValues( + translateX = 350f to 300f, + translateY = 0f to 50f, + rotationX = 30f to 48f, + rotationY = 0f to 5f, + rotationZ = -34f to -42f, + scale = 0.47f to 0.35f, + ) + + fun third(): CardValues = CardValues( + translateX = 320f to 250f, + translateY = 500f to 500f, + rotationX = 0f to 3f, + rotationY = 10f to 10f, + rotationZ = -45f to -30f, + scale = 0.6f to 0.7f, + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/home/compose/uiTools/AnimatedValue.kt b/app/src/main/java/com/tangem/tap/features/home/compose/uiTools/AnimatedValue.kt new file mode 100644 index 0000000000..d8afd02e6f --- /dev/null +++ b/app/src/main/java/com/tangem/tap/features/home/compose/uiTools/AnimatedValue.kt @@ -0,0 +1,47 @@ +package com.tangem.tap.features.home.compose.uiTools + +import androidx.compose.animation.core.* +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.remember + +typealias AnimatedValue = Pair + +@Composable +fun AnimatedValue.toAnimatable( + isPaused: Boolean, + duration: Int, + easing: Easing = LinearEasing, +): Animatable { + return animatable( + values = this, + isPaused = isPaused, + duration = duration, + easing = easing, + ) +} + +@Composable +fun animatable( + values: AnimatedValue, + isPaused: Boolean, + duration: Int, + easing: Easing = LinearEasing, +): Animatable { + val animatable = remember { Animatable(values.first) } + + LaunchedEffect(isPaused) { + if (isPaused) { + animatable.stop() + } else { + animatable.animateTo( + targetValue = values.second, + animationSpec = tween( + durationMillis = duration, + easing = easing + ) + ) + } + } + return animatable +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/home/compose/uiTools/StoriesAnimtion.kt b/app/src/main/java/com/tangem/tap/features/home/compose/uiTools/StoriesAnimtion.kt new file mode 100644 index 0000000000..a5d596c425 --- /dev/null +++ b/app/src/main/java/com/tangem/tap/features/home/compose/uiTools/StoriesAnimtion.kt @@ -0,0 +1,174 @@ +package com.tangem.tap.features.home.compose.uiTools + +import androidx.annotation.DrawableRes +import androidx.appcompat.content.res.AppCompatResources +import androidx.compose.animation.core.* +import androidx.compose.foundation.Image +import androidx.compose.foundation.layout.absoluteOffset +import androidx.compose.foundation.layout.offset +import androidx.compose.foundation.layout.requiredHeight +import androidx.compose.foundation.layout.requiredWidth +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.alpha +import androidx.compose.ui.draw.scale +import androidx.compose.ui.graphics.ImageBitmap +import androidx.compose.ui.graphics.asImageBitmap +import androidx.compose.ui.graphics.painter.Painter +import androidx.compose.ui.layout.ContentScale +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.DpSize +import androidx.compose.ui.unit.IntOffset +import androidx.compose.ui.unit.dp +import androidx.core.graphics.drawable.toBitmap + +@Composable +fun HorizontalSlidingImage( + painter: Painter, + paused: Boolean, + duration: Int, + itemSize: DpSize, + startOffset: Float, + targetOffset: Float, + contentDescription: String, +) { + val offsetX = remember { Animatable(startOffset * -1f) } + + Image( + modifier = Modifier + .offset { IntOffset(offsetX.value.toInt(), 0) } + .requiredWidth(itemSize.width) + .requiredHeight(itemSize.height), + alignment = Alignment.TopStart, + contentScale = ContentScale.FillBounds, + painter = painter, + contentDescription = contentDescription, + ) + + LaunchedEffect(paused) { + if (paused) { + offsetX.stop() + } else { + offsetX.animateTo( + targetValue = (startOffset + targetOffset) * -1f, + animationSpec = tween( + durationMillis = duration, + easing = LinearEasing, + ), + ) + } + } +} + +@Composable +fun StoriesTextAnimation( + slideInDuration: Int = 500, + slideInDelay: Int = 200, + slideDistance: Dp = 60.dp, + label: String = "", + content: @Composable (Modifier) -> Unit +) { + val isLaunched = remember { mutableStateOf(false) } + val transition = updateTransition(targetState = isLaunched.value, label = label) + + val offsetY = transition.animateDp( + transitionSpec = { + tween( + durationMillis = slideInDuration, + delayMillis = slideInDelay, + easing = FastOutSlowInEasing + ) + }, + label = "Slide in" + ) { value -> if (value) 0.dp else slideDistance } + + val alpha = transition.animateFloat( + transitionSpec = { + tween( + durationMillis = slideInDuration * 2, + delayMillis = slideInDelay, + easing = FastOutSlowInEasing + ) + }, + label = "Visibility" + ) { value -> if (value) 1f else 0f } + + content( + Modifier + .absoluteOffset(y = offsetY.value) + .alpha(alpha.value) + ) + + LaunchedEffect(Unit) { isLaunched.value = true } +} + +@Composable +fun StoriesBottomImageAnimation( + initialScale: Float = 2f, + firstStepDuration: Int, + totalDuration: Int, + content: @Composable (Modifier) -> Unit +) { + val scaleSwitchBarrier = remember { 1.15f } + val secondStepDuration = remember { totalDuration - firstStepDuration } + + val isFirstStepLaunched = remember { mutableStateOf(false) } + val isSecondStepLaunched = remember { mutableStateOf(false) } + + val firstTransition = updateTransition(targetState = isFirstStepLaunched.value, label = "Bottom image animation") + val secondTransition = updateTransition(targetState = isSecondStepLaunched.value, label = "Bottom image animation") + + val fadeIn = firstTransition.animateFloat( + transitionSpec = { + tween( + durationMillis = 400, + ) + }, + label = "Fade in animation" + ) { value -> if (value) 1f else 0f } + + val firstScaleStep = firstTransition.animateFloat( + transitionSpec = { + tween( + durationMillis = firstStepDuration, + easing = FastOutLinearInEasing, + ) + }, + label = "Scale" + ) { value -> if (value) scaleSwitchBarrier else initialScale } + + + val secondScaleStep = secondTransition.animateFloat( + transitionSpec = { + tween( + durationMillis = secondStepDuration, + easing = LinearEasing, + ) + }, + label = "Scale" + ) { value -> if (value) 1f else scaleSwitchBarrier } + + if (firstScaleStep.value == scaleSwitchBarrier) isSecondStepLaunched.value = true + + val modifier = if (!isSecondStepLaunched.value) { + Modifier.scale(firstScaleStep.value) + } else { + Modifier.scale(secondScaleStep.value) + }.alpha(fadeIn.value) + + content(modifier) + + LaunchedEffect(Unit) { isFirstStepLaunched.value = true } +} + +@Composable +fun asImageBitmap(@DrawableRes drawableId: Int): ImageBitmap { + val drawable = AppCompatResources.getDrawable(LocalContext.current, drawableId) + ?: throw NullPointerException() + return drawable.toBitmap().asImageBitmap() +} diff --git a/app/src/main/java/com/tangem/tap/features/home/compose/uiTools/StoriesPreviews.kt b/app/src/main/java/com/tangem/tap/features/home/compose/uiTools/StoriesPreviews.kt new file mode 100644 index 0000000000..a09559cbf4 --- /dev/null +++ b/app/src/main/java/com/tangem/tap/features/home/compose/uiTools/StoriesPreviews.kt @@ -0,0 +1,51 @@ +package com.tangem.tap.features.home.compose.uiTools + +import androidx.compose.runtime.Composable +import androidx.compose.ui.tooling.preview.Preview +import com.tangem.tap.features.home.compose.StoriesScreen +import com.tangem.tap.features.home.compose.content.* + +/** +[REDACTED_AUTHOR] + */ +@Preview +@Composable +fun StoriesScreenPreview() { + StoriesScreen(onScanButtonClick = {}, onShopButtonClick = {}, onSearchTokensClick = {}) +} + +@Preview +@Composable +fun Stories1Preview() { + FirstStoriesContent(false, 8000) {} +} + +@Preview +@Composable +private fun RevolutionaryWalletPreview() { + StoriesRevolutionaryWallet(6000) +} + +@Preview +@Composable +private fun UltraSecureBackupPreview() { + StoriesUltraSecureBackup(false, 6000) +} + +@Preview +@Composable +private fun CurrenciesPreview() { + StoriesCurrencies(false, 6000) +} + +@Preview +@Composable +private fun Web3Preview() { + StoriesWeb3(false, 6000) +} + +@Preview +@Composable +private fun WalletForEveryonePreview() { + StoriesWalletForEveryone(6000) +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/home/compose/AutoSizeText.kt b/app/src/main/java/com/tangem/tap/features/home/compose/views/AutoSizeText.kt similarity index 93% rename from app/src/main/java/com/tangem/tap/features/home/compose/AutoSizeText.kt rename to app/src/main/java/com/tangem/tap/features/home/compose/views/AutoSizeText.kt index 2bb6c5b8d5..f930160da5 100644 --- a/app/src/main/java/com/tangem/tap/features/home/compose/AutoSizeText.kt +++ b/app/src/main/java/com/tangem/tap/features/home/compose/views/AutoSizeText.kt @@ -1,6 +1,5 @@ -package com.tangem.tap.features.home.compose +package com.tangem.tap.features.home.compose.views -import androidx.compose.animation.ExperimentalAnimationApi import androidx.compose.material.LocalTextStyle import androidx.compose.material.Text import androidx.compose.runtime.Composable @@ -12,7 +11,6 @@ import androidx.compose.ui.text.TextStyle import androidx.compose.ui.unit.TextUnit import androidx.compose.ui.unit.sp -@OptIn(ExperimentalAnimationApi::class) @Composable fun TextAutoSize( modifier: Modifier = Modifier, diff --git a/app/src/main/java/com/tangem/tap/features/home/compose/HomeButtons.kt b/app/src/main/java/com/tangem/tap/features/home/compose/views/HomeButtons.kt similarity index 97% rename from app/src/main/java/com/tangem/tap/features/home/compose/HomeButtons.kt rename to app/src/main/java/com/tangem/tap/features/home/compose/views/HomeButtons.kt index 04fb1f2647..d49013db87 100644 --- a/app/src/main/java/com/tangem/tap/features/home/compose/HomeButtons.kt +++ b/app/src/main/java/com/tangem/tap/features/home/compose/views/HomeButtons.kt @@ -1,4 +1,4 @@ -package com.tangem.tap.features.home.compose +package com.tangem.tap.features.home.compose.views import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Row diff --git a/app/src/main/java/com/tangem/tap/features/home/compose/StoriesProgressBar.kt b/app/src/main/java/com/tangem/tap/features/home/compose/views/StoriesProgressBar.kt similarity index 97% rename from app/src/main/java/com/tangem/tap/features/home/compose/StoriesProgressBar.kt rename to app/src/main/java/com/tangem/tap/features/home/compose/views/StoriesProgressBar.kt index d121949529..096b87cb0b 100644 --- a/app/src/main/java/com/tangem/tap/features/home/compose/StoriesProgressBar.kt +++ b/app/src/main/java/com/tangem/tap/features/home/compose/views/StoriesProgressBar.kt @@ -1,4 +1,4 @@ -package com.tangem.tap.features.home.compose +package com.tangem.tap.features.home.compose.views import androidx.compose.animation.core.Animatable import androidx.compose.animation.core.LinearEasing diff --git a/app/src/main/res/drawable/currency0.png b/app/src/main/res/drawable/currency0.png new file mode 100644 index 0000000000000000000000000000000000000000..0d293ec8bb8464897c6e1a0305c800b9bb55037e GIT binary patch literal 49525 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/currency1.png b/app/src/main/res/drawable/currency1.png new file mode 100644 index 0000000000000000000000000000000000000000..37144efffe9027c8f2e35cb8d9214d04f415e727 GIT binary patch literal 40631 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

Xw*(wjLgu9*>{S9r#deDDz1Hg3cj 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 Qx&QzG07*qoM6N<$f-um6oB#j- literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/currency2.png b/app/src/main/res/drawable/currency2.png new file mode 100644 index 0000000000000000000000000000000000000000..bd757902211d94529b4a778d0a50a2736db8d9bc GIT binary patch literal 43333 zcmX`S2Rxk5^Ej>~N{|y$2u>$Q^iED9BseWjjTXIkqFj_9f+!c9-nr9j^iB{Z>giq7 zJDnVf{=a^!r(^UTi9?CwRpQCFn8^Y{({0Rfe=k^+=~fE+|XK&Vef zjK>6@GsNOEDt6lXp89I4(iSdG{AQLe=2rYZPOkWJ0)l7HeO%2f9IQN9%&lzfoWX1d z&FyR~c9vi^Jux*wHCK5nTRSC~yOkD9UE2cYU?FA6_FVSPGaqR@11Bp_GZr5wM`sUd zA28eh_)6p9e`oI)K^a{#D4Lul9yT-o@RDMT}pZ&q7F4kVQg@Ur1a~R7~h8 zi?E=Ogn*!!fS@>^ppdknq_nUQ%l}<$vUgaXxm#LGLls{CUuF0ln9bJH(^XnPz}wrK z-&=&=#ob0gNJ>gdKu}mfSeOq_!RO)Y>}lr1=j_4$kHvpH6s$Zf-0fUF?OdE${_!+3 zcX{s#W@8ihSBb#?)q?My!2jzXKJ))1WaW$(i#xvmeDVtQc-h^ukyDc+AgF>kvIRluCK5E{{4#wFD@?dFdn$Pyu<_e6c6Kp^Yino z|6Ttf@gSb^zoPK)a6A%^`HvWn{Erf!#b5sw{g?h%^dJ5|8hrZy=>Ox4Fa58`!^0yq zH1y-gk9ZLV2M6QRu&^*J7CSL9@n5|JUc&?dmzVs3HwXg!D+Kvo_;;hDqX_~o&hf~2 z0&#J1N=iy8DM-h3U1%6XBaPu=tMn;Cf z?+h;_f`HTCcqT#P1hJQYF0S`3&InLmL|>j#lL`FBZn|IuL6-y-p9p+M&heF> z9pCItMRsmK8*jcjTDd8EmDsx%5fRb3`1@u$pPh=l;iLjC1w+4QA*<@MFX5 z@lEDqg4&pyv6TL`lbh=s=7iasZ%}*(t|UI)*yh}L6^o`V+|(J}oL}CwO~1-ny7^eC zjNH31Nhb(6yeX8pNu#nTUn20KP(`cpA+bdw9Zna5m% z!~I$=e*HQArxjaA<>lo!2PZct+i#115%_NzmR}d4Z*Dev2#2cQnb%n#>GBPp<+B0KgW9#Rx1hcMgUVgdB{h^_u(b3Tn*>#OV zp>j57E4G)0Hm?s44;`zIZo+GWmWOXv_xk($9q0RYcXxe#ePh=q(8s&-^76B@vp0&- z#>U2piHSXjTlV&LH!+QPl_2OTB>0{;GBR?;A3&S@S1xsjCuv{5=#X`^VSRnQb$=a$ z!TkF5YiVhTDHg-V#zsX&RXw=Uj=Jo{j{&eJR9%aJ5)(&6Mo)NfyXoah(L4?)(k&M|p+aMl5tJ;%DUapRpCL0l2~kgPonfckcgIARu5NP*#xB z_LIq!+$nJ$IM4v4ElNa8@Emsp?1=xx3n|1%P*kc zytz**%72$!TxVSj_ql#2=T85>#49#owo31yE$RKxCSvU5TTn>TmZdalzaRMAc6)4W ztP2m6Y>!VSErtFD|;;JE717Y3C2TM}4&aH)F6*tWXTyxuC*_4Xd+wqI(nKC!Rd~e+_<~7{EwtgoF~Iw{hQ{hVQWb}e z$t3#8yyYRLjJ4jcKs`!#Tz0l%U>`TCd@czy-5%Q$&V^CB;;7-#u<~dPijr%UIA?0i_>MCkB#PC zO=8OwM|LD(vHodVXL3`ttIb-Y3F)Y_eM*n;4bMO@$G^r4jd{?4B2=KkQOm2nhU*Ngwi9BCWKS>h4p{cO=e& zZ>dQW<81zXQ=7_*^cak{j-N{_RfKiKVGDe_f9?4Y)Tn!?;2ORk5!fo!pXy@9Y70Ep zC-ZFdcyYD|yGmo>Uj9#g{Uu?xSho^R81npXPWo`V)!1}@F3(BBuryd&6840xy8S&2 z=PJF(dx9~`0A4YH5irk6b@&b=_Yl}3duu}LfLh~fuK6_&5y!|F+> zH|s{7Uw~JPUW#TfpN%y7PF0kC&Tm@c( zpT}$<@Kd{Y$o<(&PVl$!Hl@XKUM(2XKemb85QbD`&gNGwBOb2ZvOdKr?Kq4O{CfZ` zCB79X8q~XCx-)@xi$8K?KERL)3}H)*@v(K*%BKxtjCRcrjfV1pA&g-B?K~N^bhlpk zL7fE4yPs8$u_?Wnp>m*vG)&T=dQvFd7>ssz0wQ=Tp0K;muX$%&#UrMa{ira?C zlm{JS>|$vMuld>RWsZL|Ct-%`fFXM@BY`b_eA8fhnprJ!e;hOWJ;KA;xS)=TW4ZkV|j`&BcJl>NMI5w445?g3ciDuhXcLF)>3f| z)BC26z>bL*4WZQ*9QO^UAZ>Ej)ybfFzt z&FR2TiyC>W;KnC?>T2Nf$`YVNrPD9W&sj-+jn>}_Q!wO;D=KZbR558{Jg+|EM5&W& z%y_r7x3;LDchYMr#LUL~uFU}^$(|g=uv?~Bj5_=FZSQ~2-Lw^zG0}I-A9iBh?b;0S zNbwRoREgxgBILw~$uSTNJyUJvTEWr31F*8K)n zB@h^v{{;v_8x~m~dzuontXEUIv zFf5w1^S$~ju;Vkb{cqY6T|Z)iuK!_~h?$_8a6|gOboV0q`Z?UQ5mim_uKka`CRVYN z${jCE>F&ftUaRqt(4LkSVE(QIb{iwd33DrYeEMv%8C4Ff6XmV-z$>P7{y!MLfh+}{ zio&h%xvA7%mAk$gHN&9igo^Y6}byrSXof2 zd~iA&=M$Pon$V{j89FPgBBz^*aSO={%L^keKYf=v{tD3Sn6sbC1xs$Vs<#+m*37IQ zhklLE;D@=^jk1gQ<0^a5=?Sv184EjgVz7@xqBW^eyrQBO++k$mdG--6oaq~cXf@)X;7 zjc5H3b{GT1#z0ydY7EGe-=#JeqybazK9Pd4SpG$;0;ZBSYsN#4fIr?ErG~x*N6Db( zgRB@6nq**-*_LHM)jX*69JaGgf{W_JcIzXJmf0{eB@^py+PISun!*RBdyPu>oCq<~ z9vD=A4)*!13F2isF_rq6^cj{Mx1sX>%@->*c9*l6w5Oy9{m~E$6L>mqBIK?1fT{*K z`4y_PW-KIWyOW>C&5nLAJv4;|w7By0mTK9p^lIu#lwu-&WWg+@DXLL0R~C?vA$2P& zSUI8zh<#&`2s`qT{Q+?lr|5%J7=!Q0eRm05Lw-v^hj`;$aie&t}5N_+L`+=@1A_Ou@=^WQMDIdD=`1ROafdi*kj0IcW! zT1vyhT~h4U;x{mzBJWG~OylSlGiVoWo3xMU50N%j0-mWj2LfsFLTu+C39};Lzncl1 zoYIBRozIWI4_h6%SzC;f3@=h86Z|^5 zNg9Ujs_quo!fXte9-sJ{cKs{k@B z%!wEHtW{iH{}=m_AOcqcsZX2eyk7WFEONKIhW|vQL96ZB29|EDEV;j-7gGbpZR+M zb6T|ov8{J0tHRV;CQ|R@!w?g=N}tjQdakxF#s@8_VUH@>s!M{Ofr_wZN4GR-)%?^x z05cE{95I6;LiGyvkG@366Xv^QMJXv)C5vp^@|{9hdIDz$C0qgW-n<&PAfu+z!BLpL zz0UR?hIP6NT7qV&hBz0zqucr(9;%U5(ruWMb5c1`>?!3BIyJL^QYN0pj)#m-t#R?5 z2$pd=oLTI+3z@GkNLL4F30qXDih$Iz+NGJf>(poVC0gzu9^-0p16@ByJb8CqK+CIw z<)ox#VF|h@RYgEPPO$er?RR7-|E~Vu?^wtk*b`lA-ZG1clZM}IL%!?gzx};av%?am zggorWH{j7DJuy|*oluzzMtvjIFI`Z+bGy5ak2Uuy?+hQXCRbF~f;RWKF;9Pz;A0q! z93Y+&V`er@C(=Tsb3twjy`Olhmm~1A59SKmc`#FNrv{wWueM`02K%U-2zK$Z41N$y zdK0xUYx-S4^?R`;Wb6j>>E78V^V#)TuF_lSR@E=)w-Gz6qJkAH z4#O7&DqnpS&G<0(O4P(RKd1?q`1Y(2cALkmVkqyPgSWg)A|-~kt!i+$RBAc4z?m^xWJkUR9Po&4=KAfp59O}QF{isB|T!p_6)AoQpC zd562o)Yf>!J=<53SO}v`Yc1c>FN{M^#PFMtkJA({kvNV?F?wbAU0qD9>{|TS6O2nJ zaC&S5Spaf_N@kXSpA1pS592(^y!P7Qu+)WacXCg6#px1y{;8sf%-=vqDq_FUWS%ro zES4NZO`hGi`0j|L0Bl1{djjH0X5UH$@>45=)|{;I3bgHlcMQlq!A}d@HOoSwKe>B; zL!Oi(>x8+d^R(_vzWn1fEW$2+kXP8dQKUn$@hKzT9s9$)xb%}&V4mTJv?|#w_ZM3U ztDj{|s%qo4&X04C4mPu}lzizf3QE|U(X!(wcm42js)h|%wYUjY0oS&A^wfIFBL|Zb6eBkHbT$=S1r(QI&{}M%(l5Eh$94+Yy?2*8A^hOtqh`MNcU*J z?%;K=^DPvBsva3YerNC`SJwiVsKEbvC$})innV=(S(MueefvC@W#;pot+nLf$m%S= zCoykAH+VVUsch>kSQ6CQIXvKp()wWW1yQa+1s=%qN_i|WrOCz_f0A8wus1A_`g<^D zQ(zw{58>L8bNHaUv0$XNMpkBmczvM(ov#=C@V>1`NUq{mL0!A9d#vW%N$xU#vi-nL z$ME)}lMa{jO}z$rn?m4Et&btz9$3Qg*5=uze@)-p1ktz%*f3R zi#Wj!ch^cbNR2ej_)+Tss3at^lOj$eq&eAs(?YbzA+OJs$L$tHtgplURLp0+c=Uk3 zRl6x`_kFQeUlGEYrq)*CBMJ){9!lgd0pqIO+6I4;_uddKKsNBU@*L(_?Q+MjEA<(# z#SqCIq@{@#ClAQAnhEmJFapx`v1GP#%`HrC%kW|RRch_+LpJsdsxoONJ=kfQmsZE< zOw<;ICDQY=Ynh@UKwSgAjLZQ}IJnTk$h@Yy2KiigoKfS2u)}j$@>F-2=be^Qh0IB} zTwN6aP#G|M2W*S%C}AF~75ssoxfSNToo~)8+w^q#`;2f15h!KyERpr%aG7Eqi8x~a zm5?IQBK(_p*NNFW9wCUsn7_L?ECTU6tod=qCeV+rae3fa7R@$C=br6Y?6DprEuplM zk3omvard(5jQiJ5CUW#ecVjJd*9{ri>vjalpZ(Qr;r2IAvcW~J-URzf+}RHTzJtGu3-F(a9>^bNSH!3RdjZsDd>`DC^ z1eYB!p5BEr7Azw@LZE#g$yc?<6#}_D#aW9Ldt`hadt@GvoUBaZRt7PSFV9cR8j}nk zdnn($C(BTCX1Q9(JDw${dRISJX%o#0_X7~0aFEEzpd*KEW1(Cc6{~rgzeyj*D+PRp zZM5?ywG~>v0BkE$eh0M;JTg-48Bb_{eN0;^tS9D7SuI&a^cpx8_l$=mVdYwxo?!Fi zRXkF@kdoc_9`12B-wW6jivOMRW$l&{`AmSyS$-q8%+AKnZ3DbUx6t#7(87|xLeDYi zQVZ`inqF(;^YA)gN*y}y*zS?Vktgk2@Dpw!rF?_|^MHi_(4MnIQRV`}`eWGW$7(F( zTcD{%r2Bi$s32&-^(BWxP)#Z2Qc}?GYmZ<^AuIk&&Pd4Y6jIQhdtKxa?}{Fg>}&$}H$bX8O$cieI=){CyR6E}c_yZ$ z16O4zKoke+3wGo559P(^q2FErzA?zBnRp7(RftlLu{R0-W^#)AZh9Xvp&6kACbN;X z-V~-|=+C8DA7uVko=ig`2YMceSmn^mAQ`e7dh-R~K>htjOO2;$4SJ4bp~ugqFXQ4S zPF7ZM7{_G$yDcYy@-*wDjx_JQ{RL(@ z%Yo89tBD-*sft75zmXEiKeqQNXv1GF4pAuG8*Y;Ia6|a9Vt6i8aoi=PSJnD!+~;*A{aP5 zYmukpIGq*-QaV0+*&eI7Kv9br`ExCv-BzMgiasilXvWjfegs$%7pZ$dI#+KLnwC z8!3D9IBuZf9PggTjnoJC56oA(t}`c;PozUmwfF4V4cR{FQ-14wO*8mqhT$BE3#=@i zf8j)^1uwD1%DpFAo@Gt^p^%vhoPfo=XYu)~(MZS1sqw_9{P)Uj3Kf7oxHnwQZ@%`k zri6DmqPx$q`e!yU{R?m+Jt2gwP1fE$CFa$wn+e{b)>kr_BetKE?RFf4k)Ew!aemWo ziQDJ+VMWD@v{V7hGMc-!Xs7`?Nnq(7RcerOo4!~YF|g9!bE&`fz%?Y|&vvIMn*IL9 z_zV|nA>oz)Nt5#QJelk)O)$IaYo@H0P!3SU%>lU7{0H%K&UpLXO^O zEkT$nOX%vJ4-%}Wu#>Y9B88>07KqDkbM191tnVI6wcX(U5Vp{2NSc*I&L=;eg6aL|bkFX~I5i-N06~b=6(S&_D8C z{EiD%KW?QKx1x>9j=RNO%Z!ozEC(7?(llv;OJtK)6q6=!NOoSmfImhi9f|CGfBsI4 zYA(T8*1M&X`@>hGijO5~%~o7G$ZFx_Uds%^qgLd>_3>7n=!+QJjf=YCng>OI{JoI=P^a*j1FY zmvUptX$d7;SnBv0~uzZ3tYlh<2;$OCsR5zaSc#*7`)rKqr+|EPWk#R%MN@u6f6c;RaE_#c|vs0KCVsL864m?z}mF)#U= z`v=9Mj;))g>aVgUyA@**c9)Fsr+24C{8U~n4VS4wY@(!_d?yXKOM$_QCz2gRpw^;X z(xhXU=+)4x&xpc_J@c4-r6>obQzFf2ylCW2b>K|vFYNZ@CT(V}c*@VsccuRSvjBO9 zm(OWr8nma`?*p>8;(>fgU=m?as6Lhu_jp0cT$fX;ZhH^(je|Dy7Ekr zTY3=kLe_uaOV-7~?I-{IPX?sI()gkXek~UP+)F<3IPkv5$~o|1ne7)WXkuU?x&~-D z$Uxd(o9Ay1aYcu+2UX&@IB@2#>a2!>w0qCJ$LK|&!ly*HJMZfN zOkM$2{avszD-LFP=lSKNVfcZQ)9a$VBWIu4VfW}E$oGkbZo>|eS59S%3@i7nUlAGT z-(z5&?fLTJ?OmrIXi3nU+DY6$?BTT`3iiDK9-=WzSi=4yJ%3 zK5KDulC$^lxN6X%Ed<|!n_{WgM%R!p>^vOM+;cXCeR_0RalCg$Bk<=K!pN{fUrT{| zWUaD^Y+MLYcWDc%`6|7bntYuOzM6Xo&pox?e2&-sy6p5QKf9}Ft*qpjmyq^aojb(h znF`#fq$;Hdd4m*on5#X^$VC9m|5gLyjgMJfeSeV%hh6a{MQ)@+gAuDHoYQs+V4wG3 zGVZhR^lHlqZG@;Nv;t90reEj$;Ba~f$5d3Z&}+%*7PFR&3Jua!WN z5*Tf?B<84xK@Fak;<%JY-&;z8+OWWEkEL~Pg13zIksMRq+u*9x_?$l~U?2~YgOw}E zp}iQ$SPb-k>#(Gy;wZRZ;=L_9OHz8}Qf0EZ+CEYnHx`1)%r?ObQ0Zdnhr?iDnb94o ztaZ6EFC{Uh2MsBf*QdkU_i%;3CdM>lelzRja2klC!V6?BDZ|9(2n#O^*|}Oixrhb) zcsH`bM`+z*V)_XmS4(Ve#gzRt*rWFm1qWCNfbZ&OXrF&g1_l=ci9W#kVCs+AQIQ@N zZdH7kTrK}dL1=Q~vvQD_B#cZO$D&EeDRHpJA8ymt{Z0Qh=>DIhU96n-mM14}<|E;wamKeKJt!lKLjK5~#_T zwJIcN0MhY;BOY)kDi-=<9xu+SmmXw#nS~^X6G02^+#YpQ^~6b^xjMYS_?8lO;lMl) zraAP-N!A{De~35q+BY@|nBo}AD<$Loo3+P+`I$oa&pQ+rGRwzzet-TPi#?JjQBr;d zXWZQ9cxWb5^d~#Um7!hh{cnSD_9ug{t1e#`&R8rAgB6dT5b%vvf_j)1tBBqmi)4hg z*l_6wG>4KyVO>u^R}96<%1t~TFkTT1#pqPXigQWHpyYzLVbjqb!4tA3VEPhRq?264 zl1nVz>mDmg$l}MP`el1*&$}9TRwhO7_31CI;DUBxd5jyMq0GH@mP9B_>9g`dxN#%% z@~x&8Kw0Mi_p4=!uJK1u_PAo;vnU`F-F!s&1Vp)Zy_U4~y`}ShUt@9IVNZTq(}z*{ zQS493c=VH5`LlYBO!=xbsQDj5NqN+4qW-pXv~gl?wd%*Ty2JBJhbd=r!L^@6dHCso z{9BgccFZs86Y7Z*TNe@VKwI5i#KTL4cW|~JxWY>YLa6)X^YQMaLssZxTG*O%W7x~* zsPHtIeJ%IKA7ZSSP6w=z3ha9$3&QJF9ToNR!*VII zoAZ?#yl3worJ82+*W~rMSMg*WeEo4`mB*y&tcV)3{mY6O5h>>0d?eY;m}bczbR`HM zzy!(^ywCr=lEU98lYB+ivvCn-@zuvLQVc=eE;t4V+%&^ z5fOlW;x^u}Rlud6zOmPT2AXz_GWw!NVFW3;^x}&pm33^9@gB@a__^F-O@js}uyrjT z|E`aU%|w48>4}&s9uturGZxc4AoqXaST||hkb?{NXXv zDWP`JNt!pQe`7%~YF-W6l!zJ87)nrMn^S4_D+rpOFaqlWoNgeYfl<#hK}@;WIuSJb zejn6I+`M-lx9}61zXmZ5g*x0Fc*mTc2y96N=16pVg~egdem}kYWQZXp@&SX+Y3ESr z2;`nJ&j~8-S&s^6D9G0@cM)NZL@;acn8iUcLspcW)m3X-M2ygZza0utG&+wN1a3<8 znqUYN45V0?`15mcYz+d18OaHuKB+=7e=Uoht8sBogXq9MeBfM{Z_3y)`ghT4-7i2c zVK_HlWQfWX<9FWnekG7Nw?u_2?cej2+LM)djNDT!q}z)!3u=H=eFFX($q>J}dVd9& zrxn1iWz<3cSNzTI7aSNz*7JJJdLPX0LEhaYy;ircOoaEf7q$^`#cIl3 zjiSMWqY~tx2$vXIR+Q@JFBHi~YJ@<1m~Ih;@QLH~xU16dh$wWvwbr5d$Xcy?y`abj zekDi|6@Sn^Ynu;b>c_|-3;IEiKv16Yc13+FVUX`|JPYSbFG3=5J$Hs>%N~i*>zaqI z9?xQwA-`r_VjnL&Qcx*Lc+?+?W6-T=mIkw-LcbiqzmZ%NuGftt1JImF_ zvWSh!&{p6311<`%TdKYE(aqPDzqX9cB=hd?j4}BJ*7DGUh$TBajYpBXL?p0Vm--*^ z0mk#L@}K0QI`mysIiwnTaLSkrNx?CKCqwpfYe>)0wFmQGp}86_YVd|U#4X_~j10e( zb=_|+51-N)0<~>yIFZn(XFc}t;682Z3EOxWFn8w^@ zye^3G$;O^K)Gt11xs62;63U?Tl_s`|h(nl}ie&GF&N+x#6gt2p@aKJ3olY^UD;-Jf zGO_VD31*o@HAz{fvxp?s*DBUjTB-q&m(Lx8%_W;0-NK`HB3xkVNVP@hOz&o8D#wQJ z#~XiJiD>Y13vj)OQvLDTI=^|pds#VYMSd8|wi_)unBO7-(IC`IEr(^dRL?Ew6;Q^w zF$CrP6_tV>!~FgnPAK(n#p9ia*57R9KvubMI*UUm3y1z7^jcZ}j>C&Hr=)x8U+|6C z`#^EvPy4*;;r*t=yi|{C4%*&OND%zOWz}PE&s%|A?1$>9z+6>CQGCw!eJMM4V zJ5w<4KBw=~*n8fVdJD9{%=H4&t`uQDGA|I1j{>+$O;Rc}$ibFxIgvTs6tY`%Y@BQ` z>Pk?8M%8nWZ}FkBvgu2BNa(r}xh;PY8b$u3-7PDQ9km&9ODQ58__t1|-2JIhXvt%# zyie+oJKDvcYj||x#d+>kfyzd>@3U_*RK3>#5*m6FOM$Ac_yT9{OfHUAX~|UOXhARF z=}WOUJuK*ZU9dFt@7tf0up-Gi^vQ-5r6(^iop_I147&PQv#!HGTvgczc33yM))ILe zdi21^wLY_-QH1oQ)M`9%@-FQe}X%J$AO#Ol<{~M-qr#|&6}}Ob>d1Z6m!qV ze}c|kZCZ|%QW&%mljNJQN$(UMVW-VjRdDDk+o*4jdGyf?wT`U0orMUeOL%&akAo9I z@gFpA5~g^K5UqQJ;?*J(WOzI!O*w zfI?-O1g4BTHmzA{3O_$~#os$8=D3a?8F+9{&BDfWW}UHhU*Qpz>j#^^#k8_((RxeA3zHEMujVR3ylPm(_CrRg^7hxrBgRwN;5Ai3wJHpe_a)Gy`jf_JB zFV&kXmHG{L-}|mE>+VuPltDtnx|ixFWPz-gsz7*K&OEVaCXORun~?>-Q;v_wR&PhX z2;<$Ql4~Z(?8nS+elJchTz9h6H7d- zX)p#B)PfDwmU^w%~?aey-&^!TIrR9?<bHY7c7=H^H5$U&3}(y1>Q1c=%$}KtabmAbXcF?|g0I;B3qust^JmOESN`HBY~fG*;8cd?)Wr;$4vulIj^g}((!(vZE!u{B!?KPXq!1sXeL{$T$A@v z5wH3abtgiOoX}O@Ls(?S&s?9w`e%VlZVdhcIKXL&Y~P&N-*}>L{~Y?=IZC=PtF>KD z7?~~1)KJ&OG8Vz|(}mluxblTsSTbzE{qX!TcagQgw(-vp=PBW=Uc zkjfi1bTIn%C_0h`++Ybi+=hL+)i`!c1xUjykSvzifhwN34a?uH%oPFXZh@K&PBH~t zsPA5<>P^dk99?rK*{{j5H-xir`~Hv>)JRz`Dor7m7*G>`w||fLl#5*`*>+j^TTlIo zy@t^1(h{c>Kcnd`ZDA>96w#w0?pI6BCqKdT1H2lZ-xAJKhH2^I=10(+eU zf)R1sIldd@{>MDc47-yD=POEBHODt><-L3ju!WcSK56+=ER4_iw2NLI6^~rGRz0CR z^aWFEJh;eg&@_TTv<7Hlt_J^pWVyhZhvtqU;LZ$}KSY2Q`L$+srFN`w2$EyCFCi{2 z+5BAl{Ct#SngjM}sr7S^j8ih$F}{OK(c`54T)=)5)|SdHNYCbK;LM~gTugqU@5yN} z#bM}Y7<>OmovKN$$R4c|AiaA6f27uH!vyn*5HLf^v?EL3rV;ZfO~gF zn&)S!=mi@Y@XBKubz&!Z7!^?_-?Z=WK*~5Z-}-w&-$F(5I2yvP?O%T9;+*tXjw$a- zt}axUDc<@<{(>^*o^px5_K0H(@kHcwsHiTkK3{F*&pfJHq^J|8ZkG!|TvOzuyFB7} zWhJ$V)c`@Iz_*TZXoW&&2wj4N?g>jJO;mL%!YA+*=W;{U679#5wpWKFHtyPu1IlcTI<9guoO;AvUOSgK)XhU<0o`6}$?N%Vb+uE5Enj zop=JwqadH!G6a4F>aiJ+@_c&u{9uW`^iOAeTz54G-#{y>;-9ldz3enOHYd|8lhz-L zHvURRB7VH&_%WW%^gds6k5W-(<(c|$C9vv|l6T3$Exyv_$4Ur(U>aToehh zAS}>&pn6tz_rkTiIiHqp5FGRb6b-T0iaR}?+UKeS1{9O)BMk3lx%Gik_do|@KD8f2 z2YE+oAM*E%dO71gH)>Pe%|ZsQxU#PmgFj9>T8w@EiMTFs@g`uo_n$T{2-$f)&W zTD;7!SQPV$l~bd%;G-hi8vE=EFgO(`VfevD@tY!nAbQVKWZku4n$imK@@A7Nx|R0k zyR)oY8sTr?&fmw^q<7YBFR|#-ibDeB+bLWDVmoM!=qc=x$}{lc!LCU+HwqmJ zAg*e7q7I2+%G(yx!{P)o9yFng}CY@7j!VU+!`)s6; zw45uAGy)`#!V#!v=`|H3)R#O7ifL_LJ=5!gnL5j1gRjo@Kh2STGvi>b7*$;~H;{Tc zq)`UW53>#5{gFfYQxKb}+^=eaY^5~^iWw*Cr5?Y@RKwfdJmFwKm15(Ig zZG6ACb<2o3fpf!G1<#iPE-*K8XC>DRa}2~&J~c!W zAsVdU;^k*&3Hv|l@Jj}AX9!%I*_j^qa;drq*xu-`6lxWHXj{K}cvHT*0^ZkggMRV+ z#ZPi0z<&xOnzz5S3jP~yu@DVtekSYEk*62HP`+Dm>;C$)%zFHPboL&bXHQVxUyl2u zJV#)2rOSy@$okkj}?FtjKteT_R; zTKG6JDPA8Z00OOD`B|N?2T`*>AoY8#)KB~s4Y~!UGfMe0#?!`Gu?^<9nvx%yK_VXQ z$Tq?ir{ztzPc*}}w*n~5AZ3EIj4)y7COdj@M4Wa~v-bYQN6ULV{%zAdY0w7ak3R%z zZgVT?mEvn~S8K z&hhcCntZD0M=Ve5`X($~UIPYiU%ALW3|LTkC%+qS7_j@Y_ASiR>26PZ^@qnRoHKuAf9R0QSo})RwIO zA5CW+*5v!PagYX;kWzGjFkpnFpvdUj=z(-eI+X5_0@4VK0V2{H9ZGk%C@@O8kpa>r z`R@BWj`vTFgFl`7@9s?=GW|@r4HCet3Ka zx%J^W$C5D$`y%7|IDjb5@S;7&&!IHnvG4hE-rvYkbM^@@Ao9>}-%!?)Af=ObhgqS7+7Fjl z#r~fTsW$$YTMlg2+h!Iw-MMbH2_6JF*Y+sOS#aCB2!4~3t|&OpT371)9Q~TX|J_e< z16LuTIikx=Nwmi!gZOu@$IQW?zLLo7|p>0 zZ9kOqwTAV{p9WkNwU9E2Rf;piE-g;oVeBt4pCk0&Kli&xI-xTSIzIF&BDe}H#cd|e z{Du0=#a&ILP%3^xvb04BeGEW@A<3vEL!74>6iSEOlbgsR`UEf-sc~U7A)pd+8++cp zQMcaCgQI?v<*-FfR)`<3mR6Zv_Ml!5*db}i!cuMBmGwDtW+dqOY`#x3fch#=jRzv2 z`3CplRm%;d)bsl}yUw$Yhn@%X&nY#dn@KiWAuBY37P4$7G*$@9p9!s$XVlN8?5W$) z8UCtsVuUOBa|ou|u9LgEQ<(ZJ(k5wUrm6>)j#O^=^#Y{P&V~6UK6i0?`Xk|#^Bye3 z3d3E>4lLDo5}O4Dcu4R!-+ejz^!CkXw?~HMmya)|8Rr5B6sSMI!Kdk(&<~dIZ;tjS z$BVD^84qeE7D@c&s0Z`#r7l%HIt-P&UTGlIdko&D<L1JX=Eq`;) zr4IS$qV#Y*&3D+_Q_s=_?E824sdF?DR5qaufg4F8u`=0zArMtaR?5w80!-=|TlJFp ze&R}BPN9A7PK2FY5_T_0=0x6MOZb-ujQ5l{vv~R6;Om>2!IYS;Q1h%9PLMz~3MDil zn_-J}xT!fX7lSqaFot#BxUkZ; zTy<@=O`6xkxw_ET4IHInW|9yHd3<&32|9JBS>x;9s1nVcvcIZDn|G_hkOQ6WMbZ| zC0nZIz09?ADqj@Qe!5N6$q_&t9jK=Y8ZfMbb94zaS_zu$Dl6t8Wy4VWvw}l)llj%= z*L7bqoj;@O3?WdXlmzUy@mH~n(^*;w=p`T6Spt@eR{3E>uZ{c{_Y?%;ajv~8Xq9Kj zEC!jS;5nv0|Lq(LdynS*Ni2Gq1Of(QZZ`2PyVlk)<9A(OVQw(v5(Ov?!o~;!9gE!X zAkd{9QZ$MD%$W_gd%4R#z&Y0Mh{A|tXscXB%%Xg`kQ+&})_fss(`kUc$0^K28O$ks z>Gy+^z(1?+prnIqUAq!sFnt6h8EMna$%4rlQ6M;3>d>fHJi)Vr)~(8SFzmc}(}5z2 zP;Pb*=#jKXa!bv3r8w^T|##xF~R!(MWcXL)3e z)TZ`X=2%dj)oVCO{a|DoyWr^LpD9597)1%Wtq{c(5wA$J0j)Ccd~zG82s zb8)bj)ba!}TT1hQ4<0thv3x*P8%9mB1JeYRy=^y&%84`HK0cs|%oejr>1ZC0I4oY& z!waPWVhiXTvRWk|wGV(7^aRU+srQAb#S=0vKz8J2JuA|I#>94|lZkA=_N(K_-MZm! zFqgywI4-SviuPeTY)3@q@_cO~%6?YFH|q4PT*Y^i81&IPAorjD+PLP|ab(jS>4lHd znKJiUqM9S*pav#Re5UGUKCbg3amDNukewxeY7k@L&pd4C4QRl z?$+plh+Du^yZ>Ab%l!qo=Ht2jgo_HA45SIq8?<8ck7az1*E=BSr^1iTO{c9OM*s6c zB@PP1Mm}Kt3*EC>)^;$LL6l0Z;Hhm^qXxy@+a2I+owJN&SJqCtUAtsM7X_D5((cRl z&j7iEyJDz?=X`iBS&hQlwsp`$`{H5l53~*pW{at#RRy_;l5Vl{oZwxr$g45@1XQX4 z6`@A60ZI#|OYP(A4dxyJyQtq>3g~+G2B+ z$(L|*hGR-$1j~`~tKBfI$$GN(@clz!81MU(M6AWFq{rs7U!MWH^?(+Ep@v<>ZQrtO zx-XoIaZmZdB8*JQXu#jTkw!}9sMeLlmV0M9`MPzWhmjMF0L%*k$fc&TD%{ydDY7n? zx{bw|p_f~lamCVYQ%+INBv)QzK6~iO`%X7{S+-kmx|@(qL&GS*mHgT<=MJ zRIe~=)#E40c5ynBiynZDkeylXr?yFoCD?>0z2o+J``r+~oxU_>C?Iv1rLfI#?a#;D zt&9#>ss!;%Io6BNACLhc2gY@D)T$q$m;-5N#>L@E<}3|h(Wko5WAezq!7P#<3M<(q zxQ^}Z(XP&~+g4`#hP+CEfZ~U<*$3*LM~ngsFWkP+!i>Xg9%T*piYv*VTLUm)vb`ougP;; zo^@|8o~FQ&zlPh#@~GaeU2sW)?!EMrJrE*8Rt{fQ{`nfM@BQF9w@;R;WNaf5 z`C?b#TiK|E5nsJQElH?!#ngj+L_oMIC`Bduz8EB1ck}Oyx8N6^V1!}H>a6AVSJ?X$ z$bvSGNuuAJ75T(D0dZV6V(^auCQoK1TlPt#@Xh*ATt5y7C;ay1=0(!GZVo>ZHMCfC zzlfNhV3-2M=L^PLy}(!$r$&;jGjdIBP}EH7$Gno#3%;WYbuP@G(f4!85DFWNM71ht zv{t27WP6kSElww_gbe5wut>nG5n%D%@tcz0)NP2Gr96)Livpp}2361d~Z@cLE6)gXRfm&VsxA`}Bi?P8sVLqf4E2?C1?BhXWH_jg68;(MrQ z%6ius>{0&QozyJq3&FLsw;?vbr3uvmM-JEp?R2IM3PqrQA-k-*(lJotz*j}n@Fsk+ z>&cWgo8L=mjzTe;e;AQ}tNu617d&-U?dtQrMkD4IWhbiMDPM=ETdqzP+CD|r5!X7o3H z0{f=5U$TvUatpLw;%Lt1H>jk$2}t6U8wJ}l79mZ3^L5%_*EzhYFmPg-fU2j`jr)cj zPl|qIx*8$le{wP%m18LF>A;-M$S-sHz>-a-mf&AhcX^UC9=r*41xqdg&OUM>vHOm% zf$|i4i@Fm_jK=e41_Br2%=^r49(}P8n0)kZKui+y4frukB*EknZV3CEYU9ZH!+rO6k`M&c3w6rg;&LW*LqCby_y;j zh$|`DY~XYqo=u2yhK+N8Rg3V9t>;6Ffz;$=3SbRGE}Lz0o9mxiD+?h44QOHt#6f`D zdet4QyW&LX3HFIbpjkkWx`rO_mL6#%!}F=OJJLXHYJfiVWdhdfH~)xgVKwX?+Kl4u z1L*}Wbahyz2K=V-gfFEXwVto_n=(l)nj1;r68$ozla-Sj$UY6#=FHqwB6=?mU7T~h z{F|Qy3rh|R;{aw(nWcSP-=syy%>FBoJvp6qQy8cii)97-z8%1?@ z9oc=$ZBB#SX2&;Aq-T?PO_4r$GC#XD7b2sm!cdcA2n4iLLUU@0t}ZRF=`C7@Rf18S zS*FYqZOkJI^lOX}s1a3Ah0uYZEOe!f<(v~iE`%^mb$bc?UNWjFcRRhUjBgHoDh&)j zZ7rHbafP*s*^hg*?Pk`Uj3i6ILm(Tl!Qn;T;IT{+qqvs`pt`5g-SbpVO$l^o>scDy zn4oJl8;n-_VEWKRM&XI#Au}>VKN1neKx7$@DtaH-KBmlrwBHug;dQDh*9*-z$G7nCUwf5LTuC!3wFn-=aN{{ z)uB0U2e*E(U7g%!5o*g+)QjErfprDu=yh&t?J16R$iV6W!hcc!k}u3SXw{mjt?h-k zt=c-Tle&@PM>fhyP4WCj{~g#P zjN=eJZr?vRsU-pZYkoFd%e!DPZtU)ABD8rx95VZCQm;N{P@b&FZRqpj&%2C%cO)%2 zaRsQtHb^jNG|!|m2dY7Bt`(oo&w&Y09AxLaLf{|6Lylw5vB5t-hOwch8%pg?-nG&XQ{bEdHLQMuuaAZyG#{2GQeY^Q&f>2XI34_R9s;Z%10vcey z!=K9TC!0=hJeT2*&})qacQ`RvOI*Vj=g=NZkGV6v=saz?r)Qxyg2mVTyXI;y%X@6i zS}?;B`I3o;Q6-Vb$7`ow>~)cA$;xnv`=1G_jx?rKK{vmMaT~uB6()Wc2^h(tiL!y$ z_gz(SZoj^qFKLZKa278Gi@;T-y$@JXR4<}FOxBVk$mHxprs}%K8=EGn|yx7e2_Hx!+F1~KT#F*8Ef$Z$^+NvoS zZ|kp$8+>~~E=>Fkh9P=L;o;Smokv!HQ8^Czh;L99Uax0LMD2=Rum8SqVE;z@Og|__ zIRR5h=%_4288eZnl zpjN&siI#~42m(MFy<8Z6s_mih)pQvw5Hl+?Nnz(3bkOX;{eeQtW^JMG;4f<>O} z$3>>~q2y0%kI!Ntf|}>c-*H_ z3imvF`{JOt52Z@6bGQ9SL`&lLs28Q8@LurC5%IyU4DxAqk>Ixt!(?)+|U}F}Q`@V))SDdv_pw_c>_q+IGDUP=lRQI`ogzoGWd%6KtBBP#G&@?g8k zzU6jVi)=he)owe{7C-Ue_=)FEGE=;Q7OVKl1kA8>g}d14Cb|TrOKj3XKubr&e?IPI zz2m#SNz1f^2NQ!b#(+QsVyS$H8-{nOI=M0GcwI`a?E~kd0$GNo;)G4AZ*OHn^h!kO zU)t!0Ffjf`J^j8TWCH_Plz_agl*_xvz#QLMjHQP;u}RXI(6~Kgg5lHLyZBfpPL
JYXvD3Z&qd?P)O_@Hb z`?I9yzr!f|wj1dC`2bv(gpABcp&#Hk-n2;0#*Y~T*=)+8^||mH5z^LPpE z$5*Y5g|&s{0@_j_=0D1%eclSx5pTa+jrrL+8%%S*L_x63wb20tNo zzR8^kgvt9__6ThJVe}(b&2RfC(?E24@`k;^?W^?EIHc7NKnuH5rWlj>6-NDZV(YFF zS6cE?Jy0CO>C5wp&nO=XE&jy`1U;FQ8T0irxP$V!WU*C<`E#p^LUnh}Zbv8o!$_E8 zP1ArDsvnc5W6!T_x(TH{SE!kcV`BPEb8(EzTcc#ILa(e?{TZ9r z_1#Nz{Sh2=q*Asr2=Clo!R}w42e*Zwo|0spz&)i>DEPyBgc_-%Gw%%^3$dtVKc?zT5Q^n*)bzb&uSSdXweA1 zO^Wk<2>fd%pqQ^p_O0!&Ueu~ks})P*hr>aDwkM+7C8>U19+U)T6803;KQINZx~o=f%3v_bS~^ zXksbcqj%Z!)F@5Hr(tRRESf$ma4()%6?EJ;cY~>1F%Y`=B-48Dx5ZkQ2&bCY%D29B zK<@Uz_BasJTcP)4j=L|riY^xrk^%@R2ef_j0Q!7Tj(0M^fzMRFK;0NL7$(%>@fG@9 zBk6y~@!dAV9V*5M*74OtL`)w;&3<#C7GzaCOFuQ(hc8(5MB~lcCx%u393M%1IA0jR zkk8#u{pDn?IL`dCJPlJfHQ7z+EFuYW_x!VdeNyo*sZF|Yd-UO%R%V19&YZHPs0>cW z`IBGyI|v+I{~hn&y|M7EpWsx5hZEvuWIKh826~e@o2*D+y8LbV5++ZE#2k?yv)7ki z4Bew#vCi(1m@;mp%kD`fAtA{s@{q*tF$)<7c?_@&a!w|(E(#-#CBAN?6yw$ThKv5= zB_JA&Q6YN_ZmhfuC9Ceu`s%0%1U|qA3S*O(=v`ry^r;vA9T_(%(Sxr`^smdiE%dep z`S^+$<^s(N&5ZY`##6%+`&R`{NN2W;iOt{Re%8(D?wvR!A*qn4U+)$no0~fHzV6^p z0I<-y51DV~z->9$)k4fG6qj`w+k1b>bs;X`qDG@4yosj+3460_aeJXD0;6o|tv+_? zJ8pjp-08@nS?9-T)`UYwZt^@6;Jhsti&Fh$ui=}HJe3?Or_h}rH67xFNA{(LtXW|q zguPD0RE9a)e+yB;xx`Y0nEHLcSz8my2iM2M?3rDWsPhM!QcGhJt6y=cY0bZ-S>-Vy z+%no5fya`hn@H^K>y6^pe@9Pp&ebP>(R?1{wfN4EM3{Z-q9!xXq7py5Lk?94=XX}j z=1e-Nr&Pfk&(t&U!-+bYTAvn2zx*b(FM|%NIH?az(7~(Mv*DrU=%vBQ+;3V%*dXC0 zS5QG4;a{K`k}*jq_zs_|^x{iXFk)%*!>hG7Dgfo+o83RLGBgPVlE3*cd1aNO7V!TD zWlK6=xZg4rfmZt-4#;plZU-EWptYc~e0^~v8SxwP(z(B!YQJM0Rqr((xw^k|iSJKF zhflH0Ueyi>a%HE+8Vg{tYsR6TU;)^poNpiq1Y{A4>J&E7rox@uC&UHEcUm|{xaXgV z`_=@kh|(rgng_|_xGzK*LDz*o?OC_YH3c?c6ccpS5;KT-s zB3cTz8GD9*6WJww8ZQt_5~`15?DS?RG6IVy{nsF{c&{#|MV}t(EBtG0aXvZl@2WxDW8x-^*+bPb~oAI zS-a4B`)S5~!SVMJk-r}<`2vv{4+XeTyXWUBQ4--XVxE*0gIHj?u0?trE-^GuMav6< z+eQE7Y7<#`Eus|fHCax)%98-ww1);b#uUd~)g*ua19HD)ak#N53^(PY-8_>#ZnRgj+hh#CX>Pj6fZtd zV;j)b_~?s-&3(~7$G?i4zPSIrit)uO@mkoROp;|E&cURHDGz@_6idg7?GT9sk0%${ zgwetzOK;mR#4#<8(OQsbr6^NaGe5o`{Nyk$V^B0>>gAYdY4c%r-!`otua80+2`?|R zV(j2lZy?Fk26;jnJA)5BPYL7*D)AGnBGl&C; z>Y4DWf+@hFNP_vw$$tLY_WK_=9R78B!`(MzY1Q|PNr-b#%eY!YVZaKY3=KfkJ@y$tr?oDBONiSfJB zy}E^$bKEzl3*Y>+oY0u;^waYhHo1z`ml?~uRnv5qJJbxX;Ujb)cUIJalv%eA2gz{) zX`i8}kK)@DU*bN=3@~o^+$Rzm3Z9?!I9bBsI(9ZB0vi_YCJ`yiLK1bMxe?g~5$(Bv zKSg?r^2;YE#0jlDXm$fS+m&oFZwG_PjX~9nC1e+sTY9g1zmV^ zHBMqGTlbpiQ0w_c+qUKo5mMF0RZ0A}~0s8sd{CVM0TT*{$ zWwNqUE7ErDb~jmDk~DU5=HN8$kb+XVPZk$12r*a>(^39D2HlE}l2F#71~08B%)2`G zC4fKz$38L2CjvKB(iZzgwI72ncby#_JFG0y55GeNYZX6jFt_Gw6dZ22-SdX;_{SVg z!yz0__%exq^Lx7X!QUtRFvPQ>pHg$tCLWyYJqQrQtMz$bl6nrc7q>a9_(bS~V;m8C z#S!`2GChc_BXL38kkW4-GEuK`%FEyc6N*o{q1eZf5gCqB!Zmk3pbkHj!frg6VQy4T zf0MJb{_1ZCQmwcuPYVaj90}voVA^gT_6)~l5LyXeu>2b=6@MDKI$^NEx%LI0w_Csk z%9vn{omGuSMdC^Hn3K0(r;=zeC?CC&q&` z(gnLITC8k!vI|bE)BdkbuU-K$XLXVs0TsJH8h>{0^~vUz4(D;-7*SIW(ka!c3r$bT zTrstJMDN$KU}X^?w5bEce4D=UZpH_H{n@(^YXm7R+-NLNKaz{zCs8|R$OP2iOAgMk z z@S!3VR_ zJotz~1NLjmb!$Ki3Li5VFCAXJ#696R^vZg{AqVXLMCgDnf%RKzCMEVkG;NO?T$_)gT{UTshlLIZV$u2xFmM#aJ%ga-n7m;O|QcJV~ z=JD}YMl|SZf}8@RFJf&8H~OhjhvG-U8s+$<=}Ct+Jz0QxG91`(ee;@D#k*$^Q9)I# z;vJG?Gml>dV^Z2=ugCC#6DqHyz~3acAJten6GS_|!&?r{spkI#v?h^F58qbNM+G3K z@Yi>QWCG^*@xQ;6YSfReJL?b)!9e_$vKpN@qh(A+oUg+cy^&2{mufx6KS4R}b4blks6uujS)Sva)^IiqyG(~Yl6*VS2G~AM6y*MPT|QbGs8u9U z?|9H$m-6e%UPxO~>7QXM4JbM6Pixs1gFVRUtHLC@7ku8(P-zfuGw~ycy!mNfPbf48s*!Lu5e=OEe+#cW83Tg9;fwBVO7d$$?Nr6!RAh6(UW%g&% zd+-0o{!%5&<>@*UotNb_Ch3+WZAPn0T`Ps6x=;9w?1SH4$!!7jjp8x+%jab9VlqMn ziT7%lrZSASA_wY_Y@w*fEcN{8JDM3RlBfIx$=2y7bf!Sd1<4~p# zce5G+cUBSapKAO2k*A{oQ%@^=)Pjjwm0}@@8mB#pRKDGD1Q9|m5NC)nWl*Z(znhI}(ryD3s(%Cay)m z*e}Z<8;1Qv=nA`tM`sYOxQ5RRel?BHtjAy1qZ)+<%)6Y_KfYaRQ57!m_+B{4T2xL^ z^QU7geQKM^Cv;taVHwWV_Aa1)AqD~s>Y7@0GX*yq!2*dKmEKV#U>{|#pE(hstE0GO zp=K^8?Td%mv)4LCQ^jfdbtX=U3CEx_SrisPkVUtW>Q8fPc$X7lqw~XA4-QA^+vAVV z1Poa)&W*lb$3C56*f0^1dyt))lUc7I z0}$^krG&B{NYBr@MW?}hRiFMl$^Wh*=|I#U1lN4 zxra*-hNTNb5|s4KbaC=@D+0|0`kt+Fc$n@Aqx-X5er#~_%zyLB-*#S?4MZZ9+1|sI zBagQ`XTH>0o%{*m#z^|ZtYoQ)u4^pH*v$NO(>{f$LgVX@Y(TDZ1M9>LXfn;q95{>j zWRaB7#L$6|4e6Ku98)N9w6iJWG>1vk^F^PX43{gR2B3{wj-F826#GW_90>gDp6@Kod!_FXb4RbL+O?et zJ4F^>8X*gfm)<}v+N{BzQ&4&<1Jd|3lwS)XY;2yH2G>Y@)+gnRc76<}I#}~>{wK%%C&FwfM#;(9}Z6d01nB}uQYhx2Zeb3BBvuLX<0(!Zmz>=^Wa& ziB{B%H`&Lp+M7|o@Dwe4M?@K;Odao6-NV#mJQ2k5zA1}E_hqlevLN5ZGwnym4$>@l zK^b_h`Q{w4~MV)upNwLYMdJ%LduK||<^!}8qTyjqR< zLco)Qlg(uOCr+E1y#WBm{}B~*{D=|u6qw~~F3`s7j~?Vb2g~i3IQHnaG6|lSK=JVU zm)Z+#umt2d<4KNz-P_gB%t<}C!h zORCjz!{rN-5DJDUUPs*3
-3kll{Y`OBW+mkMW9#vI*cXMB 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 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/currency3.png b/app/src/main/res/drawable/currency3.png new file mode 100644 index 0000000000000000000000000000000000000000..c517578807d37f625973be6933e05b6c35c7bd8e GIT binary patch literal 50694 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 D(6?p8 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/currency4.png b/app/src/main/res/drawable/currency4.png new file mode 100644 index 0000000000000000000000000000000000000000..9a39d5651d54d46f8dce625e02e633e087ebf6fd GIT binary patch literal 41017 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 b3r^MBqW!3S&xGMrlm~I!Nc+RB2ciE19VHCG literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/dapps0.png b/app/src/main/res/drawable/dapps0.png new file mode 100644 index 0000000000000000000000000000000000000000..846c417a6d5db188eaa26a0d0c45fa5ed2e38df1 GIT binary patch literal 35960 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 N002ovPDHLkV1lRKQ?md7 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/dapps1.png b/app/src/main/res/drawable/dapps1.png new file mode 100644 index 0000000000000000000000000000000000000000..b18d362ac7d99d37ef06d48d64f7a13918120585 GIT binary patch literal 38699 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

G?DlQ8h9v^y9R`=Y*{(Sj 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 b5aJ&#t}D-TjFUEn!>;Z2I~kR9uY~^t?hVX5 literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/dapps2.png b/app/src/main/res/drawable/dapps2.png new file mode 100644 index 0000000000000000000000000000000000000000..549a45e403429ef853c6dd3a5d4f5fbdb97a08e7 GIT binary patch literal 41074 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�WxPp44=eAR;x+v8^s@7M{l}|{T-;ni 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 U-$Zf9L)fp=#^*@ohE6g62l6N1&j0`b literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/dapps3.png b/app/src/main/res/drawable/dapps3.png new file mode 100644 index 0000000000000000000000000000000000000000..ebe35565cfa173cb0dc7c31eea802c9059d68b25 GIT binary patch literal 43259 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 EAI8^tfB*mh literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/dapps4.png b/app/src/main/res/drawable/dapps4.png new file mode 100644 index 0000000000000000000000000000000000000000..046e96eefae6bde86dce7f7498d360ff66838e77 GIT binary patch literal 38143 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 I+%f!r0b?%jO8@`> literal 0 HcmV?d00001 diff --git a/app/src/main/res/drawable/dapps5.png b/app/src/main/res/drawable/dapps5.png new file mode 100644 index 0000000000000000000000000000000000000000..dc5d2271e108e133d9bfa9280aeff37691b2f8b5 GIT binary patch literal 38203 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 literal 0 HcmV?d00001 From 4356cce18aa2c253122d987a282fa9444fe7d238 Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 8 Jun 2022 16:12:43 +0300 Subject: [PATCH 006/177] Updated on 2026-08-14 --- .../views => common/compose}/AutoSizeText.kt | 2 +- .../compose/extensions}/AnimatedValue.kt | 7 +- .../tap/common/compose/extensions/Dp.kt | 7 +- .../common/compose/extensions/ImageBitmap.kt | 19 +++++ .../tap/common/compose/extensions/Painter.kt | 24 ++++++ .../compose/{uiTools => }/StoriesAnimtion.kt | 80 +++++++------------ .../compose/{uiTools => }/StoriesPreviews.kt | 3 +- .../features/home/compose/content/Content.kt | 6 +- .../compose/content/CurrenciesWeb3Content.kt | 37 +++------ .../compose/content/FirstStoriesContent.kt | 17 ++-- .../compose/content/FloatingCardsContent.kt | 10 +-- 11 files changed, 109 insertions(+), 103 deletions(-) rename app/src/main/java/com/tangem/tap/{features/home/compose/views => common/compose}/AutoSizeText.kt (97%) rename app/src/main/java/com/tangem/tap/{features/home/compose/uiTools => common/compose/extensions}/AnimatedValue.kt (91%) create mode 100644 app/src/main/java/com/tangem/tap/common/compose/extensions/ImageBitmap.kt create mode 100644 app/src/main/java/com/tangem/tap/common/compose/extensions/Painter.kt rename app/src/main/java/com/tangem/tap/features/home/compose/{uiTools => }/StoriesAnimtion.kt (68%) rename app/src/main/java/com/tangem/tap/features/home/compose/{uiTools => }/StoriesPreviews.kt (88%) diff --git a/app/src/main/java/com/tangem/tap/features/home/compose/views/AutoSizeText.kt b/app/src/main/java/com/tangem/tap/common/compose/AutoSizeText.kt similarity index 97% rename from app/src/main/java/com/tangem/tap/features/home/compose/views/AutoSizeText.kt rename to app/src/main/java/com/tangem/tap/common/compose/AutoSizeText.kt index f930160da5..324fd3877e 100644 --- a/app/src/main/java/com/tangem/tap/features/home/compose/views/AutoSizeText.kt +++ b/app/src/main/java/com/tangem/tap/common/compose/AutoSizeText.kt @@ -1,4 +1,4 @@ -package com.tangem.tap.features.home.compose.views +package com.tangem.tap.common.compose import androidx.compose.material.LocalTextStyle import androidx.compose.material.Text diff --git a/app/src/main/java/com/tangem/tap/features/home/compose/uiTools/AnimatedValue.kt b/app/src/main/java/com/tangem/tap/common/compose/extensions/AnimatedValue.kt similarity index 91% rename from app/src/main/java/com/tangem/tap/features/home/compose/uiTools/AnimatedValue.kt rename to app/src/main/java/com/tangem/tap/common/compose/extensions/AnimatedValue.kt index d8afd02e6f..1952c6a058 100644 --- a/app/src/main/java/com/tangem/tap/features/home/compose/uiTools/AnimatedValue.kt +++ b/app/src/main/java/com/tangem/tap/common/compose/extensions/AnimatedValue.kt @@ -1,10 +1,13 @@ -package com.tangem.tap.features.home.compose.uiTools +package com.tangem.tap.common.compose.extensions import androidx.compose.animation.core.* import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.remember +/** +[REDACTED_AUTHOR] + */ typealias AnimatedValue = Pair @Composable @@ -24,8 +27,8 @@ fun AnimatedValue.toAnimatable( @Composable fun animatable( values: AnimatedValue, - isPaused: Boolean, duration: Int, + isPaused: Boolean = false, easing: Easing = LinearEasing, ): Animatable { val animatable = remember { Animatable(values.first) } diff --git a/app/src/main/java/com/tangem/tap/common/compose/extensions/Dp.kt b/app/src/main/java/com/tangem/tap/common/compose/extensions/Dp.kt index 3ba4555c3f..42acdcf306 100644 --- a/app/src/main/java/com/tangem/tap/common/compose/extensions/Dp.kt +++ b/app/src/main/java/com/tangem/tap/common/compose/extensions/Dp.kt @@ -3,6 +3,7 @@ package com.tangem.tap.common.compose.extensions import androidx.compose.runtime.Composable import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.DpSize /** [REDACTED_AUTHOR] @@ -11,4 +12,8 @@ import androidx.compose.ui.unit.Dp fun Dp.toPx(): Float { val currentDp = this return with(LocalDensity.current) { currentDp.toPx() } -} \ No newline at end of file +} + +fun DpSize.halfWidth(): Dp = this.width / 2 + +fun DpSize.halfHeight(): Dp = this.height / 2 \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/common/compose/extensions/ImageBitmap.kt b/app/src/main/java/com/tangem/tap/common/compose/extensions/ImageBitmap.kt new file mode 100644 index 0000000000..1692b4c51f --- /dev/null +++ b/app/src/main/java/com/tangem/tap/common/compose/extensions/ImageBitmap.kt @@ -0,0 +1,19 @@ +package com.tangem.tap.common.compose.extensions + +import androidx.annotation.DrawableRes +import androidx.appcompat.content.res.AppCompatResources +import androidx.compose.runtime.Composable +import androidx.compose.ui.graphics.ImageBitmap +import androidx.compose.ui.graphics.asImageBitmap +import androidx.compose.ui.platform.LocalContext +import androidx.core.graphics.drawable.toBitmap + +/** +[REDACTED_AUTHOR] + */ +@Composable +fun asImageBitmap(@DrawableRes drawableId: Int): ImageBitmap { + val drawable = AppCompatResources.getDrawable(LocalContext.current, drawableId) + ?: throw NullPointerException() + return drawable.toBitmap().asImageBitmap() +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/common/compose/extensions/Painter.kt b/app/src/main/java/com/tangem/tap/common/compose/extensions/Painter.kt new file mode 100644 index 0000000000..fa91934a30 --- /dev/null +++ b/app/src/main/java/com/tangem/tap/common/compose/extensions/Painter.kt @@ -0,0 +1,24 @@ +package com.tangem.tap.common.compose.extensions + +import androidx.compose.runtime.Composable +import androidx.compose.ui.graphics.painter.Painter +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.unit.DpSize +import androidx.compose.ui.unit.dp +import com.tangem.tangem_sdk_new.extensions.dpToPx +import com.tangem.tangem_sdk_new.extensions.pxToDp + +/** +[REDACTED_AUTHOR] + */ +@Composable +fun Painter.dpSize(): DpSize = DpSize( + intrinsicSize.width.pxToDp().dp, + intrinsicSize.height.pxToDp().dp, +) + +@Composable +private fun Float.dpToPx(): Float = LocalContext.current.dpToPx(this) + +@Composable +private fun Float.pxToDp(): Float = LocalContext.current.pxToDp(this) \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/home/compose/uiTools/StoriesAnimtion.kt b/app/src/main/java/com/tangem/tap/features/home/compose/StoriesAnimtion.kt similarity index 68% rename from app/src/main/java/com/tangem/tap/features/home/compose/uiTools/StoriesAnimtion.kt rename to app/src/main/java/com/tangem/tap/features/home/compose/StoriesAnimtion.kt index a5d596c425..3b758f48ab 100644 --- a/app/src/main/java/com/tangem/tap/features/home/compose/uiTools/StoriesAnimtion.kt +++ b/app/src/main/java/com/tangem/tap/features/home/compose/StoriesAnimtion.kt @@ -1,11 +1,8 @@ -package com.tangem.tap.features.home.compose.uiTools +package com.tangem.tap.features.home.compose -import androidx.annotation.DrawableRes -import androidx.appcompat.content.res.AppCompatResources import androidx.compose.animation.core.* import androidx.compose.foundation.Image import androidx.compose.foundation.layout.absoluteOffset -import androidx.compose.foundation.layout.offset import androidx.compose.foundation.layout.requiredHeight import androidx.compose.foundation.layout.requiredWidth import androidx.compose.runtime.Composable @@ -16,16 +13,14 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.alpha import androidx.compose.ui.draw.scale -import androidx.compose.ui.graphics.ImageBitmap -import androidx.compose.ui.graphics.asImageBitmap +import androidx.compose.ui.graphics.graphicsLayer import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.layout.ContentScale -import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.DpSize -import androidx.compose.ui.unit.IntOffset import androidx.compose.ui.unit.dp -import androidx.core.graphics.drawable.toBitmap +import com.tangem.tap.common.compose.extensions.AnimatedValue +import com.tangem.tap.common.compose.extensions.toAnimatable @Composable fun HorizontalSlidingImage( @@ -37,32 +32,20 @@ fun HorizontalSlidingImage( targetOffset: Float, contentDescription: String, ) { - val offsetX = remember { Animatable(startOffset * -1f) } + val translateX = AnimatedValue(startOffset * -1f, (startOffset + targetOffset) * -1f) Image( modifier = Modifier - .offset { IntOffset(offsetX.value.toInt(), 0) } .requiredWidth(itemSize.width) - .requiredHeight(itemSize.height), + .requiredHeight(itemSize.height) + .graphicsLayer( + translationX = translateX.toAnimatable(isPaused = paused, duration = duration).value + ), alignment = Alignment.TopStart, contentScale = ContentScale.FillBounds, painter = painter, contentDescription = contentDescription, ) - - LaunchedEffect(paused) { - if (paused) { - offsetX.stop() - } else { - offsetX.animateTo( - targetValue = (startOffset + targetOffset) * -1f, - animationSpec = tween( - durationMillis = duration, - easing = LinearEasing, - ), - ) - } - } } @Composable @@ -109,7 +92,7 @@ fun StoriesTextAnimation( @Composable fun StoriesBottomImageAnimation( - initialScale: Float = 2f, + initialScale: Float = 2.5f, firstStepDuration: Int, totalDuration: Int, content: @Composable (Modifier) -> Unit @@ -120,18 +103,10 @@ fun StoriesBottomImageAnimation( val isFirstStepLaunched = remember { mutableStateOf(false) } val isSecondStepLaunched = remember { mutableStateOf(false) } - val firstTransition = updateTransition(targetState = isFirstStepLaunched.value, label = "Bottom image animation") - val secondTransition = updateTransition(targetState = isSecondStepLaunched.value, label = "Bottom image animation") - - val fadeIn = firstTransition.animateFloat( - transitionSpec = { - tween( - durationMillis = 400, - ) - }, - label = "Fade in animation" - ) { value -> if (value) 1f else 0f } - + val firstTransition = updateTransition( + targetState = isFirstStepLaunched.value, + label = "Image appearing" + ) val firstScaleStep = firstTransition.animateFloat( transitionSpec = { tween( @@ -139,10 +114,13 @@ fun StoriesBottomImageAnimation( easing = FastOutLinearInEasing, ) }, - label = "Scale" + label = "Appearing scale" ) { value -> if (value) scaleSwitchBarrier else initialScale } - + val secondTransition = updateTransition( + targetState = isSecondStepLaunched.value, + label = "Image slow outgoing" + ) val secondScaleStep = secondTransition.animateFloat( transitionSpec = { tween( @@ -150,10 +128,17 @@ fun StoriesBottomImageAnimation( easing = LinearEasing, ) }, - label = "Scale" + label = "Outgoing scale" ) { value -> if (value) 1f else scaleSwitchBarrier } - if (firstScaleStep.value == scaleSwitchBarrier) isSecondStepLaunched.value = true + val fadeIn = firstTransition.animateFloat( + transitionSpec = { tween(durationMillis = 400) }, + label = "Fade in on start" + ) { value -> if (value) 1f else 0f } + + if (firstScaleStep.value == scaleSwitchBarrier) { + isSecondStepLaunched.value = true + } val modifier = if (!isSecondStepLaunched.value) { Modifier.scale(firstScaleStep.value) @@ -164,11 +149,4 @@ fun StoriesBottomImageAnimation( content(modifier) LaunchedEffect(Unit) { isFirstStepLaunched.value = true } -} - -@Composable -fun asImageBitmap(@DrawableRes drawableId: Int): ImageBitmap { - val drawable = AppCompatResources.getDrawable(LocalContext.current, drawableId) - ?: throw NullPointerException() - return drawable.toBitmap().asImageBitmap() -} +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/home/compose/uiTools/StoriesPreviews.kt b/app/src/main/java/com/tangem/tap/features/home/compose/StoriesPreviews.kt similarity index 88% rename from app/src/main/java/com/tangem/tap/features/home/compose/uiTools/StoriesPreviews.kt rename to app/src/main/java/com/tangem/tap/features/home/compose/StoriesPreviews.kt index a09559cbf4..78fb897b55 100644 --- a/app/src/main/java/com/tangem/tap/features/home/compose/uiTools/StoriesPreviews.kt +++ b/app/src/main/java/com/tangem/tap/features/home/compose/StoriesPreviews.kt @@ -1,8 +1,7 @@ -package com.tangem.tap.features.home.compose.uiTools +package com.tangem.tap.features.home.compose import androidx.compose.runtime.Composable import androidx.compose.ui.tooling.preview.Preview -import com.tangem.tap.features.home.compose.StoriesScreen import com.tangem.tap.features.home.compose.content.* /** diff --git a/app/src/main/java/com/tangem/tap/features/home/compose/content/Content.kt b/app/src/main/java/com/tangem/tap/features/home/compose/content/Content.kt index d7f5443f6e..bed6eccb4b 100644 --- a/app/src/main/java/com/tangem/tap/features/home/compose/content/Content.kt +++ b/app/src/main/java/com/tangem/tap/features/home/compose/content/Content.kt @@ -26,8 +26,8 @@ import com.tangem.tangem_sdk_new.extensions.dpToPx import com.tangem.tap.common.compose.SpacerH import com.tangem.tap.common.compose.SpacerH16 import com.tangem.tap.common.compose.extensions.toAndroidGraphicsColor -import com.tangem.tap.features.home.compose.uiTools.StoriesBottomImageAnimation -import com.tangem.tap.features.home.compose.uiTools.StoriesTextAnimation +import com.tangem.tap.features.home.compose.StoriesBottomImageAnimation +import com.tangem.tap.features.home.compose.StoriesTextAnimation import com.tangem.wallet.R @Composable @@ -237,7 +237,7 @@ private fun HtmlText( } @Composable -fun StoriesImage( +private fun StoriesImage( modifier: Modifier = Modifier, @DrawableRes drawableResId: Int, isDarkBackground: Boolean, diff --git a/app/src/main/java/com/tangem/tap/features/home/compose/content/CurrenciesWeb3Content.kt b/app/src/main/java/com/tangem/tap/features/home/compose/content/CurrenciesWeb3Content.kt index 480a2a23e2..198e71d324 100644 --- a/app/src/main/java/com/tangem/tap/features/home/compose/content/CurrenciesWeb3Content.kt +++ b/app/src/main/java/com/tangem/tap/features/home/compose/content/CurrenciesWeb3Content.kt @@ -11,19 +11,17 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Brush import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.graphicsLayer -import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.platform.LocalConfiguration -import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.painterResource import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.DpSize import androidx.compose.ui.unit.dp -import com.tangem.tangem_sdk_new.extensions.dpToPx -import com.tangem.tangem_sdk_new.extensions.pxToDp import com.tangem.tap.common.compose.SpacerH +import com.tangem.tap.common.compose.extensions.dpSize +import com.tangem.tap.common.compose.extensions.halfHeight import com.tangem.tap.common.compose.extensions.toPx import com.tangem.tap.common.extensions.isEven -import com.tangem.tap.features.home.compose.uiTools.HorizontalSlidingImage +import com.tangem.tap.features.home.compose.HorizontalSlidingImage import com.tangem.wallet.R @Composable @@ -89,7 +87,7 @@ fun StoriesWeb3Content( } val screenWidth = LocalConfiguration.current.screenWidthDp.dp val decreaseRate = remember { 1f / dappsItemList.size } - val designItemHeight = 50.dp + val designItemHeight = 75.dp LightenBox { Column(modifier = Modifier.graphicsLayer(clip = false)) { @@ -101,7 +99,7 @@ fun StoriesWeb3Content( val chessOffset = if (index.isEven()) 0.dp else scaledItemSize.width / 3 val animateFrom = chessOffset - moveItemToStartOfScreen - val animateTo = 90.dp - (90.dp * index * decreaseRate) + val animateTo = 70.dp - (70.dp * index * decreaseRate) HorizontalSlidingImage( paused = paused, @@ -112,7 +110,6 @@ fun StoriesWeb3Content( targetOffset = animateTo.toPx(), contentDescription = "Web3 row", ) - SpacerH(14.dp) } } @@ -126,11 +123,13 @@ private fun LightenBox(content: @Composable () -> Unit) { Box( modifier = Modifier .fillMaxSize() - .padding(top = 170.dp) + .padding(top = 250.dp) .background( brush = Brush.verticalGradient( colors = listOf( - Color.White.copy(alpha = 0.3f), + Color.White.copy(alpha = 0f), + Color.White.copy(alpha = 0.75f), + Color.White.copy(alpha = 0.95f), Color.White ) ) @@ -139,23 +138,7 @@ private fun LightenBox(content: @Composable () -> Unit) { } } -@Composable -private fun Painter.dpSize(): DpSize = DpSize( - intrinsicSize.width.pxToDp().dp, - intrinsicSize.height.pxToDp().dp, -) - -@Composable -private fun Float.dpToPx(): Float = LocalContext.current.dpToPx(this) - -@Composable -private fun Float.pxToDp(): Float = LocalContext.current.pxToDp(this) - private fun scaleToDesignSize(itemSize: DpSize, designItemHeight: Dp): DpSize { val scaleRate = itemSize.height / designItemHeight return itemSize / scaleRate -} - -private fun DpSize.halfWidth(): Dp = this.width / 2 - -private fun DpSize.halfHeight(): Dp = this.height / 2 \ No newline at end of file +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/home/compose/content/FirstStoriesContent.kt b/app/src/main/java/com/tangem/tap/features/home/compose/content/FirstStoriesContent.kt index af7e3d586a..95a152cc8d 100644 --- a/app/src/main/java/com/tangem/tap/features/home/compose/content/FirstStoriesContent.kt +++ b/app/src/main/java/com/tangem/tap/features/home/compose/content/FirstStoriesContent.kt @@ -19,10 +19,10 @@ import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import com.tangem.tap.features.home.compose.uiTools.StoriesBottomImageAnimation -import com.tangem.tap.features.home.compose.uiTools.StoriesTextAnimation -import com.tangem.tap.features.home.compose.views.FontSizeRange -import com.tangem.tap.features.home.compose.views.TextAutoSize +import com.tangem.tap.common.compose.FontSizeRange +import com.tangem.tap.common.compose.TextAutoSize +import com.tangem.tap.features.home.compose.StoriesBottomImageAnimation +import com.tangem.tap.features.home.compose.StoriesTextAnimation import com.tangem.wallet.R @Composable @@ -113,7 +113,7 @@ fun FirstStoriesContent( ) { StoriesBottomImageAnimation( totalDuration = duration, - firstStepDuration = 500, + firstStepDuration = 400, ) { modifier -> Image( modifier = modifier.fillMaxWidth(), @@ -128,7 +128,7 @@ fun FirstStoriesContent( } } -enum class StartingScreenState { +private enum class StartingScreenState { INIT, BUY, STORE, SEND, PAY, EXCHANGE, BORROW, LEND, SHOW_CARD, MEET_TANGEM } @@ -151,11 +151,6 @@ private fun MutableState.isSplashingTextDisplaying(): Boole this.value != StartingScreenState.SHOW_CARD } -private fun MutableState.isTangemCardDisplaying(): Boolean { - return this.value == StartingScreenState.SHOW_CARD || - this.value == StartingScreenState.MEET_TANGEM -} - private fun MutableState.isMeetTangemDisplaying(): Boolean { return this.value == StartingScreenState.MEET_TANGEM } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/home/compose/content/FloatingCardsContent.kt b/app/src/main/java/com/tangem/tap/features/home/compose/content/FloatingCardsContent.kt index 221f3329ca..dee8816ef9 100644 --- a/app/src/main/java/com/tangem/tap/features/home/compose/content/FloatingCardsContent.kt +++ b/app/src/main/java/com/tangem/tap/features/home/compose/content/FloatingCardsContent.kt @@ -6,9 +6,9 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.ImageBitmap import androidx.compose.ui.graphics.graphicsLayer -import com.tangem.tap.features.home.compose.uiTools.AnimatedValue -import com.tangem.tap.features.home.compose.uiTools.asImageBitmap -import com.tangem.tap.features.home.compose.uiTools.toAnimatable +import com.tangem.tap.common.compose.extensions.AnimatedValue +import com.tangem.tap.common.compose.extensions.asImageBitmap +import com.tangem.tap.common.compose.extensions.toAnimatable import com.tangem.wallet.R /** @@ -84,7 +84,7 @@ private class FloatingCard { fun second(): CardValues = CardValues( translateX = 350f to 300f, - translateY = 0f to 50f, + translateY = -70f to 0f, rotationX = 30f to 48f, rotationY = 0f to 5f, rotationZ = -34f to -42f, @@ -97,7 +97,7 @@ private class FloatingCard { rotationX = 0f to 3f, rotationY = 10f to 10f, rotationZ = -45f to -30f, - scale = 0.6f to 0.7f, + scale = 0.6f to 0.75f, ) } } \ No newline at end of file From 080e79aab4f752e86d01e472ead99acba62a9ca6 Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 8 Jun 2022 16:13:12 +0300 Subject: [PATCH 007/177] Updated on 2026-08-14 --- app/src/main/res/drawable/dapps0.png | Bin 35960 -> 28793 bytes app/src/main/res/drawable/dapps1.png | Bin 38699 -> 31055 bytes app/src/main/res/drawable/dapps2.png | Bin 41074 -> 34938 bytes app/src/main/res/drawable/dapps3.png | Bin 43259 -> 32993 bytes app/src/main/res/drawable/dapps4.png | Bin 38143 -> 28483 bytes app/src/main/res/drawable/dapps5.png | Bin 38203 -> 19565 bytes 6 files changed, 0 insertions(+), 0 deletions(-) diff --git a/app/src/main/res/drawable/dapps0.png b/app/src/main/res/drawable/dapps0.png index 846c417a6d5db188eaa26a0d0c45fa5ed2e38df1..6152b1215b4d3702168b2cfef1357873499a9d10 100644 GIT binary patch literal 28793 zcmb^Xby!s27dH&kEigEA9}tEPm2Mb1hHj7+X{4o_AqNQ&lon~}l#T%rP)R9;K@gDc znrFVh=YH?&{pbDfJ=a`w?Oglp&sux!b=F!*FkQ6=Bn%{2SXd7<)Kv_yu*l$8SlHA= zxR@3kJk};mMa$L5%+E|mTgt)9L(tCA%ic*a$io}ckA)>8ALMQ4;O6AVX7A+U>M08x zboByku8y*R=~EqH9dBi)=dS7@zD|ZAx<(EmZVr-;fV>=uOpp|YfQOTx9b1rxyXQ-( zAX(slbfqxm|C)sWw*L+BbCU%W|67pFOb5oM?B(mk_EbU;!pSP5dP+(x7 zVBljxFJBiS5lKl&Az@J=QBeWR2!WTuo_=;g0-i59{v+}K(ok`F>EP???dR&{$@U*j zJ9{sGKUn|}`fm}T|Fa5adqV$rf0)YuMaan$1B)+a{{qS?Z5ZtEToiQ_v9KD_NpJ1& zF?H;h25L%Jb(2hgv9NHlVA@8|{}BHF({pigaeI4vcXx;RzrVl7{GXhhVye4)|1jm& zwzjI;+RMw!^YioT>uY&=c}&5^_E}n5T5VljfB(Sr^z{1rx}cD7T6zX%!1ng`$;rv@ z-@gwI4sLF4j*gCujE&>s6VA@gY;A4P|9h5~mxF?W>gwt|JUlQB*aW2LB`mDyKUg!b zF?&K|g`w}!==}@y^)3469(r*XeRwG>E`#1aVdLii{$mEccZNQ`M6VyBH;&L(x9HO= z^x8i9&+)JIb@at`R!*LwxfO;0`t~k10ggVsB%@|5|5$}y+C%T0qJJHrFK^KEJLvOk z91=?O<}rHn2(xR)=k8chf6!Q=7$63QhL4Yr(JTK5DZq+qTD-zfUk1IZs;$RL+i7ZU zgQsPH7+9qgpl9djj2w`V@W{){D+^l(HEkFTD@R0h9C{UNd;2d|;x_v3UfaOriL^Y{ zd_MX&&h^dBb9e8J&CUFGMYtvZ>KmKdJGz(mZ!%uz6qS^pT-~m$u8o#s&Cbp3?fsjY z{`PZe`OCyttiQ--jxOj=^Kah1^YHcGxx9&T#X^s)qw!bKSv}gN(WU#iI3BC) z6jeI8AJ~7Ka=hAmv8VCx+svO6*}ZABVI|t4y0rWwH7S-b2VO=XuJ!(myA=h;?pJ>+ zY-?5Q3i!i!K_HWVKOFaGjg_!vd2#5N7>h#2Y%sE->}Q~Bh($+4hKEmxje|=-34TaJ zO-oEl@_?Lz3N-xU@4(gXw+8`p+^nC=CMjw;$fVRvteJ$GViBG~mT~jNsOlMbH zOlqq>SHCd+S2d1C%dBWNF7gD<${*akS_`Z_YbsQv#QXpGTQ$bP%L9jED}EiMYpY!xyBgJSP&&--K_ zhLbBY`A^CA`erB3q=+!JQ8f|D2zL5D96@*!);Ay|pi17A%;?j^C zHl)&>=wIy7e0A59!nOCwmW1Y&_YUEkeh!ewwIX*u8*F^puWqIuF4GFLs9!(wWOghM zNoUvxF%_dZ_L(BPNEgd)ZlvawPqQENGG352lFp1u&e5I5r7Ab#FP3*Dba6jB{fvw0 z(7@gIlTL-@7RJ66atxe%+8@PI5++M>LELD5$LjrFWV=M@EqlfaL-w!RND=H%^2M5E z&Wiz}uk7vlFsm$yesh+R6d&n*N)!=;PnJ+0JFLL(RrG7zkyw>wc8H)acPi|>gY^Og zFWmP}OF)v+$EdP{)gJi4MLzD*C0gPR>vcFVF$huZ4}XnXuejlEf1o-|8O8LcSo+;B zcHX*YzrkRyGasB3*!(nM8$P^=fKx)~*>VzG5bX7+gIG0D%Oh1W2nourYsZznI>I7x5>Dz@+( zo!iyQipM(8$~E;h8GFLt^GmbDCnI>vgh)G0c(RDP?K6FL)DsB6eXwn80LHY0}W^#(|XAG-G2n;S`_OloC7>DM2>~>zQR}O3mPyUGpSGj9g0Y zW1-X^G%wPX34MwXLTTU0^kCyECueYEFa0bQj_$+hP>Jzqq14zW;?FSj?|s)0S7l{a zXn-6WuAcKrq*ZjdC1I71UC%!1JJwp}LUw323bhuQ5_PCObWav26B3TWku(dKix>-v z+BD3FIn&yDs;Z7|9+8cPZ5c4&4w`2)JsszA$mr>d_swWJJGsOoJDp~CscxxdR{nfX zpT>wMX?3yW!2X@?jYX^#!C&HlW)g(AqV9a3#1N^rfKuALw^{?yU)EDF`!5-ePs^zk z%)Z_GpH?yK@pi^Rg|2u+^z|i>OWJCbi7-7Wh;x=kk=%{%Oe@jjzPeQMgn3oJ6db2r z7^L-$xo&P1fA*|j3PqCYJDx#9ZRY)!2t_6POkmP*M16>myhFKG;3fXlIEinrXB%V_c(u(2LOLc}~@TK9?c=6fTrJ zJ<@moUy)soKbnCS1zPbiAEyr5u;sRY0HAcwHlLG8**xPTMAlwE9R{o(@;v#*-d3d} zV-_n$X=0&RH!GVJCy}Y1FLxQlPMeS;MpLBDm{rF{%a>a!6t4QnAaH#nZn^5-=Nag& zitu}U_Dy@bjV%QbvPBc+OonM{A?h$Kts$mU@I$V=eI}m_BR17q#zPJ>^hs}$FgjrQ z3L;mE;}S%+V@b>TkY8Vn@oko*ieMEApx7N2bb(TD3br=sM2B%|5dssqf{kc=ux+#A zUlQLgD#>yyVqpT*qtwPc400{8QEU{kG$%Z?9w}X)bSPt|qrX$5L{val_`$q>5(_y2h5j_?54W`Kk1l=m@9rOdCuc~qwN(vNKO>lAKfD9uoCca1VK|t z^YIkx=5hZR3dV`-_u%qD+2#{ynnsEq3Sy9(uck=IN*2SM0W)?ly21CGKq7y}g!@B;0b^NzL2KP*+GV2OkQqc-|utMAP6R)3i zVbc$zC@o-}(cKlRVcHc|eh=?xLaQ=v{OdjVl}csE@PZY?F3YSiFbSlJxRBu|rSz+j z{5QEr*t&DTg(P^8&SQdZ@MDyxqGMDyy~RYiRU7ATj<}4M--v06n2%#Khvcs7CD^4> zu!EHxJR2$mN`zs8a<7o2JFiFy!3cWXnB)xZ(;|8Y2+^HlXi)~OUsvLGuNaLmcw{>{ z9ef<^`}Lgkj6q$yz3(_f&5yJ&ON(i$^C1K$Sn2L-EDe6~1|=_&5#n3%E7^9!_f&Ik6#yw7?B21xiGo|oOq?LGxeGKcPOzzAn{!hr9R=nCV=#B^xaIM$)BRMoh z=`6C!`IuU9gH=91B)nHrIPH%)`(OqC%Jg$JodSGJ4mVq&(O1opKB`pq&dB_B&~MU{ z5!fi`F!C&`u5T;D#qUNIr$k-?dqs%|zAc!%1d!p{@!2AkUpRddP@?IG9(jWWj_MxS z7SJhD*K)MVn1?w=W7wdVcscOQu#8$x2Pw_)%*RrN-W;#z3%u7bjSKFtr&P8etm?K1V+`WjDK$>;%Hosn__x#PHs=<5d9AF-TTgKE$nhpnp>~V zx@#TvVZP^Xzq;2LwQi$yo8=b!jh;UDUHazjg-zJTiBO?+le4{o+nmhJ=9X9Y^=jy{ zRw650n=VqNFw?5+RAH3R>`&(y-|Bs~z zx4ygBbr-UD0rxNMa=~Y*F5IGLdyMtr(M!Zfu=U7rRj%fBS2ChTWrvinxpbcJ=0?~2 zqOotWmJ~kUbnGpMo}ZZ(+TW^y`DthsS~#cFer?5m_IW#qdW@ z|60eSH1Qw8$$D?#E@9#YQ~HiqADv05dOs~U_wdK+`r@ZJM~WcXk!PUJP3(>Asd?=b zeK$EZH$2gFp!T$csQQC6IqM@-e`IlWKsh6HFNJ^il$Zj`QCFj&s&}qLy+4qT>+kez zVC(v%(g(l7jF+;{aiBP@pMvsVU&y`ts8!gLz(|^>3i?Ltybh(3(?rHVO1yf8wnI(& z6y{2hDF5p?Nr6PQ=ifHiR1secz~6`g_RlesM2@Nt@f^s~-hE3-(c-r@52-=&NhxyT zacrk3d{`gWu>*^+2-O^vC}(_yC<%6LN)`{>UkQ@qg8Wq3Uhb5xDQc^>2{(t9v#Lag zco6OjI+_i}6}WltrAz{+;d9o%NWHY5l!#d-ja|eYHyzTnt90nbg4!OQ9q|ES{FD?7nM?y znDO#KTHZJF6LV`!2d!M;bEU$KA`p@dzRWe0Oh}jyr?uYiQzH&0hgz6N1C4-b>}IVJ z!rwWL8@rM8k9mqG2>zs7Y%FW8CykMe9*QUuAsBTha~^R5!MiW^R17U*Hg_|8z^+a# z&_fL+7Ok?6S5)E2&^OS!rJAeyH(nOcK#8R>_GAJe)iwfXYuy`1leMjN8f8`evTS0^ zG-i0W{I}-SQRaBE;zUXz7AALI8!RYWy2g`u*vw|9S?t(xP7$*6N+!0pne8#eH@Q+V zE20qx+S4gD)-Cq*7mKngtSmVe5b!Ta;fY&(sA0IKKHWY!^TmQJ2!s=UQB!fsjygdr_%C zFi(&Nm3ZwPqvvBsBB%wuD#B#02+6msj>nIKnQluaMlBQxWXx0X*!OUTFs`5s5SGEV z=-UKxE6a0Ap(rRD2RT5KyiF|dTM@hu89=Du@HbLl(0@+_6dlMs-H4!NDaqpSP)tW3 zkbw>E&`|*y9^qg#s&<=2i&?BSYCRR$#krmK3t%_H^No+Oj|_J1%D~K!PpY1?S0xoq z!+>3!= zwaymMmGKxJDxTD2Vzi;Fd=2AtOzCfEC0)e*9IB6s6XN!r%Uw_-#qg~*Tx4P97XZUM zwgISF{M#@%Si}RnED!#UmCDPG>n!}B6-BWK9De~XN`&nD1PTf z*7#9&StF^Tt;gI5jn}LFwedB|pzL)aQ*dxZ34RD}8$%;Lw5Iy+$cO0Oo>P})1!SWN zoW*}D5f~>{t0NCNCDur|a{(fRc|H-9Eh$RP)ix=U>VaJ)Dl3*6Ts>^u>u<>~7``U} z)>)9uBCn!c4mheu{2SG0_^Su>%AiuWkDke-aGBi9%;WF2-lXhqRF#$jKb4YKyte)p zU5SRbXGFx)!evBQ_3#~;Cz_VxWb{==|Cn>PU58G2!HZ_*xy`P?rv?4Y5X`@n#)wQf40N=f@3PO+Df)mr^SA_Wz&>vbq zqOyiy-rK7^nKEK!!p7fi*rumIKXxdATmIbkR~(SO-Vk|OqR#j7%gZZ_wri0ZX?jm_ zpE}lXpGx7=#?B0(dNT5hZYhp;*ftz;yrc5vRBm6)krH}3l5BFMh5+-^N4YB_@RHAu zHxmGgF-gwDUi$gl1PHb<4$`VwhSoNrtbXfX42`ByT!WjG+d)EpMDJ&13$ zD@H0<;bu?Y$AJWp&fwoxKW5VbGf^D#H|i}dBpBI>26pe0wNL&K+HD(iRgyB7J#O|^MwpE>9gBUw|2L+g$n-4%c&+=#H>4)8 zcKN-JcYi}_P-rCZ){V5I7`gROU}md*C4(IN*B%W0DTN0$FnGTd_3AG~;44wpH;yDD zEjO5o*!7pMih43U^HF{1KTLAI9(kv6(1eP~VBeiMH?_%$_a|jr2PifKB!d8 z{?ubkdu_5~AnRpnT2N46)k-0ELOFqvHz6>O8R!QCVm_>g8Jnr2>LHXXtp7LF6l;xu zHjQyd1Sw6?6AExr=F5isIPnuD#08f{)rEI2JH{fK>*JcAR77NnNA!L5%lxj4{d8$I zDXZtR`d4PYfiH?D8h&s5*|3;izCE521owJBLL)oaVxKTe`YL2Y$+Zp3!KHlj$x2ho z@zhm} zr~*Frs>^Q?|9r4z1h4PzITE&HB)3k@(fHIfc`tRdRmj?)81?Y>Fz~zGlc~OL&F8;k zfrh70oKC?TEh(7e_a!bN?^gkhO1pu-d5$4)KOZ8v*)q8QH;};&7U^y(cnBN%z*B2& zJlts3z%Z8KqK`76EkWK&W;quS-=UwPzf~5?+Y%QgqTLVIa^HRJ6-}s3FDxkKjqv~# zsXvAy@+XRr9?LLPms#M^oymQh%~}>MAH3%2EKTKV;e>%5F$+f#(M$5UhwxC>r*N5M zM)F}e(3Yo&$Y+WLc&2V=cXG~qLZmEa*qCwP5(H2%+0m3vE?V*sonCNUNP2grL$9#K~T^Qn-foLOMD1reF~ zu2oa4ayD@ba}j+P+lSZ(8xF}KL@@7w+JnY z23}M8pp-};L{Fl5MDZkhTli$O1H1E0@TJlH@Gn-1t%RSzV+-X78PX zi2JRG_f0i_C*oZ7-pk4)1X{*EhVR+1UNTmn_qnjBBJw3lkhCKHDoW@J<}2~Fv=*Vp zfgse_*DU+7_3W;gU(Ia|>Lfz>M{L0lq2VA#_{Y?t6Genxts1DU;H8ADW7`a*p6ch( zk0Y>U93XzTPP?jr$jZvCkq(!Y&0d7+t-?|XDkKQ(q2v@&vl7A{Itw4Hz*=_ErVi_N$TV8ud9V zAQt>YX{fIFPt$c~Z103kXo6P`XS3l^jy~2XH?O4r4~I}04FwQJ2WKaVZBsiqddC=z zjXOwRO?DfZ)@s)Af5nGOkU~8f_Nc)c!GAioYOkWCzi^%-HEPYf+vT1vtF09#bB|R+ z25#E@vp>^!NIYjIWp)mK$v%TC`MPiod^tK=OkA6c<7P#6ramy<>*w@yBCn$UYHD)& zd9nl!l&!x1KUt3kB9dLRk*N9Op}SDxFzOBOd9G5^HnkL9)Ii40@Op^KUg@S2I4S34 zW$olf7m?X&Wk?O-C5cB9$ z^jS2viGl4DbwG{o2$nERr9#kL9`QA3-Vb}d##Qg?^P;ZSQryCjdi>8H#kg;q+ z$*)CVBFnjQY$#JS5SVndj%}zGAw`POyf*7o0RH;vewDzn5WMzm;B!z`BtW2FMk)@@ z8&pZCq@B`!aDUQZ7>?eoG@Oc0bf`M~>{{`h=BQ9sxQPdi)WaMuP8i<$0UN1)*)tFK z1V&x*Gx_7z?-A%~8NQ2?l^T=DDjGT`Y66gK0?;-b`YSCPQquX{ngSl{jp`*pIDGxW zba7&=j6k96<+Sk9lRv8$B@V(+wDGW5Hyv@YIM9uJvl*&>Il?o30jS~VwE{vrSkg0T z^~;j0VUF)eq_rh)%!o7u2`L@F&3t%f$%+1S`5E_$gl0_s)80&$SC766Vhm$p>OiOl zLrrY9-3OT^1v~?(Z$nhy^wv1}2=9 zGR6S}+nOvFc8nd$%&?(w!a@QGR+!ce2k?ui+~F_4>3%tRcUHJ3c!dn0JS88y6CNmZ6&n z5VU>N^U)o*RYo)gsI65*Z0}AE>#FZ-JS__nn5rs;4srOt!981#K0kc;D2PJ>=)PDv z#0^w;k_x(JcP-2wm=HiMiN~*UUp^@m%GTWzsJTisj^?vw6;!45aQT7k8U9W&UMD#c zdzJn4w@l+P?B!Z?S7BX~{H)2AuL9^y8A?|4A6&-_@70otAWFBBx?WlDhZ|F6JcpvM z&+-sHuZj{+U}Y^a`Y6dGD}SH3XZ;878wjB}Bv(iR<90zScmgrRo(bCdws(EZ&{)50 zEW+%v&Fl8Q^fAr*vzwD%@`wvH258#kmFrGTrD4Tali;qroRUOJsw!Y956*PReYFM} zd6fG)$Uvj@s5-|0JJ#I|%*Ua}%$&;5nvFQ<_}zUxt`$ao@CRw@Pt;4AQmW2)5AnTw zar$)EzUp4=B}HxI`(6fIc(*fZhqpyc4kTg6m?!9TnZuGP?=5*CN@?f7b%e?}(Ek(s zDzt;JDQP3*FJW6rRYp**@ly6sbFR!;n+dV%BUe2tYy(emM|El=9;t)^$8ZO_sKG(*jg6-|syMsgrA z%=oWpvg#(K+B1X9`%iz-YH2;m9jx#Y{AyusQF502*;7mP7Xw535#7*QyQH@U{Z6jY zoxa1|PR+j?2AL>eWe>F0J{!TKzramGJHj~?7~+WM_g;8(=_IGzt)GgV4Jz^(<$|jew5Gt9oA=U z&r}NO>(NJS37A{xeg0VB`1ai}d`tdy8Yko-lWni>^2LhO1(xU<`Q0S5bA=!z6$ZoQ zPg1+z&=?7eyb@W4>IvGieLeN8A&C$XNM?GqMtPgOsW`nzllE|UX~Ah>rM!~i>siY5 zQ+F3@Guf-rUyWlsBZsfbvm3*g>xK=q$H~(^VnOYFV3zMOMihYz6OvY~nSAT!L`d)5 zcfY?#aYPH-Ov+qdo=(C^`it)TC`0nI66E?U9M5?+_yM@G&Z)+W|8=`v^5OgALW}VQ z9^(aB|D@AVS*MzdWewZlu(woZJCqieMaZvAFwPwVL^smW__@+9^GN=anorKsYxo1W zrN=7*sCxZ=#kyQ#aADu;Rjp zSfO)=P>d4K*$U|4g{(`n%P3Yy0ScgmB6ZDit@TU3*zX!9 zRbAHiH!W)sx_2vN{50Q^0UUf()`4vSefTN4Yf<9qt?^vVq=hwyh{{i&j)+?NJ94u~9Jxyj>a-4Y+p!a2=d*XXK z4p}}w{`yeZKUVwwjxXm&y}1r8%Q^2VSI2p`2-y6+)_f01ZbpQTNJ(QjD{ROUoL3bE z7}8u#36fDE^Fq-GdNLzPO3A&$?JS;(m{->}CSi|plcAW;YNSD`5`IAL^NNC#DoCTA zk}o@l+k&8d>?u4Xgye(nHM^*uJ7<$p!&D~EBo0bb;vO3p`U3BjX~O7w8+)q+K9r$E z-~@SNi5g}lh;k4hur$k93v4{|^Y?nJ#NOnL+)GJ#2+X*I?E zG}-hy4vZkOi`}Ru6|3M0D5teG;`?LWRnF!eO&&H@-AbCTSwL%Rz_jSFZVmcczCQc@ z4Bm(X+@ZyKFHzpMc z;H!asBUQc5!#C>kB zYnk*laN!Fnz;3g;R|y`jt7N&GHWm#j5e%FDHGQd?W8Y}RSSm!@A?*+P!f)OEln+x zMjvfW(=hTzGH6My#nkJ1F*Km(Z@Nk+b{eLJo~`9(k&27`vl1}Q*f>n{9oLkGzQBSv zHe+2~UCKmVw?!S2`4IcfiTyN*o03hK7=Nz#RPkrek=iZ6m@A|!TKdNDk z@q$0Q6ct5C#`EIDDF59mNT%*TUheInvG}w8iU#+)c&d=_(2dlh=*v$&{=oshc2&a4 z$0plfr0Fa5LR`Zve)U@$XPw#CKpOd~AsJscjpph`8pwSV5Um&w%VCzuzHMOxC6tEG zsD%!dcftV2az7_7y0D)LsLU>BpP#00!omfI^Yh<_kB`T z?r@p?UaH&C6wDR>t|#=@K=xyK>mQ!U+qP|WtWZbEjQZj?3=YMxG7I$t-$8{ zUy(P578d58mK64yvMZU?K-FKnKJsyMt&xhpZfRA)fiI*1`s5N5mh85_K~iSc!K)!K z%hFP$#+_-Krqhpy>yiSGJ|j3-GXy?Xn936OE}D+*>JGH>Eo$+A5rtES+`K6TY-mjw zVP!1~IZrg)thqXCTAA*bh0uYh2e{kfdjZA?z+Hsg!q{=Ww~Cc(_XoW{>J7r=ad+p8 z^*K$0!V}+BTnOe+l+v;QxjVIB#`M|hVMiXVoS79^nVj@y-0Dy3h9V^KRaNy&w%kYh z5_K%qaG_AQ(U)_@>b39pltMF2HL9oAs0x1=`)h)E9=_V{&`L}&UnaN@a%H#fd{C<1 zAd%c?X<^=|Y2sqRdps55lToE;(Pd!y3=4{q_uN=_ELmpCYF72_HM6_?NCdH$hs#u9 z1CPmBiR(2Y3XVK_(R<@I(hG5l8L#hPaSB_v=DsT#de#sqVdvL@&J4q)6RL-*F{SKVS-I z-|+Vb=P`x-zBazwec6TVp*raYj5s>pj8Y8Xj^P2>C;d>vpjvi0N@W17NmzCY-zp+E=$)Ii= zl3TjAV~1E;YTT?31+62q4Q^+U$qWF$&BL*QbLz}4$#{LohP|gwaGgg(Q8^C~wC{xM z=O^t|K#S5&-v&kf2cG^>*(mawp$8hXuZ%G&&Y~=O!iN zp?R77qeo5}`tRSVS8+Kl)EBvSE*&RSRh&3o2jS*39(pq7d&G&~q2cyDF-zbb@|ssE ze^g(g;cY=2_+FLX|IHbp(E%QWYOM~L@KXnIkVNa|2aR26Y1UUkd*Vy}9NbDyBD6jn z;oYfV;=I6}eCA#XsFrK52L|z8{mRLFH^@5zUlgR}|<@e5}-z~cpH zyrEG!|Gs|Xz(?=TMQxlM(>amUJJ_hg=rztZS6kN9${x@#R>8Xm4UWo@@K2hhCc<+Bc;Gi_>Fw> zA}A&+cypemW&ee9En;VTo>qv7rswv|wdLZ~fG@as&WRe8aia=@9Onr0D9u%gMrU4L z(wP&GQ|D{tJoH~g@xAFcDj%awf{+2OyrjsBu#K5ws<~lw`$6stCS5;8}HslP>tBeBV z2_PGhrwJ8;)_J1kf4|EtUQA`UF#RdKmb%NNrFw3Yb(t1lr3Oa2~HyPe@kN5j1mIrxU^xg{lx0 zFXB$gm0OO7dnVTIjNFdm*M(VG`Am$y7aH?6tZSYfl#5x~O5j0#xqWR~?+G7(zsY~A zh64jH^R#JQzBDRX_n(jsEuM~(kU%-DczE@sKc)dnJxyWrR~vu%Xpmq61eZ!LVr0Sv(T6GY z$+ugMVTd0y!MoV+K1=A`J@}`Fc%lOaofI}c+@a0j(VNyK;sEfgFTgT#inn-#1~#WRoU{Pu@$aJ>pH)Szc zRsR>rZpZuKi}4m|5*ogsAKN*(%(Si$|6pQ`{;vYan!IyL6P(A)mg;6FC`sLylI(I< zf#Or_(JxArM`yh-bd0}`fnv;9Mgv*5mvQ6xp==SC6iLy)=(7B>ps-9%uQ{I_qu}b<>9IT;nWqn93y`Buv^G+3idh7Msxw8e{Vkg#N z0K&G(W@Hl_)Rse;OGuS_ZGfh(L|K{_Ds?4-=MGQBWhR4^n z6F_|jyGp^%o=bz8@5IJi1CX^~7j<2vXxG2fq=fa&EN2=+#%2{|kdK`f#x=wQk4^E} z`s`e<>`(`fPpf5cFp-|K_)a}$vaeLWCsH$~iXaH~QNI)@e5>L5`8GE~8)87q(rw#v zNl+>dnAH{BD^{j#zg}&Z&lUy2hLj=4n0)(EuB1a{gzO?JbAAO!(94KR1o6;U1#I5( zjTRT~_)xDi$XE9R13d8rQk|6WIYUm5_LvQRdqw{M6X45=#$1{&jB;w=mRQEy>TM`U zW_c>G9tlU{W}}X&s{E`x8K8-~HR{fPtQA0A`i|opRU~y5Xp8H?lxc>u+jPB$LV0)o za-|~2XHU)7;<=t?gW9l=HfR-sswcvc=MmjM3qMrY?9;L4u zf?=_GNGZx!4h1cCpP+@t=4M?*0+Ue0ud35zyQ-kQiTSO%0+a6TJ|0zD6n9%uVtt6D zd4NEtqQJ5>a}rPWV6lA!=W`?8jnN!U=eN|<&{$iX2pqV#0-`uy7yz*Dm2v(Nk zRMz(PipB>MLs=WUKpx+1KKe&2unTk4BCF@;6lYHTXwu`JAq~$Oe_?Yo6F!@qtiRJ< zf~1)fJjXaJYpC_r5T*SOnt_M{vDC#qi7=x@x-l>Np5hIHW+mwI9cN07l=}3g8lrf0 z{g8%=Z&1;p!q+*XB|xqs4XA85@Wlovi4{4q!@D2n!S=c4Gz0VtH_c;!v%PZWOx`5q zW9yTsjWhr|0w$YtHo9H(vEZ<-TOK#UJ(itci}Y;@IkwxvM4x~XwI zs4oimDMji=-k^^P-Olv=Sh*SvTa>I|2>LAv4o+L<_;TUZTB=@tooQk)T3NaP{1ig} zn_`B_Wz15VR0-w-1Zon+NSt$RZrIQ{bF-0#qX{Livn-1>p&-vQ)QtNaDRWy)jv4TU z?Qw1uPa9zMTF1T!t@T*l@gX)C*tAU091Cc#+@V=!KT} zfu=m`lW%GYAj~I2=xYAe{ap0d&^!xU+Se7L?L|l&dxTINkiS@I^5NVBoUx?Ox%qW1 zDKGkGR*n-Qdkk8z#TxktiEP|AA-aF}sK^1gJS*!NhT;;o62jhOrDn zZ!eplhdBOhrY8iyLvYP$F~fm=soC+WvqtO-zs?@&&^3ca%|Y$T@YcfB2jNKzmabX< z#;BK^dulj>qX0}UPTS&ckVhuVW*9OgeV5PvW@&1-r<3um8V-r;D?3Fn*!^pAXSGzcWo0Q2=eR`p~_;Palaj5mW;Q zw*g|^TQLC2Ncyb$vu4M0+2a$f&0YK2M6-=%Br-B%+T9oa?xawSrkgs`TK^8o|Po$Exr9=N7xhCjM zUHTTR_9{OYNB&U3WcehZY67j%~?0Nd@~3!lAPBI&*mQaPm&vTcH3N(pQl*85i)0R zszoYdVxze9;m>N-n^X{Li;*JrJo4?&!)*M(dD#)ctKw>Pc=zMYgYr*W?&{g6* zCUk3ETR2!yP6(I4h03KeL+S3)a=CkM<)71BmHxa5djW33;84qvOIy8ji;+#K){ig>u7_=O%K8o^>%k&c)C zxIj#(^8>Tw<9{FJ(cd?xZC_8?QovFSUi;gw5OR7!UN&e?LI5$sm%JahO?di7iE(0I z#9B1oN)&0&6==Cb49fL;G2X3J>P3bhnf`Y5Hgj*!aOjgzo9}MVNnJfUsi0!??J{<| zQ>b*awdxWvI%7qU{ok&PpjzHfSkR%pS`!;3_0;>9no)qR3PN1FSUp4a{$0o->&)uG z%Tfq%^T+}=G5I9aa(n^OM+}{NxWt|bY2^K&gJP>M`Om40$*!J62aT|RE0Ks8yvH`+ zG5WV4({WVSj<*`(u5s<^{5@YI>DGTRhH5Xr@fYxOzy8sH$(7h0t&h`{m${wkt|*kd z^XXxL%haLQ@#LKU@y^0D80**z*`mBRS8H}?+Z6xiDwP3tk7&2E8h z8-8+7LM%VYcF>Iid=wEo)f4B0ca2^c+vzSLTB-J8tUu!B-q9w=AL-`xMIV|3tTD8A zTZs(YPXx?T8#tu8gL&ATyN8ND3UKK=`XCK0%^r2wU;U`>&|hYs3lRF>VZ8aEkCOi@ z+l;{@j2r@-p-e=zbc?qd?_tI!uuU2LGAmqYBPMo@aaX>-I+)-Q_ySYebNxj6Zg=xv z`yKD=&c6W#t%4<)?|;l`eJx3BuOY3d9c6|(f4W@fwnOp~Q028j&=s!pu_nm8iudm? zPP_ToY3z!S;5%CG4_Y_bYap&$z~wcg0)oo{I+7#wZ|70dX-=r2gC- z**gRW4vrK+AQJc(!!C=DM0LPPFt1Caor2aje8yR{g*oUO8H^K)1I;CeIOf4vAu7*R zw?3Uqf@mu}5$N}|rrlMDKCD$pV?Hwcg;4-s6}u{3lNo8!S!trW;v)q_P$_bz0{m8B zIu?CYQL_7&3q9W?PgBu2DJFY%YN&@#@ocKMCiE{8uIYuR=*@EPN%cpU2`o6#zn+2> zlr7KebdK?8inDeWGTDzq*9i5asLM==6!lVd#|6H!c%$IIbP%ct@FMsjy!&0nLUv%| zUhG+SAcQj5#egN@A$bf%O2!@vV)1tg{CMk!`JmPMnysF3`rq2EzzWZ~7+}dvP4$31 z{5#>EsDFsh0;O>ZL;tFKQ6eVI2EWM~v4HW)5GU}1gOmIBI&dg*nGOGFi}73P4PqN8 zAdp!(2lZk_NP}YIo~R=MyFAqZ{BL(Kca*sadtXGd*?f)v#OLA zG)CZW?id%~5aOe9%ESxm(ok*B>=uy;Zp*A5j)3V9t-aBM3RqdD_sx!DtpFktI4?ym z@q^73>jOjHFMP^X1;JHF8ptalpjHmiRvl#?9 zzZp;Ct5S~Z3Njl-)bs-F&7t# z=4hf&n*>Yx2hZ&-u3hTs7Wykuz5(hqw(n_PvbNHe$Vjj6pgBRe%>%F0y%D5(B%jXtCfPIKC8k; z=3WPj_*>Y|_#R1G2)uf}^MWo?##&0yg~OUetFESqb;bQ^ZJC+`)Iu#%nz%qSkrVhV zO<#)(`W^DR_fIWl;S3S0>AOT-P()4E9G&>ugFj3$fY(ACKwwh)Sl`jK(LU2b#0@Wl z8@>lTq^E+un9=(Z-JJ-at?@Am2W00snx9ju{tgBbkgFSjbRli0Bso8rR%CWDyoDmp zP~9lPnW9ADl6+NX<-c(?oBfho^z)UZP?GO-y-yhCaG`suAl3&Dng(Rk(hK2mfH3WH z3LmoZ5o3^iX>!46cKxgG^zn6d7C)~)2b8xvcRyPr5b3ft-g+Dd*oTRA*i`k3Wf>Xt zWX%$P{GDw;Q>dQq?|bxTdX~kOa4#4EikiGcP*V{cXoo z>(s$xH#yHm^yJ1?vv!qZXcyRIbE{4CDDH}O9wm^NS3JbTM66n^Q?UMi$8A$MZ+x&m zPoovSX#I#z;IViB7$p7{S((`#ET@~jEQ`D^$HtJGhKU^HzlUlZq5NiAU-KXz z(zSR!fMHveH73}^4F>%!h7qg}*Z2p^=sQZAH$2iWGjd{L#iae+W|UO9+*5@NqunIo z>a&x_C#c-v0hlAbyD~$J`L=As*Ak)*mllaI#>EqTruapn^g?QYDYm}47zWz$73bVl z1G$z3OK+t9FS-GKORpO@T3e^$nlvG|abaso$4RxQzw1If`97dk<7y{wL{Lb!`^?Vn z>OS!QY3)n=q5Pu%vya^{%-Cv-ZOS^9h{!U-pk&Fu8(GS}MNxKRW@M&9$vRR*_Us|+ zlu{$IlPyaKNul(6e7@h`>-P`*Ua!1fy`FiV``q(B=bn4+J?Flk?4VNapf3BS4?aAY zm{TS}nGGHFC|pGP?&sk$HvR}cCPnT0k0fp8{3?MxN=)z03(Fx0k{{b}%~Vvh?pk+1 zwsVhAKTttfgPr;Hb~NCx|9vSBHid280?VU@q^ElsNECDS>&M3hAU9++4@Tt;){u&i z()u3#r#46ix${R=M1E)ai`Qju1}`R-Rf&jN1@Wab&t+yY>s!{= zX`Z?mVI^m$tg`%fRA$I&`73RT+^^r5AiK^7{q>5cH@3ECT|&r_ek>1N%oKS1rV-L+ zS$dwHzV>$D*Kt(5 z+S}jHf^B8~H0Q7gr&xFi{khXy|$$-R%&XE>kWG$J&?q?fc@rXB=`R6@^08g0*XGABS^GTw&h32fv8>_5r zuVcK=yyL5^+jPHLD*<7D7XK*0uv`Nw%Y>PaL)`Zf=&4rLEcp4;l44vbZre%ga;W3g zhz;AlvL$FNW!o&jko||L&RfpJD`$@L{D+H8Yc~$x6@z{hmS5~mNH?`zp?L;H+f>_A zk`)AxqDgv`dg<}!=YR|~JF+&Bg(o^lG`97|l^jIDqq6XTzaC_l|62^q0%AEfzg?3Q!{rGFCph|p>o$B z2#&}P%5(T^4&QAOoQtUbX;b1rEU^mSJDIndb(X;FV_9oz=VNMF7ToeDXyZX;gw6YF z<3y{a5yy~IZJllk6K>W@RrcS|V7I0iTZfLOr_Msw@j%8BAH-oIvdnm5XKVdb$<-A$ zPnlfk zNVXx&bM=vaS#_9YI~;thFo5cYNOMnAxT)&d_-u zX&`K}`AFM_&^-0e z>a)Y@n+}R$mJ8{fK?_tk+}c<97I+Pf`_n6FMCIdembl1y)tqZDgdy3grGw$J6e6|^R6 zbIXO0CAp_{C!0j}O08dieTTIy&6WR@m2z^yXh*57SJ`#5CI@skd&4KXXVk*#)V@B~ zq)k#P+dX0rI{=vq6k@ug$8t;1c-z;EZ^r-4!_+v@gapde5#f1y+ zAm<-9T0Cv`VFXH?<}QP4HN}o*YUP#{bMrN>OBjan(q!u&%-)&WwfU^DUl<-?W4n;1 zwRuA!cHniz^O2It+4;}#J2g+#wo)EH%Fa=A>UG_wv&9#*Z7^#g&RaZD01hxUy{$?w zI-7qr>Ysc^s=$J8e5HCTD?3g)^vC1UY>GtodtTKGvfBmk^k_DN^*>PU#@vIUm;y3-z~4$ ze)tJ5=3X5X`?p)CclRlp0|LIha!D~GeBzf7UG%+vz5&=R{_Qs6-%~wG_U)i?jC_&6 zpW2ak7S+lAg+R^H-Zq*d+RpE(rkiOAlcOPtT2-}4zEz8DPICii0py%LhtK&$BnB7h zfp1xQonhd<#E_+VP~*SRKMJ04x5AfJN#0o??6h80fssCX}XHt4=OqonN28XBnN zogc#8`t)mxoHDm$rtb@(3{IE~j(4aueGOUoDl*5JteH4nhn)ZMcd5kQVzK0u{4_Rf zwulD7M!x5MnRDg!TfCfAV-Y8dAQ!YrxLPOsm>x+m@2?WteYzz)1yXpm_0{2mPB!uql_ZiY%#OLoT9ou7jqyV-c zvB}cE#Ue-b`(GMJqGnBj>yJ+V_^|&a!Z)K?KK8nPUjyl0?8ur@+2l}@LU9Oj|Eg_s zt108Dfw!+_f>Y!ydo(cS+;w-K7t*H2pD8(?zp)7%>q!oCkPmfW!g$YT%UJY80A4x%<1k%n-`;>8@rK^`-mB9qW~HPTm4- zx!aQehMO^A!uKMlcif(IsNPaJ$z6y)v{=-7dy{!yUPNL@SB5c33-d2VLC{wH93hlh{ygxKmog>7-Cjv2Xp?bt1-B5 zC&IyQkqtNEO6xHRi8eI_ zly<|2H!V7sz=a?S;5Y?vvKuu4q3eMQn%tHZS3k7!zOlu7v9{+rndH_KvSAw7ZkG>4 zjtq`p&Kv6nM%SjPCws^>6Nda9@3>=C=3DAhI?g7FvI1!O`c2CVYslX(Xx#kJ0sH-S zuK3Eco`Qc1D$+!JvCDpT+4uK-i42esX@avI4&T-mgmVsV$KBUTYx5rXPaRtraQP(S zyXfuVAm-jF@C~08Ck?N|n!H)p`#E{{^K9MD#DtivunbkMiKbmh{wcJtxNLZbi(>3z zTYT*xD>ca z;$&X`rR8Na?t8=mUj>M3^xcCUwewJ*D^%>uwHdpj&$K6k6ONCwpKbq|ZCI9MApmL7 zV*E=VVq5AYceDs5M*HZ1)F!v{=X=gTvN zwX*Zby6YyT-xm^nQ4_YUyg$-h8p42?A|TqUWE`GeIveoy1fZ%dBk+ji=(&}!sQ}sn z67hKG;Cfw)$MJ}UT#}eT?CWf-nEbi)ZTUj{4GVM_ zdVr)`|Ls3enu_rel8#mL-iGf_U}DamG79isKFR{Ga#q?hLY9PP{Q=s5StjOV`J35A|0lUe)sy=_&81F=_`=7W-`+gzv z3u-OsUAF*3^C`dtqm*3kh-!$00xJ&J-g^-sB%{6_*vVmWP8E3dku}ud-)-sHfA1wH zl*@7<+OymHU#zRr^(X!b4N-2oTU-gNCA`s_xh zLdy9RMEichV`<6o0v^d9a+v{qd(fI>ioVzQ#q(?yF_t~GXY4j7`$Q!lS1ueG zu&QTq5=eDxJG%SBnrSfy?14(a;n__lf*v^)m{V7B$M$n=&6I_L}91Rx`>1D?p*hi(i!OnRu zs#fsFU-X4RA;O+>g6&%=@uy#?2f1g0Aa@|b$r=1RM>9 zK4o6^t>MSSG`Dyxs=xErf2#I?lQ8A8s(za)YBba7FXY96>3fWaHlpWyVKEQLsSh*@ zA3rQjMM#25g?``Al6MEk2f4p^(p;b$E2M5|U@w7L* zs2r9@pIw|SyxNvV_qz^J`6@e0hp_hv7mKlWib&7#EFvESkk&_oAT_?__A>C=?u*!h z{IuRRa`exWUF;avvEUl*c6>`hY;U9H5Z`>!HV{zhYAgQC)Sy>v z?N25oKiuADRc4+qt>POBST)DgOy@l9kn~+gC=oN-7$7RPv39K zDUEIa`T5PMG4R#VpS!Furuhm~E|7cAOK|&W9sufbGK?<5o{GsLrveZUVyw*;N+0Y(}mtk28a=80iZ_6YGmCsa_Cfn z)}lD~H$sXwGu^a}C_o7B_hFC5PDdBfqJXAvJQyB{gsi4s7T>v>APgLN75*q%AhRg= z(@)lzlGSJVL{!&|rn;t6C>Oi)Oac;*f?wW8gfyii86T#$J&SY^PBj%Zpm?PHR+Fgm zb=L?Lqy|F#q>HdhF%QXhkata7y_`#kGXQ&lxEoiK_4lZ>Xh?h_{Cj7Nm4>aaiSlr8 zzZRM%*A9B(47^J^9-(O~vO_wU@{@8^{uQ=zmgAJ{qM)19%Q{Ys7f+Wbn5L?H;lU|F zI50q6w|nCbTh=BYQ<4!~gQ32~hBGG36WfMh|CJNbeb9xL)d1+40k|PCWiBzbZN6~Z z+Y;?f3Q4n9V2tjDnoM&SgI>Og7!CZj@FVGb(M;Mx%l|%$`TKJ;{9GaExii^rxcrtz zY`?6pFphSjLMXm19?{(zvGI1fEw6IA@5}LnJq(7w3$djx__JDzg45c%Cy_(q?9fH_ zpXOqpUp#KtF?&g(tFqUy>?9q`j--#$3tU>KquF#VXaY(3!-FxaXWH-_<)!c{DXUoE zweO3tH2vxR`MT7$!XAc&*3~H__CEa(m^dz%+O-Bw4Nk6p-gE^BpkytcxM^4e6f4wY zROHfzKL&2=fi*!pSTEtxSC7}QZSg6Gd1G{joj8EX=KDf*L)N>^OJTU-jiEM;Y~@G~PDW&q~++KPJ?MHAo=>0-hlxPL_gR7(ufJh0hUkKg== zT%7LOwnwu>>%aCc+ExT|r72xdGL*lJ4iKbupC>SjsWEqVkiU&+hv;Q&wiwT=r^f^Q zQ0cUx>6O9Iir2lH#i(XbG~As_!=h#Aq4WC8!i+YbGQidKFVBcnbPDr8dG<$S%mH~a zQ`6n|*Z*sQ1tL83O0*zvspsqgA7D)Jai|%+RnzOCHHX!$mLti|RSY`muD=LDAWV$8S#0T6deG=Jt)17=rZN&|ag^+wAM$f!{O(HQ zx9LIsb4_EFK5oohv?T`I#n#P(8(|-(mY>{e-F^iClFdf)*l2NT%C3s+e&xdE@5BK# zm-^G+$9I6Z;U1PH$Z?dBU~%)l6gR z*4;KyCr`so%)X`gO%=Nrq8tjLxG(--+I!*AmHemW9TjJ9Ud~luY(D4C_1#Z-!PFuM z%9>91fH1NyI=W4T{K6KiyL2NB&Q9IhgQY9fNQ_ed#8D_Dv*je*gEMxwb~z=W#k9hF zF;-~ibXR^N!2WWJsjrhqM}1jHfUBZK5GMZDfcCOwVe_`m&F35Fw|-17s^iDLeZIBV zlQl-ZB><4jJP^)Sgjha8>v!;lzBnFB9=C%jH3Jc?`8ppJlcuf_-8V+ROnF{0`cCI1 z^E6vGrxo}8^7pAA28K?zOzDq7SVGGWGQN+0`lzd41H;K5B$Kr>#~KYUyCxFVs5e%K z6M~DT(;>gcPWGu*A_ZRQ^x?FvXeDc^^=vv#wAhiBy+K}mwunw)4zk>cHp(4dES!Ba z(@e$aP-@YcEE*fqKb@#%RSC09(!uj@^}_2pB{a@xpvrVq7p~zz7+<6BCc;F=Nux28An0`0v2sH-SXuXz*PF;XK=`gWU}ap zkCaP`$`HmUXoXMB=z^3LSyZ6RQu1agm*PYmB9zVJ%*jxRx3j3{)*1OS69jsCd`%QB zxqW4}N+;uinIL`g*S8G77zbf#-DN|WgCw~##WzG)-1Ig%VK*`!nA)+ntQd{HP!%8c zfW37lPloruO4NGzrfJMZu?x0gT>Oru`91W;uMMv=ON6^Cc?Sr0y+G^vl|9Gz27h15 zu@v8cg)7A{G%LDuee0}T4Gkpp%)=iv!$*r^{z-^0$_Ev`fK9`YVfvLnFhhkrj?)IX zM5GFu_o=f9K&v)DLOs9VJY>T~n(+VutthzfURTPhB)w=}(kdD$`UC@7YAkANCdtX* zxYmG9SMKz7QuNUo_d+ok@Fnzjy2qj(FobRTR@6%qoA)b9e@HVJ^~bRFfY;BXUwv6_{`U(f zO{X0z0x?@92oQP}3-@6ElBW`PinWI*y(b1_(Q^M%Nb%clH1&3vW`zLQfpmkjc%)K` z+t7_UG#$k##jofhJlHfWQ;(mp>8Ee8EDE_vao;1+-$z{<{d3YWl#Run`KlsK8hJ_z z{DUIxxNiqi*a#spF7mrEW6>q2JvlHB?h_f@nC+PXu{}sd8%rf}#RA(kz)S9?D8aLt zNqlJ^6E_Y1L$QL#0C+F^+l);y6yG?6-oK*)p{uYSAjonts9@h`d!(oM%{Okg8>Vz2 zzga)z@ed@_li2#9OiPI6=SoKT1a1=vyWa>ui(6&kg2LgA!MbMC`d&^?{=)sCyv-+; z`XjxJvTScknpG5)e8K`)>Zi%+A>Ka4(*uhpuvPVGwuf+HCye|f9aSq}*`hKge?_H5 ztpz&@bT?TEzI;giUbshiiccnf#)VrT>q#)S+|=B=JKfq1%MgcQQizY?WsvN?n*s-9xILD*v1qbKABl6qVvh1-?Srtsr7p2zmj0f_F#p#qbr;a4l1XfG8I zDOrPKM+~8wZ+SPyOlEAJA8R!?MuRZte>h+PLYu zHdSDD$VMJBZEo)lI(OcE_uISj@T<(22Ru{*vwn{o#YddyT6&~4EHuJc5te9_pi)W} zPyELr&+q~?qy;XU-Qh)prCFP%6=2?m(OXSyB;o^Y*8b)6mrUfIe`dFh^ z;YLnq4h3;zlHp%ysCU|R`{jpR5bc3)AO&%@bp3w5P_MM|QSu;!D$wipmx5_kF!)XV z!8d$I!gykS6P2j-JiC%h4FfV7MXqu5!BWs1q237fK(w(4{moG3Oim?065?A_BDvN< zmNavYWs6v+mHxeV2^=e5C0ifvkMchONbtkdx!5@Tihelm68J>}s2eJ2)Gb8*;g52+ zC*IXEwQIX(H%ARL_BY`;hoXq6*Q+wog-hg)emGP#;EjA&HL0h7=0BM_$9E1<91hjN z4%8H(Az0$QgWY&lxa>al@||dR%1F~Ng1Eg_H3Z%0owvC&#u%EVa3ICKR=UB-R3aCP znZBz~y(<*zj8MOc?)NQ`8^}S_qzcgu@>03bMVz5lY1f_M)jjU;S4?*ui<0HT*lVu( z@@q+w6Jt>BO)&e#_Xce};2!giH*bkg*|ker_xBYms6}f|BIoTvRZ2 z`Ro@iO!?4#vWNUx=^)dWiFu&zNSMaK7kYyu|NMQop5NZ$xP~5ihO~*K) zEx+EAAC6|0S&;CFiy0yd<&8@jz-ShBmfH2o_D_Bk)&N9<=3BjSbV(;ZDTF#_G@_+N z=_bGYkmsT=fKP(Ly*{3`cT(WM_QGp+Xv=I*%Ai7u)N3eNG8g5K_F+wf6FF7EB1*3}@=!JYmGTm#SK*sa^bU3y;#m;)sAqQBFzb z%`kcXcg-n`D@9F0O$We(5&V|w7K{bAi#UkP?oX6VJ1x%Vp<*nEgE>;3Dz&hkUU-FY z{QNayyFOpd40N4ZDMDmMzB=W&3fxCgyK;h}oM!Rf;C_kR$pCP)FQo<#b8;k!ap$Ja zTg|N937VC7-9(iF=d+sPUB6Pp6zQ;E)M1w1eo>|r0(-W~!aQ*$=QMNxDw*PW_9Vfs z6DBV2?Dv~WjCSj>A1<+%awkc|f|Uz3qb2=G!3gPlAPuxe4;JnOCxe}$MsMn|6 z>(kOPi+wN^k@mQCP8d^ah8UO!2GHHfQh%5>UvWUcYj&&$HTlXHo~&(aQkU_~7s?Za zQ`2_5?OluCm2@GJP^{dmqjJz2Jhfv`lfNlko+8C;_t6M^pjs_o!^iJLFau6X!d*{D zt`R`oDCV`CYbp0bEV)v-k2Z$`M!{Mf{f7TX=tUgBP|Ra(_}ULIKN94Ee2sgF6f2n4HmE9mBi z7FDMF!ho={Ono2c{`N_8_oOHNzV^VK%eK=UwqSdf>I7s=cofu#xfDz}BdjwNlG5CzX~5=YScccBNcXwx zh0LGV5!%ZLPht)#__D-NySqs7Gt<6adw?+Qh8r-cUt;LCa$CWHfoP7ML2?iM_9nz5 zISZyB6^#{kf#VCb-cA|DVb`VZb(XtftLVun__DC%3TGy1AST`H6BH=2cGEN8#c1>r zBHG*WX~#06`aWWxM8R96<@o`=65iLw{PM97k;0Q9^OHPNrPk_#4Z zkNd)z$0P&BKJx&=A^)>Rsh}e5MD)X=WDg0I23i8=DgreB!aQ%K2^dsXtJw(f4_43A zEMyHPkZbB3O%WH4H(L4Ave6d{d`n?`nYefM(7<6hvj#t`ECqkX#(x@lI}M`0;?F-9 zztT3~Oz8tr!c1fmGT;LhlFi1o8K&-*nEj*z2O0uc@vGs&>(mwqnV8aC&i1(ZMPh#K z+p3@K?%WSc^#P9R=1$mI3P`)27MxE~2<1(axz`Lz&@_wbGuX6@1I?Wplrl&XdYLQ7 z@ATj`3m}Y|(dBy|i+!Bg8-7!Ln1|*#X|8U&+%DUli<3#j3QDppd=rf5t7Re-3u&Tr@5B9uYH5G@XinT5nd4r)iwFMP81P6;+pc64&LI_W@ zF+*w^R#czwLIfTy_(qo>PmWJ^mF;3$dKs#S@%IpB`o&xO8m4nKBv~rlOhxfGV}g<= zj*?Z2Hg#>|cb9Vh3>bn_OpzzaDN}knij2J?Wn#V#IsFbnCj zdVX~d#rnv&0O)ez>T6{dhTOrmQNWtQd^;J0ASDfmxc!H1?=)<~K56p=zoidYoikZS zDhFQ+X5J?61}AqD&d(BzwLBz}WB+DK>jRl6!sAZR+Az=M9ikCzKq~zH)kj zPvql^T@05zBTjEn%}9zukW5o{NGc7ZoXdU?p5|cJWAtDPq}Ng>XQk8qRbr!9+`dT| ztG?{np9M>gZ{-F!6thr)I98#2;cQnoY=d6su}h>XtnVgs5RpW?0}^mk2p22~Rf;x6 zuJ&c1X&piZ>R>g#0jLT#gAQvdAW!!dGIILh z(A&v~9EKHvGqru!l6oB`^P({EJ&8ROXrQ5?%&lYJ}7RQjf#zsj4@x z07lLige%>r+Qh^Z*|sI13Zqy_lf!a$+cK0DA?kUlhuCoNh7?HU*%mG$O!GNy-S8k4 zY|k&By8AFa{ucXq0Lf_`B>%iuj)l|-waAU3W4O`&TP&PI9$ZM>cKitJ#ezA)QRv>1 zv(=C^&=@5b3&#_m7|Y!YFxm5n!zW8oSyrF-H3|O*hMb^5P(Y*7#2Gl?$ozjL%e&G} zOdlkf)kTeD5ukvd%RmLDkHgrvrNJ`9(j{jVfj65}%?bfHAs2 z(&ulv+UH(FFh z^hm(})agw^nm~n})kyJ^Tn>SxtTRdZ?nEU=6?duUO72|vR1~D0>|eyPV#`W;$bTBf zREu)&$;I|&pw;BjQP@Cgb^4W8%=#@-cM5w75lyLhxxE8f{SFi`HUH?tJGK#|T;z{o z_rZl1ZROG$#rTxnxsZ3;KjKIQy>|34MTa55IdF0&oR;L3F>;CGFXvf+ZNCbABdWo= zDFb1{)i?CQ>J@0Ya*V56ED$!g`gC4=X)h3K5FRUud2*esk)D?rLPIEed{E5EDr^I0 z(s-^QDN49lVF1>YMm8jQ1Z|%o0HOd2@)c)0_H#c-A!co)*B=b1sc3;W0nGZj(mGzX z)zo*5{yUdReZDL>z4vcm{zj=v@Mi~z*PC&`XLfi{Mow(7#EfKSUb-fuoW5<3Ky$R$ zrsY5*f36?blm%^|4~yR^dn4Nj~}h*j)TNgPq#|w==&+)D#6CFFFqip%?+* zo=Ci>idxUoVg*@OU7yfln`ZlRPi#B8Qui)wfH;ni!9r1%)_VuH_ zPMyS@a=_X^$H4g}U(3j?R#3&+#}6AAd+cvvkexW6!J zAMyJ2He+Ah{8cU~E4~=Ymzz9vyrMF{S5W2B`VYN1PEem-Tb$S;=kc#|f;{xIU@;bl z71)iu*Gz7Ddxr=H2BriQ5KGfuF(lpzkB1)txY7dpIyd6K07jjF`hoz>04@*4)EDQ@ z1zb?N%?gi)2RX6b;0AvDA30%6wh8W{|K0t6FC@T0|G)pyZvJ%(y+1g9!a#%v_?FiR N6O1{!(!f38{{Y%*mJk2{ literal 35960 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 N002ovPDHLkV1lRKQ?md7 diff --git a/app/src/main/res/drawable/dapps1.png b/app/src/main/res/drawable/dapps1.png index b18d362ac7d99d37ef06d48d64f7a13918120585..2d4effaf8bd1008699de6b697a6c0f71f5eb9191 100644 GIT binary patch literal 31055 zcmb@tbzD?W^gp~HAPoyk_mx;WBm`-8=~zk{q)X{eK@eCZmK2fhmXZb~WR+45;awr9tcE?1c9)q z@b6(-uyI%#F%=DG17ja!Elnv~_vZrEcJ4Oz0s+rGF!wapg0<8aa@o|*_6#fm!YOIA|RdV;TXB86==eHFW6=Ic;6c82{5)~8X zV-*n+mJk#Y6BH8X7ZR2ddL$(x%=$kUAWO(9?Pcd6r3X{~pTRIS8NkWM$3sd`(BI!* z!2h9uyO*P&u%x7znk}iepz;- zHtxPYG5{d>ZxF%%83n_h;Q#W6sr)ZO_HGzhyfFOpE5TYY*x@)TXeod|^+`n6*0`8D zmbadYBB*whaT5f(2SR8X!2coq|HpN3aBy>Tb9Hq!KR=HtU@jXwhwJO>&CRXL%S%jk zczF2yzw6hp-$zGB$*7cyiprgxoxgwo_Vx8)9>g?O*Efxz%kS>)qP6d^@Q6VCI+(`O z)3b!~fxia_7Z;bex3^aeOyQvoaRKjp`#<}?Xngm)MlHDwjIOP(gWh$OV`JfxP;72(H9sx?qF-$9{2Wx=1G@J0 zh-w7Y^nyNo2DJ^gS(Je;60onV25|1(Nn`668Z#+8Wq#8Ms_(C|uk;QG{)Kz*4uMr` zR{^>z*gQU2zXbi=x*J6l*4tF5*}otWHN1mji|D#dU4ias@0}ikK3{`w{($bjVa3EJ z+_ix2LP2*Kpu2uhO>G0{`ooI}f5~NwEG~ea>+`Y>!ioaq6m3?fv z0fCSg7JiAK@{gd>j}_Ngpt`=SYn;1$5a_6XarCajq0-pG`mP29D!*#5F1NUm$9vla zx||3}$i3M;I67Gaxm~_^`D$=zg7A)v*a~^QGGepQ?zPOgJ{|oc`LfuI;c?D%>E{9O=V^HNM)2rx+lbxz zaMn=PMaV~UF6&`Qo!pI^h3@bZBXS&t|L!2BqCU&ISM}YMWjwV5* z^Cxyz%$1-t z+P%V@SX@}?)oMRnv>$S{FOa9f6Y8LLRU)!2+k*j~-}9esy%KTEf~}FXIv~W?n7q3h zH4AN|1?bbX+Biq~p3nRZCzHhy#cE?bgACR`hxDJ5i3jSBC(5bNNpG=OGz@r zH3MCk1a+ZYOiqd{SCHQT$Zip^ZZUHKhJNm zqqzvnsKauC=%)tloDkv|`M}9yMURJb8$tv|xL@-+({VT0@w7hLM;w-UK4c<$(C*A@ zt`A*OPIsqOu%$LI{_5|Hg9|SIC|aNYuAi0NqadWJ_q$MG;NDBHuL3UW_$$|MS1s(_ zzX&#`onO~kQKweSuf-wd=*$+M)Jhq(E`J|2iAT zv@u_C{NzH2fMM5JDC0~Kw^X?819y$ua6i=xLQSd*F#=5r#pu#3OriQo6rtt{-eV%= zCRXg1k?M;hPFmPR%LTouyk%~9n>^*e#4KGYRE-o$YU3ou2+nEC&&7EC#Y>v;n|KwY zE7UGT2>vTgZ&isHx}*c8ZHpm$fZB=A}Rqbaofe_m7$`gQ#g%A63VTm>!-^9X5@Khk>{HFQ8*7_UG>WZ=88c3DMSlYJmAQ7!?UJYb&_U@ zdQXI%yYWpe-wMnVFfuHgJMXC5=-I{U_&0R=nfivU5GQuJRPKYFNX9agHc^7>)`H%d zV{8X-j>7K{-||Tlm?MQMNJ%@H*Pk=u3pbjeoefi95nsj8Vl*!oDtrii$B8W&2gh^# zRP4hU!9+@~iOq>6iLh;?4shnjX2+I<*%GF~^cSukQr#6`5D-?^X`fK~@-Dlt>5fbhrix(f6 zujdHPN&55--(ZWc5F^y(|DGk8l_0oIX5(^J|5P74n$P2zz{=HtetM;;&f@o5g;-ME z_BmOn52r9#42;&LPZdk0C8mgYSH4}x!$!7b;`c43D6rltX-^p94gjp+a(wK%s%ONVPbrdD#2#mJ3J3CG3zj$C6U<5dSfP*M zX7oJ~(?>+yeM?MVXy@w$%p?hX_!K#q12*}vRTPy-CtI;?z~{915k`s>ZG;}A5pW;N zLSi>;FNa^g=~@w)qd;<9Bx8l}2kNos?5HfvqQwxCqWB~$iO!-zzI^$G^6x}6 zW4W3XHCCKFM{O2vFYq2(t|~fI`cXp#5F$WV@HBG&9p9+>>hQEpY*p35K1uD*3MVmA zo>V*z`zhEMV&G%x;GxV}!UcZ4p@`opYFXG|GahjLjE(E-zrK9f7d+_tw}$w9g-sl+EgK-LI@wliI^&~;4v^}o+0SEz&U)*l@+?yLN@SoF@fmo1&%%YV|MJ+7s&o0;tvs{ zY72(1-r}!5lWLjQV70=fic?#SgC9Rj%JMC5>Uxbein@+gUl{tcA}|SKbsS1BQ2W;@ z%VG0M?N9>)9eR^KGb{6ZHqP`TdF>h6E;YMVPJz7F7>XVv!_dDXt5r|Qk|%rvWlj1& zo*Gk;QAMcPlLugpvb}-nQM84e;!MKw^+-F9sj&pHBrPS(a|gfsVlWP&&y4#=6$vCC zi3w8*7D>c?F#Qw`Je_52km4Nr4WB7%ZJUpMF_QRL| zz=+|g8`U@If2wPV=}T*1{k<5|*9H#mz{q>q>p>k#9%ZSPKOD8SAIB(o@B(YNs(1L2 ztb38_kN=7!<8MVFJpbTTSt{>yaNdLG7a~f;Qsuh|6&KP*3ei(WI{hUtkb}kJXClgv z215i4LO4<29G$^izH;bl19bo$A2t-5Dvpz06A;`r!AP>P=$Dkt2sL?l6>m)--Mt)J zj5Y}Ik^LcpG!H!?zGg2-5hv(~2aJ9x$`2Is^1Vqbg#sx2%f@`0?*ST?pXE1F>*a`e zC=9=HqMr1AeN)#9#z!3VYqbf+)ADU0)mq6Bx>=KJPY^JYjYn;SJkJGf^SyV*B9ZWw z>Nio}H9&9-p<-SyD{A3$S_nLUS+@jNkn&+%6-J^D3Sw~uZC`f?HIY)$lNkQ)Jo8Fo zM)2iO#Lh!*TN8GzRP@E96a&8D45eXA2wyF$U7fk}`U|Zm*{g15$uk3u#5A!/#o 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 z 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 L1XZtnC+hzJg#b@h literal 38699 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

+ + + + xmlns:android + + ^$ + + + +
+
+ + + + xmlns:.* + + ^$ + + + BY_NAME + +
+
+ + + + .*:id + + http://schemas.android.com/apk/res/android + + + +
+
+ + + + .*:name + + http://schemas.android.com/apk/res/android + + + +
+
+ + + + name + + ^$ + + + +
+
+ + + + style + + ^$ + + + +
+
+ + + + .* + + ^$ + + + BY_NAME + +
+
+ + + + .* + + http://schemas.android.com/apk/res/android + + + ANDROID_ATTRIBUTE_ORDER + +
+
+ + + + .* + + .* + + + BY_NAME + +
+ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml new file mode 100644 index 0000000000..79ee123c2b --- /dev/null +++ b/.idea/codeStyles/codeStyleConfig.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml new file mode 100644 index 0000000000..ba5af7a4ce --- /dev/null +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -0,0 +1,92 @@ + + + + \ No newline at end of file From 36a9ea3e8a198722a9589d2126bbd56a5b9ded9a Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 22 Jul 2022 13:45:15 +0300 Subject: [PATCH 066/177] Updated on 2026-08-14 --- .idea/codeStyles/Project.xml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml index 96ff0f5af3..ad9c1261c4 100644 --- a/.idea/codeStyles/Project.xml +++ b/.idea/codeStyles/Project.xml @@ -1,5 +1,7 @@ +

S&jh1n&JeeMOkU4{=4@cYr6k z(ax=L|s)4kSST31>;ptckO_^V^T9xBEDa;HjTYh`K}oyXu_h<1|<>J?*}M z_pN2n9G6MC$WAI?$U?FnI``L8W)^o)BV!P5DDM^Dp<4A|-bV83(N%hr%JcH;Mvmvf zabV=(>{)?-Z6BOhoQIA_ZSX+;dyKbxbtFaJ@`~Go>%13f#KV-=OQ~q$bHK<788q}q z!3^#&4)djubc-6QXmCR$?(J^ht_2LE4uQDY_m6s@>c_n*5h&F(Lr&e$^R`oV+yy%Jm$1XX53TRMp- zTrza)av|@CQ{}l#7(OW#Vfbhu`!gXB&m>3y305S)ZQ{N3ES_8=bjPfxUdXZH$+=XJ znuGretdmtM`KG~}D_7Zz#W1=F5j{YnX5e&fuoLxoru79!-6YqGjZC#(KD2lj(0T>< z7E^c>)5x#ry~UT%Y3P!fAgSc!zFxHNxAe-i zd6O4EEtZ$goR=Xcu74xL9xPTh7L7l@Wz8S64(@z#+}ke>e{uilY2e1{a?iA{3XY(v zaT8V~dvssmY-72Hr~+H=p<-k>>KbgdhjhNA+}(gSc0AY~E6v>(a1wqdzTxNbfcu$rJo9co2}{f}e$KawlH4&%uLYUbl(0V=f z@6dW%%1)O&4%M#1$BYxNyI95W*qv^zGoF`VztTAToaMNLA1+4lbEX{2JDeCajdfwl`a34YDYx57q$G&3m&&*5FJa`QdcW z!F&sx@f-8=+4c=A_4xeY@xM0W08bJ0!K`u2V|b3BgKv#sk})5;*R`m2z$g4K31=L7 zO2NXX&$sCRKWS8oj$*6X&3xbdK9Cvc8W>}?c*23e^;wbt+BN>B-BZ`C1Fy+w%S(hvucm84bN}l zwTV?pSxM89wk91ZMWmB}6r~Cxy(ghd5s}`J zB1pHOVn750q$*87K=dsj5}JUtP(lfWl0blvKmy6V7jlz((@-hd?{oGh5ES3<_viii z{qf7@wX-`rJ3Djc%$YN1_UzSO9RK36Qa+^`mzq=ReCZOUyOds7`iIiVWonffQs!{k zSId4=_V;on%N;7`EdO-{y@Fqb+7%oX)ru`EeqQmie>eXL{=fO#0;~aT0;U8U2{;>& z9AH!`UFqXW36(2UUR~Ms(%>roRTfvdQ}wN?d#cr}How}B)$UhsUH!A_7hkUV@{U(J zzw+rTNi{mx*juwy&9OC4*37Qex7OTRKiB%LmaVq6cFWpRYyVa|wN8yX?dy!F^In|| zb)xE|)h$r>jk?n_ll){nqvOzE=CSA+KF-(5At64eq`E z?(3^w&uloX;hsi*jm9=Q(b&6j$Hu#x6m9Zh6L-_VrU#n6*lcO@0?ns4k8a`DVswjR zEnjW1SoVK3^`Ubum7#Gwt=;NTM;Nak+!4KN? zXt%oE?e;C(zt?_shpHX=cUaruMo0gSA9lRascNTHo&7t1(mA`!2VK(M81P1TSEcLl zuHoHkciY+hjqa{0_*Mwg8-mdfZ)VFW@&ashY zM}~}CFmmOnVx#7bT0Uyys9#3?Hu|N}UyM!|?HZ$v@f}lk%;+(Z@4of!sj;t*T|M^E zxOd0Jyf^s0JL6l8UpC%0q0xlx6Anx`HR1lh*>WaYC;Ck+GqK*pUK6KHTsv{!#1j)Q zPV%1AZqnvSk&~`Zx;weh58-`pf$*-|zH6jSm)mSop)AKl1x% z{zu8vx__*F%-hPJ4E*HSCvl(L|J3i(S3X_y>G4k=O)oXQ%k+fLDt)&7Gj~XlkeVSQ zLMDZ*2{{sScE)Qn=FBWH^YfYaKR^EY@h{&0;`Z!%vj@)pX^wTyr*nRp`@-Ch=7xRQ z;>)F9o|so`UZ;5<&pR={-2Be-=gr@HF&%*nQ zdM#SGSY14F@yW&RB~_O!ToSgl$kJ9zLzdc?wOqF0Yw`7@uN~hE{AR~D>B~DV-?*aW ziX|%|SC(J-&dQ%x+E=~2YV@jIs|&9#y?W&8tKYu$?Y3{-Yu;aTZEfSVE7sLq*L>Z| zb;;k=|8DAcw)Gv?hi(YiuxDe_jZxnReZS}XKQ_I!Y5S(QANu^T?}rONHu!PczpDJ} z%YUW*)cmK$<*y7`UG-)||frQ??2TXt=&zIDRZeLt7_dG^n{wyE2OZhL>*ylrc? zg>E~x?fSOVUpoA9V7vGBQQI$Ve-zp+bYrM(NAn%ScU;+#vUB{-sGT{xe0TZps=q66 z*IT46}wODsj}z8J=cHj`Rls9`rdc;M(k_5 zuhTx;{`&jB+wb~q)Ne5dsydYke0t>TBU_Gy9l3ra z<48_efv|wEMqzJ+jSTxVY+2Zru;XFZ!`w%`j+Q@K|7hol_b0KH&J2f~o9m!JIU(hfZBSm2&F$)7t4$r@Nf)b9%(-Pfjm8{oU!Ur;nY!b~^Qpex}TsSI@LRGvv&) zGfU3=bY}ONurpWBq(9cjt z2A}PJcJkSIXTLvt@a&bdY3Dkh+jTDDT;jPuB8x;;i)<13R^-^o&m&hyhDM%>ycwB& zzR>wP=ifd*=KPHFE6@LO{>1tC^Y<^P7m8e{a-rFU9v8-32)VHQ!nO-1FT`KSx>)dH zrHhR(_P99uV#vki7q?$Lc`@!{=B2kUy?1HWrEf3oymb1~%}ZHP1*6`NS`f7{YJb$l zsJN)i=mOCJ(T$?pM)!%H5dBH?(&%;3yP}Uo$3)+b{`0cmkE`OU_f@~ErLOv4t$wxc)ecvOUj69m;;a9I3=!BT%EXvaV_II#SM)c6E`DnW!$E?(701^H{-J73&od+FBjh+{*Cy) z@$bY>ik}`oFMfIay7(XCe~Ax|kBd)=e|WRl%^EiYZ+5=f^X9uZXWsnw=Jz)b-n?=% z?UvWAinm_B)%n(lThni?xD|S9->tA)*KcJc6ild`&?KQ-!svt<39A!!C7er0N>man zBvwtVm)Iilt;Dg3UnH(g{5A1>qCL^LUFvq-+nsKYxIO*$irb;L&)mL!`{A7ucWT{f ze`na8@pnGHv-Hm9J7ITX?zob?lKhhzC3R04oisCPb<&=s3rV)5$H_j)FC+&f*Gdjd z?w33zc|r0I$%m3-lGAKnwu-hUww|_kZ8L4FY@xPOwwtzWdqMk)_R97;_NMk8_R;nb z`wIIn_HcWgJ=0OZ;qR#FXygcVbaRY!Om}?a*y;##oO4`rBstuUM|ZvNmbmMGxBA_= zcOCa?+nt0C~aWcn6&rPW~MDnTb;HwZExD~vtG8>KYl-V8*KSvs>zwPFE6L?{d%G*T8@OA$ySV$fN4O`tKXrfU{>Ht* zz0JMf9qzv5j&~=!Q{CC_$LW^z!s#!hmrt*fUMsypdh_(4^e*Y|q)$&@p1v)8Px_(s znDm?J*%<{hif5F~sGLzFqfJJ~j2;<%Glpi2$(WQeEn{Y8;mp37`!kPbMrI~uKFCtD zie#0^s+v_Vt3_7FtX^3|v);>^mNh$TY1X=|Em^;!9ZC&Rtz2yL&7ax~@@;y53S-_d&5V|Fi{SxaWv09(sV6?Rs^Qn5(CX5A^BcJxiPz zt^X-TC?mv3^`Q7dJuRwglSDcFOMW?JsVJ{D5LMK&VzJg)6eIm)umubN13?3@8q5M+ zzyvT{af{i?4)L;HRJ7NJiWT%H7ezU*(xN%{ zG}g}xUp+$fQY(t3T6mNlw>N8reFMO30u?!o0U&=Sa+ClWwmWgHB zQSpxcp7_k#k@ziQq54?N)Puzk)g{`17V1p#u|8L<*6xb7YDwOpeki68KTZ1{go$@( z&$p}%L^o?=F`lvndQCGj^gz)^(hqy_kNmdFeCtv1h8`-W>q|sC^6ICr5#Q*i#30LR zQC@irP^<`1XGGA;Y%@VH-Vw6{)7@|B9>n(Gj*?uF*GF^<&mr|d_&?8gK zRW)O`-cStHPKeFgSK=#et5~Rw5i=xB)otP<^%YT1J1IU^ABll#Uw$)8Jo=XqkH-_T z%Jg_3VKu@=YGHVwpqR+4co}8cVc8@qLc@`k7NQ?91b91vYBUy8n#9%7>Y zg&58n&3auGwJGmly_*=OSD~#byS`9NQ&))N(6x%@q|7JaO&Q;XW0|(5=&lbCi!9%Z zx1qrx>k2VV-ylBH+ZeId_M)T35U*HM& z{~^$Et=12^Ulz5k{^AAQPxRK;i8Xo;uwK-(xWroQ9&2Qrc1={bM4I(oqxTUbtsjat z)^*h9cTvImI_Y|YE@HTK4&iW7M;~Q4I3H;}BdS@G$m2`nvCPNIoBL{r8G0`x&Z`Dx z`9rMIqeON1&DX1-IAbj+4q7jXWtK#-+(#F`dR>AyDvNH~4bfS)hd!USFCa?lny77_ z!%JQYdA=m3=jCmwC#LG{DC=V}h4vi@Cep_5fK5U?!1Dc|rqxI6pii%n<-pqg6S8N4 zK1^)X7E`AiT(iJ`8%0^`5b*--vs2$E*6>#9_sE*n)&(Na@;U9n+KzsmI$aPy(GE+z zUxnUTVu>XU-iQ|CpmSrq+g|pnDPFVmho26L<@$1XYCPc>@j2m_);gl4e#p3K=G|AU zw&XxN7qs6=8Q>S%Z?o>?8C{V}EyP;c5A>hJC@`9}o+j{nQ%h~0(+d8&FW$C(E&4$3 z;nrT_bxRHLD&Jn}q4QhIUPncsb*gCTg&eeQ5Q|CszFuC8uxt~RE&d`H-dN7>EY;C7 zL`}_KjMqyD;r%jp)!b0s&u~xxdETG6&p58j@kStp{UwjYS6@SJ14}D-v?cQU2T@pA zB?g1K$_nukVORCC7^U72&D5jfCFEGJzDT^S?iBOrzh7JW^851BMGvnnB2axtj0Js= zF-?&*uWN(pAILH5TcVnWI2a6aV7DD6gB8dL*lO8Twl76UK$OzSE(pTkJ zQdG3i>xeIOZ&5?-EcU32#CxiSEYC!SzsGaui)Pl#9_VR=-wNIjfPVEwKko*jKjoKl zbQvCXg*JtTh`@{XyaXpytXp#%CQPw0sTNP&;)b^ z9kk_Q5#!=I%|_ZLqJn;047YSfcD_X4E-sc@niKkprFsb0sV}m89`e07AA;{k!m5ZPAfueXcA)Zf>Fs`^8MrjZ%Li%pCI)tS)Y7R9vCOlGnNxx00-bFkA5X}to%T?lKNF1 z&}T|Ym^viS`&%gM#q*?Y`P>kF(^8r?l698l`46GgNo70yV+f6;&IrBsQjfKS=LmNa zItinoXDKD!cu2Szono&Ri-$G3t<;myRX0l=lYY8ENk`8?*Cl*ghUy%~LK#Lf&dFy$ zpTCCs7~`O97fG+bhK!{@(Z3ethHvJE!%UqSz4bqaCJ&+8<`2V#k8F3@7XNMNg-$N@ zV#y=2-ArCVH<$Xc)Y0>YQcsn7saY4PlZF_FO-LC_-~UG-AEX?~55-{|M&2$YJOy@{ za#!}7ze39J{E#v}|Ffj*$q(dF{^#T!OPT%*WZ!fc-+(P3g0fh_T#a$S91nJjne=IM ze2}48J~=i>^BRHmo2-EhVW{0%h!g@ zQqL%1d56Bg!uZy_j&5T1586rc9z48P^6X#dW0FT?yK=2Dd0jEvSnA?Z|3+sr^=@=) zb50@qww${#U!v__=2^*7?>759p{aMvK8emRc~m~r%u~(>85`vDrEdMCd@>#BDc_D~ z%EkP^oGVH>K>1|ZO!*}Hyws^>IdbQKrc9wMQXXhh|E7P?55JOf$(#qGf6Fv^y!_WN zkGIYFvz%8~V17;imU@;flbk>1$*H`unzDy-m~$8A8y+3nc<9|n^z-RJpO$l5^#43L zX3~^-jiiSca}7B^Fxx}UrSr+bygrmC*G&DC`IwxO<=yurZ)hfIA!%oZd9ox=ug?pa zr^va4q`N75{~9vCG3Ox6Ys|R^bLzbMK0h=fo*(}ldH$FB<=vN8zkd#S3!u62+do~G zv}64FmhgMp`isBH&wS_Y^u@-BeCN-~+r0Vje+vI9Hy0yEnJ?$foBt`yg%cEEp?AEKX=Ti zq5qf@Bke!3|C#n5$uH6lB*WbCRQ7W@Hs*!7W8>^6{VDI+QZFgw$&2U6F>mIRu`PG( zlFvndE+=J9UYOU1^Tr^{$((wo+^=K|vs5%f)R&A|dN{Idq)}FXWTctb(A}iGH)W_P z-_hsM?WLaoL~cv{U&`d%xq>q#GB+>_6y zUwk1al3rtTc;UjQ!-KLp9ewJ0rj~LZ<@sYZThnJNi-m=i?bR06#+8bmP`f1Fk>*DU z&tC$rRo#StKhFGROuMdK+lf}JqVsjY93kHETCH+H`A%Nbn^;0Q@t3|#@|hMtp8`6W zsj6nRcv)3V(=D9nyvLgRr>Y$2-d6rB7OPdYSosEc-kCRXs;=s~W~OFOa@AX&Xl$&f zbBV0U!)j5j^4#J@Vol>B&(w7~v2;xhKM#$9sFpf8gy^ zz{jGSk1)?T@;uv1#>q$dm`7eb%*X1(O(sobk>nvy2Hqqgt&B4deZ0(@C=Xwv^Rf77 zl2WRoKzl2{$t_y|qF6NDs`}6hw1byd0WU9EI_}YZWOd9Z@pRcFB-Nl4CAWGBA8zq9 zfq8|Utd#l3y^z`}OAYa5>21Cq} za+7W2xvH6jmicp!>O~tp`IA+XT=V3Q`zRA_tI8+IJIz0NT_(*tmlyN>nYlbU*K?ak zmdD)kC4LfTW+(4cd7h+|>l&y+>VQe}e@s<;(HEvq(E`=|%iQ|cKt zUd_}LdXJCht5w$KX$!Qa+6FCD+pnGBU8E>2Mz5mR(S!7^`cQqm{*gXg|4!em@8BB& z=k=?4qMprnq5Ukyc@eHi5KK=#$i~7IdU%|hUe>MNQ{`LKv_&4(p z^q=DYng1sLE&f0I@8JEQLjjh6;sGTCDg{&xs2wn{l3K}H$+uFmN@Xfls8pj;`$~f= zji?flrrtmPP|q<8`Fn-(PuAL>T5q7%zlbn#N?a6nz6fY2eo8T=s#0BfRq3e=Rz~I4 zdcCrpT0c-r<<|NnwZ2BJQI>LRJ&Rf|)Rt-AYdf^xvl^otB;}fMOgU#9Wym}N@Cr~^ zHB_(~DLcUy@Uv0U@G>kpf8?YnX_8nuBXRSeJe`adhI4JDU^x+}V)WEioXGcO4TlKx%?5Avs}P!jgnV3A1i}o$ygY zms?wI{(NiQt+lt7-&%HS&aHQE^}N;nMr!fB1%9_4P>(C8On#Szd-|8eAvIF)yHo1r zgX{Z?9Xe+M8 znR<-$;D7m3KT|{08R|^+b9ENh&5zYZ>SA??x>Q}Jel4(Ds^6%~)fMVWb(NSUzED@I z->PfWwdy+cJ26|#QMagD)t}XE>M!bcF;{%4hN?T%o$4+X%Y!(^Qx07K_AUHC@e6Gu13LTfMLTE|!R;>L2Q#>I3zm`bd4u zH^IKv3TcHkKdq=%Oe?N_s!mtGP}gfUw3=Eit+rM`E2tIGeCe6nwb>$6o1@Le&b@S zv>&t|ML1U4ll1k|yk{OE&Wdx|zeJ=suO(^QM3nZ6h}O0vwRUJb#bt3t#Av&cRLUU{B`Um=lT85U1^qr%BrgT=i=%4D-wJa@LyU&+wx+>iizF>^B z@2R|njGm_SQr=d2>k3i~l~t+$x>f0;^wmGsKhewT<&=I(e`SC&5UKX1GDt74&r`-L z6OeH<^Zt)BI>{E;{LT8odHT!^bZczss#7wUAd3{JpXwehR^d4_8&E5c&J{*47o63UY|Ptq2kTn zquKZD9T3{8PuVAjBl`4dQY%!K*>DG`=k+0jF}WEKno)Hg*9x`N?BpM+RqfWhd+*SY zz_OvO0{fH=2=EUI4eQoBG%T=eK%YLfLak5ANLfD}UCL8hubQFOS89cNdvbWQcWA4! zp`y>cc{0B@dshw!4VgEu>^y3acOLfa`95Boe;bYpTJt7J~cbN**l0L22jKTHAAZh)e0?GGxTMGLN#|(Q|9{5d$afcRzerU_IZoB zJ$vsL)iuY2K4n8IQ&|7G`~09=Zk()T;hLeX=I-+seS7bCSp=5d&#MWJK;jG42*rnZ zr{bs9P<9qo*zYacq;8e6e!`n2V5NQ2+5sgv+^hC(->ABIr1fa~T9uMAP9NB%S&h>2 z$ntv4N~L|}k#*vL;Cf}{k=K$B`ZuX8kG!Xk?AEx9Jo4!o^mTRnT#u3!mp5zRUQ>-Rn`22+lh2TSLP{ZH`(KGnTN≤FHXCuU9Qce=@vmZ{%9^5??OaVQJ8!4u8-w;yt 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 X76wnEi(n^v8!x?bp_;lO!DIggn3ZN8 literal 0 HcmV?d00001 diff --git a/app/src/main/res/layout/fragment_details.xml b/app/src/main/res/layout/fragment_details.xml deleted file mode 100644 index 76ddbacba0..0000000000 --- a/app/src/main/res/layout/fragment_details.xml +++ /dev/null @@ -1,304 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/layout/fragment_details_security.xml b/app/src/main/res/layout/fragment_details_security.xml deleted file mode 100644 index ca92dc6076..0000000000 --- a/app/src/main/res/layout/fragment_details_security.xml +++ /dev/null @@ -1,229 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_details_security_privacy.xml b/app/src/main/res/layout/fragment_details_security_privacy.xml deleted file mode 100644 index 952aef80a8..0000000000 --- a/app/src/main/res/layout/fragment_details_security_privacy.xml +++ /dev/null @@ -1,155 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/values-de/strings_final.xml b/app/src/main/res/values-de/strings_final.xml index b16f96f533..2d132a1ac5 100644 --- a/app/src/main/res/values-de/strings_final.xml +++ b/app/src/main/res/values-de/strings_final.xml @@ -62,12 +62,35 @@ This network is not supported. Please select another network. %s network - Security & Privacy - Security - Privacy - Change access code - Change access method - Change Access Method - Save cards - Save passwords + Card Settings + Security Mode + Selected application protection method + Change access code + Access code will be changed on this card only + Get your card ready! + Scan the card to change its settings. The changes will impact only the card you’ve scanned and will not affect other cards tied to your wallet. + Scan Card + App settings + Enable biometric authentication + Go to settings to enable biometric authentication in the Tangem app + Keep the wallet in the app + Enable to link all the wallets to Tangem app. Biometric authentication will be required for unlocking the app. Transaction signing requires tapping your Tangem card. + Save Access Code + Biometric authentication will be requested instead of the access code for interactions with your card. + Removing the saved card deletes all the saved wallets and their access codes. + This will delete all the saved wallet access codes. Any further operation with the wallet will require submitting the access code. + WalletConnect + Connect to Dapps + + Link More Cards + You can synchronize up to three cards into one wallet. It can only be done once. + + Privacy policy + + This action will lead to the complete removal of the wallet from the selected card and it will not be possible to restore the current wallet on it or use the card to recover the password + I understand that after performing this action, I will no longer have access to the current wallet + Reset the card + Factory Reset will completely delete the wallet from the selected card and you will not be able to restore the current wallet or use the card to recover the access code. + + \ No newline at end of file diff --git a/app/src/main/res/values-fr/strings_final.xml b/app/src/main/res/values-fr/strings_final.xml index 027a27e7a8..2212277ceb 100644 --- a/app/src/main/res/values-fr/strings_final.xml +++ b/app/src/main/res/values-fr/strings_final.xml @@ -62,12 +62,34 @@ This network is not supported. Please select another network. %s network - Security & Privacy - Security - Privacy - Change access code - Change access method - Change Access Method - Save cards - Save passwords + Card Settings + Security Mode + Selected application protection method + Change access code + Access code will be changed on this card only + Get your card ready! + Scan the card to change its settings. The changes will impact only the card you’ve scanned and will not affect other cards tied to your wallet. + Scan Card + App settings + Enable biometric authentication + Go to settings to enable biometric authentication in the Tangem app + Keep the wallet in the app + Enable to link all the wallets to Tangem app. Biometric authentication will be required for unlocking the app. Transaction signing requires tapping your Tangem card. + Save Access Code + Biometric authentication will be requested instead of the access code for interactions with your card. + Removing the saved card deletes all the saved wallets and their access codes. + This will delete all the saved wallet access codes. Any further operation with the wallet will require submitting the access code. + WalletConnect + Connect to Dapps + + Link More Cards + You can synchronize up to three cards into one wallet. It can only be done once. + + Privacy policy + + This action will lead to the complete removal of the wallet from the selected card and it will not be possible to restore the current wallet on it or use the card to recover the password + I understand that after performing this action, I will no longer have access to the current wallet + Reset the card + Factory Reset will completely delete the wallet from the selected card and you will not be able to restore the current wallet or use the card to recover the access code. + \ No newline at end of file diff --git a/app/src/main/res/values-it/strings_final.xml b/app/src/main/res/values-it/strings_final.xml index 2645b859e0..96a8c364ac 100644 --- a/app/src/main/res/values-it/strings_final.xml +++ b/app/src/main/res/values-it/strings_final.xml @@ -63,12 +63,34 @@ %s network - Security & Privacy - Security - Privacy - Change access code - Change access method - Change Access Method - Save cards - Save passwords + Card Settings + Security Mode + Selected application protection method + Change access code + Access code will be changed on this card only + Get your card ready! + Scan the card to change its settings. The changes will impact only the card you’ve scanned and will not affect other cards tied to your wallet. + Scan Card + App settings + Enable biometric authentication + Go to settings to enable biometric authentication in the Tangem app + Keep the wallet in the app + Enable to link all the wallets to Tangem app. Biometric authentication will be required for unlocking the app. Transaction signing requires tapping your Tangem card. + Save Access Code + Biometric authentication will be requested instead of the access code for interactions with your card. + Removing the saved card deletes all the saved wallets and their access codes. + This will delete all the saved wallet access codes. Any further operation with the wallet will require submitting the access code. + WalletConnect + Connect to Dapps + + Link More Cards + You can synchronize up to three cards into one wallet. It can only be done once. + + Privacy policy + + This action will lead to the complete removal of the wallet from the selected card and it will not be possible to restore the current wallet on it or use the card to recover the password + I understand that after performing this action, I will no longer have access to the current wallet + Reset the card + Factory Reset will completely delete the wallet from the selected card and you will not be able to restore the current wallet or use the card to recover the access code. + \ No newline at end of file diff --git a/app/src/main/res/values-night/colors.xml b/app/src/main/res/values-night/colors.xml new file mode 100644 index 0000000000..9be291c700 --- /dev/null +++ b/app/src/main/res/values-night/colors.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 1fbdfd7a66..53811aa061 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -307,7 +307,6 @@ Активный. Количество резервных карт: %d Связано. Количество резервных карт: %d Нет резервной копии - Создать резервную копию У Вас есть прерванное резервное копирование. Хотите возобновить? Да, возобновить Отказаться @@ -323,7 +322,6 @@ Подготовьте резервную карту с номером %s Подготовьте основную карту с номером %s Сброс до заводских настроек - Это действие необратимо. Если после сброса карты кто-то отправит на нее средства, то Вы не сможете их вывести. Код доступа доступен только для карт с резервной копией Сеть Solana взымает арендную плату в размере %s каждые 2 дня. Аккаунты, которые не могут позволить себе арендную плату, удаляются из сети. Пополните свой счет более чем на %s, чтобы использовать его бесплатно. %1s (%2s) diff --git a/app/src/main/res/values-ru/strings_final.xml b/app/src/main/res/values-ru/strings_final.xml index 158fab15b2..fe80b7139f 100644 --- a/app/src/main/res/values-ru/strings_final.xml +++ b/app/src/main/res/values-ru/strings_final.xml @@ -76,14 +76,36 @@ У вас есть карта банка другой страны или платежной системы UnionPay? Да - Задать вопрос + Чат + + Настройки карты + Тип безопасности + Выбранный способ защиты приложения + Смена кода доступа + Код доступа будет изменен только на данной карте + Приготовьте свою карту + Отсканируйте карту, чтобы изменить ее настройки. Изменения затронут только ту карту, которую вы отсканировали, и не повлияют на другие карты, привязанные к вашему кошельку. + Сканировать + Настройки приложения + Включите биометрическую аутентификацию + Перейдите в настройки, чтобы включить биометрическую аутентификацию в приложении Tangem + Cохранение кошелька + Если эта опция включена, кошельки всех отсканированных карт будут привязываться к приложению и при открытии приложения будет необходимо пройти биометрическую аутентификацию. Подпись транзакций все так же потребует карту. + Сохранение кода доступа + Если эта опция включена, пароли от карты будут хранится на телефоне в зашифрованном виде и при работе с картой вместо пароля будет запрашиваться биометрическая аутентификация + При отключении функции сохранения кошелька все ранее сохраненные кошельки будут удалены. + Все сохраненные коды доступа будут удалены. Вам потребуется вводить код доступа при работе с кошельком. + WalletConnect + Подключение к Dapps + + Добавить еще карты + Вы можете объеденить до трех карт в одним кошельке. Это можно сделать только один раз. + + Privacy policy + + Данное действие приведет к полному удалению кошелька с выбранной карты. Восстановить на ней текущий кошелек или использовать карту для восстановления пароля будет невозможно + Я понимаю, что после выполнения этого действия у меня больше не будет доступа к текущему кошельку + Сбросить карту + Сброс к заводским настройкам полностью удалит кошелек с выбранной карты, и вы не сможете восстановить текущий кошелек или использовать карту для восстановления кода доступа. - Безопасность и приватность - Безопасность - Приватность - Изменить код доступа - Изменить защиту доступа - Изменить защиту доступа - Сохранять карты - Сохранять пароли diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 70a942b055..b00c6603a8 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -64,4 +64,82 @@ #CA0F03 #EFEFF0 + + #DE1010 + #007AFF + #000000 + #0029FF + #919191 + #656565 + #494949 + #3B3B3B + #303030 + #1E1E1E + #06311F + #ED7979 + #F5F5F5 + #EBEBEB + #D3D3D3 + #C9C9C9 + #B0B0B0 + #A3EBCC + #1ACE80 + #FFB71B + #FFFFFF + + + #000000 + #FFFFFF + #FFFFFF + #F5F5F5 + + + + #EBEBEB + #1ACE80 + #A3EBCC + #1E1E1E + #EBEBEB + + + #1ACE80 + #FFFFFF + #EBEBEB + + + + #EBEBEB + #F5F5F5 + + + + #1ACE80 + #FFB71B + #C9C9C9 + #B0B0B0 + #000000 + #FFFFFF + #656565 + #DE1010 + + + + #EBEBEB + #663B3B3B + #FFFFFF + + + + #1ACE80 + #FFB71B + #FFFFFF + #C9C9C9 + #1E1E1E + #FFFFFF + #656565 + #919191 + #DE1010 + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings_final.xml b/app/src/main/res/values/strings_final.xml index daca6f30ab..4a732df7a2 100644 --- a/app/src/main/res/values/strings_final.xml +++ b/app/src/main/res/values/strings_final.xml @@ -77,15 +77,38 @@ Yes No - Ask a question - Security & Privacy - Security - Privacy - Change access code - Change access method - Change Access Method - Save cards - Save passwords - При отключении данной опции все сохраненные карты и пароли будут сброшены, все данные удалены. Для входа в приложение понадобится прикладывать карту. - Все сохраненные пароли от карт будут удалены. Для проведения операций с картой вам необходимо будет вводить пароль. + Chat + + + Card Settings + Security Mode + Selected application protection method + Change access code + Access code will be changed on this card only + Get your card ready! + Scan the card to change its settings. The changes will impact only the card you’ve scanned and will not affect other cards tied to your wallet. + Scan Card + App settings + Enable biometric authentication + Go to settings to enable biometric authentication in the Tangem app + Keep the wallet in the app + Enable to link all the wallets to Tangem app. Biometric authentication will be required for unlocking the app. Transaction signing requires tapping your Tangem card. + Save Access Code + Biometric authentication will be requested instead of the access code for interactions with your card. + Removing the saved card deletes all the saved wallets and their access codes. + This will delete all the saved wallet access codes. Any further operation with the wallet will require submitting the access code. + WalletConnect + Connect to Dapps + + Link More Cards + You can synchronize up to three cards into one wallet. It can only be done once. + + Privacy policy + + This action will lead to the complete removal of the wallet from the selected card and it will not be possible to restore the current wallet on it or use the card to recover the password + I understand that after performing this action, I will no longer have access to the current wallet + Reset the card + Factory Reset will completely delete the wallet from the selected card and you will not be able to restore the current wallet or use the card to recover the access code. + + diff --git a/app/src/main/res/values/strings_untranslated.xml b/app/src/main/res/values/strings_untranslated.xml index 84f36c07bf..75d4b42eed 100644 --- a/app/src/main/res/values/strings_untranslated.xml +++ b/app/src/main/res/values/strings_untranslated.xml @@ -131,7 +131,7 @@ There are only %s signatures available on this card. You must withdraw all of your funds. //Wallet Connect - Wallet Connect + WalletConnect Wallet Connect Sessions WalletConnect session opened with %s Ooops. No Sessions. @@ -283,7 +283,6 @@ Active. Backup cards count: %d Linked. Backup cards count: %d No backup - Create backup You have an interrupted backup. Do you want to resume? Yes, resume Discard @@ -299,7 +298,6 @@ Prepare the backup card with number %s Prepare the primary card with number %s Reset to factory settings - This action is irreversible. If, after resetting the card, someone sends funds to it, then you will not be able to withdraw them. Access code is available only for cards with a backup. diff --git a/domain/src/main/java/com/tangem/domain/common/TapWorkarounds.kt b/domain/src/main/java/com/tangem/domain/common/TapWorkarounds.kt index 644cc7525e..e273a4dae2 100644 --- a/domain/src/main/java/com/tangem/domain/common/TapWorkarounds.kt +++ b/domain/src/main/java/com/tangem/domain/common/TapWorkarounds.kt @@ -42,8 +42,7 @@ object TapWorkarounds { return false } - @Deprecated("Use ScanResponse.isTangemNote") - fun isTangemNote(card: Card): Boolean = tangemNoteBatches.contains(card.batchId) + fun Card.isTangemNote(): Boolean = tangemNoteBatches.contains(batchId) fun isTangemWalletBatch(card: Card): Boolean = tangemWalletBatches.contains(card.batchId) From fd93510a748b290655d4f73e7e7b11311bbdcfa6 Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 1 Aug 2022 01:11:18 +0300 Subject: [PATCH 115/177] Updated on 2026-08-14 --- .../ui/compose/CollapsedCurrencyItem.kt | 155 ------------- .../tokens/ui/compose/ExpandedCurrencyItem.kt | 152 ------------- .../tokens/ui/compose/ListOfCurrencies.kt | 12 +- .../currencyItem/CurrencyExpandedContent.kt | 62 ++++++ .../{ => currencyItem}/CurrencyItem.kt | 28 ++- .../compose/currencyItem/CurrencyItemArrow.kt | 91 ++++++++ .../currencyItem/CurrencyItemHeader.kt | 208 ++++++++++++++++++ .../compose/{ => currencyItem}/NetworkItem.kt | 89 +++++--- 8 files changed, 438 insertions(+), 359 deletions(-) delete mode 100644 app/src/main/java/com/tangem/tap/features/tokens/ui/compose/CollapsedCurrencyItem.kt delete mode 100644 app/src/main/java/com/tangem/tap/features/tokens/ui/compose/ExpandedCurrencyItem.kt create mode 100644 app/src/main/java/com/tangem/tap/features/tokens/ui/compose/currencyItem/CurrencyExpandedContent.kt rename app/src/main/java/com/tangem/tap/features/tokens/ui/compose/{ => currencyItem}/CurrencyItem.kt (53%) create mode 100644 app/src/main/java/com/tangem/tap/features/tokens/ui/compose/currencyItem/CurrencyItemArrow.kt create mode 100644 app/src/main/java/com/tangem/tap/features/tokens/ui/compose/currencyItem/CurrencyItemHeader.kt rename app/src/main/java/com/tangem/tap/features/tokens/ui/compose/{ => currencyItem}/NetworkItem.kt (70%) diff --git a/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/CollapsedCurrencyItem.kt b/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/CollapsedCurrencyItem.kt deleted file mode 100644 index 5ac13c1815..0000000000 --- a/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/CollapsedCurrencyItem.kt +++ /dev/null @@ -1,155 +0,0 @@ -package com.tangem.tap.features.tokens.ui.compose - -import androidx.compose.foundation.Image -import androidx.compose.foundation.background -import androidx.compose.foundation.clickable -import androidx.compose.foundation.layout.* -import androidx.compose.foundation.shape.CircleShape -import androidx.compose.material.Text -import androidx.compose.runtime.Composable -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.draw.clip -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.painterResource -import androidx.compose.ui.text.font.FontWeight -import androidx.compose.ui.unit.dp -import androidx.compose.ui.unit.sp -import coil.compose.SubcomposeAsyncImage -import coil.request.ImageRequest -import com.tangem.blockchain.common.Blockchain -import com.tangem.domain.common.extensions.fromNetworkId -import com.tangem.tap.common.extensions.getGreyedOutIconRes -import com.tangem.tap.common.extensions.getRoundIconRes -import com.tangem.tap.domain.tokens.Currency -import com.tangem.tap.features.tokens.redux.TokenWithBlockchain -import com.tangem.wallet.R - -@Composable -fun CollapsedCurrencyItem( - currency: Currency, - addedTokens: List, - addedBlockchains: List, - onCurrencyClick: (String) -> Unit -) { - Row( - modifier = Modifier - .fillMaxWidth() - .clickable(onClick = { onCurrencyClick(currency.id) }) - ) { - val blockchain = Blockchain.fromNetworkId(currency.id) - - SubcomposeAsyncImage( - model = ImageRequest.Builder(LocalContext.current) - .data(currency.iconUrl) - .crossfade(true) - .build(), - contentDescription = currency.id, - loading = { CurrencyPlaceholderIcon(currency.id) }, - error = { CurrencyPlaceholderIcon(currency.id) }, - modifier = Modifier - .clip(CircleShape) - .padding(16.dp) - .size(46.dp), - ) - Column( - modifier = Modifier - .fillMaxHeight() - .weight(1f) - .align(Alignment.CenterVertically) - ) { - Text( - text = currency.fullName, - fontSize = 17.sp, - fontWeight = FontWeight.Normal, - color = Color(0xFF1C1C1E), - ) - Spacer(modifier = Modifier.size(6.dp)) - Row { - if (!currency.contracts.isNullOrEmpty()) { - currency.contracts.map { contract -> - if (contract.address == null) { - BlockchainNetworkItem( - blockchain = contract.blockchain, - isMainNetwork = true, - addedBlockchains = addedBlockchains - ) - } else { - val added = - addedTokens.map { it.token.contractAddress } - .contains(contract.address) - val icon = if (added) { - contract.blockchain.getRoundIconRes() - } else { - contract.blockchain.getGreyedOutIconRes() - } - Image( - painter = painterResource(id = icon), - contentDescription = null, - Modifier - .size(20.dp) - ) - Spacer(modifier = Modifier.size(5.dp)) - } - - } - } else { - BlockchainNetworkItem( - blockchain = blockchain, - isMainNetwork = false, - addedBlockchains = addedBlockchains - ) - } - } - } - Image( - painter = painterResource(id = R.drawable.ic_arrow_collapsed), - contentDescription = null, - Modifier - .padding(20.dp) - .align(Alignment.CenterVertically) - - ) - } -} - -@Composable -fun BlockchainNetworkItem( - blockchain: Blockchain?, - isMainNetwork: Boolean, - addedBlockchains: List -) { - val added = addedBlockchains.contains(blockchain) - val icon = - if (added) blockchain?.getRoundIconRes() else blockchain?.getGreyedOutIconRes() - if (icon != null) { - Box(Modifier - .size(20.dp)) { - Image( - painter = painterResource(id = icon), - contentDescription = null, - Modifier - .size(20.dp) - ) - if (isMainNetwork) { - Box( - modifier = Modifier - .align(Alignment.TopEnd) - .size(7.dp) - .clip(CircleShape) - .background(Color.White) - ) { - Box( - modifier = Modifier - .align(Alignment.Center) - .size(5.dp) - .clip(CircleShape) - .background(Color(0xFF1ACE80)) - ) - } - } - } - Spacer(modifier = Modifier.size(5.dp)) - } -} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/ExpandedCurrencyItem.kt b/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/ExpandedCurrencyItem.kt deleted file mode 100644 index cecf873bf9..0000000000 --- a/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/ExpandedCurrencyItem.kt +++ /dev/null @@ -1,152 +0,0 @@ -package com.tangem.tap.features.tokens.ui.compose - -import androidx.compose.foundation.Image -import androidx.compose.foundation.clickable -import androidx.compose.foundation.layout.* -import androidx.compose.foundation.shape.CircleShape -import androidx.compose.material.Divider -import androidx.compose.material.Text -import androidx.compose.runtime.Composable -import androidx.compose.ui.Alignment -import androidx.compose.ui.Modifier -import androidx.compose.ui.draw.clip -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.painterResource -import androidx.compose.ui.res.stringResource -import androidx.compose.ui.text.font.FontWeight -import androidx.compose.ui.unit.dp -import androidx.compose.ui.unit.sp -import coil.compose.SubcomposeAsyncImage -import coil.request.ImageRequest -import com.tangem.blockchain.common.Blockchain -import com.tangem.tap.domain.tokens.Currency -import com.tangem.tap.features.tokens.redux.ContractAddress -import com.tangem.tap.features.tokens.redux.TokenWithBlockchain -import com.tangem.wallet.R - -@Composable -fun ExpandedCurrencyItem( - currency: Currency, - addedTokens: List, - addedBlockchains: List, - allowToAdd: Boolean, - onCurrencyClick: (String) -> Unit, - onAddCurrencyToggled: (Currency, TokenWithBlockchain?) -> Unit, - onNetworkItemClicked: (ContractAddress) -> Unit -) { - Column { - Row( - modifier = Modifier - .fillMaxWidth() - .clickable(onClick = { onCurrencyClick(currency.id) }) - ) { - SubcomposeAsyncImage( - model = ImageRequest.Builder(LocalContext.current) - .data(currency.iconUrl) - .crossfade(true) - .build(), - contentDescription = currency.id, - loading = { CurrencyPlaceholderIcon(currency.id) }, - error = { CurrencyPlaceholderIcon(currency.id) }, - modifier = Modifier - .clip(CircleShape) - .padding(start = 16.dp, top = 16.dp, end = 16.dp) - .size(46.dp), - ) - Column( - modifier = Modifier - .fillMaxHeight() - .weight(1f) - .padding(top = 14.dp) - .align(Alignment.CenterVertically) - ) { - Text( - text = currency.fullName, - fontSize = 17.sp, - fontWeight = FontWeight.Normal, - color = Color(0xFF1C1C1E), - ) - Spacer(modifier = Modifier.size(6.dp)) - Text( - text = stringResource(id = R.string.currency_subtitle_expanded), - fontSize = 13.sp, - fontWeight = FontWeight.Normal, - color = Color(0xFF8E8E93), - ) - } - Image( - painter = painterResource(id = R.drawable.ic_arrow_extended), - contentDescription = null, - Modifier - .padding(20.dp) - .align(Alignment.CenterVertically) - ) - } - - val blockchains = currency.contracts.map { it.blockchain } - - Row { - Box( - modifier = Modifier - .fillMaxHeight() - ) { - if (blockchains.size > 1) { - val dividerHeight = if (blockchains.size == 2) { - 60 - } else if (blockchains.size == 3) { - 110 - } else { - 43 * blockchains.size - } - Divider( - color = Color(0xFFDEDEDE), - modifier = Modifier - .height(dividerHeight.dp) - .padding(start = 37.5.dp) - .width(1.dp) - ) - } - - Column { - blockchains.map { - Image( - painter = painterResource(id = R.drawable.ic_link), - contentDescription = null, - Modifier - .padding( - start = 37.dp, - ) - ) - Spacer(modifier = Modifier.size(13.5.dp)) - } - } - } - - Column( - modifier = Modifier - .fillMaxWidth() - .padding(top = 6.dp), - ) { - blockchains.map { blockchain -> - val contract = currency.contracts.firstOrNull { it.blockchain == blockchain } - ?: return@map - val added = if (contract.address != null) { - addedTokens.map { it.token.contractAddress }.contains(contract.address) - } else { - addedBlockchains.contains(blockchain) - } - NetworkItem( - currency = currency, - contract = contract, - blockchain = blockchain, - allowToAdd = allowToAdd, - added = added, - onAddCurrencyToggled = onAddCurrencyToggled, - onNetworkItemClicked = onNetworkItemClicked, - ) - } - } - } - } -} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/ListOfCurrencies.kt b/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/ListOfCurrencies.kt index 14f36c1dd4..613f741c55 100644 --- a/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/ListOfCurrencies.kt +++ b/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/ListOfCurrencies.kt @@ -1,5 +1,6 @@ package com.tangem.tap.features.tokens.ui.compose +import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.lazy.LazyColumn @@ -16,7 +17,7 @@ import com.tangem.tap.common.compose.extensions.OnBottomReached import com.tangem.tap.domain.tokens.Currency import com.tangem.tap.features.tokens.redux.ContractAddress import com.tangem.tap.features.tokens.redux.TokenWithBlockchain - +import com.tangem.tap.features.tokens.ui.compose.currencyItem.CurrencyItem @Composable fun ListOfCurrencies( @@ -27,7 +28,7 @@ fun ListOfCurrencies( allowToAdd: Boolean, onAddCurrencyToggled: (Currency, TokenWithBlockchain?) -> Unit, onNetworkItemClicked: (ContractAddress) -> Unit, - onLoadMore: () -> Unit + onLoadMore: () -> Unit, ) { val expandedCurrencies = remember { mutableStateOf(listOf("")) } @@ -50,7 +51,8 @@ fun ListOfCurrencies( state = listState, modifier = Modifier .fillMaxSize(), - contentPadding = PaddingValues(bottom = 90.dp) + contentPadding = PaddingValues(bottom = 90.dp), + verticalArrangement = Arrangement.spacedBy(12.dp), ) { item { header() } itemsIndexed(currencies) { index, currency -> @@ -59,10 +61,10 @@ fun ListOfCurrencies( addedTokens = addedTokens, addedBlockchains = addedBlockchains, allowToAdd = allowToAdd, - expanded = expandedCurrencies.value.contains(currency.id), + isExpanded = expandedCurrencies.value.contains(currency.id), onCurrencyClick = onCurrencyClick, onAddCurrencyToggled = onAddCurrencyToggled, - onNetworkItemClicked = onNetworkItemClicked + onNetworkItemClicked = onNetworkItemClicked, ) } } diff --git a/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/currencyItem/CurrencyExpandedContent.kt b/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/currencyItem/CurrencyExpandedContent.kt new file mode 100644 index 0000000000..b6d2fb3070 --- /dev/null +++ b/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/currencyItem/CurrencyExpandedContent.kt @@ -0,0 +1,62 @@ +package com.tangem.tap.features.tokens.ui.compose.currencyItem + +import androidx.compose.animation.AnimatedVisibility +import androidx.compose.animation.expandVertically +import androidx.compose.animation.fadeIn +import androidx.compose.animation.fadeOut +import androidx.compose.animation.shrinkVertically +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import com.tangem.blockchain.common.Blockchain +import com.tangem.tap.domain.tokens.Currency +import com.tangem.tap.features.tokens.redux.ContractAddress +import com.tangem.tap.features.tokens.redux.TokenWithBlockchain + +@Composable +fun CurrencyExpandedContent( + currency: Currency, + addedTokens: List, + addedBlockchains: List, + allowToAdd: Boolean, + isExpanded: Boolean, + onAddCurrencyToggled: (Currency, TokenWithBlockchain?) -> Unit, + onNetworkItemClicked: (ContractAddress) -> Unit, +) { + AnimatedVisibility( + visible = isExpanded, + enter = fadeIn() + expandVertically(), + exit = fadeOut() + shrinkVertically(), + ) { + val blockchains = currency.contracts.map { it.blockchain } + Row { + Column( + modifier = Modifier + .fillMaxWidth(), + ) { + blockchains.mapIndexed { index, blockchain -> + val contract = currency.contracts.firstOrNull { it.blockchain == blockchain } + ?: return@mapIndexed + val added = if (contract.address != null) { + addedTokens.map { it.token.contractAddress }.contains(contract.address) + } else { + addedBlockchains.contains(blockchain) + } + NetworkItem( + currency = currency, + contract = contract, + blockchain = blockchain, + allowToAdd = allowToAdd, + added = added, + index = index, + size = blockchains.size, + onAddCurrencyToggled = onAddCurrencyToggled, + onNetworkItemClicked = onNetworkItemClicked, + ) + } + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/CurrencyItem.kt b/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/currencyItem/CurrencyItem.kt similarity index 53% rename from app/src/main/java/com/tangem/tap/features/tokens/ui/compose/CurrencyItem.kt rename to app/src/main/java/com/tangem/tap/features/tokens/ui/compose/currencyItem/CurrencyItem.kt index 5ba1f8b683..6758c71e82 100644 --- a/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/CurrencyItem.kt +++ b/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/currencyItem/CurrencyItem.kt @@ -1,5 +1,6 @@ -package com.tangem.tap.features.tokens.ui.compose +package com.tangem.tap.features.tokens.ui.compose.currencyItem +import androidx.compose.foundation.layout.Column import androidx.compose.runtime.Composable import com.tangem.blockchain.common.Blockchain import com.tangem.tap.domain.tokens.Currency @@ -12,24 +13,27 @@ fun CurrencyItem( addedTokens: List, addedBlockchains: List, allowToAdd: Boolean, - expanded: Boolean, + isExpanded: Boolean, onCurrencyClick: (String) -> Unit, onAddCurrencyToggled: (Currency, TokenWithBlockchain?) -> Unit, - onNetworkItemClicked: (ContractAddress) -> Unit + onNetworkItemClicked: (ContractAddress) -> Unit, ) { - if (expanded) { - ExpandedCurrencyItem( + Column { + CurrencyItemHeader( + currency = currency, + addedTokens = addedTokens, + addedBlockchains = addedBlockchains, + isExpanded = isExpanded, + onCurrencyClick = onCurrencyClick, + ) + CurrencyExpandedContent( currency = currency, addedTokens = addedTokens, addedBlockchains = addedBlockchains, allowToAdd = allowToAdd, - onCurrencyClick = onCurrencyClick, onAddCurrencyToggled = onAddCurrencyToggled, - onNetworkItemClicked = onNetworkItemClicked - ) - } else { - CollapsedCurrencyItem( - currency = currency, addedTokens = addedTokens, - addedBlockchains = addedBlockchains, onCurrencyClick + isExpanded = isExpanded, + onAddCurrencyToggled = onAddCurrencyToggled, + onNetworkItemClicked = onNetworkItemClicked, ) } } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/currencyItem/CurrencyItemArrow.kt b/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/currencyItem/CurrencyItemArrow.kt new file mode 100644 index 0000000000..4be02043d5 --- /dev/null +++ b/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/currencyItem/CurrencyItemArrow.kt @@ -0,0 +1,91 @@ +package com.tangem.tap.features.tokens.ui.compose.currencyItem + +import androidx.compose.foundation.Image +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.layout.wrapContentHeight +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.dp +import com.tangem.wallet.R + +/** +[REDACTED_AUTHOR] + */ +@Composable +fun CurrencyItemArrow( + rowHeight: Dp, + isLastArrow: Boolean, +) { + Box(Modifier.height(rowHeight)) { + if (!isLastArrow) { + MiddleArrowView(rowHeight) + } else { + LastArrowView(rowHeight) + } + } +} + +@Composable +private fun MiddleArrowView(rowHeight: Dp) { + Box { + Box( + modifier = Modifier + .padding(start = 0.5.dp), + ) { + Box( + modifier = Modifier + .background(color = Color(0xFFDEDEDE)) + .width(0.8.dp) + .fillMaxHeight(), + ) + } + + LastArrowView(rowHeight) + } +} + +@Composable +private fun LastArrowView(rowHeight: Dp) { + Image( + modifier = Modifier + .height(rowHeight / 2 + 3.5.dp), + painter = painterResource(id = R.drawable.ic_link), + contentDescription = null, + ) +} + +@Preview +@Composable +fun ArrowViewPreview() { + Box( + Modifier + .background(color = Color.White), + ) { + Column( + modifier = Modifier + .fillMaxWidth() + .wrapContentHeight() + .padding(start = 37.dp), + ) { + CurrencyItemArrow( + rowHeight = 62.dp, + isLastArrow = false, + ) + CurrencyItemArrow( + rowHeight = 62.dp, + isLastArrow = true, + ) + } + } +} \ No newline at end of file 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 new file mode 100644 index 0000000000..f3d40a401b --- /dev/null +++ b/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/currencyItem/CurrencyItemHeader.kt @@ -0,0 +1,208 @@ +package com.tangem.tap.features.tokens.ui.compose.currencyItem + +import androidx.compose.foundation.Image +import androidx.compose.foundation.background +import androidx.compose.foundation.clickable +import androidx.compose.foundation.interaction.MutableInteractionSource +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +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.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import coil.compose.SubcomposeAsyncImage +import coil.request.ImageRequest +import com.tangem.blockchain.common.Blockchain +import com.tangem.domain.common.extensions.fromNetworkId +import com.tangem.tap.common.extensions.getGreyedOutIconRes +import com.tangem.tap.common.extensions.getRoundIconRes +import com.tangem.tap.domain.tokens.Currency +import com.tangem.tap.features.tokens.redux.TokenWithBlockchain +import com.tangem.tap.features.tokens.ui.compose.CurrencyPlaceholderIcon +import com.tangem.tap.features.tokens.ui.compose.fullName +import com.tangem.wallet.R + +@Composable +fun CurrencyItemHeader( + currency: Currency, + addedTokens: List, + addedBlockchains: List, + isExpanded: Boolean, + onCurrencyClick: (String) -> Unit, +) { + Row( + modifier = Modifier + .fillMaxWidth() + .height(62.dp) + .clickable( + interactionSource = remember { MutableInteractionSource() }, + indication = null, + onClick = { onCurrencyClick(currency.id) }, + ), + ) { + Box( + modifier = Modifier + .padding(horizontal = 16.dp) + .align(Alignment.CenterVertically) + .clip(RoundedCornerShape(6.dp)), + ) { + SubcomposeAsyncImage( + modifier = Modifier + .size(46.dp), + model = ImageRequest.Builder(LocalContext.current) + .data(currency.iconUrl) + .crossfade(true) + .build(), + contentDescription = currency.id, + loading = { CurrencyPlaceholderIcon(currency.id) }, + error = { CurrencyPlaceholderIcon(currency.id) }, + ) + } + + Column( + modifier = Modifier + .weight(1f) + .align(Alignment.CenterVertically), + ) { + Text( + text = currency.fullName, + fontSize = 17.sp, + fontWeight = FontWeight.Normal, + color = Color(0xFF1C1C1E), + ) + Spacer(modifier = Modifier.size(6.dp)) + + Box( + modifier = Modifier + .fillMaxWidth() + .height(20.dp), + ) { + if (isExpanded) { + Text( + modifier = Modifier.align(Alignment.TopStart), + text = stringResource(id = R.string.currency_subtitle_expanded), + fontSize = 13.sp, + fontWeight = FontWeight.Normal, + color = Color(0xFF8E8E93), + ) + } else { + NetworksRow( + currency = currency, + addedTokens = addedTokens, + addedBlockchains = addedBlockchains, + ) + } + } + } + + val expandCollapseArrow = if (isExpanded) R.drawable.ic_arrow_extended else R.drawable.ic_arrow_collapsed + Image( + painter = painterResource(id = expandCollapseArrow), + contentDescription = null, + Modifier + .padding(20.dp) + .align(Alignment.CenterVertically), + ) + } +} + +@Composable +private fun NetworksRow( + currency: Currency, + addedTokens: List, + addedBlockchains: List, +) { + Row { + if (currency.contracts.isNotEmpty()) { + currency.contracts.map { contract -> + if (contract.address == null) { + BlockchainNetworkItem( + blockchain = contract.blockchain, + isMainNetwork = true, + addedBlockchains = addedBlockchains, + ) + } else { + val isAdded = addedTokens.map { it.token.contractAddress }.contains(contract.address) + val iconResId = if (isAdded) { + contract.blockchain.getRoundIconRes() + } else { + contract.blockchain.getGreyedOutIconRes() + } + Image( + modifier = Modifier + .size(20.dp), + painter = painterResource(id = iconResId), + contentDescription = null, + ) + Spacer(Modifier.size(5.dp)) + } + + } + } else { + BlockchainNetworkItem( + blockchain = Blockchain.fromNetworkId(currency.id), + isMainNetwork = false, + addedBlockchains = addedBlockchains, + ) + } + } +} + +@Composable +private fun BlockchainNetworkItem( + blockchain: Blockchain?, + isMainNetwork: Boolean, + addedBlockchains: List, +) { + val added = addedBlockchains.contains(blockchain) + val icon = + if (added) blockchain?.getRoundIconRes() else blockchain?.getGreyedOutIconRes() + if (icon != null) { + Box( + Modifier + .size(20.dp), + ) { + Image( + painter = painterResource(id = icon), + contentDescription = null, + Modifier + .size(20.dp), + ) + if (isMainNetwork) { + Box( + modifier = Modifier + .align(Alignment.TopEnd) + .size(7.dp) + .clip(CircleShape) + .background(Color.White), + ) { + Box( + modifier = Modifier + .align(Alignment.Center) + .size(5.dp) + .clip(CircleShape) + .background(Color(0xFF1ACE80)), + ) + } + } + } + Spacer(modifier = Modifier.size(5.dp)) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/NetworkItem.kt b/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/currencyItem/NetworkItem.kt similarity index 70% rename from app/src/main/java/com/tangem/tap/features/tokens/ui/compose/NetworkItem.kt rename to app/src/main/java/com/tangem/tap/features/tokens/ui/compose/currencyItem/NetworkItem.kt index 0f45d867bf..2928ace0d8 100644 --- a/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/NetworkItem.kt +++ b/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/currencyItem/NetworkItem.kt @@ -1,10 +1,18 @@ -package com.tangem.tap.features.tokens.ui.compose +package com.tangem.tap.features.tokens.ui.compose.currencyItem import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.background import androidx.compose.foundation.combinedClickable import androidx.compose.foundation.interaction.MutableInteractionSource -import androidx.compose.foundation.layout.* +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width import androidx.compose.foundation.shape.CircleShape import androidx.compose.material.Switch import androidx.compose.material.SwitchDefaults @@ -31,6 +39,7 @@ import com.tangem.tap.domain.tokens.Contract import com.tangem.tap.domain.tokens.Currency import com.tangem.tap.features.tokens.redux.ContractAddress import com.tangem.tap.features.tokens.redux.TokenWithBlockchain +import com.tangem.tap.features.tokens.ui.compose.CurrencyPlaceholderIcon @OptIn(ExperimentalFoundationApi::class) @Composable @@ -40,13 +49,17 @@ fun NetworkItem( blockchain: Blockchain, allowToAdd: Boolean, added: Boolean, + index: Int, + size: Int, onAddCurrencyToggled: (Currency, TokenWithBlockchain?) -> Unit, - onNetworkItemClicked: (ContractAddress) -> Unit + onNetworkItemClicked: (ContractAddress) -> Unit, ) { + val rowHeight = 53.dp Row( modifier = Modifier .fillMaxWidth() + .height(rowHeight) .combinedClickable( enabled = allowToAdd, onLongClick = { @@ -54,13 +67,22 @@ fun NetworkItem( }, onClick = {}, indication = null, - interactionSource = remember { MutableInteractionSource() } - ) + interactionSource = remember { MutableInteractionSource() }, + ), ) { + Box( + Modifier + .width(78.dp) + .padding(start = 38.dp), + ) { + CurrencyItemArrow( + rowHeight = rowHeight, + isLastArrow = index == size - 1, + ) + } Box( modifier = Modifier - .align(Alignment.CenterVertically) - .padding(start = 8.dp, top = 16.dp, bottom = 16.dp, end = 6.dp) + .align(Alignment.CenterVertically), ) { SubcomposeAsyncImage( model = if (added) blockchain.getRoundIconRes() else blockchain.getGreyedOutIconRes(), @@ -68,7 +90,7 @@ fun NetworkItem( loading = { CurrencyPlaceholderIcon(blockchain.id) }, error = { CurrencyPlaceholderIcon(blockchain.id) }, modifier = Modifier - .size(20.dp) + .size(20.dp), ) if (contract.address == null) { Box( @@ -76,34 +98,31 @@ fun NetworkItem( .align(Alignment.TopEnd) .size(7.dp) .clip(CircleShape) - .background(Color.White) + .background(Color.White), ) { Box( modifier = Modifier .align(Alignment.Center) .size(5.dp) .clip(CircleShape) - .background(Color(0xFF1ACE80)) + .background(Color(0xFF1ACE80)), ) } } } - Row( + Spacer(Modifier.width(6.dp)) + Text( modifier = Modifier - .fillMaxHeight() .weight(1f) - .align(Alignment.CenterVertically) - ) { - Text( - text = prepareNetworkNameSpannableText( - blockchain = blockchain, - contractAddress = contract.address - ), - fontWeight = FontWeight.SemiBold, - fontSize = 13.sp, - color = if (added) Color.Black else Color(0xFF848488), - ) - } + .align(Alignment.CenterVertically), + text = prepareNetworkNameSpannableText( + blockchain = blockchain, + contractAddress = contract.address, + ), + fontWeight = FontWeight.SemiBold, + fontSize = 13.sp, + color = if (added) Color.Black else Color(0xFF848488), + ) if (allowToAdd) { val token = if (contract.address != null) { @@ -117,8 +136,7 @@ fun NetworkItem( } else { null } - val tokenWithBlockchain = - token?.let { TokenWithBlockchain(token, contract.blockchain) } + val tokenWithBlockchain = token?.let { TokenWithBlockchain(it, contract.blockchain) } val currencyToSave = if (contract.address == null) { currency.copy(id = contract.networkId) @@ -127,22 +145,23 @@ fun NetworkItem( } Switch( + modifier = Modifier + .fillMaxHeight() + .padding(start = 16.dp, end = 16.dp), checked = added, onCheckedChange = { onAddCurrencyToggled(currencyToSave, tokenWithBlockchain) }, - modifier = Modifier.padding(start = 16.dp, end = 16.dp), colors = SwitchDefaults.colors( - checkedThumbColor = Color(0xFF1ACE80) - ) + checkedThumbColor = Color(0xFF1ACE80), + ), ) } } } - @Composable -fun prepareNetworkNameSpannableText( +private fun prepareNetworkNameSpannableText( blockchain: Blockchain, - contractAddress: String? + contractAddress: String?, ): AnnotatedString { val blockchainName = blockchain.fullNameWithoutTestnet.uppercase() @@ -158,11 +177,11 @@ fun prepareNetworkNameSpannableText( AnnotatedString.Range( SpanStyle( fontWeight = FontWeight.Normal, - color = if (contractAddress != null) Color(0xFF8E8E93) else Color(0xFF1ACE80) + color = if (contractAddress != null) Color(0xFF8E8E93) else Color(0xFF1ACE80), ), start = startOfAdditionalText, - end = text.length - ) + end = text.length, + ), ) return AnnotatedString(text = text, spanStyles = spanStyles) } \ No newline at end of file From 67095aaa51725b72319ba47f8351c65311ca6cb5 Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 3 Aug 2022 10:20:11 +0300 Subject: [PATCH 116/177] Updated on 2026-08-14 --- app/build.gradle | 6 +++--- dependencies.gradle | 4 ++-- domain/build.gradle | 6 +++--- network/build.gradle | 2 +- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index ce5b525f66..c37a4da509 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -92,9 +92,9 @@ dependencies { implementation 'com.google.android.play:core-ktx:1.8.1' coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5' - implementation "com.tangem:blockchain:${versions.tamgem_blockchain_sdk}" - implementation "com.tangem.tangem-sdk-kotlin:core:${versions.tamgem_card_sdk}" - implementation "com.tangem.tangem-sdk-kotlin:android:${versions.tamgem_card_sdk}" + implementation "com.tangem:blockchain:${versions.tangem_blockchain_sdk}" + implementation "com.tangem.tangem-sdk-kotlin:core:${versions.tangem_card_sdk}" + implementation "com.tangem.tangem-sdk-kotlin:android:${versions.tangem_card_sdk}" // WebView implementation "androidx.browser:browser:1.3.0" diff --git a/dependencies.gradle b/dependencies.gradle index cbd16111f5..adc97e0523 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -1,8 +1,8 @@ ext.versions = [ kotlin : '1.6.10', build_gradle : '7.1.3', - tamgem_card_sdk : 'develop-157', - tamgem_blockchain_sdk: 'develop-99', + tangem_card_sdk : 'develop-157', + tangem_blockchain_sdk: 'develop-99', ] ext.environmentConfig = [ diff --git a/domain/build.gradle b/domain/build.gradle index f4b0183cc8..0ea2f21fdf 100644 --- a/domain/build.gradle +++ b/domain/build.gradle @@ -59,9 +59,9 @@ dependencies { implementation implementation(project(path: ':network')) implementation implementation(project(path: ':common')) - implementation "com.tangem:blockchain:${versions.tamgem_blockchain_sdk}" - implementation "com.tangem.tangem-sdk-kotlin:core:${versions.tamgem_card_sdk}" - implementation "com.tangem.tangem-sdk-kotlin:android:${versions.tamgem_card_sdk}" + implementation "com.tangem:blockchain:${versions.tangem_blockchain_sdk}" + implementation "com.tangem.tangem-sdk-kotlin:core:${versions.tangem_card_sdk}" + implementation "com.tangem.tangem-sdk-kotlin:android:${versions.tangem_card_sdk}" // Kotlin coroutines implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.2' diff --git a/network/build.gradle b/network/build.gradle index dce3040c09..e7fccceda6 100644 --- a/network/build.gradle +++ b/network/build.gradle @@ -12,7 +12,7 @@ dependencies { implementation implementation(project(path: ':common')) // Tangem sdk's - implementation "com.tangem.tangem-sdk-kotlin:core:${versions.tamgem_card_sdk}" + implementation "com.tangem.tangem-sdk-kotlin:core:${versions.tangem_card_sdk}" // Kotlin coroutines implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.2' From 90589b7de1d0479b05608bded70bf4abeb07f070 Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 3 Aug 2022 10:21:05 +0300 Subject: [PATCH 117/177] Updated on 2026-08-14 --- .../tap/common/extensions/AnalyticsHandler.kt | 51 ++++++ .../java/com/tangem/tap/domain/TapErrors.kt | 4 - .../walletconnect/WalletConnectSdkHelper.kt | 18 +- .../tangem/tap/features/demo/DemoHelper.kt | 10 +- .../features/send/redux/SendScreenAction.kt | 6 +- .../send/redux/middlewares/SendMiddleware.kt | 157 +++++++++--------- .../ui/dialogs/SendTransactionFailsDialog.kt | 17 +- .../stateSubscribers/SendStateSubscriber.kt | 27 ++- app/src/main/res/values-ru/strings.xml | 2 +- .../main/res/values/strings_untranslated.xml | 2 +- dependencies.gradle | 5 +- 11 files changed, 192 insertions(+), 107 deletions(-) create mode 100644 app/src/main/java/com/tangem/tap/common/extensions/AnalyticsHandler.kt diff --git a/app/src/main/java/com/tangem/tap/common/extensions/AnalyticsHandler.kt b/app/src/main/java/com/tangem/tap/common/extensions/AnalyticsHandler.kt new file mode 100644 index 0000000000..f2897e2b63 --- /dev/null +++ b/app/src/main/java/com/tangem/tap/common/extensions/AnalyticsHandler.kt @@ -0,0 +1,51 @@ +package com.tangem.tap.common.extensions + +import com.google.firebase.crashlytics.FirebaseCrashlytics +import com.tangem.blockchain.common.BlockchainError +import com.tangem.blockchain.common.BlockchainSdkError +import com.tangem.common.card.Card +import com.tangem.common.core.TangemSdkError +import com.tangem.tap.common.analytics.Analytics +import com.tangem.tap.common.analytics.AnalyticsHandler +import com.tangem.tap.common.analytics.AnalyticsParam +import com.tangem.tap.features.demo.DemoTransactionSender + +/** +[REDACTED_AUTHOR] + */ +fun AnalyticsHandler.logSendTransactionError( + error: BlockchainError, + action: Analytics.ActionToLog, + parameters: Map? = mapOf(), + card: Card? = null, +) { + when (val blockchainSdkError = (error as BlockchainSdkError)) { + is BlockchainSdkError.WrappedTangemError -> { + val tangemSdkError = (blockchainSdkError.tangemError as? TangemSdkError) ?: return + + logCardSdkError( + error = tangemSdkError, + actionToLog = action, + parameters = parameters, + card = card, + ) + } + else -> { + when { + blockchainSdkError.customMessage.contains(DemoTransactionSender.ID) -> return + else -> { + val params = parameters?.toMutableMap() ?: mutableMapOf() + params[AnalyticsParam.ACTION] = action.key + params[AnalyticsParam.ERROR_CODE] = error.code.toString() + params[AnalyticsParam.ERROR_DESCRIPTION] = "${error.javaClass.simpleName}: ${error.customMessage}" + params[AnalyticsParam.ERROR_KEY] = "BlockchainSdkError" + + FirebaseCrashlytics.getInstance().apply { + params.forEach { setCustomKey(it.key.param, it.value) } + recordException(error) + } + } + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/domain/TapErrors.kt b/app/src/main/java/com/tangem/tap/domain/TapErrors.kt index ff19d10171..9d3cc79eee 100644 --- a/app/src/main/java/com/tangem/tap/domain/TapErrors.kt +++ b/app/src/main/java/com/tangem/tap/domain/TapErrors.kt @@ -44,10 +44,6 @@ sealed class TapError( val customMessage: String = "Unsupported state:" ) : TapError(R.string.common_custom_string, listOf("$customMessage $stateError")) - sealed class XmlError { - object AssetAccountNotCreated : TapError(R.string.send_error_no_account_xlm) - } - sealed class WalletManager { object CreationError : CustomError("Can't create wallet manager") class NoAccountError(amountToCreateAccount: String) : CustomError(amountToCreateAccount) diff --git a/app/src/main/java/com/tangem/tap/domain/walletconnect/WalletConnectSdkHelper.kt b/app/src/main/java/com/tangem/tap/domain/walletconnect/WalletConnectSdkHelper.kt index a3b0d31a89..04f1ec8141 100644 --- a/app/src/main/java/com/tangem/tap/domain/walletconnect/WalletConnectSdkHelper.kt +++ b/app/src/main/java/com/tangem/tap/domain/walletconnect/WalletConnectSdkHelper.kt @@ -7,6 +7,7 @@ import com.tangem.blockchain.blockchains.ethereum.EthereumUtils import com.tangem.blockchain.blockchains.ethereum.EthereumUtils.Companion.toKeccak import com.tangem.blockchain.common.Amount import com.tangem.blockchain.common.AmountType +import com.tangem.blockchain.common.BlockchainSdkError import com.tangem.blockchain.common.CommonSigner import com.tangem.blockchain.common.TransactionData import com.tangem.blockchain.common.TransactionSender @@ -24,6 +25,7 @@ import com.tangem.common.extensions.toHexString import com.tangem.crypto.CryptoUtils import com.tangem.operations.sign.SignHashCommand import com.tangem.tap.common.analytics.Analytics +import com.tangem.tap.common.extensions.logSendTransactionError import com.tangem.tap.common.extensions.safeUpdate import com.tangem.tap.common.extensions.toFormattedString import com.tangem.tap.features.details.redux.walletconnect.WalletConnectSession @@ -38,8 +40,8 @@ import com.tangem.tap.tangemSdk import com.tangem.tap.tangemSdkManager import com.trustwallet.walletconnect.models.ethereum.WCEthereumSignMessage import com.trustwallet.walletconnect.models.ethereum.WCEthereumTransaction -import java.math.BigDecimal import timber.log.Timber +import java.math.BigDecimal class WalletConnectSdkHelper { @@ -69,7 +71,7 @@ class WalletConnectSdkHelper { (walletManager as? EthereumGasLoader)?.getGasPrice()) { is Result.Success -> result.data.toBigDecimal() is Result.Failure -> { - Timber.e(result.error) + (result.error as? Throwable)?.let { Timber.e(it) } return null } null -> return null @@ -143,13 +145,11 @@ class WalletConnectSdkHelper { HEX_PREFIX + data.walletManager.wallet.recentTransactions.last().hash } is SimpleResult.Failure -> { - (result.error as? TangemSdkError)?.let { error -> - store.state.globalState.analyticsHandlers?.logCardSdkError( - error, - Analytics.ActionToLog.WalletConnectTransaction, - ) - } - Timber.e(result.error) + store.state.globalState.analyticsHandlers?.logSendTransactionError( + result.error, + Analytics.ActionToLog.WalletConnectTransaction, + ) + Timber.e(result.error as BlockchainSdkError) null } } diff --git a/app/src/main/java/com/tangem/tap/features/demo/DemoHelper.kt b/app/src/main/java/com/tangem/tap/features/demo/DemoHelper.kt index f7ccf6156a..5248797a0f 100644 --- a/app/src/main/java/com/tangem/tap/features/demo/DemoHelper.kt +++ b/app/src/main/java/com/tangem/tap/features/demo/DemoHelper.kt @@ -1,7 +1,13 @@ package com.tangem.tap.features.demo import com.tangem.blockchain.blockchains.bitcoin.BitcoinWalletManager -import com.tangem.blockchain.common.* +import com.tangem.blockchain.common.Amount +import com.tangem.blockchain.common.Blockchain +import com.tangem.blockchain.common.TransactionData +import com.tangem.blockchain.common.TransactionSender +import com.tangem.blockchain.common.TransactionSigner +import com.tangem.blockchain.common.WalletManager +import com.tangem.blockchain.common.toBlockchainCustomError import com.tangem.blockchain.extensions.Result import com.tangem.blockchain.extensions.SimpleResult import com.tangem.common.CompletionResult @@ -289,7 +295,7 @@ class DemoTransactionSender( publicKey = walletManager.wallet.publicKey ) return when (signerResponse) { - is CompletionResult.Success -> SimpleResult.Failure(Exception(ID)) + is CompletionResult.Success -> SimpleResult.Failure(Exception(ID).toBlockchainCustomError()) is CompletionResult.Failure -> SimpleResult.fromTangemSdkError(signerResponse.error) } } diff --git a/app/src/main/java/com/tangem/tap/features/send/redux/SendScreenAction.kt b/app/src/main/java/com/tangem/tap/features/send/redux/SendScreenAction.kt index 2ed9fe33e0..8c76739e6b 100644 --- a/app/src/main/java/com/tangem/tap/features/send/redux/SendScreenAction.kt +++ b/app/src/main/java/com/tangem/tap/features/send/redux/SendScreenAction.kt @@ -4,6 +4,7 @@ import com.tangem.Message import com.tangem.blockchain.common.Amount import com.tangem.blockchain.common.Blockchain import com.tangem.blockchain.common.WalletManager +import com.tangem.common.core.TangemSdkError import com.tangem.tap.common.redux.ErrorAction import com.tangem.tap.common.redux.StateDialog import com.tangem.tap.common.redux.ToastNotificationAction @@ -155,7 +156,10 @@ sealed class SendAction : SendScreenAction { val reduceAmount: BigDecimal, ) : Dialog() - data class SendTransactionFails(val errorMessage: String) : Dialog() + sealed class SendTransactionFails : Dialog() { + data class CardSdkError(val error: TangemSdkError): Dialog() + data class BlockchainSdkError(val error: com.tangem.blockchain.common.BlockchainSdkError): Dialog() + } object Hide : Dialog() } diff --git a/app/src/main/java/com/tangem/tap/features/send/redux/middlewares/SendMiddleware.kt b/app/src/main/java/com/tangem/tap/features/send/redux/middlewares/SendMiddleware.kt index 4a1f2df785..5eaa250690 100644 --- a/app/src/main/java/com/tangem/tap/features/send/redux/middlewares/SendMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/send/redux/middlewares/SendMiddleware.kt @@ -22,6 +22,7 @@ import com.tangem.tap.common.analytics.AnalyticsParam import com.tangem.tap.common.extensions.dispatchDialogShow import com.tangem.tap.common.extensions.dispatchErrorNotification import com.tangem.tap.common.extensions.dispatchOnMain +import com.tangem.tap.common.extensions.logSendTransactionError import com.tangem.tap.common.extensions.safeUpdate import com.tangem.tap.common.extensions.stripZeroPlainString import com.tangem.tap.common.redux.AppDialog @@ -52,14 +53,13 @@ import com.tangem.tap.scope import com.tangem.tap.store import com.tangem.tap.tangemSdk import com.tangem.wallet.R -import java.util.EnumSet import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.delay import kotlinx.coroutines.launch import kotlinx.coroutines.withContext import org.rekotlin.Action import org.rekotlin.Middleware -import timber.log.Timber +import java.util.* /** [REDACTED_AUTHOR] @@ -79,13 +79,19 @@ class SendMiddleware { is SendActionUi.CheckIfTransactionDataWasProvided -> { val transactionData = appState()?.sendState?.externalTransactionData if (transactionData != null) { - store.dispatchOnMain(AddressPayIdVerifyAction.AddressVerification.SetWalletAddress( - transactionData.destinationAddress, false - )) + store.dispatchOnMain( + AddressPayIdVerifyAction.AddressVerification.SetWalletAddress( + transactionData.destinationAddress, false, + ), + ) store.dispatchOnMain(AmountActionUi.SetMainCurrency(MainCurrencyType.CRYPTO)) store.dispatchOnMain(AmountActionUi.HandleUserInput(transactionData.amount)) - store.dispatchOnMain(AmountAction.SetAmount(transactionData.amount.toBigDecimal(), - false)) + store.dispatchOnMain( + AmountAction.SetAmount( + transactionData.amount.toBigDecimal(), + false, + ), + ) } } } @@ -93,7 +99,6 @@ class SendMiddleware { } } } - } private fun verifyAndSendTransaction( @@ -113,23 +118,31 @@ private fun verifyAndSendTransaction( when { hadTezosError -> { val reduceAmount = walletManager.wallet.blockchain.minimalAmount() - dispatch(SendAction.Dialog.TezosWarningDialog(reduceCallback = { - dispatch(AmountAction.SetAmount(typedAmount.value!!.minus(reduceAmount), false)) - dispatch(AmountActionUi.CheckAmountToSend) - }, sendAllCallback = { - sendTransaction( - action, walletManager, amountToSend, feeAmount, destinationAddress, - sendState.transactionExtrasState, card, sendState.externalTransactionData, - dispatch - ) - }, reduceAmount)) + dispatch( + SendAction.Dialog.TezosWarningDialog( + reduceCallback = { + dispatch(AmountAction.SetAmount(typedAmount.value!!.minus(reduceAmount), false)) + dispatch(AmountActionUi.CheckAmountToSend) + }, + sendAllCallback = { + sendTransaction( + action, walletManager, amountToSend, feeAmount, destinationAddress, + sendState.transactionExtrasState, card, sendState.externalTransactionData, + dispatch, + ) + }, + reduceAmount, + ), + ) } transactionErrors.isNotEmpty() -> { dispatch(SendAction.SendError(createValidateTransactionError(transactionErrors, walletManager))) } else -> { - sendTransaction(action, walletManager, amountToSend, feeAmount, destinationAddress, - sendState.transactionExtrasState, card, sendState.externalTransactionData, dispatch) + sendTransaction( + action, walletManager, amountToSend, feeAmount, destinationAddress, + sendState.transactionExtrasState, card, sendState.externalTransactionData, dispatch, + ) } } } @@ -150,7 +163,9 @@ private fun sendTransaction( transactionExtras.xlmMemo?.memo?.let { txData = txData.copy(extras = StellarTransactionExtras(it)) } transactionExtras.binanceMemo?.memo?.let { txData = txData.copy(extras = BinanceTransactionExtras(it.toString())) } - transactionExtras.xrpDestinationTag?.tag?.let { txData = txData.copy(extras = XrpTransactionBuilder.XrpTransactionExtras(it)) } + transactionExtras.xrpDestinationTag?.tag?.let { + txData = txData.copy(extras = XrpTransactionBuilder.XrpTransactionExtras(it)) + } scope.launch { val updateWalletResult = walletManager.safeUpdate() @@ -178,14 +193,14 @@ private fun sendTransaction( val signer = TangemSigner( card = card, tangemSdk = tangemSdk, - initialMessage = action.messageForSigner + initialMessage = action.messageForSigner, ) { signResponse -> store.dispatch( GlobalAction.UpdateWalletSignedHashes( walletSignedHashes = signResponse.totalSignedHashes, walletPublicKey = walletManager.wallet.publicKey.seedKey, - remainingSignatures = signResponse.remainingSignatures - ) + remainingSignatures = signResponse.remainingSignatures, + ), ) } val sendResult = try { @@ -211,7 +226,7 @@ private fun sendTransaction( store.state.globalState.analyticsHandlers?.triggerEvent( event = AnalyticsEvent.TRANSACTION_IS_SENT, card = card, - blockchain = walletManager.wallet.blockchain.currency + blockchain = walletManager.wallet.blockchain.currency, ) dispatch(SendAction.SendSuccess) @@ -231,69 +246,48 @@ private fun sendTransaction( } } is SimpleResult.Failure -> { - when (sendResult.error) { + store.state.globalState.feedbackManager?.infoHolder?.updateOnSendError( + wallet = walletManager.wallet, + host = walletManager.currentHost, + amountToSend = amountToSend, + feeAmount = feeAmount, + destinationAddress = destinationAddress, + ) + store.state.globalState.analyticsHandlers?.logSendTransactionError( + error = sendResult.error, + action = Analytics.ActionToLog.SendTransaction, + parameters = mapOf(AnalyticsParam.BLOCKCHAIN to walletManager.wallet.blockchain.currency), + card = card, + ) + + val error = (sendResult.error as? BlockchainSdkError) ?: return@withContext + + when (error) { + is BlockchainSdkError.WrappedTangemError -> { + val tangemSdkError = (error.tangemError as? TangemSdkError) ?: return@withContext + if (tangemSdkError is TangemSdkError.UserCancelled) return@withContext + + dispatch(SendAction.Dialog.SendTransactionFails.CardSdkError(tangemSdkError)) + } is BlockchainSdkError.CreateAccountUnderfunded -> { - val error = sendResult.error as BlockchainSdkError.CreateAccountUnderfunded + // from XLM, XRP val reserve = error.minReserve.value?.stripZeroPlainString() ?: "0" val symbol = error.minReserve.currencySymbol dispatch(SendAction.SendError(TapError.CreateAccountUnderfunded(listOf(reserve, symbol)))) } - is BlockchainSdkError.SendException -> { - sendResult.error?.let { FirebaseCrashlytics.getInstance().recordException(it) } - } - is Throwable -> { - val throwable = sendResult.error as Throwable - val message = throwable.message - val infoHolder = store.state.globalState.feedbackManager?.infoHolder + else -> { when { - message == null -> { - dispatch(SendAction.SendError(TapError.UnknownError)) - infoHolder?.updateOnSendError( - wallet = walletManager.wallet, - host = walletManager.currentHost, - amountToSend = amountToSend, - feeAmount = feeAmount, - destinationAddress = destinationAddress + error.customMessage.contains(DemoTransactionSender.ID) -> { + store.dispatchDialogShow( + AppDialog.SimpleOkDialogRes( + headerId = R.string.common_done, + messageId = R.string.alert_demo_feature_disabled, + onOk = { dispatch(NavigationAction.PopBackTo()) }, + ), ) - dispatch(SendAction.Dialog.SendTransactionFails("unknown error")) - } - message.contains("50002") -> { - // user was cancelled the operation by closing the Sdk bottom sheet - } - // make it easier latter by handling an appropriate enumError or, like on iOS, - // accept a string identifier of the error message - message.contains("Target account is not created. To create account send 1+ XLM.") -> { - dispatch(SendAction.SendError(TapError.XmlError.AssetAccountNotCreated)) - } - message.contains(DemoTransactionSender.ID) -> { - delay(DELAY_SDK_DIALOG_CLOSE) - store.dispatchDialogShow(AppDialog.SimpleOkDialogRes( - R.string.common_done, - R.string.alert_demo_feature_disabled - ) { dispatch(NavigationAction.PopBackTo()) }) } else -> { - (sendResult.error as? TangemSdkError)?.let { error -> - store.state.globalState.analyticsHandlers?.logCardSdkError( - error, - Analytics.ActionToLog.SendTransaction, - mapOf( - AnalyticsParam.BLOCKCHAIN - to walletManager.wallet.blockchain.currency), - card = card, - ) - } - Timber.e(throwable) - FirebaseCrashlytics.getInstance().recordException(throwable) - dispatch(SendAction.SendError(TapError.CustomError(message))) - infoHolder?.updateOnSendError( - wallet = walletManager.wallet, - host = walletManager.currentHost, - amountToSend = amountToSend, - feeAmount = feeAmount, - destinationAddress = destinationAddress - ) - dispatch(SendAction.Dialog.SendTransactionFails(message)) + dispatch(SendAction.Dialog.SendTransactionFails.BlockchainSdkError(error)) } } } @@ -328,7 +322,10 @@ fun extractErrorsForAmountField(errors: EnumSet): EnumSet, walletManager: WalletManager): TapError.ValidateTransactionErrors { +fun createValidateTransactionError( + errorList: EnumSet, + walletManager: WalletManager, +): TapError.ValidateTransactionErrors { val tapErrors = errorList.map { when (it) { TransactionError.AmountExceedsBalance -> TapError.AmountExceedsBalance diff --git a/app/src/main/java/com/tangem/tap/features/send/ui/dialogs/SendTransactionFailsDialog.kt b/app/src/main/java/com/tangem/tap/features/send/ui/dialogs/SendTransactionFailsDialog.kt index 6eccfef665..a01c048058 100644 --- a/app/src/main/java/com/tangem/tap/features/send/ui/dialogs/SendTransactionFailsDialog.kt +++ b/app/src/main/java/com/tangem/tap/features/send/ui/dialogs/SendTransactionFailsDialog.kt @@ -2,6 +2,7 @@ package com.tangem.tap.features.send.ui.dialogs import android.content.Context import androidx.appcompat.app.AlertDialog +import com.tangem.tangem_sdk_new.extensions.localizedDescription import com.tangem.tap.common.feedback.SendTransactionFailedEmail import com.tangem.tap.common.redux.global.GlobalAction import com.tangem.tap.features.send.redux.SendAction @@ -14,14 +15,22 @@ import com.tangem.wallet.R class SendTransactionFailsDialog { companion object { - fun create(context: Context, dialog: SendAction.Dialog.SendTransactionFails): AlertDialog { + fun create(context: Context, dialog: SendAction.Dialog.SendTransactionFails.CardSdkError): AlertDialog { + return create(context, dialog.error.localizedDescription(context)) + } + + fun create(context: Context, dialog: SendAction.Dialog.SendTransactionFails.BlockchainSdkError): AlertDialog { + return create(context, dialog.error.customMessage) + } + + private fun create(context: Context, errorMessage: String): AlertDialog { return AlertDialog.Builder(context).apply { setTitle(R.string.alert_failed_to_send_transaction_title) - setMessage(context.getString(R.string.alert_failed_to_send_transaction_message, dialog.errorMessage)) + setMessage(context.getString(R.string.alert_failed_to_send_transaction_message, errorMessage)) setNeutralButton(R.string.alert_button_send_feedback) { _, _ -> - store.dispatch(GlobalAction.SendEmail(SendTransactionFailedEmail(dialog.errorMessage))) + store.dispatch(GlobalAction.SendEmail(SendTransactionFailedEmail(errorMessage))) } - setPositiveButton(R.string.common_no) { _, _ -> } + setPositiveButton(R.string.common_cancel) { _, _ -> } setOnDismissListener { store.dispatch(SendAction.Dialog.Hide) } }.create() } diff --git a/app/src/main/java/com/tangem/tap/features/send/ui/stateSubscribers/SendStateSubscriber.kt b/app/src/main/java/com/tangem/tap/features/send/ui/stateSubscribers/SendStateSubscriber.kt index 2b71c1ba31..4496bd570b 100644 --- a/app/src/main/java/com/tangem/tap/features/send/ui/stateSubscribers/SendStateSubscriber.kt +++ b/app/src/main/java/com/tangem/tap/features/send/ui/stateSubscribers/SendStateSubscriber.kt @@ -8,7 +8,12 @@ import android.view.View import android.view.ViewGroup import androidx.core.text.bold import com.tangem.common.extensions.remove -import com.tangem.tap.common.extensions.* +import com.tangem.tap.common.extensions.beginDelayedTransition +import com.tangem.tap.common.extensions.enableError +import com.tangem.tap.common.extensions.getColor +import com.tangem.tap.common.extensions.getString +import com.tangem.tap.common.extensions.show +import com.tangem.tap.common.extensions.update import com.tangem.tap.common.redux.getMessageString import com.tangem.tap.common.text.DecimalDigitsInputFilter import com.tangem.tap.domain.MultiMessageError @@ -17,7 +22,17 @@ import com.tangem.tap.features.BaseStoreFragment import com.tangem.tap.features.send.redux.AddressPayIdVerifyAction.Error import com.tangem.tap.features.send.redux.FeeAction import com.tangem.tap.features.send.redux.SendAction -import com.tangem.tap.features.send.redux.states.* +import com.tangem.tap.features.send.redux.states.AddressPayIdState +import com.tangem.tap.features.send.redux.states.AmountState +import com.tangem.tap.features.send.redux.states.FeeState +import com.tangem.tap.features.send.redux.states.MainCurrencyType +import com.tangem.tap.features.send.redux.states.ReceiptLayoutType +import com.tangem.tap.features.send.redux.states.ReceiptState +import com.tangem.tap.features.send.redux.states.SendState +import com.tangem.tap.features.send.redux.states.StateId +import com.tangem.tap.features.send.redux.states.TransactionExtraError +import com.tangem.tap.features.send.redux.states.TransactionExtrasState +import com.tangem.tap.features.send.redux.states.XlmMemoType import com.tangem.tap.features.send.ui.FeeUiHelper import com.tangem.tap.features.send.ui.SendFragment import com.tangem.tap.features.send.ui.dialogs.SendTransactionFailsDialog @@ -117,7 +132,13 @@ class SendStateSubscriber(fragment: BaseStoreFragment) : dialog?.show() } } - is SendAction.Dialog.SendTransactionFails -> { + is SendAction.Dialog.SendTransactionFails.CardSdkError -> { + if (dialog == null) { + dialog = SendTransactionFailsDialog.create(fg.requireContext(), state.dialog) + dialog?.show() + } + } + is SendAction.Dialog.SendTransactionFails.BlockchainSdkError -> { if (dialog == null) { dialog = SendTransactionFailsDialog.create(fg.requireContext(), state.dialog) dialog?.show() diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 1fbdfd7a66..c130eaae63 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -159,7 +159,7 @@ Не удалось отправить электронное письмо Причина: %s Не могу отправить транзакцию - Причина: %s. Хотите отправить отзыв? + Причина: %s У Вас возникли трудности со сканированием вашей карты? Пожалуйста, попробуйте приложить карту точно так, как показано на анимации, или обратитесь в поддержку Отмена diff --git a/app/src/main/res/values/strings_untranslated.xml b/app/src/main/res/values/strings_untranslated.xml index 84f36c07bf..215e7351fa 100644 --- a/app/src/main/res/values/strings_untranslated.xml +++ b/app/src/main/res/values/strings_untranslated.xml @@ -55,7 +55,7 @@ Failed to send email Reason: %s Can\'t send a transaction - Reason: %s. Do you want to send feedback? + Reason: %s Are you having difficulty scanning your card? Please try to tap the card exactly as shown in the animation or request support. I\'m okay diff --git a/dependencies.gradle b/dependencies.gradle index adc97e0523..44bf47e268 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -1,8 +1,9 @@ ext.versions = [ kotlin : '1.6.10', build_gradle : '7.1.3', - tangem_card_sdk : 'develop-157', - tangem_blockchain_sdk: 'develop-99', + tangem_card_sdk : 'develop-159', + // tangem_blockchain_sdk: 'develop-99', + tangem_blockchain_sdk: '0.0.1', ] ext.environmentConfig = [ From ced437b892fa5b0cebd7f04bf1ef13c3d77c211b Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 3 Aug 2022 16:26:40 +0400 Subject: [PATCH 118/177] Updated on 2026-08-14 --- .../details/redux/DetailsMiddleware.kt | 7 +- .../features/details/redux/DetailsReducer.kt | 4 +- .../features/details/redux/DetailsState.kt | 2 +- .../ui/cardsettings/CardSettingsScreen.kt | 14 +-- .../cardsettings/CardSettingsScreenState.kt | 4 +- .../ui/cardsettings/CardSettingsViewModel.kt | 5 +- .../ui/common/DetailsComposeElements.kt | 1 + .../details/ui/details/DetailsFragment.kt | 68 +------------ .../details/ui/details/DetailsScreen.kt | 30 +++--- .../details/ui/details/DetailsScreenState.kt | 1 - .../details/ui/resetcard/ResetCardFragment.kt | 6 +- .../details/ui/resetcard/ResetCardScreen.kt | 3 +- .../ui/resetcard/ResetCardViewModel.kt | 5 +- .../ui/securitymode/SecurityModeFragment.kt | 2 +- .../ui/securitymode/SecurityModeScreen.kt | 98 ++++++++++--------- .../ui/securitymode/SecurityModeViewModel.kt | 10 +- 16 files changed, 95 insertions(+), 165 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/features/details/redux/DetailsMiddleware.kt b/app/src/main/java/com/tangem/tap/features/details/redux/DetailsMiddleware.kt index 0ab001e039..658d411d98 100644 --- a/app/src/main/java/com/tangem/tap/features/details/redux/DetailsMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/details/redux/DetailsMiddleware.kt @@ -5,7 +5,6 @@ import com.tangem.common.core.TangemSdkError import com.tangem.domain.common.isTangemTwins import com.tangem.tap.common.analytics.Analytics import com.tangem.tap.common.analytics.AnalyticsParam -import com.tangem.tap.common.extensions.dispatchDialogShow import com.tangem.tap.common.extensions.dispatchNotification import com.tangem.tap.common.extensions.dispatchOnMain import com.tangem.tap.common.redux.AppState @@ -38,7 +37,7 @@ class DetailsMiddleware { is DetailsAction.AppSettings -> managePrivacyMiddleware.handle(action) is DetailsAction.ShowDisclaimer -> { val uri = store.state.detailsState.cardTermsOfUseUrl - if (uri !=null) { + if (uri != null) { store.dispatch(NavigationAction.OpenDocument(uri)) } else { store.dispatch(DisclaimerAction.ShowAcceptedDisclaimer) @@ -108,9 +107,9 @@ class DetailsMiddleware { currenciesRepository.removeCurrencies(card.cardId) val returnScreen = if (card.cardId == store.state.globalState.scanResponse?.card?.cardId) { - null - } else { AppScreen.Home + } else { + null } store.dispatch(NavigationAction.PopBackTo(returnScreen)) } 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 5010510122..72a47793f6 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 @@ -66,7 +66,7 @@ private fun hanldePrepareCardSettingsScreen( cardInfo = card.toCardInfo(), manageSecurityState = prepareSecurityOptions(card), card = card, - resetCardAllowed = isResetToFactoryAllowedByCard(card) + resetCardAllowed = isResetToFactoryAllowedByCard(card), ) return state.copy(cardSettingsState = cardSettingsState) } @@ -101,7 +101,7 @@ private fun prepareSecurityOptions(card: Card): ManageSecurityState { private fun isResetToFactoryAllowedByCard(card: Card): Boolean { val notAllowedByAnyWallet = card.wallets.any { it.settings.isPermanent } - val notAllowedByCard = notAllowedByAnyWallet || + val notAllowedByCard = notAllowedByAnyWallet || (card.isWalletDataSupported && (!card.isTangemNote() && !card.settings.isBackupAllowed)) return !notAllowedByCard } diff --git a/app/src/main/java/com/tangem/tap/features/details/redux/DetailsState.kt b/app/src/main/java/com/tangem/tap/features/details/redux/DetailsState.kt index d0326e4bc3..cf0b3852e5 100644 --- a/app/src/main/java/com/tangem/tap/features/details/redux/DetailsState.kt +++ b/app/src/main/java/com/tangem/tap/features/details/redux/DetailsState.kt @@ -46,7 +46,7 @@ data class CardSettingsState( val card: Card, val manageSecurityState: ManageSecurityState?, val resetCardAllowed: Boolean, - val resetConfirmed: Boolean = false + val resetConfirmed: Boolean = false, ) data class ManageSecurityState( diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/cardsettings/CardSettingsScreen.kt b/app/src/main/java/com/tangem/tap/features/details/ui/cardsettings/CardSettingsScreen.kt index 9b72c3eadb..37fe4e5ab9 100644 --- a/app/src/main/java/com/tangem/tap/features/details/ui/cardsettings/CardSettingsScreen.kt +++ b/app/src/main/java/com/tangem/tap/features/details/ui/cardsettings/CardSettingsScreen.kt @@ -31,7 +31,6 @@ fun CardSettingsScreen( onBackPressed: () -> Unit, modifier: Modifier = Modifier, ) { - SettingsScreensScaffold( content = if (state.cardDetails == null) { @@ -49,7 +48,6 @@ fun CardSettingsReadCard( onScanCardClick: () -> Unit, modifier: Modifier = Modifier, ) { - Column( modifier = modifier .fillMaxSize(), @@ -105,8 +103,7 @@ fun CardSettingsReadCard( title = stringResource(id = R.string.scan_card_settings_button), onClick = onScanCardClick, modifier = modifier, - - ) + ) } } } @@ -116,12 +113,10 @@ fun CardSettings( state: CardSettingsScreenState, modifier: Modifier = Modifier, ) { - Column( modifier = modifier - .fillMaxWidth() + .fillMaxWidth(), ) { - state.cardDetails?.map { val paddingBottom = when (it) { is CardInfo.CardId, is CardInfo.Issuer -> 12.dp @@ -141,15 +136,14 @@ fun CardSettings( Column( modifier = modifier .fillMaxWidth() - .clickable( enabled = it.clickable, onClick = { state.onElementClick(it) }, ) .padding(start = 20.dp, end = 20.dp, bottom = paddingBottom, top = paddingTop), ) { - val titleColor = if (it.clickable) R.color.text_primary_1 else R.color.text_tertiary - val subtitleColor = if (it.clickable) R.color.text_secondary else R.color.text_tertiary + val titleColor = if (it.clickable) R.color.text_primary_1 else R.color.text_tertiary + val subtitleColor = if (it.clickable) R.color.text_secondary else R.color.text_tertiary Text( text = stringResource(id = it.titleRes), color = colorResource(id = titleColor), diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/cardsettings/CardSettingsScreenState.kt b/app/src/main/java/com/tangem/tap/features/details/ui/cardsettings/CardSettingsScreenState.kt index f2e7461f1f..422cad9ae2 100644 --- a/app/src/main/java/com/tangem/tap/features/details/ui/cardsettings/CardSettingsScreenState.kt +++ b/app/src/main/java/com/tangem/tap/features/details/ui/cardsettings/CardSettingsScreenState.kt @@ -5,11 +5,11 @@ import com.tangem.wallet.R data class CardSettingsScreenState( val cardDetails: List? = null, val onScanCardClick: () -> Unit, - val onElementClick: (CardInfo) -> Unit + val onElementClick: (CardInfo) -> Unit, ) sealed class CardInfo( - val titleRes: Int, val subtitle: String, val clickable: Boolean = false + val titleRes: Int, val subtitle: String, val clickable: Boolean = false, ) { class CardId(subtitle: String) : CardInfo(R.string.details_row_title_cid, subtitle) diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/cardsettings/CardSettingsViewModel.kt b/app/src/main/java/com/tangem/tap/features/details/ui/cardsettings/CardSettingsViewModel.kt index 8090c598f6..46da4c5d72 100644 --- a/app/src/main/java/com/tangem/tap/features/details/ui/cardsettings/CardSettingsViewModel.kt +++ b/app/src/main/java/com/tangem/tap/features/details/ui/cardsettings/CardSettingsViewModel.kt @@ -18,7 +18,8 @@ class CardSettingsViewModel(private val store: Store) { return if (state?.manageSecurityState == null) { CardSettingsScreenState( - null, onElementClick = {}, + cardDetails = null, + onElementClick = {}, onScanCardClick = { store.dispatch(DetailsAction.ScanCard) }, @@ -69,7 +70,7 @@ class CardSettingsViewModel(private val store: Store) { } CardSettingsScreenState( - cardDetails, + cardDetails = cardDetails, onScanCardClick = { }, onElementClick = { handleClickingItem(it) diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/common/DetailsComposeElements.kt b/app/src/main/java/com/tangem/tap/features/details/ui/common/DetailsComposeElements.kt index a0117d0fdc..81ae1a11dc 100644 --- a/app/src/main/java/com/tangem/tap/features/details/ui/common/DetailsComposeElements.kt +++ b/app/src/main/java/com/tangem/tap/features/details/ui/common/DetailsComposeElements.kt @@ -81,6 +81,7 @@ fun EmptyTopBarWithNavigation( }, backgroundColor = colorResource(id = R.color.background_primary), elevation = 0.dp, + modifier = modifier, ) } diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/details/DetailsFragment.kt b/app/src/main/java/com/tangem/tap/features/details/ui/details/DetailsFragment.kt index 791ac657fa..30a8fa4533 100644 --- a/app/src/main/java/com/tangem/tap/features/details/ui/details/DetailsFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/details/ui/details/DetailsFragment.kt @@ -23,7 +23,6 @@ class DetailsFragment : Fragment(), StoreSubscriber { private var detailsScreenState: MutableState = mutableStateOf(detailsViewModel.updateState(store.state.detailsState)) - override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -36,7 +35,7 @@ class DetailsFragment : Fragment(), StoreSubscriber { inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?, - ): View? { + ): View { return ComposeView(requireContext()).apply { setContent { isTransitionGroup = true @@ -64,73 +63,8 @@ class DetailsFragment : Fragment(), StoreSubscriber { store.unsubscribe(this) } -// override fun onViewCreated(view: View, savedInstanceState: Bundle?) { -// super.onViewCreated(view, savedInstanceState) -// -// binding.toolbar.setNavigationOnClickListener { -// store.dispatch(NavigationAction.PopBackTo()) -// } -// } - override fun newState(state: DetailsState) { if (activity == null || view == null) return detailsScreenState.value = detailsViewModel.updateState(state) } - -// private fun setState(state: DetailsState) = with(binding) { -// -// if (state.cardInfo != null) { -// val cardId = if (state.isTangemTwins) { -// state.scanResponse?.card?.getTwinCardIdForUser() -// } else { -// state.cardInfo.cardId -// } -// tvCardId.text = cardId -// tvIssuer.text = state.cardInfo.issuer -// tvSignedHashes.text = getString( -// R.string.details_row_subtitle_signed_hashes_format, -// state.cardInfo.signedHashes.toString() -// ) -// } -// -// tvSignedHashes.show(!state.isTangemTwins) -// tvSignedHashesTitle.show(!state.isTangemTwins) -// -// tvDisclaimer.setOnClickListener { store.dispatch(DetailsAction.ShowDisclaimer) } -// -// -// if (state.isTangemTwins) { -// tvResetToFactory.show() -// tvResetToFactory.text = getText(R.string.details_row_title_twins_recreate) -// tvResetToFactory.setOnClickListener { -// store.dispatch(DetailsAction.ReCreateTwinsWallet(state.twinCardsState.cardNumber!!)) -// } -// } else { -// tvResetToFactory.show() -// tvResetToFactory.text = getText(R.string.details_row_title_reset_factory_settings) -// tvResetToFactory.setOnClickListener { -// store.dispatch(DetailsAction.ResetToFactory.Check) -// store.dispatch(DetailsAction.ResetToFactory.Proceed) -// } -// } -// -// -// tvAppCurrency.show(state.scanResponse?.card?.isMultiwalletAllowed != true) -// tvAppCurrencyTitle.show(state.scanResponse?.card?.isMultiwalletAllowed != true) -// tvAppCurrency.text = state.appCurrency.code -// -// tvAppCurrency.setOnClickListener { -// store.dispatch(WalletAction.AppCurrencyAction.ChooseAppCurrency) -// } -// -// tvSecurityAndPrivacy.setOnClickListener { -// store.dispatch(DetailsAction.ManageSecurity.CheckCurrentSecurityOption(state.scanResponse!!.card)) -// tvSecurityAndPrivacy.setOnClickListener { -// store.dispatch(NavigationAction.NavigateTo(AppScreen.SecurityAndPrivacy)) -// } -// -// } -// -// } - } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/details/DetailsScreen.kt b/app/src/main/java/com/tangem/tap/features/details/ui/details/DetailsScreen.kt index e1813eef0a..f6e353e074 100644 --- a/app/src/main/java/com/tangem/tap/features/details/ui/details/DetailsScreen.kt +++ b/app/src/main/java/com/tangem/tap/features/details/ui/details/DetailsScreen.kt @@ -9,6 +9,8 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size +import androidx.compose.foundation.lazy.LazyRow +import androidx.compose.foundation.lazy.items import androidx.compose.material.Icon import androidx.compose.material.Text import androidx.compose.runtime.Composable @@ -53,12 +55,12 @@ fun Content( state.elements.map { if (it == SettingsElement.WalletConnect) { WalletConnectDetailsItem( - onItemsClick = state.onItemsClick, modifier = modifier + onItemsClick = state.onItemsClick, modifier = modifier, ) } else { DetailsItem( item = it, onItemsClick = state.onItemsClick, - modifier = modifier + modifier = modifier, ) } } @@ -82,6 +84,7 @@ fun WalletConnectDetailsItem( Row( modifier = modifier .height(84.dp) + .fillMaxWidth() .clickable { onItemsClick(SettingsElement.WalletConnect) }, horizontalArrangement = Arrangement.Start, verticalAlignment = Alignment.CenterVertically, @@ -150,22 +153,19 @@ fun TangemSocialAccounts( onSocialNetworkClick: (String) -> Unit, modifier: Modifier = Modifier, ) { - Row( - modifier = modifier.padding(start = 8.dp, end = 8.dp) + LazyRow( + modifier = modifier.padding(start = 8.dp, end = 8.dp), ) { - - links.map { + items(links) { Icon( painter = painterResource(id = it.iconRes), contentDescription = "", modifier = modifier .padding(8.dp) - .clickable { onSocialNetworkClick(it.url) } - , + .clickable { onSocialNetworkClick(it.url) }, tint = colorResource(id = R.color.icon_informative), ) } - } } @@ -174,11 +174,11 @@ fun TangemSocialAccounts( fun Preview() { DetailsScreen( state = DetailsScreenState( - SettingsElement.values().toList(), - TangemSocialAccounts.accountsEn, - "Tangem 2.14.12 (343)", - {}, {} - ), - {}, + elements = SettingsElement.values().toList(), + tangemLinks = TangemSocialAccounts.accountsEn, + tangemVersion = "Tangem 2.14.12 (343)", + onItemsClick = {}, onSocialNetworkClick = {}, + ), + onBackPressed = {}, ) } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/details/DetailsScreenState.kt b/app/src/main/java/com/tangem/tap/features/details/ui/details/DetailsScreenState.kt index 57e824311a..ffb57970b6 100644 --- a/app/src/main/java/com/tangem/tap/features/details/ui/details/DetailsScreenState.kt +++ b/app/src/main/java/com/tangem/tap/features/details/ui/details/DetailsScreenState.kt @@ -12,7 +12,6 @@ data class DetailsScreenState( val appNameRes: Int = R.string.app_name } - enum class SettingsElement( val iconRes: Int, val titleRes: Int, diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/resetcard/ResetCardFragment.kt b/app/src/main/java/com/tangem/tap/features/details/ui/resetcard/ResetCardFragment.kt index 3abfbc5678..9cf655653e 100644 --- a/app/src/main/java/com/tangem/tap/features/details/ui/resetcard/ResetCardFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/details/ui/resetcard/ResetCardFragment.kt @@ -21,7 +21,7 @@ class ResetCardFragment : Fragment(), StoreSubscriber { private val viewModel = ResetCardViewModel(store) private var screenState: MutableState = - mutableStateOf(viewModel.updateState(store.state.detailsState.cardSettingsState, context)) + mutableStateOf(viewModel.updateState(store.state.detailsState.cardSettingsState)) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -35,7 +35,7 @@ class ResetCardFragment : Fragment(), StoreSubscriber { inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?, - ): View? { + ): View { return ComposeView(requireContext()).apply { setContent { isTransitionGroup = true @@ -65,6 +65,6 @@ class ResetCardFragment : Fragment(), StoreSubscriber { override fun newState(state: DetailsState) { if (activity == null || view == null) return - screenState.value = viewModel.updateState(state.cardSettingsState, context) + screenState.value = viewModel.updateState(state.cardSettingsState) } } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/resetcard/ResetCardScreen.kt b/app/src/main/java/com/tangem/tap/features/details/ui/resetcard/ResetCardScreen.kt index 0511084892..08fdd1baca 100644 --- a/app/src/main/java/com/tangem/tap/features/details/ui/resetcard/ResetCardScreen.kt +++ b/app/src/main/java/com/tangem/tap/features/details/ui/resetcard/ResetCardScreen.kt @@ -46,7 +46,6 @@ fun ResetCardView( state: ResetCardScreenState, modifier: Modifier = Modifier, ) { - Column( modifier = modifier .fillMaxSize(), @@ -111,7 +110,7 @@ fun ResetCardView( DetailsMainButton( title = stringResource(id = R.string.reset_factory_button), onClick = state.onResetButtonClick, - enabled = state.resetButtonEnabled + enabled = state.resetButtonEnabled, ) } diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/resetcard/ResetCardViewModel.kt b/app/src/main/java/com/tangem/tap/features/details/ui/resetcard/ResetCardViewModel.kt index 19ae8fd669..15f891dba3 100644 --- a/app/src/main/java/com/tangem/tap/features/details/ui/resetcard/ResetCardViewModel.kt +++ b/app/src/main/java/com/tangem/tap/features/details/ui/resetcard/ResetCardViewModel.kt @@ -1,6 +1,5 @@ package com.tangem.tap.features.details.ui.resetcard -import android.content.Context import com.tangem.tap.common.redux.AppState import com.tangem.tap.features.details.redux.CardSettingsState import com.tangem.tap.features.details.redux.DetailsAction @@ -8,11 +7,11 @@ import org.rekotlin.Store class ResetCardViewModel(private val store: Store) { - fun updateState(state: CardSettingsState?, context: Context?): ResetCardScreenState { + fun updateState(state: CardSettingsState?): ResetCardScreenState { return ResetCardScreenState( accepted = state?.resetConfirmed ?: false, onAcceptWarningToggleClick = { store.dispatch(DetailsAction.ResetToFactory.Confirm(it)) }, - onResetButtonClick = { store.dispatch(DetailsAction.ResetToFactory.Proceed) } + onResetButtonClick = { store.dispatch(DetailsAction.ResetToFactory.Proceed) }, ) } } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/securitymode/SecurityModeFragment.kt b/app/src/main/java/com/tangem/tap/features/details/ui/securitymode/SecurityModeFragment.kt index 216f6708d7..e57337eb80 100644 --- a/app/src/main/java/com/tangem/tap/features/details/ui/securitymode/SecurityModeFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/details/ui/securitymode/SecurityModeFragment.kt @@ -35,7 +35,7 @@ class SecurityModeFragment : Fragment(), StoreSubscriber { inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?, - ): View? { + ): View { return ComposeView(requireContext()).apply { setContent { isTransitionGroup = true diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/securitymode/SecurityModeScreen.kt b/app/src/main/java/com/tangem/tap/features/details/ui/securitymode/SecurityModeScreen.kt index ff22234382..1f8692b350 100644 --- a/app/src/main/java/com/tangem/tap/features/details/ui/securitymode/SecurityModeScreen.kt +++ b/app/src/main/java/com/tangem/tap/features/details/ui/securitymode/SecurityModeScreen.kt @@ -29,11 +29,10 @@ fun SecurityModeScreen( onBackPressed: () -> Unit, modifier: Modifier = Modifier, ) { - SettingsScreensScaffold( content = { SecurityModeOptions(state = state, modifier = modifier) }, titleRes = R.string.card_settings_security_mode, - onBackClick = onBackPressed + onBackClick = onBackPressed, ) } @@ -49,53 +48,11 @@ fun SecurityModeOptions( .padding(bottom = 28.dp), verticalArrangement = Arrangement.SpaceBetween, ) { - - Column(modifier = modifier.fillMaxWidth()) { - - state.availableOptions.map { - - val selected = it == state.selectedSecurityMode - - val title = it.toTitleRes() - - val subtitle = when (it) { - SecurityOption.LongTap -> R.string.details_manage_security_long_tap_description - SecurityOption.PassCode -> R.string.details_manage_security_passcode_description - SecurityOption.AccessCode -> R.string.details_manage_security_access_code_description - } - - Row( - modifier = modifier - .fillMaxWidth() - .selectable( - selected = selected, onClick = { state.onNewModeSelected(it) }, - ) - .padding(start = 20.dp, end = 20.dp, bottom = 32.dp), - ) { - - RadioButton( - selected = selected, onClick = null, - modifier = modifier.padding(end = 20.dp), - ) - - Column { - Text( - text = stringResource(id = title), - style = TangemTypography.subtitle1, - color = colorResource(id = R.color.text_primary_1), - ) - Spacer(modifier = modifier.size(4.dp)) - Text( - text = stringResource(id = subtitle), - style = TangemTypography.body2, - color = colorResource(id = R.color.text_secondary), - ) - } - } - - } + state.availableOptions.map { + SecurityOption(option = it, state = state, modifier = modifier) } + Spacer(modifier = Modifier.weight(1f)) DetailsMainButton( title = stringResource(id = R.string.common_save_changes), @@ -107,6 +64,51 @@ fun SecurityModeOptions( } } +@Composable +fun SecurityOption( + option: SecurityOption, state: SecurityModeScreenState, + modifier: Modifier, +) { + val selected = option == state.selectedSecurityMode + + val title = option.toTitleRes() + + val subtitle = when (option) { + SecurityOption.LongTap -> R.string.details_manage_security_long_tap_description + SecurityOption.PassCode -> R.string.details_manage_security_passcode_description + SecurityOption.AccessCode -> R.string.details_manage_security_access_code_description + } + + Row( + modifier = modifier + .fillMaxWidth() + .selectable( + selected = selected, onClick = { state.onNewModeSelected(option) }, + ) + .padding(start = 20.dp, end = 20.dp, bottom = 32.dp), + ) { + + RadioButton( + selected = selected, onClick = null, + modifier = modifier.padding(end = 20.dp), + ) + + Column { + Text( + text = stringResource(id = title), + style = TangemTypography.subtitle1, + color = colorResource(id = R.color.text_primary_1), + ) + Spacer(modifier = modifier.size(4.dp)) + Text( + text = stringResource(id = subtitle), + style = TangemTypography.body2, + color = colorResource(id = R.color.text_secondary), + ) + } + } +} + @Preview @Composable fun SecurityModeScreenPreview() { @@ -118,6 +120,6 @@ fun SecurityModeScreenPreview() { onNewModeSelected = {}, onSaveChangesClicked = {}, ), - {} + onBackPressed = {}, ) } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/securitymode/SecurityModeViewModel.kt b/app/src/main/java/com/tangem/tap/features/details/ui/securitymode/SecurityModeViewModel.kt index f79b146e24..b25277864d 100644 --- a/app/src/main/java/com/tangem/tap/features/details/ui/securitymode/SecurityModeViewModel.kt +++ b/app/src/main/java/com/tangem/tap/features/details/ui/securitymode/SecurityModeViewModel.kt @@ -9,13 +9,15 @@ import org.rekotlin.Store class SecurityModeViewModel(val store: Store) { fun updateState(state: ManageSecurityState?): SecurityModeScreenState { - if (state == null) return SecurityModeScreenState( - emptyList(), SecurityOption.LongTap, false, {}, - {}, + availableOptions = emptyList(), + selectedSecurityMode = SecurityOption.LongTap, + isSaveChangesEnabled = false, + onNewModeSelected = {}, + onSaveChangesClicked = {}, ) return SecurityModeScreenState( - state.allowedOptions.toList(), + availableOptions = state.allowedOptions.toList(), selectedSecurityMode = state.selectedOption, isSaveChangesEnabled = state.selectedOption != state.currentOption, onNewModeSelected = { store.dispatch(DetailsAction.ManageSecurity.SelectOption(it)) }, From e8d77000db7fd1b5a9dc454b673e4fd2080a0ab8 Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 3 Aug 2022 15:50:28 +0300 Subject: [PATCH 119/177] Updated on 2026-08-14 --- .idea/codeStyles/Project.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml index ad9c1261c4..3ab743df69 100644 --- a/.idea/codeStyles/Project.xml +++ b/.idea/codeStyles/Project.xml @@ -175,8 +175,8 @@ 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 z zpMFRwTrX7WUp>&H@O@Qa+sP64>^8EBsCuYecn2htAdY-+9 zYJ*7bwA}s42K>1Et?8CG_djr=jniv+-4xzNr^vR8Uf1n$wdb-dR;?=$uo#HN^UC(Z zNyhcGvv6P2QOX7fem;~TX5)?ODFF2M9s}{M;7$f;tispfmifu~tomHZ1*}6*_;>B^ zL(fxBtLC-E8?T{eZHU)4I2!L*jvpQ25DUKdyPFv{!c(;q=b&+7Fa;Z&3~jtx#0tRc z0qe%Qi>l%u7GamvDW(Im2-N5|awr_+bgqKuEa#pAipVa}g{z8?Ad4u#jIUJ4TI?eP zA;d-)VXn~oKn*0t$O$Ua^2fi_cQz%?$VDKF=!XIW@d5cz=3Cy2=a4 zBT!yi;fG?P6Qk#p6trur5HCkiwJfYq@=&E15iw~adyvOB&Jo1vPu7-srdMv`O2=y> z$2lJliMJY0=mnVPA~%rdmk$@8Jg<+ATRNVfpX9-As`^g9tMZ9MD;D~!wlmbmQL9VR z=p1?KRy<@xHrYQdlH8zd@W(e5w4h5UAW1u@tJerEfOVZI$?FQX&AHcH(e2( z{FxD(RkP55g_Zj77|p}~m9U`5sDS;{M;bcg>=Ly-HlzH*Pn`Tu@}`CXYx}7*Rz^6? zVMJXYm~v@r77@r3`VXCnat61e`*FA~Gq9O?KR>UGE2QJf6BU>1H|l79^!Xs{(N^Ra zS;KH?-N{!R14E%Gk6Un5i1boz~uzSW;u0No=vKs z0F8{ba&Dt*YFITOBOp`>VsO#Qa;g--2`eW)3D=A(1!ytOW7ilhnDUQ=>gbY*e8?4=$Eu@&jC;N$Vi@FCm zx_>Z5E6S}BrB8S)D#(sz#{~t6$YlSxqKQ$4w&PqWDvswx;NrJ!zQW#1VxEO-qYK1h79~J z#$T7Y5{X$SG&W*N9(+HdgYcx&AcYvb}AU$Nbjk2M?M4WO77QfYr>5MX`K$QaAdvpZHC5+3lx0doK%4& z#Zn-8=GQ_vcnK#z{~9_%Xe2&^H3K#Di&m8drsm=>;B=mmxB zIrww$o?u1!zm-NgM}J-gyd{q7&4K!?VflS;5=kRi{%jtJnKV(D7fCT{Yv+|HYR=p^nziw76Ej5wKch-eXFlYh)VM?%($yBV>bJc+DmBl=QBoD$Q^Q5e3nT}As$o#p2b^aiRld}!{8fPMLI@1 z34nVwU_fXa`K6opX--U=@?H_vrW5d!jib?7B}cX$2cj2t_DKWcnmS!SQ3Xab#h8L5 zH)|?w(*Xu%+LP3Z^aWKhyYd-VwuL4OSOcW#|50@c~5>%P*# zMt~O6?!|`DG9Zb2=%IJ2b%>3lQI0`yA`CYs_g7s+49Uwxx5l(wiDcT=M$X>hnc~c_ zcGYn2zUT9;*|?SoT~Vtjx1f8tqdkko7nMno1W-!YE3}r-MgS%&4?M07ec$=2zT&8q zA9rw4zih5>ah#Cd@Lj2R%fp#YWzt(_9iVEVF~5YdA*rrdCQxvQR@=xRd@Vul+kNg=k-fr%_XJMIm*80(JY|`&J?!YaWs))TB>Xj~tei>OSaomT z)<79#5kXG5yv0ZL)qpo{wl8-aS+uk(GdeGDdy6Rjk9^R)G(durY#ewp+LwiqpNHD%*Vm7dtkN!v5h2Gcs%JN18qpPI;K+1@DP9r-(-G8P>Ln7k5jep1Qpdk1&YwD+NCCaDO z5#3y&(m+?7Y^)*icQ26tuKdOWLXOvjkOoQ!!hc8kqK;xlC?~WOuH4c*LzJ+T<**=SJ}E}-Sc3x%|*~T`exp@u!~tXupEJum}4G1!&WQD1f`dNVEZ8h@Imtz3}m8 z`JvxYA#X

G?DlQ8h9v^y9R`=Y*{(Sj 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 b5aJ&#t}D-TjFUEn!>;Z2I~kR9uY~^t?hVX5 diff --git a/app/src/main/res/drawable/dapps2.png b/app/src/main/res/drawable/dapps2.png index 549a45e403429ef853c6dd3a5d4f5fbdb97a08e7..f7643c4ec734bd0502a6c4497514be495b1489a4 100644 GIT binary patch literal 34938 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�WxPp44=eAR;x+v8^s@7M{l}|{T-;ni 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 U-$Zf9L)fp=#^*@ohE6g62l6N1&j0`b diff --git a/app/src/main/res/drawable/dapps3.png b/app/src/main/res/drawable/dapps3.png index ebe35565cfa173cb0dc7c31eea802c9059d68b25..9e0110179b3bb4c206050a28e1713445e213a6e8 100644 GIT binary patch literal 32993 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 N6_}<%wcLw{{{dEe+m!$S literal 43259 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 EAI8^tfB*mh diff --git a/app/src/main/res/drawable/dapps4.png b/app/src/main/res/drawable/dapps4.png index 046e96eefae6bde86dce7f7498d360ff66838e77..4eae3c0985a45c5c1fc1a4f3ce7a2b4d37ea6dee 100644 GIT binary patch literal 28483 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 m#{X43Vg#xF|9x0C|AG6VE*%4MNZW literal 38143 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 I+%f!r0b?%jO8@`> diff --git a/app/src/main/res/drawable/dapps5.png b/app/src/main/res/drawable/dapps5.png index dc5d2271e108e133d9bfa9280aeff37691b2f8b5..0c581624c784b1204b692abaf139901f71c484d2 100644 GIT binary patch delta 19347 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 literal 38203 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 From cad20ca58021fdf4ae4b488d5360cf5e3afdcf27 Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 8 Jun 2022 19:32:16 +0300 Subject: [PATCH 008/177] Updated on 2026-08-14 --- .../features/home/compose/content/FirstStoriesContent.kt | 7 +++---- .../features/home/compose/content/FloatingCardsContent.kt | 2 +- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/features/home/compose/content/FirstStoriesContent.kt b/app/src/main/java/com/tangem/tap/features/home/compose/content/FirstStoriesContent.kt index 95a152cc8d..4941b6805c 100644 --- a/app/src/main/java/com/tangem/tap/features/home/compose/content/FirstStoriesContent.kt +++ b/app/src/main/java/com/tangem/tap/features/home/compose/content/FirstStoriesContent.kt @@ -11,7 +11,6 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.alpha import androidx.compose.ui.graphics.Color -import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.TextStyle @@ -100,7 +99,7 @@ fun FirstStoriesContent( .alpha(if (screenState.value == StartingScreenState.SHOW_CARD) 0f else 1f), text = textId?.let { stringResource(textId) } ?: "", textStyle = style, - fontSizeRange = FontSizeRange(20.sp, 60.sp) + fontSizeRange = FontSizeRange(30.sp, 50.sp) ) } @@ -109,7 +108,8 @@ fun FirstStoriesContent( Box( modifier = Modifier .fillMaxWidth() - .weight(1.25f) + .weight(1.2f) + .wrapContentSize(), ) { StoriesBottomImageAnimation( totalDuration = duration, @@ -119,7 +119,6 @@ fun FirstStoriesContent( modifier = modifier.fillMaxWidth(), painter = painterResource(id = R.drawable.meet_tangem), contentDescription = "Tangem Wallet card", - contentScale = ContentScale.FillWidth, ) } } diff --git a/app/src/main/java/com/tangem/tap/features/home/compose/content/FloatingCardsContent.kt b/app/src/main/java/com/tangem/tap/features/home/compose/content/FloatingCardsContent.kt index dee8816ef9..8528982857 100644 --- a/app/src/main/java/com/tangem/tap/features/home/compose/content/FloatingCardsContent.kt +++ b/app/src/main/java/com/tangem/tap/features/home/compose/content/FloatingCardsContent.kt @@ -76,7 +76,7 @@ private class FloatingCard { fun first(): CardValues = CardValues( translateX = -400f to -350f, translateY = 30f to 32f, - rotationX = 10f to 12f, + rotationX = 10f to 15f, rotationY = 15f to 15f, rotationZ = 40f to 27f, scale = 0.6f to 0.6f, From 9cb65c2db1eff61c9fda0cd6e068b4256855bfb7 Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 8 Jun 2022 23:25:44 +0400 Subject: [PATCH 009/177] Updated on 2026-08-14 --- .../com/tangem/tap/domain/TapWalletManager.kt | 138 +++++++----------- .../redux/OnboardingOtherCardsMiddleware.kt | 18 +++ .../redux/OnboardingWalletMiddleware.kt | 13 ++ 3 files changed, 80 insertions(+), 89 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/domain/TapWalletManager.kt b/app/src/main/java/com/tangem/tap/domain/TapWalletManager.kt index cce3a27c15..123c26f691 100644 --- a/app/src/main/java/com/tangem/tap/domain/TapWalletManager.kt +++ b/app/src/main/java/com/tangem/tap/domain/TapWalletManager.kt @@ -26,7 +26,7 @@ import kotlinx.coroutines.withContext class TapWalletManager { val walletManagerFactory: WalletManagerFactory - by lazy { WalletManagerFactory(blockchainSdkConfig) } + by lazy { WalletManagerFactory(blockchainSdkConfig) } val rates: RatesRepository = RatesRepository() @@ -34,10 +34,10 @@ class TapWalletManager { store.state.globalState.configManager?.config?.blockchainSdkConfig ?: BlockchainSdkConfig() } - private val walletManagersThrottler = ThrottlerWithValues>(10000) + private val walletManagersThrottler = + ThrottlerWithValues>(10000) suspend fun loadWalletData(walletManager: WalletManager) { - val blockchain = walletManager.wallet.blockchain val blockchainNetwork = BlockchainNetwork.fromWalletManager(walletManager) val result = if (walletManagersThrottler.isStillThrottled(blockchainNetwork)) { walletManagersThrottler.geValue(blockchainNetwork)!! @@ -54,17 +54,21 @@ class TapWalletManager { is Result.Failure -> { when (result.error) { is TapError.WalletManager.NoAccountError -> { - dispatchOnMain(WalletAction.LoadWallet.NoAccount( - walletManager.wallet, - blockchainNetwork, - (result.error as TapError.WalletManager.NoAccountError).customMessage - )) + dispatchOnMain( + WalletAction.LoadWallet.NoAccount( + walletManager.wallet, + blockchainNetwork, + (result.error as TapError.WalletManager.NoAccountError).customMessage + ) + ) } else -> { - dispatchOnMain(WalletAction.LoadWallet.Failure( - walletManager.wallet, - result.error.localizedMessage - )) + dispatchOnMain( + WalletAction.LoadWallet.Failure( + walletManager.wallet, + result.error.localizedMessage + ) + ) } } } @@ -109,6 +113,37 @@ class TapWalletManager { return } + if (data.card.isMultiwalletAllowed) { + loadMultiWalletData(data) + } else { + loadSingleWalletData(data) + } + + dispatchOnMain(WalletAction.LoadWallet()) + dispatchOnMain(WalletAction.LoadFiatRate()) + } + + private suspend fun loadMultiWalletData( + scanResponse: ScanResponse + ) { + val savedCurrencies = currenciesRepository.loadSavedCurrencies( + scanResponse.card.cardId, scanResponse.card.settings.isHDWalletAllowed + ) + if (savedCurrencies.isEmpty()) return + + val walletManagers = + walletManagerFactory.makeWalletManagersForApp(scanResponse, savedCurrencies) + dispatchOnMain( + WalletAction.MultiWallet.AddBlockchains(savedCurrencies, walletManagers), + ) + savedCurrencies.map { + if (it.tokens.isNotEmpty()) { + dispatchOnMain(WalletAction.MultiWallet.AddTokens(it.tokens, it)) + } + } + } + + private suspend fun loadSingleWalletData(data: ScanResponse) { val blockchain = data.getBlockchain() val primaryWalletManager = walletManagerFactory.makePrimaryWalletManager(data) @@ -120,87 +155,12 @@ class TapWalletManager { primaryWalletManager.addToken(primaryToken) dispatchOnMain(WalletAction.MultiWallet.SetPrimaryToken(primaryToken)) } - if (data.card.isMultiwalletAllowed) { - loadMultiWalletData(data, blockchain, primaryWalletManager) - } else { - dispatchOnMain(WalletAction.MultiWallet.AddBlockchains( + dispatchOnMain( + WalletAction.MultiWallet.AddBlockchains( listOf(BlockchainNetwork.fromWalletManager(primaryWalletManager)), listOf(primaryWalletManager) - )) - } - } else { - if (data.card.isMultiwalletAllowed) { - loadMultiWalletData(data, blockchain, null) - } - } - dispatchOnMain(WalletAction.LoadWallet()) - dispatchOnMain(WalletAction.LoadFiatRate()) - } - - private suspend fun loadMultiWalletData( - scanResponse: ScanResponse, - primaryBlockchain: Blockchain?, - primaryWalletManager: WalletManager? - ) { - val primaryTokens = primaryWalletManager?.cardTokens?.toList() ?: emptyList() - val savedCurrencies = currenciesRepository.loadSavedCurrencies( - scanResponse.card.cardId, scanResponse.card.settings.isHDWalletAllowed - ) - - if (savedCurrencies.isEmpty()) { - if (primaryBlockchain != null && primaryWalletManager != null) { - val blockchainNetwork = BlockchainNetwork.fromWalletManager(primaryWalletManager) - dispatchOnMain( - WalletAction.MultiWallet.SaveCurrencies(listOf(blockchainNetwork)), - WalletAction.MultiWallet.AddBlockchains( - listOf(blockchainNetwork), - listOf(primaryWalletManager) - ), - WalletAction.MultiWallet.AddTokens(primaryTokens.toList(), blockchainNetwork) ) - - } else { - val blockchainNetworks = listOf( - BlockchainNetwork(Blockchain.Bitcoin, scanResponse.card), - BlockchainNetwork(Blockchain.Ethereum, scanResponse.card) - ) - - val walletManagers = walletManagerFactory.makeWalletManagersForApp( - scanResponse, - blockchainNetworks - ) - - dispatchOnMain( - WalletAction.MultiWallet.SaveCurrencies(blockchainNetworks), - WalletAction.MultiWallet.AddBlockchains(blockchainNetworks, walletManagers), - ) - } -// dispatchOnMain( -// WalletAction.MultiWallet.FindBlockchainsInUse, -// WalletAction.MultiWallet.FindTokensInUse, -// ) - } else { - val walletManagers = if ( - primaryTokens.isNotEmpty() && - primaryWalletManager != null && - primaryBlockchain != null && primaryBlockchain != Blockchain.Unknown - ) { - val blockchainsWithoutPrimary = savedCurrencies.filterNot { it.blockchain == primaryBlockchain } - walletManagerFactory.makeWalletManagersForApp( - scanResponse, - blockchainsWithoutPrimary - ).plus(primaryWalletManager) - } else { - walletManagerFactory.makeWalletManagersForApp(scanResponse, savedCurrencies) - } - dispatchOnMain( - WalletAction.MultiWallet.AddBlockchains(savedCurrencies, walletManagers), ) - savedCurrencies.map { - if (it.tokens.isNotEmpty()) { - dispatchOnMain(WalletAction.MultiWallet.AddTokens(it.tokens, it)) - } - } } } diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/products/otherCards/redux/OnboardingOtherCardsMiddleware.kt b/app/src/main/java/com/tangem/tap/features/onboarding/products/otherCards/redux/OnboardingOtherCardsMiddleware.kt index 0f854da103..e470680dbc 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/products/otherCards/redux/OnboardingOtherCardsMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/products/otherCards/redux/OnboardingOtherCardsMiddleware.kt @@ -1,5 +1,6 @@ package com.tangem.tap.features.onboarding.products.otherCards.redux +import com.tangem.blockchain.common.Blockchain import com.tangem.common.CompletionResult import com.tangem.domain.common.extensions.withMainContext import com.tangem.tap.DELAY_SDK_DIALOG_CLOSE @@ -10,6 +11,8 @@ import com.tangem.tap.common.redux.global.GlobalAction import com.tangem.tap.common.redux.navigation.AppScreen import com.tangem.tap.common.redux.navigation.NavigationAction import com.tangem.tap.domain.extensions.hasWallets +import com.tangem.tap.domain.tokens.models.BlockchainNetwork +import com.tangem.tap.features.wallet.redux.WalletAction import com.tangem.tap.scope import com.tangem.tap.store import com.tangem.tap.tangemSdkManager @@ -73,6 +76,21 @@ private fun handleOtherCardsAction(action: Action, dispatch: DispatchFunction) { onboardingManager.scanResponse = updatedResponse onboardingManager.activationStarted(updatedResponse.card.cardId) + val primaryBlockchain = updatedResponse.getBlockchain() + val blockchainNetworks = if (primaryBlockchain != Blockchain.Unknown) { + val primaryToken = updatedResponse.getPrimaryToken() + val blockchainNetwork = BlockchainNetwork(primaryBlockchain, updatedResponse.card).updateTokens( + listOfNotNull(primaryToken)) + listOf(blockchainNetwork) + } else { + listOf( + BlockchainNetwork(Blockchain.Bitcoin, updatedResponse.card), + BlockchainNetwork(Blockchain.Ethereum, updatedResponse.card) + ) + } + + store.dispatch(WalletAction.MultiWallet.SaveCurrencies(blockchainNetworks)) + delay(DELAY_SDK_DIALOG_CLOSE) store.dispatch(OnboardingOtherCardsAction.SetStepOfScreen(OnboardingOtherCardsStep.Done)) } diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/redux/OnboardingWalletMiddleware.kt b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/redux/OnboardingWalletMiddleware.kt index c880488141..88121813ad 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/redux/OnboardingWalletMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/redux/OnboardingWalletMiddleware.kt @@ -1,5 +1,6 @@ package com.tangem.tap.features.onboarding.products.wallet.redux +import com.tangem.blockchain.common.Blockchain import com.tangem.common.CompletionResult import com.tangem.common.card.Card import com.tangem.domain.common.ScanResponse @@ -12,9 +13,11 @@ import com.tangem.tap.common.redux.global.GlobalAction import com.tangem.tap.common.redux.navigation.AppScreen import com.tangem.tap.common.redux.navigation.NavigationAction import com.tangem.tap.domain.extensions.hasWallets +import com.tangem.tap.domain.tokens.models.BlockchainNetwork import com.tangem.tap.features.demo.DemoHelper import com.tangem.tap.features.home.redux.HomeAction import com.tangem.tap.features.wallet.redux.Artwork +import com.tangem.tap.features.wallet.redux.WalletAction import kotlinx.coroutines.launch import org.rekotlin.Action import org.rekotlin.Middleware @@ -84,6 +87,11 @@ private fun handleWalletAction(action: Action) { primaryCard = result.data.primaryCard ) onboardingManager.scanResponse = updatedResponse + val blockchainNetworks = listOf( + BlockchainNetwork(Blockchain.Bitcoin, result.data.card), + BlockchainNetwork(Blockchain.Ethereum, result.data.card) + ) + store.dispatchOnMain(WalletAction.MultiWallet.SaveCurrencies(blockchainNetworks)) onboardingManager.activationStarted(updatedResponse.card.cardId) store.dispatch(OnboardingWalletAction.ProceedBackup) } @@ -260,6 +268,11 @@ private fun handleBackupAction(appState: () -> AppState?, action: BackupAction) backupService.proceedBackup { result -> when (result) { is CompletionResult.Success -> { + val blockchainNetworks = listOf( + BlockchainNetwork(Blockchain.Bitcoin, result.data), + BlockchainNetwork(Blockchain.Ethereum, result.data) + ) + store.dispatchOnMain(WalletAction.MultiWallet.SaveCurrencies(blockchainNetworks)) if (backupService.currentState == BackupService.State.Finished) { store.dispatchOnMain(BackupAction.FinishBackup) } else { From 034e28405b321b3c3ae71deb3bbd387d518a0d39 Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 9 Jun 2022 20:09:11 +0300 Subject: [PATCH 010/177] Updated on 2026-08-14 --- app/src/main/assets/tangem-app-config | 2 +- .../redux/reducers/MultiWalletReducer.kt | 24 ++++++++++--------- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/app/src/main/assets/tangem-app-config b/app/src/main/assets/tangem-app-config index 7f058ec409..64ae04d208 160000 --- a/app/src/main/assets/tangem-app-config +++ b/app/src/main/assets/tangem-app-config @@ -1 +1 @@ -Subproject commit 7f058ec409b4eaaf8688ecd4bf944ef8d58d3564 +Subproject commit 64ae04d2086e5a605dd4da3cba4af32a60d46c79 diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/MultiWalletReducer.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/MultiWalletReducer.kt index 28a7675472..21ca817883 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/MultiWalletReducer.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/MultiWalletReducer.kt @@ -8,16 +8,11 @@ import com.tangem.tap.common.extensions.toFiatString import com.tangem.tap.common.extensions.toFormattedCurrencyString import com.tangem.tap.domain.getFirstToken import com.tangem.tap.domain.tokens.models.BlockchainNetwork +import com.tangem.tap.features.wallet.models.WalletRent import com.tangem.tap.features.wallet.models.filterByToken import com.tangem.tap.features.wallet.models.getPendingTransactions import com.tangem.tap.features.wallet.models.removeUnknownTransactions -import com.tangem.tap.features.wallet.models.toPendingTransactions -import com.tangem.tap.features.wallet.redux.Currency -import com.tangem.tap.features.wallet.redux.WalletAction -import com.tangem.tap.features.wallet.redux.WalletData -import com.tangem.tap.features.wallet.redux.WalletMainButton -import com.tangem.tap.features.wallet.redux.WalletState -import com.tangem.tap.features.wallet.redux.WalletStore +import com.tangem.tap.features.wallet.redux.* import com.tangem.tap.features.wallet.ui.BalanceStatus import com.tangem.tap.features.wallet.ui.BalanceWidgetData import com.tangem.tap.features.wallet.ui.TokenData @@ -109,10 +104,10 @@ class MultiWalletReducer { } is WalletAction.MultiWallet.TokenLoaded -> { val currency = Currency.fromBlockchainNetwork(action.blockchain, action.token) - val wallet = state.getWalletManager(currency)?.wallet.guard { - throw NullPointerException("MultiWallet.TokenLoaded: WalletManager must be no NULL") + val walletManager = state.getWalletManager(currency).guard { + throw NullPointerException("MultiWallet.TokenLoaded: WalletManager must be not NULL") } - + val wallet = walletManager.wallet val pendingTransactions = wallet.getPendingTransactions() val tokenPendingTransactions = pendingTransactions.filterByToken(action.token) val tokenBalanceStatus = when { @@ -142,7 +137,8 @@ class MultiWalletReducer { token = action.token, blockchain = action.blockchain.blockchain, derivationPath = action.blockchain.derivationPath - ) + ), + walletRent = findWalletRent(state.getWalletStore(walletManager.wallet)) ) state.updateWalletData(newTokenWalletData) } @@ -165,6 +161,12 @@ class MultiWalletReducer { is WalletAction.MultiWallet.SaveCurrencies -> state } } + + private fun findWalletRent(walletStore: WalletStore?): WalletRent? { + return walletStore?.walletsData?.firstOrNull { + it.walletRent != null + }?.walletRent + } } private fun addTokens( From 3749575e6023ee60497d62767b62f2e04790d2a3 Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 9 Jun 2022 20:54:52 +0300 Subject: [PATCH 011/177] Updated on 2026-08-14 --- .../features/wallet/redux/middlewares/WalletMiddleware.kt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/WalletMiddleware.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/WalletMiddleware.kt index a4862b21b8..e1691d632e 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/WalletMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/WalletMiddleware.kt @@ -26,6 +26,7 @@ import com.tangem.tap.features.demo.DemoHelper import com.tangem.tap.features.home.redux.HomeAction import com.tangem.tap.features.send.redux.PrepareSendScreen import com.tangem.tap.features.wallet.models.PendingTransactionType +import com.tangem.tap.features.wallet.models.filterByCoin import com.tangem.tap.features.wallet.models.getPendingTransactions import com.tangem.tap.features.wallet.models.getSendableAmounts import com.tangem.tap.features.wallet.redux.* @@ -322,7 +323,10 @@ class WalletMiddleware { } val balance = walletManager.wallet.fundsAvailable(AmountType.Coin) - val outgoingTxs = walletManager.wallet.getPendingTransactions(PendingTransactionType.Outgoing) + val outgoingTxs = walletManager.wallet.getPendingTransactions( + PendingTransactionType.Outgoing + ).filterByCoin() + val rentExempt = result.data val show = if (outgoingTxs.isEmpty()) { isNeedToShowWarning(balance, rentExempt) From fc0eab2d8d9a287b279c290b63b2525baed8df7a Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 10 Jun 2022 14:39:46 +0300 Subject: [PATCH 012/177] Updated on 2026-08-14 --- app/src/main/java/com/tangem/tap/common/extensions/UI.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 8c2184ae50..38b9d9fa48 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 @@ -187,7 +187,7 @@ fun Context.safeStartActivity( } fun View.getString(resId: Int, vararg formatArgs: Any?): String { - return context.getString(resId, formatArgs) + return context.getString(resId, *formatArgs) } fun View.animateVisibility( From 73efa8e11c9465eeda0b1a225f1e8a107a839a86 Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 14 Jun 2022 10:56:47 +0300 Subject: [PATCH 013/177] Updated on 2026-08-14 --- .../home/compose/{StoriesAnimtion.kt => StoriesAnimation.kt} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename app/src/main/java/com/tangem/tap/features/home/compose/{StoriesAnimtion.kt => StoriesAnimation.kt} (100%) diff --git a/app/src/main/java/com/tangem/tap/features/home/compose/StoriesAnimtion.kt b/app/src/main/java/com/tangem/tap/features/home/compose/StoriesAnimation.kt similarity index 100% rename from app/src/main/java/com/tangem/tap/features/home/compose/StoriesAnimtion.kt rename to app/src/main/java/com/tangem/tap/features/home/compose/StoriesAnimation.kt From 6bf0a34d8cde4288f7eedd135a7e5c6ebfe3d10f Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 14 Jun 2022 12:11:57 +0400 Subject: [PATCH 014/177] Updated on 2026-08-14 --- .../tap/features/wallet/redux/WalletState.kt | 101 +----------------- 1 file changed, 3 insertions(+), 98 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletState.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletState.kt index b906784269..e75ef8cd06 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletState.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletState.kt @@ -1,17 +1,10 @@ package com.tangem.tap.features.wallet.redux import android.graphics.Bitmap -import com.tangem.blockchain.common.Amount -import com.tangem.blockchain.common.Blockchain -import com.tangem.blockchain.common.DerivationStyle -import com.tangem.blockchain.common.Token -import com.tangem.blockchain.common.Wallet -import com.tangem.blockchain.common.WalletManager +import com.tangem.blockchain.common.* import com.tangem.blockchain.common.address.AddressType import com.tangem.common.extensions.isZero import com.tangem.domain.common.extensions.canHandleToken -import com.tangem.domain.common.extensions.toCoinId -import com.tangem.domain.features.addCustomToken.CustomCurrency import com.tangem.tap.common.entities.Button import com.tangem.tap.common.entities.FiatCurrency import com.tangem.tap.common.extensions.toQrCode @@ -23,22 +16,15 @@ import com.tangem.tap.domain.extensions.buyIsAllowed import com.tangem.tap.domain.extensions.sellIsAllowed import com.tangem.tap.domain.tokens.models.BlockchainNetwork import com.tangem.tap.features.onboarding.products.twins.redux.TwinCardsState -import com.tangem.tap.features.tokens.redux.TokenWithBlockchain -import com.tangem.tap.features.wallet.models.PendingTransaction -import com.tangem.tap.features.wallet.models.TotalBalance -import com.tangem.tap.features.wallet.models.WalletRent -import com.tangem.tap.features.wallet.models.WalletWarning -import com.tangem.tap.features.wallet.models.hasPendingTransactions -import com.tangem.tap.features.wallet.models.hasSendableAmounts -import com.tangem.tap.features.wallet.models.isSendableAmount +import com.tangem.tap.features.wallet.models.* import com.tangem.tap.features.wallet.redux.reducers.calculateTotalFiatAmount import com.tangem.tap.features.wallet.redux.reducers.findProgressState import com.tangem.tap.features.wallet.ui.BalanceStatus import com.tangem.tap.features.wallet.ui.BalanceWidgetData import com.tangem.tap.network.exchangeServices.CurrencyExchangeManager import com.tangem.tap.store -import java.math.BigDecimal import org.rekotlin.StateType +import java.math.BigDecimal import kotlin.properties.ReadOnlyProperty data class WalletState( @@ -439,87 +425,6 @@ data class WalletData( private fun tokenAmountIsEmpty(): Boolean = currencyData.amount?.isZero() == true } -sealed interface Currency { - - val coinId: String? - get() = when (this) { - is Blockchain -> blockchain.toCoinId() - is Token -> token.id - } - val blockchain: com.tangem.blockchain.common.Blockchain - val currencySymbol: CryptoCurrencyName - val derivationPath: String? - - data class Token( - val token: com.tangem.blockchain.common.Token, - override val blockchain: com.tangem.blockchain.common.Blockchain, - override val derivationPath: String? - ) : Currency { - override val currencySymbol = token.symbol - } - - data class Blockchain( - override val blockchain: com.tangem.blockchain.common.Blockchain, - override val derivationPath: String? - ) : Currency { - override val currencySymbol: CryptoCurrencyName = blockchain.currency - } - - fun isCustomCurrency(derivationStyle: DerivationStyle?): Boolean { - if (this is Token && this.token.id == null) return true - - if (derivationPath == null || derivationStyle == null) return false - - return derivationPath != blockchain.derivationPath(derivationStyle)?.rawPath - } - - fun isBlockchain(): Boolean = this is Blockchain - - fun isToken(): Boolean = this is Token - - companion object { - fun fromBlockchainNetwork( - blockchainNetwork: BlockchainNetwork, - token: com.tangem.blockchain.common.Token? = null - ): Currency { - return if (token != null) { - Token( - token = token, - blockchain = blockchainNetwork.blockchain, - derivationPath = blockchainNetwork.derivationPath - ) - } else { - Blockchain( - blockchain = blockchainNetwork.blockchain, - derivationPath = blockchainNetwork.derivationPath - ) - } - } - - fun fromCustomCurrency(customCurrency: CustomCurrency): Currency { - return when (customCurrency) { - is CustomCurrency.CustomBlockchain -> Blockchain( - blockchain = customCurrency.network, - derivationPath = customCurrency.derivationPath?.rawPath - ) - is CustomCurrency.CustomToken -> Token( - token = customCurrency.token, - blockchain = customCurrency.network, - derivationPath = customCurrency.derivationPath?.rawPath, - ) - } - } - - fun fromTokenWithBlockchain(tokenWithBlockchain: TokenWithBlockchain): Token { - return Token( - token = tokenWithBlockchain.token, - blockchain = tokenWithBlockchain.blockchain, - derivationPath = null - ) - } - } -} - data class WalletStore( val walletManager: WalletManager?, val blockchainNetwork: BlockchainNetwork, From 3f97b4215d41ca123864f70ee28aa4f553608911 Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 14 Jun 2022 13:57:53 +0400 Subject: [PATCH 015/177] Updated on 2026-08-14 --- .../com/tangem/tap/common/DialogManager.kt | 9 ++ .../walletconnect/WalletConnectMiddleware.kt | 125 ++++++++---------- .../redux/walletconnect/WalletConnectState.kt | 1 + app/src/main/res/values-de/strings_final.xml | 1 + app/src/main/res/values-fr/strings_final.xml | 1 + app/src/main/res/values-it/strings_final.xml | 2 + app/src/main/res/values-ru/strings_final.xml | 1 + app/src/main/res/values/strings_final.xml | 1 + 8 files changed, 74 insertions(+), 67 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/common/DialogManager.kt b/app/src/main/java/com/tangem/tap/common/DialogManager.kt index 2895613815..342e29a83e 100644 --- a/app/src/main/java/com/tangem/tap/common/DialogManager.kt +++ b/app/src/main/java/com/tangem/tap/common/DialogManager.kt @@ -65,6 +65,15 @@ class DialogManager : StoreSubscriber { messageRes = R.string.wallet_connect_scanner_error_no_ethereum_wallet, context = context ) + is WalletConnectDialog.AddNetwork -> + SimpleAlertDialog.create( + titleRes = R.string.wallet_connect, + message = context.getString( + R.string.wallet_connect_network_not_found_format, + state.dialog.network + ), + context = context + ) is WalletConnectDialog.OpeningSessionRejected -> { SimpleAlertDialog.create( titleRes = R.string.wallet_connect, diff --git a/app/src/main/java/com/tangem/tap/features/details/redux/walletconnect/WalletConnectMiddleware.kt b/app/src/main/java/com/tangem/tap/features/details/redux/walletconnect/WalletConnectMiddleware.kt index 2bdc6edf5f..25c5d373b4 100644 --- a/app/src/main/java/com/tangem/tap/features/details/redux/walletconnect/WalletConnectMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/details/redux/walletconnect/WalletConnectMiddleware.kt @@ -1,12 +1,11 @@ package com.tangem.tap.features.details.redux.walletconnect import com.tangem.blockchain.common.Blockchain -import com.tangem.blockchain.common.DerivationParams import com.tangem.blockchain.common.WalletManager import com.tangem.common.extensions.guard import com.tangem.domain.common.ScanResponse -import com.tangem.domain.common.TapWorkarounds.derivationStyle import com.tangem.domain.common.TapWorkarounds.isTestCard +import com.tangem.domain.common.extensions.withMainContext import com.tangem.tap.common.extensions.dispatchOnMain import com.tangem.tap.common.extensions.getFromClipboard import com.tangem.tap.common.redux.AppState @@ -21,8 +20,6 @@ import com.tangem.tap.domain.walletconnect.BnbHelper import com.tangem.tap.domain.walletconnect.WalletConnectManager import com.tangem.tap.domain.walletconnect.WalletConnectNetworkUtils import com.tangem.tap.features.demo.DemoHelper -import com.tangem.tap.features.wallet.models.Currency -import com.tangem.tap.features.wallet.redux.WalletAction import com.tangem.tap.scope import com.tangem.tap.store import com.tangem.wallet.R @@ -192,40 +189,51 @@ class WalletConnectMiddleware { return } - val walletManager = getWalletManager(scanResponse, blockchain).guard { - store.dispatchOnMain(WalletConnectAction.FailureEstablishingSession(null)) - return + scope.launch { + val walletManager = getWalletManager(scanResponse, blockchain).guard { + store.dispatchOnMain(WalletConnectAction.FailureEstablishingSession(session.session)) + store.dispatchOnMain( + GlobalAction.ShowDialog( + WalletConnectDialog.AddNetwork(blockchain.fullName) + ) + ) + return@launch + } + + val wallet = walletManager.wallet + val derivedKey = + if (wallet.publicKey.blockchainKey.contentEquals(wallet.publicKey.seedKey)) { + null + } else { + walletManager.wallet.publicKey.blockchainKey + } + val walletForSession = WalletForSession( + cardId = scanResponse.card.cardId, + walletPublicKey = wallet.publicKey.seedKey, + derivedPublicKey = derivedKey, + derivationPath = wallet.publicKey.derivationPath, + blockchain = wallet.blockchain + ) + + withMainContext { + val updatedSession = session.copy(wallet = walletForSession) + walletConnectManager.updateSession(updatedSession) + + store.dispatch(WalletConnectAction.AddScanResponse(scanResponse)) + + store.dispatch( + GlobalAction.ShowDialog( + WalletConnectDialog.ApproveWcSession( + updatedSession + ) + ) + ) + } } - val wallet = walletManager.wallet - val derivedKey = - if (wallet.publicKey.blockchainKey.contentEquals(wallet.publicKey.seedKey)) { - null - } else { - walletManager.wallet.publicKey.blockchainKey - } - val walletForSession = WalletForSession( - cardId = scanResponse.card.cardId, - walletPublicKey = wallet.publicKey.seedKey, - derivedPublicKey = derivedKey, - derivationPath = wallet.publicKey.derivationPath, - blockchain = wallet.blockchain - ) - val updatedSession = session.copy(wallet = walletForSession) - walletConnectManager.updateSession(updatedSession) - - store.dispatchOnMain(WalletConnectAction.AddScanResponse(scanResponse)) - - store.dispatchOnMain( - GlobalAction.ShowDialog( - WalletConnectDialog.ApproveWcSession( - updatedSession - ) - ) - ) } - private fun getWalletManager( + private suspend fun getWalletManager( scanResponse: ScanResponse, blockchain: Blockchain ): WalletManager? { val card = scanResponse.card @@ -236,42 +244,25 @@ class WalletConnectMiddleware { blockchain } + val blockchainNetwork = BlockchainNetwork( + blockchain = blockchainToMake, + card = card + ) + return if (store.state.globalState.scanResponse?.card?.cardId == card.cardId) { - val derivationPath = blockchainToMake.derivationPath(card.derivationStyle)?.rawPath - store.state.walletState.getWalletManager( - Currency.Blockchain(blockchainToMake, derivationPath) - ) - ?: factory.makeWalletManagerForApp( - scanResponse, - blockchainToMake, - card.derivationStyle?.let { DerivationParams.Default(it) } - ) - ?.also { walletManager -> - store.dispatch( - WalletAction.MultiWallet.AddBlockchain( - BlockchainNetwork.fromWalletManager(walletManager), walletManager - ) - ) - } + store.state.walletState.getWalletManager(blockchainNetwork) } else { - val walletManager = factory.makeWalletManagerForApp( - scanResponse, - blockchainToMake, - card.derivationStyle?.let { DerivationParams.Default(it) } - ) - scope.launch { - if (currenciesRepository.loadSavedCurrencies(card.cardId, card.settings.isHDWalletAllowed) - .find { it.blockchain == blockchainToMake } != null - ) { - walletManager?.let { - currenciesRepository.saveUpdatedCurrency( - card.cardId, - BlockchainNetwork.fromWalletManager(walletManager) - ) - } - } + if (currenciesRepository + .loadSavedCurrencies(card.cardId, card.settings.isHDWalletAllowed) + .contains(blockchainNetwork) + ) { + factory.makeWalletManagerForApp( + scanResponse = scanResponse, + blockchainNetwork = blockchainNetwork + ) + } else { + null } - return walletManager } } } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/details/redux/walletconnect/WalletConnectState.kt b/app/src/main/java/com/tangem/tap/features/details/redux/walletconnect/WalletConnectState.kt index 0039e247ee..4f5861c67b 100644 --- a/app/src/main/java/com/tangem/tap/features/details/redux/walletconnect/WalletConnectState.kt +++ b/app/src/main/java/com/tangem/tap/features/details/redux/walletconnect/WalletConnectState.kt @@ -82,6 +82,7 @@ data class WalletForSession( sealed class WalletConnectDialog : StateDialog { data class ClipboardOrScanQr(val clipboardUri: String) : WalletConnectDialog() object UnsupportedCard : WalletConnectDialog() + data class AddNetwork(val network: String) : WalletConnectDialog() object OpeningSessionRejected : WalletConnectDialog() object SessionTimeout : WalletConnectDialog() data class ApproveWcSession(val session: WalletConnectSession) : WalletConnectDialog() diff --git a/app/src/main/res/values-de/strings_final.xml b/app/src/main/res/values-de/strings_final.xml index d2c6336c24..e523e56dac 100644 --- a/app/src/main/res/values-de/strings_final.xml +++ b/app/src/main/res/values-de/strings_final.xml @@ -54,4 +54,5 @@ Unable to hide %s The %s token is the main currency on the %s network and cannot be hidden as long as you have other tokens on this network in the list. + %s network not found. Please, add it first and try again. \ No newline at end of file diff --git a/app/src/main/res/values-fr/strings_final.xml b/app/src/main/res/values-fr/strings_final.xml index d2c6336c24..e523e56dac 100644 --- a/app/src/main/res/values-fr/strings_final.xml +++ b/app/src/main/res/values-fr/strings_final.xml @@ -54,4 +54,5 @@ Unable to hide %s The %s token is the main currency on the %s network and cannot be hidden as long as you have other tokens on this network in the list. + %s network not found. Please, add it first and try again. \ No newline at end of file diff --git a/app/src/main/res/values-it/strings_final.xml b/app/src/main/res/values-it/strings_final.xml index d2c6336c24..a64a7a676d 100644 --- a/app/src/main/res/values-it/strings_final.xml +++ b/app/src/main/res/values-it/strings_final.xml @@ -54,4 +54,6 @@ Unable to hide %s The %s token is the main currency on the %s network and cannot be hidden as long as you have other tokens on this network in the list. + %s network not found. Please, add it first and try again. + \ No newline at end of file diff --git a/app/src/main/res/values-ru/strings_final.xml b/app/src/main/res/values-ru/strings_final.xml index d3299007a1..4d79e63197 100644 --- a/app/src/main/res/values-ru/strings_final.xml +++ b/app/src/main/res/values-ru/strings_final.xml @@ -59,4 +59,5 @@ Невозможно скрыть %s Токен %s является основной валютой в сети %s и не может быть скрыт, до тех пор пока у вас в списке есть другие токены этой сети. + Сеть %s не найдена. Пожалуйста, добавьте её и попробуйте заново. diff --git a/app/src/main/res/values/strings_final.xml b/app/src/main/res/values/strings_final.xml index 99845e1fb7..3ff79d9b5d 100644 --- a/app/src/main/res/values/strings_final.xml +++ b/app/src/main/res/values/strings_final.xml @@ -59,4 +59,5 @@ Unable to hide %s The %s token is the main currency on the %s network and cannot be hidden as long as you have other tokens on this network in the list. + %s network not found. Please, add it first and try again. From 619a69683d241e4861ba0aa0a12b92c425bbe561 Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 14 Jun 2022 23:58:11 +0300 Subject: [PATCH 016/177] Updated on 2026-08-14 --- app/src/main/res/layout/fragment_wallet.xml | 46 +++++++++---------- .../res/layout/layout_wallet_long_buttons.xml | 5 +- .../layout/layout_wallet_short_buttons.xml | 46 ++++++++----------- 3 files changed, 44 insertions(+), 53 deletions(-) diff --git a/app/src/main/res/layout/fragment_wallet.xml b/app/src/main/res/layout/fragment_wallet.xml index 3b962facaf..ba4f34f1c1 100644 --- a/app/src/main/res/layout/fragment_wallet.xml +++ b/app/src/main/res/layout/fragment_wallet.xml @@ -151,28 +151,6 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/rv_pending_transaction" /> - - - - @@ -192,6 +170,28 @@ android:text="@string/main_manage_tokens" android:elevation="4dp" app:cornerRadius="8dp" - app:layout_constraintBottom_toBottomOf="parent" /> + tools:visibility="gone" /> + + + + diff --git a/app/src/main/res/layout/layout_wallet_long_buttons.xml b/app/src/main/res/layout/layout_wallet_long_buttons.xml index f670b7fd5d..5fc11bef41 100644 --- a/app/src/main/res/layout/layout_wallet_long_buttons.xml +++ b/app/src/main/res/layout/layout_wallet_long_buttons.xml @@ -17,11 +17,8 @@ android:id="@+id/btn_confirm_long" style="@style/TapButtonWithIcon" android:layout_width="0dp" - android:layout_marginTop="30dp" - android:layout_marginEnd="16dp" - android:layout_marginBottom="8dp" android:text="@string/wallet_button_send" - app:icon="@drawable/ic_send" + app:icon="@drawable/ic_send" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toEndOf="@+id/guideline" diff --git a/app/src/main/res/layout/layout_wallet_short_buttons.xml b/app/src/main/res/layout/layout_wallet_short_buttons.xml index ed60601395..e235511583 100644 --- a/app/src/main/res/layout/layout_wallet_short_buttons.xml +++ b/app/src/main/res/layout/layout_wallet_short_buttons.xml @@ -6,38 +6,32 @@ + app:layout_constraintHorizontal_bias="0.5" + app:layout_constraintHorizontal_chainStyle="packed" + app:layout_constraintStart_toStartOf="parent" + app:iconGravity="textEnd" + android:textAlignment="center" + app:layout_constraintVertical_bias="1" /> + app:layout_constraintStart_toEndOf="@id/btn_trade" + app:layout_constraintVertical_bias="1" /> From 99bb8983a491cd9ef40567b607800fb629c278b0 Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 15 Jun 2022 15:00:40 +0400 Subject: [PATCH 017/177] Updated on 2026-08-14 --- .../main/res/values-de/strings_blockchain.xml | 2 +- .../main/res/values-fr/strings_blockchain.xml | 16 ++++++++-------- .../main/res/values-it/strings_blockchain.xml | 2 +- app/src/main/res/values/strings_blockchain.xml | 2 +- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/app/src/main/res/values-de/strings_blockchain.xml b/app/src/main/res/values-de/strings_blockchain.xml index e60757c7c1..2f52667c19 100644 --- a/app/src/main/res/values-de/strings_blockchain.xml +++ b/app/src/main/res/values-de/strings_blockchain.xml @@ -5,7 +5,7 @@ Falsche Gebühr Minimaler Betrag ist %s Restbestand zu klein - Das Zielkonto ist nicht erstellt. Der abzusendende Betrag soll %1$s %2$s + Gebühr oder mehr sein + Das Zielkonto ist nicht erstellt. Der abzusendende Betrag soll %s %s + Gebühr oder mehr sein Um ein Konto zu erstellen, senden Sie 1+ XLM an diese Adresse Erhalt der Gebühr fehlgeschlagen Unbekannter Fehler diff --git a/app/src/main/res/values-fr/strings_blockchain.xml b/app/src/main/res/values-fr/strings_blockchain.xml index c9b37afb06..f6e2cdef63 100644 --- a/app/src/main/res/values-fr/strings_blockchain.xml +++ b/app/src/main/res/values-fr/strings_blockchain.xml @@ -3,18 +3,18 @@ Solde insuffisant Erreur interne de la blockchain Commission non valide - Le montant minimal est de %ы + Le montant minimal est de %s Le reste est trop petit - Le compte cible n\'a pas été créé. Le montant à envoyer doit être de %1$s %2$s + commissions ou plus + Le compte cible n\'a pas été créé. Le montant à envoyer doit être de %s %s + commissions ou plus Pour créer un compte, envoyez 1+ XLM à cette adresse Échec de réception des commissions Erreur inconnue - Adresse incorrecte - Somme incorrecte - Le montant dépasse le solde - Le total dépasse le solde - Les commissions dépassent le solde + Adresse incorrecte + Somme incorrecte + Le montant dépasse le solde + Le total dépasse le solde + Les commissions dépassent le solde Pour ne pas payer une commission élevée la prochaine fois que vous rechargez votre portefeuille, veuillez réduire le montant de %s XTZ - Réduire de% s XTZ + Réduire de %s XTZ Non, envoyer toute la somme \ No newline at end of file diff --git a/app/src/main/res/values-it/strings_blockchain.xml b/app/src/main/res/values-it/strings_blockchain.xml index 924ecda0df..64c4650de7 100644 --- a/app/src/main/res/values-it/strings_blockchain.xml +++ b/app/src/main/res/values-it/strings_blockchain.xml @@ -7,7 +7,7 @@ L\'importo residuo è molto basso Errore sconosciuto L\'importo supera il saldo - Per creare un account, invia %1$s %2$s a questo indirizzo + Per creare un account, invia %s %s a questo indirizzo Impossibile ottenere la commissione Per creare un account, invia 1+ XLM a questo indirizzo Indirizzo non valido diff --git a/app/src/main/res/values/strings_blockchain.xml b/app/src/main/res/values/strings_blockchain.xml index 424f164b75..35bc8cf334 100644 --- a/app/src/main/res/values/strings_blockchain.xml +++ b/app/src/main/res/values/strings_blockchain.xml @@ -7,7 +7,7 @@ Change is too small To create account send 1+ XLM to this address Failed to get fee - Target account is not created. Amount to send should be %1$s %2$s + fee or more to create + Target account is not created. Amount to send should be %s %s + fee or more to create Unknown error Invalid address Invalid amount From 4ee03117fb14e0c717b9d96d1cbbddafc1ec010f Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 15 Jun 2022 15:09:22 +0400 Subject: [PATCH 018/177] Updated on 2026-08-14 --- app/src/main/res/values-it/strings_blockchain.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-it/strings_blockchain.xml b/app/src/main/res/values-it/strings_blockchain.xml index 64c4650de7..cd0f690a23 100644 --- a/app/src/main/res/values-it/strings_blockchain.xml +++ b/app/src/main/res/values-it/strings_blockchain.xml @@ -13,7 +13,7 @@ Indirizzo non valido Importo non valido Il totale supera il saldo - La commissione supera il saldo + La commissione supera il saldo Per evitare di pagare una commissione maggiore la prossima volta che ricarichi il tuo portafoglio, riduci l\'importo di %s XTZ Riduci di %s XTZ No, invia l\'intero importo From b132e898bae434c9cf176423be8473dae2f916f3 Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 16 Jun 2022 20:31:20 +0300 Subject: [PATCH 019/177] Updated on 2026-08-14 --- app/src/main/res/drawable/ic_scan_card_24.xml | 10 ---------- app/src/main/res/drawable/ic_wallet_24.xml | 10 ++++++++++ app/src/main/res/layout/fragment_wallet.xml | 5 +++-- app/src/main/res/menu/wallet.xml | 2 +- 4 files changed, 14 insertions(+), 13 deletions(-) delete mode 100644 app/src/main/res/drawable/ic_scan_card_24.xml create mode 100644 app/src/main/res/drawable/ic_wallet_24.xml diff --git a/app/src/main/res/drawable/ic_scan_card_24.xml b/app/src/main/res/drawable/ic_scan_card_24.xml deleted file mode 100644 index b77d547233..0000000000 --- a/app/src/main/res/drawable/ic_scan_card_24.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_wallet_24.xml b/app/src/main/res/drawable/ic_wallet_24.xml new file mode 100644 index 0000000000..b1c1514913 --- /dev/null +++ b/app/src/main/res/drawable/ic_wallet_24.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/layout/fragment_wallet.xml b/app/src/main/res/layout/fragment_wallet.xml index ba4f34f1c1..17bf714628 100644 --- a/app/src/main/res/layout/fragment_wallet.xml +++ b/app/src/main/res/layout/fragment_wallet.xml @@ -22,8 +22,9 @@ android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" app:menu="@menu/wallet" - app:navigationIcon="@drawable/ic_scan_card_24" - app:navigationIconTint="@color/iconGray" + app:navigationIcon="@drawable/ic_wallet_24" + app:navigationIconTint="@color/darkGray6" + app:titleCentered="true" app:title="@string/wallet_title" /> diff --git a/app/src/main/res/menu/wallet.xml b/app/src/main/res/menu/wallet.xml index 7f6107b331..edd88afb93 100644 --- a/app/src/main/res/menu/wallet.xml +++ b/app/src/main/res/menu/wallet.xml @@ -5,6 +5,6 @@ android:id="@+id/details_menu" android:title="@string/details_title" android:icon="@drawable/ic_more_vertical_24" - app:iconTint="@color/iconGray" + app:iconTint="@color/darkGray6" app:showAsAction="ifRoom" /> From 7d8ea11c15dad878308fa5432cd648df48b4d7c1 Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 20 Jun 2022 01:49:13 +0300 Subject: [PATCH 020/177] Updated on 2026-08-14 --- .../com/tangem/tap/features/send/redux/reducers/FeeReducer.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/tangem/tap/features/send/redux/reducers/FeeReducer.kt b/app/src/main/java/com/tangem/tap/features/send/redux/reducers/FeeReducer.kt index 65a909ce1c..edb435953f 100644 --- a/app/src/main/java/com/tangem/tap/features/send/redux/reducers/FeeReducer.kt +++ b/app/src/main/java/com/tangem/tap/features/send/redux/reducers/FeeReducer.kt @@ -106,7 +106,7 @@ class FeeReducer : SendInternalReducer { private fun getFeePrecision(sendState: SendState): FeePrecision { val blockchain = sendState.walletManager?.wallet?.blockchain - return if (blockchain?.fullNameWithoutTestnet == Blockchain.Tron.fullName && + return if ((blockchain?.fullNameWithoutTestnet == Blockchain.Arbitrum.fullName || blockchain?.fullNameWithoutTestnet == Blockchain.Tron.fullName) && sendState.amountState.typeOfAmount is AmountType.Token) { FeePrecision.CAN_BE_LOWER } else { From 10860badeb8042232e31f105cee7854f07de682c Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 21 Jun 2022 10:23:47 +0300 Subject: [PATCH 021/177] Updated on 2026-08-14 --- .../com/tangem/tap/features/home/compose/StoriesAnimation.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/features/home/compose/StoriesAnimation.kt b/app/src/main/java/com/tangem/tap/features/home/compose/StoriesAnimation.kt index 3b758f48ab..58f9356349 100644 --- a/app/src/main/java/com/tangem/tap/features/home/compose/StoriesAnimation.kt +++ b/app/src/main/java/com/tangem/tap/features/home/compose/StoriesAnimation.kt @@ -97,8 +97,8 @@ fun StoriesBottomImageAnimation( totalDuration: Int, content: @Composable (Modifier) -> Unit ) { - val scaleSwitchBarrier = remember { 1.15f } - val secondStepDuration = remember { totalDuration - firstStepDuration } + val scaleSwitchBarrier = 1.15f + val secondStepDuration = totalDuration - firstStepDuration val isFirstStepLaunched = remember { mutableStateOf(false) } val isSecondStepLaunched = remember { mutableStateOf(false) } From 9ea5dc577e57d77018c6c3e4fa5845a60ac32a5c Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 22 Jun 2022 17:51:28 +0300 Subject: [PATCH 022/177] Updated on 2026-08-14 --- .../java/com/tangem/tap/common/compose/Spacer.kt | 15 +++++++++++++++ .../tap/features/home/compose/content/Content.kt | 6 +++--- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/common/compose/Spacer.kt b/app/src/main/java/com/tangem/tap/common/compose/Spacer.kt index b31a15c4ae..ce0b190598 100644 --- a/app/src/main/java/com/tangem/tap/common/compose/Spacer.kt +++ b/app/src/main/java/com/tangem/tap/common/compose/Spacer.kt @@ -38,6 +38,11 @@ fun SpacerH24(modifier: Modifier = Modifier) { SpacerH(24.dp, modifier) } +@Composable +fun SpacerH32(modifier: Modifier = Modifier) { + SpacerH(32.dp, modifier) +} + // ***************************** Vertical @Composable fun SpacerW(width: Dp, modifier: Modifier = Modifier) { @@ -64,6 +69,11 @@ fun SpacerW24(modifier: Modifier = Modifier) { SpacerW(24.dp, modifier) } +@Composable +fun SpacerW32(modifier: Modifier = Modifier) { + SpacerW(32.dp, modifier) +} + // ***************************** Size @Composable fun SpacerS(size: Dp, modifier: Modifier = Modifier) { @@ -88,4 +98,9 @@ fun SpacerS16(modifier: Modifier = Modifier) { @Composable fun SpacerS24(modifier: Modifier = Modifier) { SpacerS(24.dp, modifier) +} + +@Composable +fun SpacerS32(modifier: Modifier = Modifier) { + SpacerS(32.dp, modifier) } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/home/compose/content/Content.kt b/app/src/main/java/com/tangem/tap/features/home/compose/content/Content.kt index bed6eccb4b..597f913ef4 100644 --- a/app/src/main/java/com/tangem/tap/features/home/compose/content/Content.kt +++ b/app/src/main/java/com/tangem/tap/features/home/compose/content/Content.kt @@ -23,8 +23,8 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.compose.ui.viewinterop.AndroidView import com.tangem.tangem_sdk_new.extensions.dpToPx -import com.tangem.tap.common.compose.SpacerH import com.tangem.tap.common.compose.SpacerH16 +import com.tangem.tap.common.compose.SpacerH32 import com.tangem.tap.common.compose.extensions.toAndroidGraphicsColor import com.tangem.tap.features.home.compose.StoriesBottomImageAnimation import com.tangem.tap.features.home.compose.StoriesTextAnimation @@ -151,7 +151,7 @@ private fun TopContent( isDarkBackground: Boolean, subtitleTextId: Int? = null, ) { - SpacerH(32.dp) + SpacerH32() StoriesTitleText( text = titleText, isDarkBackground = isDarkBackground, @@ -161,7 +161,7 @@ private fun TopContent( subtitleText = subtitleText, subtitleTextId = subtitleTextId, ) - SpacerH(32.dp) + SpacerH32() } @Composable From a531f558f82b0bba0ba6338ce95b9ca0a9f8602d Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 24 Jun 2022 16:27:38 +0300 Subject: [PATCH 023/177] Updated on 2026-08-14 --- .../features/home/compose/content/Content.kt | 90 +++++++------------ app/src/main/res/values-de/strings_final.xml | 4 +- app/src/main/res/values-fr/strings_final.xml | 4 +- app/src/main/res/values-it/strings_final.xml | 4 +- app/src/main/res/values-ru/strings_final.xml | 4 +- app/src/main/res/values/strings_final.xml | 4 +- 6 files changed, 49 insertions(+), 61 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/features/home/compose/content/Content.kt b/app/src/main/java/com/tangem/tap/features/home/compose/content/Content.kt index 597f913ef4..97e523358b 100644 --- a/app/src/main/java/com/tangem/tap/features/home/compose/content/Content.kt +++ b/app/src/main/java/com/tangem/tap/features/home/compose/content/Content.kt @@ -1,11 +1,5 @@ package com.tangem.tap.features.home.compose.content -import android.content.Context -import android.graphics.Typeface -import android.util.TypedValue -import android.view.View -import android.view.ViewGroup -import android.widget.TextView import androidx.annotation.DrawableRes import androidx.compose.foundation.Image import androidx.compose.foundation.layout.* @@ -17,15 +11,16 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.AnnotatedString +import androidx.compose.ui.text.SpanStyle +import androidx.compose.ui.text.buildAnnotatedString import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.text.withStyle import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import androidx.compose.ui.viewinterop.AndroidView -import com.tangem.tangem_sdk_new.extensions.dpToPx import com.tangem.tap.common.compose.SpacerH16 import com.tangem.tap.common.compose.SpacerH32 -import com.tangem.tap.common.compose.extensions.toAndroidGraphicsColor import com.tangem.tap.features.home.compose.StoriesBottomImageAnimation import com.tangem.tap.features.home.compose.StoriesTextAnimation import com.tangem.wallet.R @@ -36,7 +31,7 @@ fun StoriesRevolutionaryWallet(stepDuration: Int) { topContent = { TopContent( titleText = stringResource(id = R.string.story_awe_title), - subtitleText = stringResource(id = R.string.story_awe_description), + subtitleText = stringResource(id = R.string.story_awe_description).annotated(), isDarkBackground = true, ) }, @@ -57,11 +52,20 @@ fun StoriesRevolutionaryWallet(stepDuration: Int) { @Composable fun StoriesUltraSecureBackup(isPaused: Boolean, stepDuration: Int) { + val subtitleText = buildAnnotatedString { + append(stringResource(id = R.string.story_backup_description_1)) + append(" ") + withStyle(style = SpanStyle(fontWeight = FontWeight.Bold)) { + append(stringResource(id = R.string.story_backup_description_2_bold)) + } + append(" ") + append(stringResource(id = R.string.story_backup_description_3)) + } SplitContent( topContent = { TopContent( titleText = stringResource(id = R.string.story_backup_title), - subtitleText = stringResource(id = R.string.story_backup_description), + subtitleText = subtitleText, isDarkBackground = false, ) }, @@ -77,7 +81,7 @@ fun StoriesCurrencies(isPaused: Boolean, stepDuration: Int) { topContent = { TopContent( titleText = stringResource(id = R.string.story_currencies_title), - subtitleText = stringResource(id = R.string.story_currencies_description), + subtitleText = stringResource(id = R.string.story_currencies_description).annotated(), isDarkBackground = false, ) }, @@ -93,7 +97,7 @@ fun StoriesWeb3(isPaused: Boolean, stepDuration: Int) { topContent = { TopContent( titleText = stringResource(id = R.string.story_web3_title), - subtitleText = stringResource(id = R.string.story_web3_description), + subtitleText = stringResource(id = R.string.story_web3_description).annotated(), isDarkBackground = false, ) }, @@ -109,7 +113,7 @@ fun StoriesWalletForEveryone(stepDuration: Int) { topContent = { TopContent( titleText = stringResource(id = R.string.story_finish_title), - subtitleText = stringResource(id = R.string.story_finish_description), + subtitleText = stringResource(id = R.string.story_finish_description).annotated(), isDarkBackground = true, ) }, @@ -147,9 +151,8 @@ private fun SplitContent( @Composable private fun TopContent( titleText: String, - subtitleText: String, + subtitleText: AnnotatedString, isDarkBackground: Boolean, - subtitleTextId: Int? = null, ) { SpacerH32() StoriesTitleText( @@ -159,7 +162,6 @@ private fun TopContent( SpacerH16() StoriesSubtitleText( subtitleText = subtitleText, - subtitleTextId = subtitleTextId, ) SpacerH32() } @@ -187,8 +189,7 @@ private fun StoriesTitleText( @Composable private fun StoriesSubtitleText( - subtitleText: String, - subtitleTextId: Int?, + subtitleText: AnnotatedString, ) { val color = Color(0xFFA6AAAD) @@ -196,46 +197,18 @@ private fun StoriesSubtitleText( slideInDuration = 500, slideInDelay = 400, ) { modifier -> - val internalModifier = modifier - .padding(start = 40.dp, end = 40.dp) - - if (subtitleTextId == null) { - Text( - text = subtitleText, - fontSize = 20.sp, - fontWeight = FontWeight.Normal, - modifier = internalModifier, - color = color, - textAlign = TextAlign.Center - ) - } else { - HtmlText( - modifier = internalModifier, - stringResId = subtitleTextId, - ) { context -> - val padding = context.dpToPx(40f).toInt() - TextView(context).apply { - layoutParams = ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT) - setPadding(padding, 0, padding, 0) - textAlignment = View.TEXT_ALIGNMENT_CENTER - typeface = Typeface.DEFAULT - setTextSize(TypedValue.COMPLEX_UNIT_SP, 20f) - setTextColor(color.toAndroidGraphicsColor()) - } - } - } + Text( + modifier = modifier + .padding(start = 40.dp, end = 40.dp), + fontWeight = FontWeight.Normal, + text = subtitleText, + fontSize = 20.sp, + color = color, + textAlign = TextAlign.Center + ) } } -@Composable -private fun HtmlText( - stringResId: Int, - modifier: Modifier = Modifier, - factory: (Context) -> TextView -) { - AndroidView(factory, modifier) { it.text = it.context.getText(stringResId) } -} - @Composable private fun StoriesImage( modifier: Modifier = Modifier, @@ -248,4 +221,9 @@ private fun StoriesImage( contentScale = if (isDarkBackground) ContentScale.Inside else ContentScale.FillWidth, modifier = modifier.fillMaxWidth() ) +} + +private fun String.annotated(): AnnotatedString { + val source = this + return buildAnnotatedString { append(source) } } \ No newline at end of file diff --git a/app/src/main/res/values-de/strings_final.xml b/app/src/main/res/values-de/strings_final.xml index de09eb54fd..3c887d74f0 100644 --- a/app/src/main/res/values-de/strings_final.xml +++ b/app/src/main/res/values-de/strings_final.xml @@ -23,7 +23,9 @@ Revolutionary Hardware Wallet Store your crypto assets secure while keeping private keys contained in your card Ultra Secure Backup - Up to 3 physical cards to one wallet + Up to + 3 physical cards + to one wallet Thousands of Currencies A hardware wallet for your Bitcoin, Ethereum and many more currencies simultaneously – all in one card DeFi Compatible diff --git a/app/src/main/res/values-fr/strings_final.xml b/app/src/main/res/values-fr/strings_final.xml index de09eb54fd..3c887d74f0 100644 --- a/app/src/main/res/values-fr/strings_final.xml +++ b/app/src/main/res/values-fr/strings_final.xml @@ -23,7 +23,9 @@ Revolutionary Hardware Wallet Store your crypto assets secure while keeping private keys contained in your card Ultra Secure Backup - Up to 3 physical cards to one wallet + Up to + 3 physical cards + to one wallet Thousands of Currencies A hardware wallet for your Bitcoin, Ethereum and many more currencies simultaneously – all in one card DeFi Compatible diff --git a/app/src/main/res/values-it/strings_final.xml b/app/src/main/res/values-it/strings_final.xml index de09eb54fd..3c887d74f0 100644 --- a/app/src/main/res/values-it/strings_final.xml +++ b/app/src/main/res/values-it/strings_final.xml @@ -23,7 +23,9 @@ Revolutionary Hardware Wallet Store your crypto assets secure while keeping private keys contained in your card Ultra Secure Backup - Up to 3 physical cards to one wallet + Up to + 3 physical cards + to one wallet Thousands of Currencies A hardware wallet for your Bitcoin, Ethereum and many more currencies simultaneously – all in one card DeFi Compatible diff --git a/app/src/main/res/values-ru/strings_final.xml b/app/src/main/res/values-ru/strings_final.xml index 201a1684ae..2147b19938 100644 --- a/app/src/main/res/values-ru/strings_final.xml +++ b/app/src/main/res/values-ru/strings_final.xml @@ -23,7 +23,9 @@ Революционный аппаратный кошелек Держите свои криптосбережения в безопасности. Приватные ключи надежно хранятся на карте. Все ключи в безопасности - До трех карт с одним кошельком + До + трех карт + с одним кошельком Тысячи криптовалют Аппаратный кошелек для ваших биткоинов, эфира и многих других валют одновременно — все в одной карте Поддержка DeFi diff --git a/app/src/main/res/values/strings_final.xml b/app/src/main/res/values/strings_final.xml index d59d31ff0e..9190d7c980 100644 --- a/app/src/main/res/values/strings_final.xml +++ b/app/src/main/res/values/strings_final.xml @@ -23,7 +23,9 @@ Revolutionary Hardware Wallet Store your crypto assets secure while keeping private keys contained in your card Ultra Secure Backup - Up to 3 physical cards to one wallet + Up to + 3 physical cards + to one wallet Thousands of Currencies A hardware wallet for your Bitcoin, Ethereum and many more currencies simultaneously – all in one card DeFi Compatible From 089a606b7a656605cf6532da741b804b60f08c61 Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 24 Jun 2022 19:04:44 +0400 Subject: [PATCH 024/177] Updated on 2026-08-14 --- .../tap/domain/walletconnect/EthSignHelper.kt | 35 +++++-- .../walletconnect/WalletConnectManager.kt | 76 +++++++++++---- .../walletconnect/WcWalletManagerFactory.kt | 95 +++++++++++++++++++ .../walletconnect/WalletConnectAction.kt | 11 +++ .../walletconnect/WalletConnectMiddleware.kt | 84 ++++++++-------- .../walletconnect/WalletConnectReducer.kt | 5 + .../tap/features/wallet/redux/WalletState.kt | 3 + 7 files changed, 248 insertions(+), 61 deletions(-) create mode 100644 app/src/main/java/com/tangem/tap/domain/walletconnect/WcWalletManagerFactory.kt diff --git a/app/src/main/java/com/tangem/tap/domain/walletconnect/EthSignHelper.kt b/app/src/main/java/com/tangem/tap/domain/walletconnect/EthSignHelper.kt index fe8a593787..b366229775 100644 --- a/app/src/main/java/com/tangem/tap/domain/walletconnect/EthSignHelper.kt +++ b/app/src/main/java/com/tangem/tap/domain/walletconnect/EthSignHelper.kt @@ -1,11 +1,13 @@ package com.tangem.tap.domain.walletconnect import com.github.salomonbrys.kotson.fromJson +import com.github.salomonbrys.kotson.toMap import com.google.gson.Gson import com.google.gson.GsonBuilder import com.google.gson.JsonArray import com.google.gson.JsonParser import com.google.gson.annotations.SerializedName +import com.tangem.blockchain.common.Blockchain import com.trustwallet.walletconnect.JSONRPC_VERSION import com.trustwallet.walletconnect.models.ethereum.WCEthereumSignMessage @@ -18,9 +20,11 @@ class EthSignHelper { .create() } - fun tryToParseEthTypedMessage(data: String): WCEthereumSignMessage? { - val request = - gson.fromJson(data) + fun parseCustomRequest(data: String): CustomJsonRpcRequest { + return gson.fromJson(data) + } + + fun tryToParseEthTypedMessage(request: CustomJsonRpcRequest): WCEthereumSignMessage? { return if (request.method == WCMethodExtended.ETH_SIGN_TYPE_DATA_V4) { WCEthereumSignMessage( listOf( @@ -53,12 +57,26 @@ class EthSignHelper { } } -data class CustomJsonRpcRequests( +data class CustomJsonRpcRequest( val id: Long, val jsonrpc: String = JSONRPC_VERSION, val method: WCMethodExtended?, val params: JsonArray -) +) { + + fun blockchainFromChainId(): Blockchain? { + return try { + val hex = params[0].asJsonObject.toMap()[CHAIN_ID_KEY]?.asString ?: "" + Blockchain.fromChainId(Integer.decode(hex)) + } catch (exception: Exception) { + null + } + } + + companion object { + const val CHAIN_ID_KEY = "chainId" + } +} enum class WCMethodExtended { @SerializedName("wc_sessionRequest") @@ -95,5 +113,10 @@ enum class WCMethodExtended { GET_ACCOUNTS, @SerializedName("trust_signTransaction") - SIGN_TRANSACTION; + SIGN_TRANSACTION, + + @SerializedName("wallet_switchEthereumChain") + SWITCH_CHAIN, + + ; } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/domain/walletconnect/WalletConnectManager.kt b/app/src/main/java/com/tangem/tap/domain/walletconnect/WalletConnectManager.kt index dd94266b06..40ef0df234 100644 --- a/app/src/main/java/com/tangem/tap/domain/walletconnect/WalletConnectManager.kt +++ b/app/src/main/java/com/tangem/tap/domain/walletconnect/WalletConnectManager.kt @@ -11,14 +11,20 @@ import com.tangem.tap.store import com.tangem.tap.walletConnectRepository import com.trustwallet.walletconnect.WCClient import com.trustwallet.walletconnect.models.WCPeerMeta -import com.trustwallet.walletconnect.models.binance.* +import com.trustwallet.walletconnect.models.binance.WCBinanceCancelOrder +import com.trustwallet.walletconnect.models.binance.WCBinanceTradeOrder +import com.trustwallet.walletconnect.models.binance.WCBinanceTransferOrder +import com.trustwallet.walletconnect.models.binance.WCBinanceTxConfirmParam import com.trustwallet.walletconnect.models.ethereum.WCEthereumSignMessage import com.trustwallet.walletconnect.models.ethereum.WCEthereumTransaction import com.trustwallet.walletconnect.models.session.WCSession import com.trustwallet.walletconnect.models.session.WCSessionUpdate import kotlinx.coroutines.delay import kotlinx.coroutines.launch -import okhttp3.* +import okhttp3.Interceptor +import okhttp3.OkHttpClient +import okhttp3.Request +import okhttp3.Response import okhttp3.logging.HttpLoggingInterceptor import timber.log.Timber import java.util.* @@ -71,6 +77,22 @@ class WalletConnectManager { } } + fun updateBlockchain(session: WalletConnectSession) { + sessions[session.session]?.client?.updateSession( + accounts = listOfNotNull(session.getAddress()), + chainId = session.wallet.blockchain?.getChainId(), + approved = true + ) + + + val updatedSession = sessions[session.session]?.copy( + wallet = session.wallet + ) + if (updatedSession != null) { + sessions[session.session] = updatedSession + } + } + private fun setupConnectionTimeoutCheck(session: WCSession) { scope.launch { delay(20_000) @@ -409,23 +431,43 @@ class WalletConnectManager { Timber.d("Custom Request") Timber.d(data) - val message = EthSignHelper.tryToParseEthTypedMessage(data) - if (message != null) { - Timber.d("onEthSign_v4: $message") - store.state.globalState.analyticsHandlers?.logWcEvent( - Analytics.WcAnalyticsEvent.Action( - Analytics.WcAction.PersonalSign + val request = EthSignHelper.parseCustomRequest(data) + + when (request.method) { + WCMethodExtended.ETH_SIGN_TYPE_DATA_V4 -> handleTypedDataV4(request, client, id) + WCMethodExtended.SWITCH_CHAIN -> { + val blockchain = request.blockchainFromChainId() + Timber.d("WC switch chainID\nNew Blockchain: $blockchain") + val session = sessions[client.session]?.toWalletConnectSession() + if (session != null) { + store.dispatchOnMain(WalletConnectAction.SwitchBlockchain(blockchain, session)) + } + } + else -> { + + } + } + } + + } + + private fun handleTypedDataV4(request: CustomJsonRpcRequest, client: WCClient, id: Long) { + val message = EthSignHelper.tryToParseEthTypedMessage(request) + if (message != null) { + Timber.d("onEthSign_v4: $message") + store.state.globalState.analyticsHandlers?.logWcEvent( + Analytics.WcAnalyticsEvent.Action( + Analytics.WcAction.PersonalSign + ) + ) + sessions[client.session]?.toWalletConnectSession()?.let { sessionData -> + store.dispatchOnMain( + WalletConnectAction.HandlePersonalSignRequest( + message, + sessionData, + id ) ) - sessions[client.session]?.toWalletConnectSession()?.let { sessionData -> - store.dispatchOnMain( - WalletConnectAction.HandlePersonalSignRequest( - message, - sessionData, - id - ) - ) - } } } } diff --git a/app/src/main/java/com/tangem/tap/domain/walletconnect/WcWalletManagerFactory.kt b/app/src/main/java/com/tangem/tap/domain/walletconnect/WcWalletManagerFactory.kt new file mode 100644 index 0000000000..7c978b7b6f --- /dev/null +++ b/app/src/main/java/com/tangem/tap/domain/walletconnect/WcWalletManagerFactory.kt @@ -0,0 +1,95 @@ +package com.tangem.tap.domain.walletconnect + +import com.tangem.blockchain.common.Blockchain +import com.tangem.blockchain.common.Wallet +import com.tangem.blockchain.common.WalletManager +import com.tangem.blockchain.common.WalletManagerFactory +import com.tangem.common.card.EllipticCurve +import com.tangem.domain.common.ScanResponse +import com.tangem.domain.common.TapWorkarounds.isTestCard +import com.tangem.tap.domain.extensions.getPrimaryCurve +import com.tangem.tap.domain.extensions.makeWalletManagerForApp +import com.tangem.tap.domain.tokens.CurrenciesRepository +import com.tangem.tap.domain.tokens.models.BlockchainNetwork +import com.tangem.tap.features.details.redux.walletconnect.WalletForSession +import com.tangem.tap.features.wallet.redux.WalletState + +class WcWalletManagerFactory( + private val factory: WalletManagerFactory, + private val currenciesRepository: CurrenciesRepository, + ) { + + suspend fun getWalletManager( + wallet: WalletForSession, blockchain: Blockchain, walletState: WalletState + ): WalletManager? { + val blockchainToMake = if (blockchain == Blockchain.Ethereum && wallet.isTestNet) { + Blockchain.EthereumTestnet + } else { + blockchain + } + + val blockchainNetwork = BlockchainNetwork( + blockchain = blockchainToMake, + derivationPath = wallet.derivationPath?.rawPath, + tokens = emptyList() + ) + + return if (walletState.cardId == wallet.cardId) { + walletState.getWalletManager(blockchainNetwork) + } else { + val blockchainNetworkWithTokens = currenciesRepository + .loadSavedCurrencies( + cardId = wallet.cardId, + isHdWalletSupported = wallet.derivationPath != null + ).firstOrNull { it == blockchainNetwork } + + if (blockchainNetworkWithTokens != null) { + factory.makeWalletManager( + cardId = wallet.cardId, + blockchain = blockchainToMake, + publicKey = Wallet.PublicKey( + wallet.walletPublicKey!!, + wallet.derivedPublicKey, + wallet.derivationPath + ), + tokens = blockchainNetworkWithTokens.tokens, + curve = blockchainToMake.getPrimaryCurve() ?: EllipticCurve.Secp256k1 + ) + } else { + null + } + } + } + + suspend fun getWalletManager( + scanResponse: ScanResponse, blockchain: Blockchain, walletState: WalletState + ): WalletManager? { + val card = scanResponse.card + val blockchainToMake = if (blockchain == Blockchain.Ethereum && card.isTestCard) { + Blockchain.EthereumTestnet + } else { + blockchain + } + + val blockchainNetwork = BlockchainNetwork( + blockchain = blockchainToMake, + card = card + ) + + return if (walletState.cardId == card.cardId) { + walletState.getWalletManager(blockchainNetwork) + } else { + if (currenciesRepository + .loadSavedCurrencies(card.cardId, card.settings.isHDWalletAllowed) + .contains(blockchainNetwork) + ) { + factory.makeWalletManagerForApp( + scanResponse = scanResponse, + blockchainNetwork = blockchainNetwork + ) + } else { + null + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/details/redux/walletconnect/WalletConnectAction.kt b/app/src/main/java/com/tangem/tap/features/details/redux/walletconnect/WalletConnectAction.kt index a180d20d4a..471ccaa44c 100644 --- a/app/src/main/java/com/tangem/tap/features/details/redux/walletconnect/WalletConnectAction.kt +++ b/app/src/main/java/com/tangem/tap/features/details/redux/walletconnect/WalletConnectAction.kt @@ -1,6 +1,7 @@ package com.tangem.tap.features.details.redux.walletconnect import android.app.Activity +import com.tangem.blockchain.common.Blockchain import com.tangem.domain.common.ScanResponse import com.tangem.tap.common.redux.NotificationAction import com.tangem.wallet.R @@ -47,6 +48,16 @@ sealed class WalletConnectAction : Action { data class Success(val session: WalletConnectSession) : WalletConnectAction() } + data class SwitchBlockchain( + val blockchain: Blockchain?, + val session: WalletConnectSession + ) : WalletConnectAction() + + data class UpdateBlockchain( + val updatedSession: WalletConnectSession + ) : WalletConnectAction() + + data class FailureEstablishingSession(val session: WCSession?) : WalletConnectAction() data class SetSessionsRestored(val sessions: List) : diff --git a/app/src/main/java/com/tangem/tap/features/details/redux/walletconnect/WalletConnectMiddleware.kt b/app/src/main/java/com/tangem/tap/features/details/redux/walletconnect/WalletConnectMiddleware.kt index 25c5d373b4..40da1f4df2 100644 --- a/app/src/main/java/com/tangem/tap/features/details/redux/walletconnect/WalletConnectMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/details/redux/walletconnect/WalletConnectMiddleware.kt @@ -1,10 +1,8 @@ package com.tangem.tap.features.details.redux.walletconnect import com.tangem.blockchain.common.Blockchain -import com.tangem.blockchain.common.WalletManager import com.tangem.common.extensions.guard import com.tangem.domain.common.ScanResponse -import com.tangem.domain.common.TapWorkarounds.isTestCard import com.tangem.domain.common.extensions.withMainContext import com.tangem.tap.common.extensions.dispatchOnMain import com.tangem.tap.common.extensions.getFromClipboard @@ -14,11 +12,10 @@ import com.tangem.tap.common.redux.navigation.AppScreen import com.tangem.tap.common.redux.navigation.NavigationAction import com.tangem.tap.currenciesRepository import com.tangem.tap.domain.extensions.isMultiwalletAllowed -import com.tangem.tap.domain.extensions.makeWalletManagerForApp -import com.tangem.tap.domain.tokens.models.BlockchainNetwork import com.tangem.tap.domain.walletconnect.BnbHelper import com.tangem.tap.domain.walletconnect.WalletConnectManager import com.tangem.tap.domain.walletconnect.WalletConnectNetworkUtils +import com.tangem.tap.domain.walletconnect.WcWalletManagerFactory import com.tangem.tap.features.demo.DemoHelper import com.tangem.tap.scope import com.tangem.tap.store @@ -159,6 +156,45 @@ class WalletConnectMiddleware { action.id, action.data, action.sessionData ) } + is WalletConnectAction.SwitchBlockchain -> { + val blockchain = action.blockchain.guard { + store.dispatchOnMain(GlobalAction.ShowDialog(WalletConnectDialog.UnsupportedCard)) // TODO: add relevant dialog + return + } + + val factory = WcWalletManagerFactory( + factory = store.state.globalState.tapWalletManager.walletManagerFactory, + currenciesRepository = currenciesRepository + ) + val walletState = store.state.walletState + scope.launch { + val walletManager = factory.getWalletManager( + wallet = action.session.wallet, + blockchain = blockchain, + walletState = walletState + ).guard { + store.dispatchOnMain( + GlobalAction.ShowDialog( + WalletConnectDialog.AddNetwork(blockchain.fullName) + ) + ) + return@launch + } + + val updatedWallet = action.session.wallet.copy( + walletPublicKey = walletManager.wallet.publicKey.seedKey, + derivedPublicKey = walletManager.wallet.publicKey.derivedKey, + derivationPath = walletManager.wallet.publicKey.derivationPath, + blockchain = action.blockchain + + ) + val updatedSession = action.session.copy(wallet = updatedWallet) + store.dispatchOnMain(WalletConnectAction.UpdateBlockchain(updatedSession)) + } + } + is WalletConnectAction.UpdateBlockchain -> { + walletConnectManager.updateBlockchain(action.updatedSession) + } } } @@ -189,8 +225,13 @@ class WalletConnectMiddleware { return } + val factory = WcWalletManagerFactory( + factory = store.state.globalState.tapWalletManager.walletManagerFactory, + currenciesRepository = currenciesRepository + ) + val walletState = store.state.walletState scope.launch { - val walletManager = getWalletManager(scanResponse, blockchain).guard { + val walletManager = factory.getWalletManager(scanResponse, blockchain, walletState).guard { store.dispatchOnMain(WalletConnectAction.FailureEstablishingSession(session.session)) store.dispatchOnMain( GlobalAction.ShowDialog( @@ -232,37 +273,4 @@ class WalletConnectMiddleware { } } - - private suspend fun getWalletManager( - scanResponse: ScanResponse, blockchain: Blockchain - ): WalletManager? { - val card = scanResponse.card - val factory = store.state.globalState.tapWalletManager.walletManagerFactory - val blockchainToMake = if (blockchain == Blockchain.Ethereum && card.isTestCard) { - Blockchain.EthereumTestnet - } else { - blockchain - } - - val blockchainNetwork = BlockchainNetwork( - blockchain = blockchainToMake, - card = card - ) - - return if (store.state.globalState.scanResponse?.card?.cardId == card.cardId) { - store.state.walletState.getWalletManager(blockchainNetwork) - } else { - if (currenciesRepository - .loadSavedCurrencies(card.cardId, card.settings.isHDWalletAllowed) - .contains(blockchainNetwork) - ) { - factory.makeWalletManagerForApp( - scanResponse = scanResponse, - blockchainNetwork = blockchainNetwork - ) - } else { - null - } - } - } } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/details/redux/walletconnect/WalletConnectReducer.kt b/app/src/main/java/com/tangem/tap/features/details/redux/walletconnect/WalletConnectReducer.kt index 216367e9ee..191fa7b170 100644 --- a/app/src/main/java/com/tangem/tap/features/details/redux/walletconnect/WalletConnectReducer.kt +++ b/app/src/main/java/com/tangem/tap/features/details/redux/walletconnect/WalletConnectReducer.kt @@ -34,6 +34,11 @@ class WalletConnectReducer { is WalletConnectAction.RefuseOpeningSession -> state.copy(loading = false) is WalletConnectAction.OpeningSessionTimeout -> state.copy(loading = false) is WalletConnectAction.FailureEstablishingSession -> state.copy(loading = false) + is WalletConnectAction.UpdateBlockchain -> state.copy( + sessions = state.sessions + .filterNot { it.peerId == action.updatedSession.peerId } + + action.updatedSession + ) else -> state } diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletState.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletState.kt index e75ef8cd06..8581a61e6a 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletState.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletState.kt @@ -73,6 +73,9 @@ data class WalletState( val walletManagers: List get() = wallets.mapNotNull { it.walletManager } + val cardId: String? + get() = wallets.firstOrNull()?.walletManager?.wallet?.cardId + fun getWalletManager(currency: Currency?): WalletManager? { if (currency?.blockchain == null) return null return getWalletStore(currency)?.walletManager From 8a612ee029a3435a95aa3d90948196dee7ade778 Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 28 Jun 2022 10:24:08 +0300 Subject: [PATCH 025/177] Updated on 2026-08-14 --- app/src/main/AndroidManifest.xml | 11 ++++++----- .../main/res/xml/network_security_config.xml | 19 +++++++++++++++++++ 2 files changed, 25 insertions(+), 5 deletions(-) create mode 100644 app/src/main/res/xml/network_security_config.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 4dfca87b23..22fda180cd 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -28,14 +28,15 @@ diff --git a/app/src/main/res/xml/network_security_config.xml b/app/src/main/res/xml/network_security_config.xml new file mode 100644 index 0000000000..2bbb4f525b --- /dev/null +++ b/app/src/main/res/xml/network_security_config.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + api.tangem.com + + + + + + + \ No newline at end of file From ea9f06e2ddc307d38433ca2f8d83f8ec75412dfa Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 27 Jun 2022 14:28:40 +0300 Subject: [PATCH 026/177] Updated on 2026-08-14 --- .../ui/adapters/PendingTransactionsAdapter.kt | 5 +- app/src/main/res/values-de/strings.xml | 10 +- app/src/main/res/values-fr/strings.xml | 152 +++++++++--------- app/src/main/res/values-it/strings.xml | 10 +- app/src/main/res/values-ru/strings.xml | 4 +- app/src/main/res/values/strings.xml | 6 +- 6 files changed, 94 insertions(+), 93 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/features/wallet/ui/adapters/PendingTransactionsAdapter.kt b/app/src/main/java/com/tangem/tap/features/wallet/ui/adapters/PendingTransactionsAdapter.kt index 86ce19dc89..bafc35673b 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/ui/adapters/PendingTransactionsAdapter.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/ui/adapters/PendingTransactionsAdapter.kt @@ -61,10 +61,11 @@ class PendingTransactionsAdapter PendingTransactionType.Outgoing -> R.drawable.ic_arrow_right_20 PendingTransactionType.Unknown -> return } - binding.tvPendingTransaction.text = binding.root.getString(transactionDescriptionRes) + binding.tvPendingTransaction.text = + binding.root.getString(transactionDescriptionRes).let { "$it " } transaction.amountValueUi?.let { binding.tvPendingTransactionAmount.text = "$it " } - binding.tvPendingTransactionCurrency.text = "${transaction.currency}" + binding.tvPendingTransactionCurrency.text = transaction.currency if (transaction.address != null) { binding.tvPendingTransactionAddress.text = diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index a74c2f7407..0596dd08b8 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -35,10 +35,10 @@ Diese Karte wird nicht unterstützt Ihre Tangem-Karte wurde für die Arbeit mit einer anderen App ausgestellt. Bitte sehen Sie sich den Namen und die Anleitung auf Ihrer Karte an und installieren Sie eine korrekte App Die Transaktion läuft… - Senden\u0020 - an %s - Erhalten\u0020 - von %s + Senden + an %s + Erhalten + von %s Adresse erkunden PayString erstellen %s Wallet @@ -177,4 +177,4 @@ RECHTLICHER HAFTUNGSAUSSCHLUSS Ihr Kontostand in dieser Brieftasche ist nicht Null, oder Sie haben unbestätigte Transaktionen. Es ist unmöglich die Funktion der Brieftasche zu löschen. Dies ist die derzeit aktive Wahl - \ No newline at end of file + diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 3b06614517..45a56b13ec 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -1,107 +1,107 @@ - Non - Sauvegarder les modifications - Alerte - Réessayer - Exécuté - Annuler + Non + Sauvegarder les modifications + Alerte + Réessayer + Exécuté + Annuler J\'accepte - L\'accès à la caméra est refusé - Vous n\'avez pas octroyé l\'accès à votre caméra, veuillez modifier vos paramètres de confidentialité - Paramètres + L\'accès à la caméra est refusé + Vous n\'avez pas octroyé l\'accès à votre caméra, veuillez modifier vos paramètres de confidentialité + Paramètres Bienvenue à Tangem. Avez-vous une de nos cartes - Encore une fois, bienvenue dans Tangem. \nScannez votre carte pour commencer. - Oui! Scannez-la. - Magasin + Encore une fois, bienvenue dans Tangem. \nScannez votre carte pour commencer. + Oui! Scannez-la. + Magasin Préparez-vous à appuyer votre carte au dos de votre téléphone. - Appuyez - Scannez la carte - Scanner - Envoyer - Créer un portefeuille + Appuyez + Scannez la carte + Scanner + Envoyer + Créer un portefeuille Tangem - Choisir une variante de portefeuille - Jeton d\'authentification - Jetons d\'authentification - Solde confirmé - Solde est en cours de téléchargement … - Blockchain est inaccessible - Compte n\'est pas créé - Téléchargez %s +%s pour créer un compte - Carte vide - Créez un portefeuille pour commencer à utiliser votre carte Tangem - Cette carte n\'est pas prise en charge - Votre carte Tangem a été créée pour fonctionner avec une autre application. Regardez le nom et les instructions sur votre carte et installez l\'application pertinente + Choisir une variante de portefeuille + Jeton d\'authentification + Jetons d\'authentification + Solde confirmé + Solde est en cours de téléchargement … + Blockchain est inaccessible + Compte n\'est pas créé + Téléchargez %s +%s pour créer un compte + Carte vide + Créez un portefeuille pour commencer à utiliser votre carte Tangem + Cette carte n\'est pas prise en charge + Votre carte Tangem a été créée pour fonctionner avec une autre application. Regardez le nom et les instructions sur votre carte et installez l\'application pertinente Transaction en cours… - Envoi\u0020 - jusqu\'à %s - Réception \u0020 - de %s - Explorer l\'adresse + Envoi + jusqu\'à %s + Réception + de %s + Explorer l\'adresse Créer PayString Portefeuille %s Créer PayString Carte: %s Dénomination PayString $payid.tangem.com - Créer + Créer Votre PayString est une information qui vous est propre, comme un numéro de téléphone, une adresse du courrier électronique ou un ABN. - PayString a été créé avec succès et copié dans le presse-papiers - Mauvaise réponse lors de la création de PayString + PayString a été créé avec succès et copié dans le presse-papiers + Mauvaise réponse lors de la création de PayString Ce PayString existe déjà. Essayez une autre variante. Adresse ou PayString Adresse - Envoyer - Commissions du réseau - Somme - Commissions - Total - Somme maximale - Bas - Normal - Priorité - Inclure les commissions + Envoyer + Commissions du réseau + Somme + Commissions + Total + Somme maximale + Bas + Normal + Priorité + Inclure les commissions Sera envoyé %s %s ≈ %s (incl. les commissions : %s) Sera envoyé %s %s et %s %s Solde : %s %s - La transaction a été signée avec succès et envoyée au nœud de blockchain. Le solde du portefeuille sera mis à jour après un certain temps - Référénces - ID de la carte - Emetteur - Signé - %s hashes - Monnaie de l\'application - Paramètres - Carte - Valider la carte - Gestion de la sécurité - Annuler le portefeuille + La transaction a été signée avec succès et envoyée au nœud de blockchain. Le solde du portefeuille sera mis à jour après un certain temps + Référénces + ID de la carte + Emetteur + Signé + %s hashes + Monnaie de l\'application + Paramètres + Carte + Valider la carte + Gestion de la sécurité + Annuler le portefeuille Cette action est irréversible. Si, après avoir annulé le portefeuille, quelqu\'un lui envoie des fonds, vous ne pourrez pas les retirer. - Si vous oubliez le code, vous perdrez la possibilité d\'utiliser la carte. Si vous perdez le code, il sera impossible de le restaurer ou modifier. - Gestion de la sécurité + Si vous oubliez le code, vous perdrez la possibilité d\'utiliser la carte. Si vous perdez le code, il sera impossible de le restaurer ou modifier. + Gestion de la sécurité Tenez la carte fermement Ce mécanisme protège contre les attaques sans contact sur la carte. Il y a un délai entre la réception et l\'exécution de la commande. Après la première transaction signée, ce téléphone sera associé à la carte et les transactions seront signées immédiatement. - Mot de passe + Mot de passe Avant d\'exécuter une commande qui modifie l\'état de la carte, vous devrez entrer un mot de passe. - Code d\'accès - Vous devrez entrer le mot de passe correct avant de scanner la carte - Vous pouvez rencontrer des problèmes NFC avec certains iPhone 7/7 + lors de l\'extraction + Code d\'accès + Vous devrez entrer le mot de passe correct avant de scanner la carte + Vous pouvez rencontrer des problèmes NFC avec certains iPhone 7/7 + lors de l\'extraction Cette carte a déjà été rechargée et a signé des transactions avant. Envisagez la possibilité de retirer tous les fonds immédiatement si vous avez reçu cette carte d\'une source non fiable. Attention Cette carte n\'est pas conçue pour fonctionner avec Tangem - La carte que vous avez scannée est une carte de développement. Ne l\'acceptez pas comme paiement - Les cartes Tangem émises avant septembre 2019 ne peuvent actuellement pas être extraites à l\'aide de l\'iPhone. Nous travaillons activement avec Apple pour rendre cela possible dans les futures versions d\'iOS. - Touchez pour signer - Appuyez votre carte au téléphone comme indiqué ci-dessus - Touchez, pour annuler un portefeuille - Touchez, pour créer un portefeuille - Touchez, pour modifier le code d\'accès - Touchez, pour modifier le mot de passe - PayString incorrect + La carte que vous avez scannée est une carte de développement. Ne l\'acceptez pas comme paiement + Les cartes Tangem émises avant septembre 2019 ne peuvent actuellement pas être extraites à l\'aide de l\'iPhone. Nous travaillons activement avec Apple pour rendre cela possible dans les futures versions d\'iOS. + Touchez pour signer + Appuyez votre carte au téléphone comme indiqué ci-dessus + Touchez, pour annuler un portefeuille + Touchez, pour créer un portefeuille + Touchez, pour modifier le code d\'accès + Touchez, pour modifier le mot de passe + PayString incorrect @@ -154,7 +154,7 @@ Avertissement \n\nCette avertissement a été modifié, pour la dernière fois, le 1 octobre 2020. - Conditions d\'utilisation + Conditions d\'utilisation Pas de connexion internet La vérification de PayString a échoué @@ -170,4 +170,4 @@ Avertissement Cette option est déjà active - \ No newline at end of file + diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index b45dafe795..7b8f98b231 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -34,10 +34,10 @@ Questa carta non è supportata La tua carta Tangem è stata creata per funzionare con un\'altra applicazione. Leggere il nome e le istruzioni sulla carta e installare l\'applicazione corretta Transazione in corso… - Invia\u0020 - su %s - Ricevi\u0020 - da %s + Invia + su %s + Ricevi + da %s Cerca indirizzo Crea PayString portafoglio %s @@ -177,4 +177,4 @@ Questa nota legale è stata modificata l\'ultima volta 01.10.2020. Il tuo saldo su questo portafoglio non è pari a zero o hai transazioni non confermate. Non è possibile eliminare la funzione portafoglio. E\' l\'opzione attualmente attiva - \ No newline at end of file + diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 1617484429..e1e1067d42 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -38,8 +38,8 @@ Транзакция в процессе… до %s от %s - Получение\u0020 - Отправка\u0020 + Получение + Отправка Посмотреть адрес Создать PayString %s кошелек diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 23ff1e496f..9189c797b7 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -45,8 +45,8 @@ Transaction is in progress… to %s from %s - Receiving\u0020 - Sending\u0020 + Receiving + Sending Explore address Create PayString @@ -187,4 +187,4 @@ Your balance on this wallet is not zero, or you have unconfirmed transactions This is the currently active option - \ No newline at end of file + From b1bebea64233881547dbaeba0234281270474a5d Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 29 Jun 2022 16:21:49 +0300 Subject: [PATCH 027/177] Updated on 2026-08-14 --- .../wallet/ui/WalletDetailsFragment.kt | 20 +++++++++---------- app/src/main/res/values-de/strings_final.xml | 1 + app/src/main/res/values-fr/strings_final.xml | 1 + app/src/main/res/values-it/strings_final.xml | 2 +- app/src/main/res/values-ru/strings_final.xml | 1 + app/src/main/res/values/strings_final.xml | 1 + 6 files changed, 14 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/features/wallet/ui/WalletDetailsFragment.kt b/app/src/main/java/com/tangem/tap/features/wallet/ui/WalletDetailsFragment.kt index d86030b5e7..26f1163798 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/ui/WalletDetailsFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/ui/WalletDetailsFragment.kt @@ -134,13 +134,13 @@ class WalletDetailsFragment : Fragment(R.layout.fragment_wallet_details), binding.srlWalletDetails.setOnRefreshListener { if (selectedWallet.currencyData.status != BalanceStatus.Loading) { store.dispatch(WalletAction.LoadWallet( - blockchain = BlockchainNetwork( - selectedWallet.currency.blockchain, - selectedWallet.currency.derivationPath, - emptyList() - ) + blockchain = BlockchainNetwork( + selectedWallet.currency.blockchain, + selectedWallet.currency.derivationPath, + emptyList() ) ) + ) } } @@ -165,12 +165,10 @@ class WalletDetailsFragment : Fragment(R.layout.fragment_wallet_details), private fun setupCurrency(currencyData: BalanceWidgetData, currency: Currency) = with(binding) { tvCurrencyTitle.text = currencyData.currency - if (currency is Currency.Token) { - tvCurrencySubtitle.text = currency.blockchain.tokenDisplayName() - tvCurrencySubtitle.show() - } else { - tvCurrencySubtitle.hide() - } + tvCurrencySubtitle.text = tvCurrencySubtitle.getString( + R.string.wallet_currency_subtitle, + currency.blockchain.fullName + ) } private fun setupButtons(selectedWallet: WalletData) = with(binding) { diff --git a/app/src/main/res/values-de/strings_final.xml b/app/src/main/res/values-de/strings_final.xml index 7dd40e2633..a70d4ae833 100644 --- a/app/src/main/res/values-de/strings_final.xml +++ b/app/src/main/res/values-de/strings_final.xml @@ -56,4 +56,5 @@ The %s token is the main currency on the %s network and cannot be hidden as long as you have other tokens on this network in the list. %s network not found. Please, add it first and try again. + %s network \ No newline at end of file diff --git a/app/src/main/res/values-fr/strings_final.xml b/app/src/main/res/values-fr/strings_final.xml index 7fb2245b89..ee4292252b 100644 --- a/app/src/main/res/values-fr/strings_final.xml +++ b/app/src/main/res/values-fr/strings_final.xml @@ -56,4 +56,5 @@ The %s token is the main currency on the %s network and cannot be hidden as long as you have other tokens on this network in the list. %s network not found. Please, add it first and try again. + %s network \ No newline at end of file diff --git a/app/src/main/res/values-it/strings_final.xml b/app/src/main/res/values-it/strings_final.xml index d561bcdb56..ee4292252b 100644 --- a/app/src/main/res/values-it/strings_final.xml +++ b/app/src/main/res/values-it/strings_final.xml @@ -56,5 +56,5 @@ The %s token is the main currency on the %s network and cannot be hidden as long as you have other tokens on this network in the list. %s network not found. Please, add it first and try again. - + %s network \ No newline at end of file diff --git a/app/src/main/res/values-ru/strings_final.xml b/app/src/main/res/values-ru/strings_final.xml index 496f4f7815..a75fae5713 100644 --- a/app/src/main/res/values-ru/strings_final.xml +++ b/app/src/main/res/values-ru/strings_final.xml @@ -61,4 +61,5 @@ Токен %s является основной валютой в сети %s и не может быть скрыт, до тех пор пока у вас в списке есть другие токены этой сети. Сеть %s не найдена. Пожалуйста, добавьте её и попробуйте заново. + Сеть %s diff --git a/app/src/main/res/values/strings_final.xml b/app/src/main/res/values/strings_final.xml index 75bcce3b9a..3687e43269 100644 --- a/app/src/main/res/values/strings_final.xml +++ b/app/src/main/res/values/strings_final.xml @@ -61,4 +61,5 @@ The %s token is the main currency on the %s network and cannot be hidden as long as you have other tokens on this network in the list. %s network not found. Please, add it first and try again. + %s network From 6dbda3439dfe6e5a63eca8354331da6ae44ab276 Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 29 Jun 2022 16:42:35 +0300 Subject: [PATCH 028/177] Updated on 2026-08-14 --- .../tap/features/home/compose/Stories.kt | 7 +++ .../features/home/compose/StoriesPreviews.kt | 50 ------------------- .../features/home/compose/content/Content.kt | 34 +++++++++++++ .../compose/content/FirstStoriesContent.kt | 8 +++ 4 files changed, 49 insertions(+), 50 deletions(-) delete mode 100644 app/src/main/java/com/tangem/tap/features/home/compose/StoriesPreviews.kt diff --git a/app/src/main/java/com/tangem/tap/features/home/compose/Stories.kt b/app/src/main/java/com/tangem/tap/features/home/compose/Stories.kt index 2179b5be44..183392a4b4 100644 --- a/app/src/main/java/com/tangem/tap/features/home/compose/Stories.kt +++ b/app/src/main/java/com/tangem/tap/features/home/compose/Stories.kt @@ -22,6 +22,7 @@ import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.tangem.tap.common.compose.SpacerS24 @@ -189,4 +190,10 @@ fun StoriesScreen( private fun MutableState.duration(): Int = when (this.value) { 1 -> 8000 else -> 6000 +} + +@Preview +@Composable +fun StoriesScreenPreview() { + StoriesScreen(onScanButtonClick = {}, onShopButtonClick = {}, onSearchTokensClick = {}) } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/home/compose/StoriesPreviews.kt b/app/src/main/java/com/tangem/tap/features/home/compose/StoriesPreviews.kt deleted file mode 100644 index 78fb897b55..0000000000 --- a/app/src/main/java/com/tangem/tap/features/home/compose/StoriesPreviews.kt +++ /dev/null @@ -1,50 +0,0 @@ -package com.tangem.tap.features.home.compose - -import androidx.compose.runtime.Composable -import androidx.compose.ui.tooling.preview.Preview -import com.tangem.tap.features.home.compose.content.* - -/** -[REDACTED_AUTHOR] - */ -@Preview -@Composable -fun StoriesScreenPreview() { - StoriesScreen(onScanButtonClick = {}, onShopButtonClick = {}, onSearchTokensClick = {}) -} - -@Preview -@Composable -fun Stories1Preview() { - FirstStoriesContent(false, 8000) {} -} - -@Preview -@Composable -private fun RevolutionaryWalletPreview() { - StoriesRevolutionaryWallet(6000) -} - -@Preview -@Composable -private fun UltraSecureBackupPreview() { - StoriesUltraSecureBackup(false, 6000) -} - -@Preview -@Composable -private fun CurrenciesPreview() { - StoriesCurrencies(false, 6000) -} - -@Preview -@Composable -private fun Web3Preview() { - StoriesWeb3(false, 6000) -} - -@Preview -@Composable -private fun WalletForEveryonePreview() { - StoriesWalletForEveryone(6000) -} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/home/compose/content/Content.kt b/app/src/main/java/com/tangem/tap/features/home/compose/content/Content.kt index 97e523358b..9ee80263c3 100644 --- a/app/src/main/java/com/tangem/tap/features/home/compose/content/Content.kt +++ b/app/src/main/java/com/tangem/tap/features/home/compose/content/Content.kt @@ -17,6 +17,7 @@ import androidx.compose.ui.text.buildAnnotatedString import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.withStyle +import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.tangem.tap.common.compose.SpacerH16 @@ -226,4 +227,37 @@ private fun StoriesImage( private fun String.annotated(): AnnotatedString { val source = this return buildAnnotatedString { append(source) } +} + + +@Preview +@Composable +private fun RevolutionaryWalletPreview() { + StoriesRevolutionaryWallet(6000) +} + +@Preview +@Composable +private fun UltraSecureBackupPreview() { + StoriesUltraSecureBackup(false, 6000) +} + +@Preview +@Composable +private fun CurrenciesPreview() { + StoriesCurrencies(false, 6000) +} + + +@Preview +@Composable +private fun Web3Preview() { + StoriesWeb3(false, 6000) +} + + +@Preview +@Composable +private fun WalletForEveryonePreview() { + StoriesWalletForEveryone(6000) } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/home/compose/content/FirstStoriesContent.kt b/app/src/main/java/com/tangem/tap/features/home/compose/content/FirstStoriesContent.kt index 4941b6805c..393642f976 100644 --- a/app/src/main/java/com/tangem/tap/features/home/compose/content/FirstStoriesContent.kt +++ b/app/src/main/java/com/tangem/tap/features/home/compose/content/FirstStoriesContent.kt @@ -16,6 +16,7 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.tangem.tap.common.compose.FontSizeRange @@ -152,4 +153,11 @@ private fun MutableState.isSplashingTextDisplaying(): Boole private fun MutableState.isMeetTangemDisplaying(): Boolean { return this.value == StartingScreenState.MEET_TANGEM +} + + +@Preview +@Composable +fun FirstStoriesPreview() { + FirstStoriesContent(false, 8000) {} } \ No newline at end of file From 1c42c354225907535532c67b7810036449b86e69 Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 24 Jun 2022 12:14:07 +0300 Subject: [PATCH 029/177] Updated on 2026-08-14 --- app/src/main/assets/tangem-app-config | 2 +- .../com/tangem/tap/domain/TapWalletManager.kt | 14 +- .../tap/features/wallet/redux/WalletAction.kt | 7 +- .../tap/features/wallet/redux/WalletState.kt | 18 ++- .../middlewares/MultiWalletMiddleware.kt | 10 +- .../redux/reducers/MultiWalletReducer.kt | 10 +- .../wallet/ui/wallet/MultiWalletView.kt | 11 ++ .../res/drawable/img_warning_triangle_24.xml | 12 ++ .../main/res/layout/card_total_balance.xml | 100 -------------- app/src/main/res/layout/fragment_wallet.xml | 127 ++++++++++-------- .../res/layout/layout_card_total_balance.xml | 86 ++++++++++++ .../layout/layout_wallet_backup_warning.xml | 70 ++++++++++ app/src/main/res/values-ru/strings_final.xml | 3 + app/src/main/res/values/strings_final.xml | 3 + 14 files changed, 309 insertions(+), 164 deletions(-) create mode 100644 app/src/main/res/drawable/img_warning_triangle_24.xml delete mode 100644 app/src/main/res/layout/card_total_balance.xml create mode 100644 app/src/main/res/layout/layout_card_total_balance.xml create mode 100644 app/src/main/res/layout/layout_wallet_backup_warning.xml diff --git a/app/src/main/assets/tangem-app-config b/app/src/main/assets/tangem-app-config index 64ae04d208..f50133547b 160000 --- a/app/src/main/assets/tangem-app-config +++ b/app/src/main/assets/tangem-app-config @@ -1 +1 @@ -Subproject commit 64ae04d2086e5a605dd4da3cba4af32a60d46c79 +Subproject commit f50133547b5e19fb7ad32e64370573d60f6791fd diff --git a/app/src/main/java/com/tangem/tap/domain/TapWalletManager.kt b/app/src/main/java/com/tangem/tap/domain/TapWalletManager.kt index 123c26f691..92fc72c0bf 100644 --- a/app/src/main/java/com/tangem/tap/domain/TapWalletManager.kt +++ b/app/src/main/java/com/tangem/tap/domain/TapWalletManager.kt @@ -1,6 +1,12 @@ package com.tangem.tap.domain -import com.tangem.blockchain.common.* +import com.tangem.blockchain.common.Blockchain +import com.tangem.blockchain.common.BlockchainSdkConfig +import com.tangem.blockchain.common.Token +import com.tangem.blockchain.common.Wallet +import com.tangem.blockchain.common.WalletManager +import com.tangem.blockchain.common.WalletManagerFactory +import com.tangem.common.card.Card import com.tangem.common.services.Result import com.tangem.domain.common.ScanResponse import com.tangem.domain.common.TapWorkarounds.isStart2Coin @@ -85,6 +91,12 @@ class TapWalletManager { store.dispatch(GlobalAction.SaveScanNoteResponse(data)) store.dispatch(WalletAction.SetIfTestnetCard(data.card.isTestCard)) store.dispatch(WalletAction.MultiWallet.SetIsMultiwalletAllowed(data.card.isMultiwalletAllowed)) + store.dispatch( + WalletAction.MultiWallet.ShowWalletBackupWarning( + show = data.card.settings.isBackupAllowed + && data.card.backupStatus == Card.BackupStatus.NoBackup + ) + ) loadData(data) } } diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletAction.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletAction.kt index eefae0bcf6..edc6be9c6e 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletAction.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletAction.kt @@ -75,10 +75,15 @@ sealed class WalletAction : Action { ) : MultiWallet() data class SelectWallet(val walletData: WalletData?) : MultiWallet() - data class RemoveWallet(val walletData: WalletData, val fromWalletDetails: Boolean = true) : MultiWallet() + data class RemoveWallet(val walletData: WalletData, val fromWalletDetails: Boolean = true) : + MultiWallet() + data class TryToRemoveWallet(val walletData: WalletData) : MultiWallet() data class SetPrimaryBlockchain(val blockchain: Blockchain) : MultiWallet() data class SetPrimaryToken(val token: Token) : MultiWallet() + + data class ShowWalletBackupWarning(val show: Boolean) : MultiWallet() + object BackupWallet : MultiWallet() } sealed class Warnings : WalletAction() { diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletState.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletState.kt index ce660968f6..557b32f260 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletState.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletState.kt @@ -1,7 +1,11 @@ package com.tangem.tap.features.wallet.redux import android.graphics.Bitmap -import com.tangem.blockchain.common.* +import com.tangem.blockchain.common.Amount +import com.tangem.blockchain.common.Blockchain +import com.tangem.blockchain.common.Token +import com.tangem.blockchain.common.Wallet +import com.tangem.blockchain.common.WalletManager import com.tangem.blockchain.common.address.AddressType import com.tangem.common.extensions.isZero import com.tangem.domain.common.extensions.canHandleToken @@ -16,16 +20,23 @@ import com.tangem.tap.domain.extensions.buyIsAllowed import com.tangem.tap.domain.extensions.sellIsAllowed import com.tangem.tap.domain.tokens.models.BlockchainNetwork import com.tangem.tap.features.onboarding.products.twins.redux.TwinCardsState -import com.tangem.tap.features.wallet.models.* +import com.tangem.tap.features.wallet.models.Currency +import com.tangem.tap.features.wallet.models.PendingTransaction +import com.tangem.tap.features.wallet.models.TotalBalance +import com.tangem.tap.features.wallet.models.WalletRent +import com.tangem.tap.features.wallet.models.WalletWarning +import com.tangem.tap.features.wallet.models.hasPendingTransactions +import com.tangem.tap.features.wallet.models.hasSendableAmounts +import com.tangem.tap.features.wallet.models.isSendableAmount import com.tangem.tap.features.wallet.redux.reducers.calculateTotalFiatAmount import com.tangem.tap.features.wallet.redux.reducers.findProgressState import com.tangem.tap.features.wallet.ui.BalanceStatus import com.tangem.tap.features.wallet.ui.BalanceWidgetData import com.tangem.tap.network.exchangeServices.CurrencyExchangeManager import com.tangem.tap.store -import org.rekotlin.StateType import java.math.BigDecimal import kotlin.properties.ReadOnlyProperty +import org.rekotlin.StateType data class WalletState( val state: ProgressState = ProgressState.Done, @@ -41,6 +52,7 @@ data class WalletState( val primaryToken: Token? = null, val isTestnet: Boolean = false, val totalBalance: TotalBalance? = null, + val showBackupWarning: Boolean = false, ) : StateType { // if you do not delegate - the application crashes on startup, diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/MultiWalletMiddleware.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/MultiWalletMiddleware.kt index 97a35f59c2..e3af462d5d 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/MultiWalletMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/MultiWalletMiddleware.kt @@ -6,6 +6,7 @@ import com.tangem.blockchain.common.WalletManager import com.tangem.common.extensions.guard import com.tangem.tap.common.extensions.dispatchDialogShow import com.tangem.tap.common.extensions.safeUpdate +import com.tangem.tap.common.redux.global.GlobalAction import com.tangem.tap.common.redux.global.GlobalState import com.tangem.tap.common.redux.navigation.AppScreen import com.tangem.tap.common.redux.navigation.NavigationAction @@ -20,10 +21,10 @@ import com.tangem.tap.features.wallet.redux.WalletState import com.tangem.tap.features.wallet.redux.models.WalletDialog import com.tangem.tap.scope import com.tangem.tap.store +import java.math.BigDecimal import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext -import java.math.BigDecimal class MultiWalletMiddleware { fun handle( @@ -142,6 +143,13 @@ class MultiWalletMiddleware { store.dispatch(NavigationAction.PopBackTo()) } } + is WalletAction.MultiWallet.ShowWalletBackupWarning -> Unit + is WalletAction.MultiWallet.BackupWallet -> { + store.state.globalState.scanResponse?.let { + store.dispatch(NavigationAction.NavigateTo(AppScreen.OnboardingWallet)) + store.dispatch(GlobalAction.Onboarding.Start(it, fromHomeScreen = false)) + } + } // is WalletAction.MultiWallet.FindBlockchainsInUse -> { // val scanResponse = globalState.scanResponse ?: return // if (scanResponse.supportsHdWallet()) return diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/MultiWalletReducer.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/MultiWalletReducer.kt index 648479c03a..03cee11142 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/MultiWalletReducer.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/MultiWalletReducer.kt @@ -12,8 +12,12 @@ import com.tangem.tap.features.wallet.models.WalletRent import com.tangem.tap.features.wallet.models.filterByToken import com.tangem.tap.features.wallet.models.getPendingTransactions import com.tangem.tap.features.wallet.models.removeUnknownTransactions -import com.tangem.tap.features.wallet.redux.* +import com.tangem.tap.features.wallet.redux.WalletAction +import com.tangem.tap.features.wallet.redux.WalletData +import com.tangem.tap.features.wallet.redux.WalletMainButton +import com.tangem.tap.features.wallet.redux.WalletState import com.tangem.tap.features.wallet.redux.WalletState.Companion.UNKNOWN_AMOUNT_SIGN +import com.tangem.tap.features.wallet.redux.WalletStore import com.tangem.tap.features.wallet.ui.BalanceStatus import com.tangem.tap.features.wallet.ui.BalanceWidgetData import com.tangem.tap.features.wallet.ui.TokenData @@ -161,6 +165,10 @@ class MultiWalletReducer { // is WalletAction.MultiWallet.FindBlockchainsInUse -> state is WalletAction.MultiWallet.SaveCurrencies -> state is WalletAction.MultiWallet.TryToRemoveWallet -> state + is WalletAction.MultiWallet.ShowWalletBackupWarning -> state.copy( + showBackupWarning = action.show + ) + is WalletAction.MultiWallet.BackupWallet -> state } } 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 5646b437f0..994a491ac2 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 @@ -91,6 +91,7 @@ class MultiWalletView : WalletView { val binding = binding ?: return handleTotalBalance(binding, state.totalBalance) + handleBackupWarning(binding, state.showBackupWarning) walletsAdapter.submitList(state.walletsData, state.primaryBlockchain, state.primaryToken) binding.btnAddToken.setOnClickListener { @@ -120,6 +121,16 @@ class MultiWalletView : WalletView { handleErrorStates(state = state, binding = binding, fragment = fragment) } + private fun handleBackupWarning( + binding: FragmentWalletBinding, + showBackupWarning: Boolean + ) = with(binding.lWalletBackupWarning) { + root.isVisible = showBackupWarning + root.setOnClickListener { + store.dispatch(WalletAction.MultiWallet.BackupWallet) + } + } + private fun handleTotalBalance( binding: FragmentWalletBinding, totalBalance: TotalBalance?, diff --git a/app/src/main/res/drawable/img_warning_triangle_24.xml b/app/src/main/res/drawable/img_warning_triangle_24.xml new file mode 100644 index 0000000000..c54d7d8f8b --- /dev/null +++ b/app/src/main/res/drawable/img_warning_triangle_24.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/layout/card_total_balance.xml b/app/src/main/res/layout/card_total_balance.xml deleted file mode 100644 index 1f97649e18..0000000000 --- a/app/src/main/res/layout/card_total_balance.xml +++ /dev/null @@ -1,100 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/app/src/main/res/layout/fragment_wallet.xml b/app/src/main/res/layout/fragment_wallet.xml index 17bf714628..1545257fc9 100644 --- a/app/src/main/res/layout/fragment_wallet.xml +++ b/app/src/main/res/layout/fragment_wallet.xml @@ -57,12 +57,13 @@ android:layout_marginTop="8dp" android:layout_marginEnd="16dp" android:layout_marginBottom="12dp" - android:adjustViewBounds="true" - android:elevation="3dp" - android:maxHeight="215dp" - android:scaleType="fitCenter" - android:src="@drawable/card_placeholder_black" - app:layout_constraintTop_toTopOf="parent" /> + android:adjustViewBounds="true" + android:elevation="3dp" + android:maxHeight="215dp" + android:scaleType="fitCenter" + android:src="@drawable/card_placeholder_black" + android:contentDescription="@null" + app:layout_constraintTop_toTopOf="parent" /> + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="12dp" + android:minHeight="0dp" + android:nestedScrollingEnabled="false" + android:overScrollMode="never" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@id/barrier" /> + android:id="@+id/l_wallet_backup_warning" + layout="@layout/layout_wallet_backup_warning" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="16dp" + android:layout_marginStart="16dp" + android:layout_marginEnd="16dp" + android:visibility="gone" + app:layout_constraintTop_toBottomOf="@id/rv_warning_messages" /> + + + android:id="@+id/rv_multiwallet" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="16dp" + android:nestedScrollingEnabled="false" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@id/rv_pending_transaction" /> + + + + @@ -171,28 +208,6 @@ android:text="@string/main_manage_tokens" android:elevation="4dp" app:cornerRadius="8dp" - tools:visibility="gone" /> - - - - + app:layout_constraintBottom_toBottomOf="parent" /> diff --git a/app/src/main/res/layout/layout_card_total_balance.xml b/app/src/main/res/layout/layout_card_total_balance.xml new file mode 100644 index 0000000000..fe3484f373 --- /dev/null +++ b/app/src/main/res/layout/layout_card_total_balance.xml @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/layout_wallet_backup_warning.xml b/app/src/main/res/layout/layout_wallet_backup_warning.xml new file mode 100644 index 0000000000..119ab12734 --- /dev/null +++ b/app/src/main/res/layout/layout_wallet_backup_warning.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/values-ru/strings_final.xml b/app/src/main/res/values-ru/strings_final.xml index 1dca54fc84..d6324862d0 100644 --- a/app/src/main/res/values-ru/strings_final.xml +++ b/app/src/main/res/values-ru/strings_final.xml @@ -64,4 +64,7 @@ Сеть %s не найдена. Пожалуйста, добавьте её и попробуйте заново. Сеть %s + + Бэкап кошелька не был произведен + Чтобы защитить свои активы, мы советуем вам выполнить эту процедуру diff --git a/app/src/main/res/values/strings_final.xml b/app/src/main/res/values/strings_final.xml index bedeb1ae12..bedbde3100 100644 --- a/app/src/main/res/values/strings_final.xml +++ b/app/src/main/res/values/strings_final.xml @@ -64,4 +64,7 @@ %s network not found. Please, add it first and try again. %s network + + Your wallet has not been backed up + To protect your assets, we advise you to carry out this procedure From d8f498b8eef03eccf4ae2913f99f85bfc6b5f8fe Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 30 Jun 2022 16:09:25 +0300 Subject: [PATCH 030/177] Updated on 2026-08-14 --- app/src/main/assets/tangem-app-config | 2 +- .../com/tangem/tap/features/details/redux/DetailsReducer.kt | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/app/src/main/assets/tangem-app-config b/app/src/main/assets/tangem-app-config index 64ae04d208..f50133547b 160000 --- a/app/src/main/assets/tangem-app-config +++ b/app/src/main/assets/tangem-app-config @@ -1 +1 @@ -Subproject commit 64ae04d2086e5a605dd4da3cba4af32a60d46c79 +Subproject commit f50133547b5e19fb7ad32e64370573d60f6791fd 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 a095d46d7e..952e2bb317 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 @@ -8,8 +8,9 @@ import com.tangem.tap.common.redux.AppState import com.tangem.tap.domain.extensions.isWalletDataSupported import com.tangem.tap.domain.extensions.signedHashesCount import com.tangem.tap.features.wallet.models.hasSendableAmountsOrPendingTransactions +import com.tangem.tap.store +import java.util.EnumSet import org.rekotlin.Action -import java.util.* class DetailsReducer { companion object { @@ -49,6 +50,7 @@ private fun handlePrepareScreen( cardInfo = action.scanResponse.card.toCardInfo(), cardTermsOfUseUrl = action.cardTou.getUrl(action.scanResponse.card), createBackupAllowed = action.scanResponse.card.backupStatus == Card.BackupStatus.NoBackup, + appCurrency = store.state.globalState.appCurrency ) } From 65a598be6dd7d1bde6fdedddcba255662bad8e11 Mon Sep 17 00:00:00 2001 From: Tangem Date: Sun, 3 Jul 2022 19:02:33 +0300 Subject: [PATCH 031/177] Updated on 2026-08-14 --- app/src/main/res/values/strings_final.xml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/app/src/main/res/values/strings_final.xml b/app/src/main/res/values/strings_final.xml index bedbde3100..b5fa18c334 100644 --- a/app/src/main/res/values/strings_final.xml +++ b/app/src/main/res/values/strings_final.xml @@ -58,7 +58,7 @@ Hide %s Hide - You hide the token from the main screen, but you can add it back at any time. + You are about to hide this token from the main screen. You can add it back anytime. Unable to hide %s The %s token is the main currency on the %s network and cannot be hidden as long as you have other tokens on this network in the list. @@ -67,4 +67,6 @@ Your wallet has not been backed up To protect your assets, we advise you to carry out this procedure + Remove token + From e3ebc0073019accf793b8859def8ea17800cd013 Mon Sep 17 00:00:00 2001 From: Tangem Date: Sun, 3 Jul 2022 19:11:04 +0300 Subject: [PATCH 032/177] Updated on 2026-08-14 --- app/src/main/res/menu/wallet_details.xml | 2 +- app/src/main/res/values-de/strings_final.xml | 1 + app/src/main/res/values-fr/strings_final.xml | 1 + app/src/main/res/values-it/strings_final.xml | 1 + app/src/main/res/values-ru/strings.xml | 1 - app/src/main/res/values-ru/strings_final.xml | 1 + app/src/main/res/values/strings_final.xml | 1 + app/src/main/res/values/strings_untranslated.xml | 2 +- 8 files changed, 7 insertions(+), 3 deletions(-) diff --git a/app/src/main/res/menu/wallet_details.xml b/app/src/main/res/menu/wallet_details.xml index 08ba8df389..d49dd52b30 100644 --- a/app/src/main/res/menu/wallet_details.xml +++ b/app/src/main/res/menu/wallet_details.xml @@ -3,6 +3,6 @@ xmlns:app="http://schemas.android.com/apk/res-auto"> \ No newline at end of file diff --git a/app/src/main/res/values-de/strings_final.xml b/app/src/main/res/values-de/strings_final.xml index 510399ed52..4eae54e057 100644 --- a/app/src/main/res/values-de/strings_final.xml +++ b/app/src/main/res/values-de/strings_final.xml @@ -51,6 +51,7 @@ Attention The server is not available, please try again later + Hide token Hide %s Hide You hide the token from the main screen, but you can add it back at any time. diff --git a/app/src/main/res/values-fr/strings_final.xml b/app/src/main/res/values-fr/strings_final.xml index 5433d38e20..158ab46c65 100644 --- a/app/src/main/res/values-fr/strings_final.xml +++ b/app/src/main/res/values-fr/strings_final.xml @@ -51,6 +51,7 @@ Notice Attention + Hide token Hide %s Hide You hide the token from the main screen, but you can add it back at any time. diff --git a/app/src/main/res/values-it/strings_final.xml b/app/src/main/res/values-it/strings_final.xml index 5433d38e20..158ab46c65 100644 --- a/app/src/main/res/values-it/strings_final.xml +++ b/app/src/main/res/values-it/strings_final.xml @@ -51,6 +51,7 @@ Notice Attention + Hide token Hide %s Hide You hide the token from the main screen, but you can add it back at any time. diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index e1e1067d42..ffef45f82e 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -182,7 +182,6 @@ Добавить пользовательский Популярные токены Добавлен - Удалить токен Значок токена Добавить токен Адрес контракта diff --git a/app/src/main/res/values-ru/strings_final.xml b/app/src/main/res/values-ru/strings_final.xml index d6324862d0..0370067579 100644 --- a/app/src/main/res/values-ru/strings_final.xml +++ b/app/src/main/res/values-ru/strings_final.xml @@ -56,6 +56,7 @@ Управление токенами Нет цены + Скрыть токен Скрыть %s Скрыть Вы скрываете токен с главного экрана, но в любой момент сможете добавить его обратно. diff --git a/app/src/main/res/values/strings_final.xml b/app/src/main/res/values/strings_final.xml index b5fa18c334..25bf984bbe 100644 --- a/app/src/main/res/values/strings_final.xml +++ b/app/src/main/res/values/strings_final.xml @@ -56,6 +56,7 @@ Manage tokens No rate + Hide token Hide %s Hide You are about to hide this token from the main screen. You can add it back anytime. diff --git a/app/src/main/res/values/strings_untranslated.xml b/app/src/main/res/values/strings_untranslated.xml index 687dd82c75..2d8ff0ebba 100644 --- a/app/src/main/res/values/strings_untranslated.xml +++ b/app/src/main/res/values/strings_untranslated.xml @@ -79,7 +79,7 @@ Custom tokens Popular tokens Added - Remove token + Remove token Token icon Add Token From 0bd6564176d25c0153d51d38ea6b150e98292b5a Mon Sep 17 00:00:00 2001 From: Tangem Date: Sun, 3 Jul 2022 19:18:22 +0300 Subject: [PATCH 033/177] Updated on 2026-08-14 --- app/src/main/res/values/strings_untranslated.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/app/src/main/res/values/strings_untranslated.xml b/app/src/main/res/values/strings_untranslated.xml index 2d8ff0ebba..84f36c07bf 100644 --- a/app/src/main/res/values/strings_untranslated.xml +++ b/app/src/main/res/values/strings_untranslated.xml @@ -79,7 +79,6 @@ Custom tokens Popular tokens Added - Remove token Token icon Add Token From bb7a53008601f4f2c87ee98e4bb21d432e76693c Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 4 Jul 2022 01:35:26 +0300 Subject: [PATCH 034/177] Updated on 2026-08-14 --- .../com/tangem/tap/common/DialogManager.kt | 2 +- .../java/com/tangem/tap/domain/TapErrors.kt | 19 ++-- .../features/tokens/redux/TokensMiddleware.kt | 10 +- .../tap/features/wallet/models/Currency.kt | 2 - .../tap/features/wallet/redux/WalletAction.kt | 18 ++-- .../middlewares/MultiWalletMiddleware.kt | 97 +++++++++---------- .../wallet/redux/models/WalletDialog.kt | 12 +-- .../redux/reducers/MultiWalletReducer.kt | 19 +--- .../wallet/ui/WalletDetailsFragment.kt | 2 +- .../wallet/ui/wallet/MultiWalletView.kt | 4 - 10 files changed, 82 insertions(+), 103 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/common/DialogManager.kt b/app/src/main/java/com/tangem/tap/common/DialogManager.kt index 342e29a83e..dd24af74c5 100644 --- a/app/src/main/java/com/tangem/tap/common/DialogManager.kt +++ b/app/src/main/java/com/tangem/tap/common/DialogManager.kt @@ -129,7 +129,7 @@ class DialogManager : StoreSubscriber { messageRes = state.dialog.messageRes, context = context, primaryButtonRes = state.dialog.primaryButtonRes, - primaryButtonAction = state.dialog.action + primaryButtonAction = state.dialog.onOk ) else -> null } diff --git a/app/src/main/java/com/tangem/tap/domain/TapErrors.kt b/app/src/main/java/com/tangem/tap/domain/TapErrors.kt index 0c38cd5a46..ff19d10171 100644 --- a/app/src/main/java/com/tangem/tap/domain/TapErrors.kt +++ b/app/src/main/java/com/tangem/tap/domain/TapErrors.kt @@ -39,21 +39,26 @@ sealed class TapError( object DustChange : TapError(R.string.send_error_dust_change) data class CreateAccountUnderfunded(override val args: List) : TapError(R.string.send_error_no_target_account) + data class UnsupportedState( + val stateError: String, + val customMessage: String = "Unsupported state:" + ) : TapError(R.string.common_custom_string, listOf("$customMessage $stateError")) + sealed class XmlError { object AssetAccountNotCreated : TapError(R.string.send_error_no_account_xlm) } sealed class WalletManager { - object CreationError: CustomError("Can't create wallet manager") - class NoAccountError(amountToCreateAccount: String): CustomError(amountToCreateAccount) - class InternalError(message: String): CustomError(message) - object BlockchainIsUnreachable: TapError(R.string.wallet_balance_blockchain_unreachable) - object BlockchainIsUnreachableTryLater: TapError(R.string.wallet_balance_blockchain_unreachable_try_later) + object CreationError : CustomError("Can't create wallet manager") + class NoAccountError(amountToCreateAccount: String) : CustomError(amountToCreateAccount) + class InternalError(message: String) : CustomError(message) + object BlockchainIsUnreachable : TapError(R.string.wallet_balance_blockchain_unreachable) + object BlockchainIsUnreachableTryLater : TapError(R.string.wallet_balance_blockchain_unreachable_try_later) } data class ValidateTransactionErrors( - override val errorList: List, - override val builder: (List) -> String + override val errorList: List, + override val builder: (List) -> String ) : TapError(-1), MultiMessageError } diff --git a/app/src/main/java/com/tangem/tap/features/tokens/redux/TokensMiddleware.kt b/app/src/main/java/com/tangem/tap/features/tokens/redux/TokensMiddleware.kt index dd40f7074e..08c296ed82 100644 --- a/app/src/main/java/com/tangem/tap/features/tokens/redux/TokensMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/tokens/redux/TokensMiddleware.kt @@ -308,12 +308,10 @@ class TokensMiddleware { private fun removeCurrenciesIfNeeded(currencies: List) { if (currencies.isNotEmpty()) { currencies.forEach { currency -> - store.state.walletState.getWalletData(currency)?.let { - store.dispatch(WalletAction.MultiWallet.RemoveWallet( - walletData = it, - fromWalletDetails = false - )) - } + store.dispatch(WalletAction.MultiWallet.RemoveWallet( + currency = currency, + fromScreen = AppScreen.AddTokens + )) } } } diff --git a/app/src/main/java/com/tangem/tap/features/wallet/models/Currency.kt b/app/src/main/java/com/tangem/tap/features/wallet/models/Currency.kt index 76945c588f..75f752b278 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/models/Currency.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/models/Currency.kt @@ -1,8 +1,6 @@ package com.tangem.tap.features.wallet.models -import com.tangem.blockchain.common.Blockchain import com.tangem.blockchain.common.DerivationStyle -import com.tangem.blockchain.common.Token import com.tangem.domain.common.extensions.toCoinId import com.tangem.domain.features.addCustomToken.CustomCurrency import com.tangem.tap.common.redux.global.CryptoCurrencyName diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletAction.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletAction.kt index edc6be9c6e..59556b5893 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletAction.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletAction.kt @@ -1,23 +1,20 @@ package com.tangem.tap.features.wallet.redux import android.content.Context -import com.tangem.blockchain.common.Amount -import com.tangem.blockchain.common.Blockchain -import com.tangem.blockchain.common.Token -import com.tangem.blockchain.common.Wallet -import com.tangem.blockchain.common.WalletManager +import com.tangem.blockchain.common.* import com.tangem.blockchain.common.address.AddressType import com.tangem.common.card.Card import com.tangem.tap.common.entities.FiatCurrency import com.tangem.tap.common.redux.ErrorAction import com.tangem.tap.common.redux.NotificationAction +import com.tangem.tap.common.redux.navigation.AppScreen import com.tangem.tap.domain.TapError import com.tangem.tap.domain.configurable.warningMessage.WarningMessage import com.tangem.tap.domain.tokens.models.BlockchainNetwork import com.tangem.tap.features.wallet.models.Currency import com.tangem.wallet.R -import java.math.BigDecimal import org.rekotlin.Action +import java.math.BigDecimal sealed class WalletAction : Action { @@ -75,10 +72,13 @@ sealed class WalletAction : Action { ) : MultiWallet() data class SelectWallet(val walletData: WalletData?) : MultiWallet() - data class RemoveWallet(val walletData: WalletData, val fromWalletDetails: Boolean = true) : - MultiWallet() - data class TryToRemoveWallet(val walletData: WalletData) : MultiWallet() + data class TryToRemoveWallet(val currency: Currency) : MultiWallet() + data class RemoveWallet( + val currency: Currency, + val fromScreen: AppScreen + ) : MultiWallet() + data class SetPrimaryBlockchain(val blockchain: Blockchain) : MultiWallet() data class SetPrimaryToken(val token: Token) : MultiWallet() diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/MultiWalletMiddleware.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/MultiWalletMiddleware.kt index e3af462d5d..632fbd34ac 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/MultiWalletMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/MultiWalletMiddleware.kt @@ -5,12 +5,14 @@ import com.tangem.blockchain.common.Token import com.tangem.blockchain.common.WalletManager import com.tangem.common.extensions.guard import com.tangem.tap.common.extensions.dispatchDialogShow +import com.tangem.tap.common.extensions.dispatchErrorNotification import com.tangem.tap.common.extensions.safeUpdate import com.tangem.tap.common.redux.global.GlobalAction import com.tangem.tap.common.redux.global.GlobalState import com.tangem.tap.common.redux.navigation.AppScreen import com.tangem.tap.common.redux.navigation.NavigationAction import com.tangem.tap.currenciesRepository +import com.tangem.tap.domain.TapError import com.tangem.tap.domain.extensions.makeWalletManagerForApp import com.tangem.tap.domain.tokens.models.BlockchainNetwork import com.tangem.tap.features.demo.DemoHelper @@ -21,17 +23,16 @@ import com.tangem.tap.features.wallet.redux.WalletState import com.tangem.tap.features.wallet.redux.models.WalletDialog import com.tangem.tap.scope import com.tangem.tap.store -import java.math.BigDecimal import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext +import java.math.BigDecimal class MultiWalletMiddleware { fun handle( action: WalletAction.MultiWallet, walletState: WalletState?, globalState: GlobalState?, ) { val globalState = globalState ?: return -// val tapWalletManager = globalState.tapWalletManager when (action) { is WalletAction.MultiWallet.AddBlockchains -> { @@ -81,64 +82,62 @@ class MultiWalletMiddleware { } } is WalletAction.MultiWallet.TryToRemoveWallet -> { - val walletState = store.state.walletState - val currency = action.walletData.currency - val walletCanBeRemoved = store.state.walletState.canBeRemoved( - store.state.walletState.getSelectedWalletData() - ) - if (walletCanBeRemoved) { - store.dispatch(WalletAction.MultiWallet.RemoveWallet(action.walletData)) + val currency = action.currency + val walletManager = walletState?.getWalletManager(currency).guard { + store.dispatchErrorNotification(TapError.UnsupportedState("walletManager is NULL")) + store.dispatch(NavigationAction.PopBackTo(AppScreen.Home)) return } - val walletManager = walletState.getWalletManager(currency).guard { - store.dispatch(WalletAction.MultiWallet.RemoveWallet(action.walletData)) - return + if (currency.isBlockchain() && walletManager.cardTokens.isNotEmpty()) { + store.dispatchDialogShow(WalletDialog.TokensAreLinkedDialog( + currencyTitle = currency.currencyName, + currencySymbol = currency.currencySymbol + )) + } else { + store.dispatchDialogShow(WalletDialog.RemoveWalletDialog( + currencyTitle = currency.currencyName, + onOk = { + store.dispatch(WalletAction.MultiWallet.RemoveWallet( + currency = currency, + fromScreen = AppScreen.WalletDetails + )) + store.dispatch(NavigationAction.PopBackTo()) + } + )) } - - val dialog = when { - currency is Currency.Blockchain && - walletManager.cardTokens.isNotEmpty() -> - WalletDialog.TokensAreLinkedDialog( - currency.currencyName, currency.currencySymbol - ) - - else -> - WalletDialog.RemoveWalletDialog(currency.currencyName, action.walletData) - } - store.dispatchDialogShow(dialog) } is WalletAction.MultiWallet.RemoveWallet -> { - val cardId = globalState.scanResponse?.card?.cardId - when (val currency = action.walletData.currency) { + val currency = action.currency + val cardId = globalState.scanResponse?.card?.cardId.guard { + store.dispatchErrorNotification(TapError.UnsupportedState("cardId is NULL")) + store.dispatch(NavigationAction.PopBackTo(AppScreen.Home)) + return + } + + when (currency) { is Currency.Blockchain -> { - cardId?.let { - currenciesRepository.removeBlockchain( - cardId = it, - blockchainNetwork = BlockchainNetwork( - currency.blockchain, currency.derivationPath, - emptyList() - ) + currenciesRepository.removeBlockchain( + cardId = cardId, + blockchainNetwork = BlockchainNetwork( + blockchain = currency.blockchain, + derivationPath = currency.derivationPath, + tokens = emptyList() + ) + ) + } + is Currency.Token -> { + walletState?.getWalletManager(currency)?.let { + it.removeToken(currency.token) + currenciesRepository.removeToken( + cardId = cardId, + token = currency.token, + blockchainNetwork = BlockchainNetwork.fromWalletManager(it) ) } } - is Currency.Token -> { - val walletManager = walletState?.getWalletManager(currency) - if (walletManager != null) { - walletManager.removeToken(currency.token) - cardId?.let { - currenciesRepository.removeToken( - cardId = it, - token = currency.token, - blockchainNetwork = BlockchainNetwork.fromWalletManager( - walletManager - ) - ) - } - } - } } - if (action.fromWalletDetails) { + if (action.fromScreen == AppScreen.AddTokens) { store.dispatch(WalletAction.MultiWallet.SelectWallet(null)) store.dispatch(NavigationAction.PopBackTo()) } diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/models/WalletDialog.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/models/WalletDialog.kt index 5e2458c15d..a5a54c93f6 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/models/WalletDialog.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/models/WalletDialog.kt @@ -3,9 +3,6 @@ package com.tangem.tap.features.wallet.redux.models import com.tangem.blockchain.common.Amount import com.tangem.tap.common.entities.FiatCurrency import com.tangem.tap.common.redux.StateDialog -import com.tangem.tap.features.wallet.redux.WalletAction -import com.tangem.tap.features.wallet.redux.WalletData -import com.tangem.tap.store import com.tangem.wallet.R sealed interface WalletDialog : StateDialog { @@ -19,21 +16,18 @@ sealed interface WalletDialog : StateDialog { data class RemoveWalletDialog( val currencyTitle: String, - private val walletData: WalletData - ): WalletDialog { + val onOk: () -> Unit + ) : WalletDialog { val messageRes: Int = R.string.token_details_hide_alert_message val titleRes: Int = R.string.token_details_hide_alert_title val primaryButtonRes: Int = R.string.token_details_hide_alert_hide - val action = { store.dispatch(WalletAction.MultiWallet.RemoveWallet(walletData)) } } data class TokensAreLinkedDialog( val currencyTitle: String, val currencySymbol: String - ): WalletDialog { + ) : WalletDialog { val messageRes: Int = R.string.token_details_unable_hide_alert_message val titleRes: Int = R.string.token_details_unable_hide_alert_title } - - } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/MultiWalletReducer.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/MultiWalletReducer.kt index 03cee11142..e8f9551910 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/MultiWalletReducer.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/reducers/MultiWalletReducer.kt @@ -7,17 +7,9 @@ import com.tangem.tap.common.extensions.toFiatString import com.tangem.tap.common.extensions.toFormattedCurrencyString import com.tangem.tap.domain.getFirstToken import com.tangem.tap.domain.tokens.models.BlockchainNetwork -import com.tangem.tap.features.wallet.models.Currency -import com.tangem.tap.features.wallet.models.WalletRent -import com.tangem.tap.features.wallet.models.filterByToken -import com.tangem.tap.features.wallet.models.getPendingTransactions -import com.tangem.tap.features.wallet.models.removeUnknownTransactions -import com.tangem.tap.features.wallet.redux.WalletAction -import com.tangem.tap.features.wallet.redux.WalletData -import com.tangem.tap.features.wallet.redux.WalletMainButton -import com.tangem.tap.features.wallet.redux.WalletState +import com.tangem.tap.features.wallet.models.* +import com.tangem.tap.features.wallet.redux.* import com.tangem.tap.features.wallet.redux.WalletState.Companion.UNKNOWN_AMOUNT_SIGN -import com.tangem.tap.features.wallet.redux.WalletStore import com.tangem.tap.features.wallet.ui.BalanceStatus import com.tangem.tap.features.wallet.ui.BalanceWidgetData import com.tangem.tap.features.wallet.ui.TokenData @@ -152,19 +144,16 @@ class MultiWalletReducer { is WalletAction.MultiWallet.SelectWallet -> state.copy(selectedCurrency = action.walletData?.currency) - + is WalletAction.MultiWallet.TryToRemoveWallet -> state is WalletAction.MultiWallet.RemoveWallet -> { - state.removeWallet(action.walletData) + state.removeWallet(state.getWalletData(action.currency)) } is WalletAction.MultiWallet.SetPrimaryBlockchain -> state.copy(primaryBlockchain = action.blockchain) is WalletAction.MultiWallet.SetPrimaryToken -> state.copy(primaryToken = action.token) -// is WalletAction.MultiWallet.FindTokensInUse -> state -// is WalletAction.MultiWallet.FindBlockchainsInUse -> state is WalletAction.MultiWallet.SaveCurrencies -> state - is WalletAction.MultiWallet.TryToRemoveWallet -> state is WalletAction.MultiWallet.ShowWalletBackupWarning -> state.copy( showBackupWarning = action.show ) diff --git a/app/src/main/java/com/tangem/tap/features/wallet/ui/WalletDetailsFragment.kt b/app/src/main/java/com/tangem/tap/features/wallet/ui/WalletDetailsFragment.kt index 26f1163798..0dfa0d5774 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/ui/WalletDetailsFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/ui/WalletDetailsFragment.kt @@ -317,7 +317,7 @@ class WalletDetailsFragment : Fragment(R.layout.fragment_wallet_details), return when (item.itemId) { R.id.menu_remove -> { store.state.walletState.getSelectedWalletData()?.let { walletData -> - store.dispatch(WalletAction.MultiWallet.TryToRemoveWallet(walletData)) + store.dispatch(WalletAction.MultiWallet.TryToRemoveWallet(walletData.currency)) true } false 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 994a491ac2..95560bd43d 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 @@ -112,10 +112,6 @@ class MultiWalletView : WalletView { derivationStyle = card.derivationStyle ) ) - store.dispatch( - TokensAction.SetNonRemovableCurrencies( - state.walletsData.filterNot { state.canBeRemoved(it) }) - ) store.dispatch(NavigationAction.NavigateTo(AppScreen.AddTokens)) } handleErrorStates(state = state, binding = binding, fragment = fragment) From 80c67e4d99291f1121fe5b26af459afc783847a0 Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 4 Jul 2022 21:14:26 +0300 Subject: [PATCH 035/177] Updated on 2026-08-14 --- .../common/compose/extensions/MutableState.kt | 14 +++ .../tap/features/tokens/redux/TokensAction.kt | 2 - .../features/tokens/redux/TokensReducer.kt | 7 -- .../tap/features/tokens/redux/TokensState.kt | 2 - .../tokens/ui/compose/CurrenciesScreen.kt | 113 +++++++++++++----- .../tokens/ui/compose/CurrencyItem.kt | 4 - .../tokens/ui/compose/ExpandedCurrencyItem.kt | 11 +- .../tokens/ui/compose/ListOfCurrencies.kt | 4 - .../features/tokens/ui/compose/NetworkItem.kt | 9 +- .../middlewares/MultiWalletMiddleware.kt | 1 - 10 files changed, 104 insertions(+), 63 deletions(-) create mode 100644 app/src/main/java/com/tangem/tap/common/compose/extensions/MutableState.kt diff --git a/app/src/main/java/com/tangem/tap/common/compose/extensions/MutableState.kt b/app/src/main/java/com/tangem/tap/common/compose/extensions/MutableState.kt new file mode 100644 index 0000000000..459086b9c3 --- /dev/null +++ b/app/src/main/java/com/tangem/tap/common/compose/extensions/MutableState.kt @@ -0,0 +1,14 @@ +package com.tangem.tap.common.compose.extensions + +import androidx.compose.runtime.MutableState + +/** +[REDACTED_AUTHOR] + */ +fun MutableState>.addAndNotify(value: T) { + this.value = this.value.toMutableList().apply { add(value) } +} + +fun MutableState>.removeAndNotify(value: T) { + this.value = this.value.toMutableList().apply { remove(value) } +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/tokens/redux/TokensAction.kt b/app/src/main/java/com/tangem/tap/features/tokens/redux/TokensAction.kt index 7e1e4bee95..79f171b03f 100644 --- a/app/src/main/java/com/tangem/tap/features/tokens/redux/TokensAction.kt +++ b/app/src/main/java/com/tangem/tap/features/tokens/redux/TokensAction.kt @@ -28,8 +28,6 @@ sealed class TokensAction : Action { val wallets: List, val derivationStyle: DerivationStyle? ) : TokensAction() - data class SetNonRemovableCurrencies(val wallets: List) : TokensAction() - data class SaveChanges( val addedTokens: List, val addedBlockchains: List diff --git a/app/src/main/java/com/tangem/tap/features/tokens/redux/TokensReducer.kt b/app/src/main/java/com/tangem/tap/features/tokens/redux/TokensReducer.kt index 374f6ad820..007a1e9711 100644 --- a/app/src/main/java/com/tangem/tap/features/tokens/redux/TokensReducer.kt +++ b/app/src/main/java/com/tangem/tap/features/tokens/redux/TokensReducer.kt @@ -43,13 +43,6 @@ private fun internalReduce(action: Action, state: AppState): TokensState { derivationStyle = action.derivationStyle ) } - is TokensAction.SetNonRemovableCurrencies -> { - tokensState.copy( - nonRemovableBlockchains = action.wallets.toNonCustomBlockchains(tokensState.derivationStyle), - nonRemovableTokens = action.wallets.toTokensContractAddresses(), - ) - } - is TokensAction.AllowToAddTokens -> { tokensState.copy(allowToAdd = action.allow) } diff --git a/app/src/main/java/com/tangem/tap/features/tokens/redux/TokensState.kt b/app/src/main/java/com/tangem/tap/features/tokens/redux/TokensState.kt index 5fcc7510f2..ab1b3731a5 100644 --- a/app/src/main/java/com/tangem/tap/features/tokens/redux/TokensState.kt +++ b/app/src/main/java/com/tangem/tap/features/tokens/redux/TokensState.kt @@ -14,8 +14,6 @@ data class TokensState( val addedWallets: List = emptyList(), val addedTokens: List = emptyList(), val addedBlockchains: List = emptyList(), - val nonRemovableTokens: List = emptyList(), - val nonRemovableBlockchains: List = emptyList(), val currencies: List = emptyList(), val searchInput: String? = null, val allowToAdd: Boolean = true, diff --git a/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/CurrenciesScreen.kt b/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/CurrenciesScreen.kt index ef87846c21..18dabc7e87 100644 --- a/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/CurrenciesScreen.kt +++ b/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/CurrenciesScreen.kt @@ -21,6 +21,8 @@ import com.tangem.blockchain.common.Blockchain import com.tangem.domain.common.TapWorkarounds.useOldStyleDerivation import com.tangem.domain.common.extensions.fromNetworkId import com.tangem.tap.common.compose.Keyboard +import com.tangem.tap.common.compose.extensions.addAndNotify +import com.tangem.tap.common.compose.extensions.removeAndNotify import com.tangem.tap.common.compose.keyboardAsState import com.tangem.tap.common.extensions.dispatchDialogShow import com.tangem.tap.common.extensions.pixelsToDp @@ -30,6 +32,7 @@ import com.tangem.tap.features.tokens.redux.ContractAddress import com.tangem.tap.features.tokens.redux.LoadCoinsState import com.tangem.tap.features.tokens.redux.TokenWithBlockchain import com.tangem.tap.features.tokens.redux.TokensState +import com.tangem.tap.features.wallet.redux.models.WalletDialog import com.tangem.tap.store import com.tangem.wallet.R @@ -40,30 +43,30 @@ fun CurrenciesScreen( onNetworkItemClicked: (ContractAddress) -> Unit, onLoadMore: () -> Unit ) { - val context = LocalContext.current + val tokensAddedOnMainScreen = remember { tokensState.value.addedTokens } + val blockchainsAddedOnMainScreen = remember { tokensState.value.addedBlockchains } + val addedTokensState = remember { mutableStateOf(tokensState.value.addedTokens) } val addedBlockchainsState = remember { mutableStateOf(tokensState.value.addedBlockchains) } val isKeyboardOpen by keyboardAsState() val onAddCurrencyToggleClick = { currency: Currency, token: TokenWithBlockchain? -> - if (token != null) { - val mutableList = addedTokensState.value.toMutableList() - if (mutableList.contains(token)) { - mutableList.remove(token) - } else { - mutableList.add(token) - } - addedTokensState.value = mutableList - } else { - val blockchain = Blockchain.fromNetworkId(currency.id) - val mutableList = addedBlockchainsState.value.toMutableList() - if (mutableList.contains(blockchain)) { - mutableList.remove(blockchain) - } else { - blockchain?.let { mutableList.add(blockchain) } - } - addedBlockchainsState.value = mutableList + val blockchain = Blockchain.fromNetworkId(currency.id) + if (blockchain != null && token == null) { + toggleBlockchain( + blockchain, + blockchainsAddedOnMainScreen, + addedBlockchainsState, + addedTokensState, + ) + } else if (token != null) { + toggleToken( + token, + tokensAddedOnMainScreen, + addedTokensState, + tokensState, + ) } } @@ -100,23 +103,11 @@ fun CurrenciesScreen( ListOfCurrencies( header = { if (showHeader) CurrenciesWarning() }, currencies = tokensState.value.currencies, - nonRemovableTokens = tokensState.value.nonRemovableTokens, - nonRemovableBlockchains = tokensState.value.nonRemovableBlockchains, addedTokens = addedTokensState.value, addedBlockchains = addedBlockchainsState.value, allowToAdd = tokensState.value.allowToAdd, onAddCurrencyToggled = { currency, token -> onAddCurrencyToggleClick(currency, token) - token?.let { - if (!tokensState.value.canHandleToken(it)) { - val dialog = AppDialog.SimpleOkDialog( - header = context.getString(R.string.common_warning), - message = context.getString(R.string.alert_manage_tokens_unsupported_message) - ) { onAddCurrencyToggleClick(currency, it) } - store.dispatchDialogShow(dialog) - } - } - }, onNetworkItemClicked = onNetworkItemClicked, onLoadMore = onLoadMore @@ -127,6 +118,68 @@ fun CurrenciesScreen( } } +private fun toggleBlockchain( + blockchain: Blockchain, + blockchainsAddedOnMainScreen: List, + addedBlockchainsState: MutableState>, + addedTokensState: MutableState> +) { + val isTryingToRemove = addedBlockchainsState.value.contains(blockchain) + val isAddedOnMainScreen = blockchainsAddedOnMainScreen.contains(blockchain) + val isTokenWithSameBlockchainFound = addedTokensState.value.any { it.blockchain == blockchain } + + if (isTryingToRemove) { + if (isTokenWithSameBlockchainFound) { + store.dispatchDialogShow(WalletDialog.TokensAreLinkedDialog( + currencyTitle = blockchain.name, + currencySymbol = blockchain.currency + )) + } else { + if (isAddedOnMainScreen) { + store.dispatchDialogShow(WalletDialog.RemoveWalletDialog( + currencyTitle = blockchain.name, + onOk = { addedBlockchainsState.removeAndNotify(blockchain) } + )) + } else { + addedBlockchainsState.removeAndNotify(blockchain) + } + } + } else { + addedBlockchainsState.addAndNotify(blockchain) + } +} + +private fun toggleToken( + token: TokenWithBlockchain, + tokensAddedOnMainScreen: List, + addedTokensState: MutableState>, + tokensState: MutableState, +) { + val isTryingToRemove = addedTokensState.value.contains(token) + val isAddedOnMainScreen = tokensAddedOnMainScreen.contains(token) + val isUnsupportedToken = !tokensState.value.canHandleToken(token) + + if (isTryingToRemove) { + if (isAddedOnMainScreen) { + store.dispatchDialogShow(WalletDialog.RemoveWalletDialog( + currencyTitle = token.token.name, + onOk = { addedTokensState.removeAndNotify(token) } + )) + } else { + addedTokensState.removeAndNotify(token) + } + } else { + if (isUnsupportedToken) { + store.dispatchDialogShow(AppDialog.SimpleOkDialogRes( + headerId = R.string.common_warning, + messageId = R.string.alert_manage_tokens_unsupported_message, + )) + } else { + addedTokensState.addAndNotify(token) + } + } +} + @Composable fun SaveChangesButton(keyboardState: Keyboard, onSaveChanges: () -> Unit) { diff --git a/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/CurrencyItem.kt b/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/CurrencyItem.kt index 9fd962bce7..5ba1f8b683 100644 --- a/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/CurrencyItem.kt +++ b/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/CurrencyItem.kt @@ -9,8 +9,6 @@ import com.tangem.tap.features.tokens.redux.TokenWithBlockchain @Composable fun CurrencyItem( currency: Currency, - nonRemovableTokens: List, - nonRemovableBlockchains: List, addedTokens: List, addedBlockchains: List, allowToAdd: Boolean, @@ -22,8 +20,6 @@ fun CurrencyItem( if (expanded) { ExpandedCurrencyItem( currency = currency, - nonRemovableTokens = nonRemovableTokens, - nonRemovableBlockchains = nonRemovableBlockchains, addedTokens = addedTokens, addedBlockchains = addedBlockchains, allowToAdd = allowToAdd, diff --git a/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/ExpandedCurrencyItem.kt b/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/ExpandedCurrencyItem.kt index ef8c92c104..cecf873bf9 100644 --- a/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/ExpandedCurrencyItem.kt +++ b/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/ExpandedCurrencyItem.kt @@ -28,8 +28,6 @@ import com.tangem.wallet.R @Composable fun ExpandedCurrencyItem( currency: Currency, - nonRemovableTokens: List, - nonRemovableBlockchains: List, addedTokens: List, addedBlockchains: List, allowToAdd: Boolean, @@ -138,17 +136,12 @@ fun ExpandedCurrencyItem( } else { addedBlockchains.contains(blockchain) } - val canBeRemoved = if (contract.address != null) { - !nonRemovableTokens.contains(contract.address) - } else { - !nonRemovableBlockchains.contains(blockchain) - } NetworkItem( currency = currency, contract = contract, - blockchain = blockchain, allowToAdd = allowToAdd, + blockchain = blockchain, + allowToAdd = allowToAdd, added = added, - canBeRemoved = canBeRemoved, onAddCurrencyToggled = onAddCurrencyToggled, onNetworkItemClicked = onNetworkItemClicked, ) diff --git a/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/ListOfCurrencies.kt b/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/ListOfCurrencies.kt index 4892cf5e13..14f36c1dd4 100644 --- a/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/ListOfCurrencies.kt +++ b/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/ListOfCurrencies.kt @@ -22,8 +22,6 @@ import com.tangem.tap.features.tokens.redux.TokenWithBlockchain fun ListOfCurrencies( header: @Composable () -> Unit, currencies: List, - nonRemovableTokens: List, - nonRemovableBlockchains: List, addedTokens: List, addedBlockchains: List, allowToAdd: Boolean, @@ -58,8 +56,6 @@ fun ListOfCurrencies( itemsIndexed(currencies) { index, currency -> CurrencyItem( currency = currency, - nonRemovableTokens = nonRemovableTokens, - nonRemovableBlockchains = nonRemovableBlockchains, addedTokens = addedTokens, addedBlockchains = addedBlockchains, allowToAdd = allowToAdd, diff --git a/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/NetworkItem.kt b/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/NetworkItem.kt index 9b75a86359..0f45d867bf 100644 --- a/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/NetworkItem.kt +++ b/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/NetworkItem.kt @@ -35,9 +35,11 @@ import com.tangem.tap.features.tokens.redux.TokenWithBlockchain @OptIn(ExperimentalFoundationApi::class) @Composable fun NetworkItem( - currency: Currency, contract: Contract, - blockchain: Blockchain, allowToAdd: Boolean, - added: Boolean, canBeRemoved: Boolean, + currency: Currency, + contract: Contract, + blockchain: Blockchain, + allowToAdd: Boolean, + added: Boolean, onAddCurrencyToggled: (Currency, TokenWithBlockchain?) -> Unit, onNetworkItemClicked: (ContractAddress) -> Unit ) { @@ -126,7 +128,6 @@ fun NetworkItem( Switch( checked = added, - enabled = canBeRemoved, onCheckedChange = { onAddCurrencyToggled(currencyToSave, tokenWithBlockchain) }, modifier = Modifier.padding(start = 16.dp, end = 16.dp), colors = SwitchDefaults.colors( diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/MultiWalletMiddleware.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/MultiWalletMiddleware.kt index 632fbd34ac..e28ced2f06 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/MultiWalletMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/MultiWalletMiddleware.kt @@ -139,7 +139,6 @@ class MultiWalletMiddleware { } if (action.fromScreen == AppScreen.AddTokens) { store.dispatch(WalletAction.MultiWallet.SelectWallet(null)) - store.dispatch(NavigationAction.PopBackTo()) } } is WalletAction.MultiWallet.ShowWalletBackupWarning -> Unit From db455c0bcadf4ab75d84825cfdff31c5a43d252e Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 4 Jul 2022 21:15:15 +0300 Subject: [PATCH 036/177] Updated on 2026-08-14 --- .../tap/features/tokens/redux/TokensMiddleware.kt | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/features/tokens/redux/TokensMiddleware.kt b/app/src/main/java/com/tangem/tap/features/tokens/redux/TokensMiddleware.kt index 08c296ed82..2ec703e629 100644 --- a/app/src/main/java/com/tangem/tap/features/tokens/redux/TokensMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/tokens/redux/TokensMiddleware.kt @@ -44,13 +44,13 @@ class TokensMiddleware { when (action) { is TokensAction.LoadCurrencies -> handleLoadCurrencies(action.scanResponse) is TokensAction.SaveChanges -> handleSaveChanges(action) - is TokensAction.PrepareAndNavigateToAddCustomToken -> handleAddingCustomToken( - action - ) + is TokensAction.PrepareAndNavigateToAddCustomToken -> { + handleAddingCustomToken(action) + } is TokensAction.SetSearchInput -> { handleLoadCurrencies( scanResponse = store.state.globalState.scanResponse, - action.searchInput + newSearchInput = action.searchInput ) } is TokensAction.LoadMore -> { @@ -138,7 +138,9 @@ class TokensMiddleware { ) ) - if (tokensToAdd.isEmpty() && blockchainsToAdd.isEmpty()) { + if (tokensToAdd.isEmpty() && tokensToRemove.isEmpty() + && blockchainsToAdd.isEmpty() && blockchainsToRemove.isEmpty() + ) { store.dispatchDebugErrorNotification("Nothing to save") store.dispatch(NavigationAction.PopBackTo()) return From e5c5891b64db7fbbee772b111574adbad6280708 Mon Sep 17 00:00:00 2001 From: Tangem Date: Mon, 4 Jul 2022 21:21:36 +0300 Subject: [PATCH 037/177] Updated on 2026-08-14 --- .../wallet/redux/middlewares/MultiWalletMiddleware.kt | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/MultiWalletMiddleware.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/MultiWalletMiddleware.kt index e28ced2f06..04bf56dad7 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/MultiWalletMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/MultiWalletMiddleware.kt @@ -127,12 +127,13 @@ class MultiWalletMiddleware { ) } is Currency.Token -> { - walletState?.getWalletManager(currency)?.let { - it.removeToken(currency.token) + val walletManager = walletState?.getWalletManager(currency) + if (walletManager != null) { + walletManager.removeToken(currency.token) currenciesRepository.removeToken( cardId = cardId, token = currency.token, - blockchainNetwork = BlockchainNetwork.fromWalletManager(it) + blockchainNetwork = BlockchainNetwork.fromWalletManager(walletManager) ) } } From 376c14d5598c49af102e65e885b2c8c1c108af84 Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 5 Jul 2022 10:48:30 +0400 Subject: [PATCH 038/177] Updated on 2026-08-14 --- .../wallet/redux/OnboardingWalletMiddleware.kt | 7 ++++++- .../tangem/tap/features/wallet/redux/WalletAction.kt | 12 +++++------- .../redux/middlewares/MultiWalletMiddleware.kt | 7 +++---- 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/redux/OnboardingWalletMiddleware.kt b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/redux/OnboardingWalletMiddleware.kt index 88121813ad..1cb8587935 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/redux/OnboardingWalletMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/redux/OnboardingWalletMiddleware.kt @@ -91,7 +91,12 @@ private fun handleWalletAction(action: Action) { BlockchainNetwork(Blockchain.Bitcoin, result.data.card), BlockchainNetwork(Blockchain.Ethereum, result.data.card) ) - store.dispatchOnMain(WalletAction.MultiWallet.SaveCurrencies(blockchainNetworks)) + store.dispatchOnMain( + WalletAction.MultiWallet.SaveCurrencies( + blockchainNetworks = blockchainNetworks, + cardId = result.data.card.cardId + ) + ) onboardingManager.activationStarted(updatedResponse.card.cardId) store.dispatch(OnboardingWalletAction.ProceedBackup) } diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletAction.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletAction.kt index edc6be9c6e..295d786c94 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletAction.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletAction.kt @@ -1,11 +1,7 @@ package com.tangem.tap.features.wallet.redux import android.content.Context -import com.tangem.blockchain.common.Amount -import com.tangem.blockchain.common.Blockchain -import com.tangem.blockchain.common.Token -import com.tangem.blockchain.common.Wallet -import com.tangem.blockchain.common.WalletManager +import com.tangem.blockchain.common.* import com.tangem.blockchain.common.address.AddressType import com.tangem.common.card.Card import com.tangem.tap.common.entities.FiatCurrency @@ -16,8 +12,8 @@ import com.tangem.tap.domain.configurable.warningMessage.WarningMessage import com.tangem.tap.domain.tokens.models.BlockchainNetwork import com.tangem.tap.features.wallet.models.Currency import com.tangem.wallet.R -import java.math.BigDecimal import org.rekotlin.Action +import java.math.BigDecimal sealed class WalletAction : Action { @@ -64,7 +60,9 @@ sealed class WalletAction : Action { MultiWallet() data class AddToken(val token: Token, val blockchain: BlockchainNetwork) : MultiWallet() - data class SaveCurrencies(val blockchainNetworks: List) : MultiWallet() + data class SaveCurrencies( + val blockchainNetworks: List, val cardId: String? = null + ) : MultiWallet() // object FindTokensInUse : MultiWallet() // object FindBlockchainsInUse : MultiWallet() diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/MultiWalletMiddleware.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/MultiWalletMiddleware.kt index e3af462d5d..8618bb40a6 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/MultiWalletMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/MultiWalletMiddleware.kt @@ -21,10 +21,10 @@ import com.tangem.tap.features.wallet.redux.WalletState import com.tangem.tap.features.wallet.redux.models.WalletDialog import com.tangem.tap.scope import com.tangem.tap.store -import java.math.BigDecimal import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext +import java.math.BigDecimal class MultiWalletMiddleware { fun handle( @@ -76,9 +76,8 @@ class MultiWalletMiddleware { ) } is WalletAction.MultiWallet.SaveCurrencies -> { - globalState.scanResponse?.card?.cardId?.let { - currenciesRepository.saveCurrencies(it, action.blockchainNetworks) - } + val cardId = action.cardId ?: globalState.scanResponse?.card?.cardId ?: return + currenciesRepository.saveCurrencies(cardId, action.blockchainNetworks) } is WalletAction.MultiWallet.TryToRemoveWallet -> { val walletState = store.state.walletState From 0342b819da2401bb9a685b334aa8fabe774f170c Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 5 Jul 2022 10:49:02 +0400 Subject: [PATCH 039/177] Updated on 2026-08-14 --- .../products/wallet/redux/OnboardingWalletMiddleware.kt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/redux/OnboardingWalletMiddleware.kt b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/redux/OnboardingWalletMiddleware.kt index 1cb8587935..391d65cb96 100644 --- a/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/redux/OnboardingWalletMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/onboarding/products/wallet/redux/OnboardingWalletMiddleware.kt @@ -277,7 +277,11 @@ private fun handleBackupAction(appState: () -> AppState?, action: BackupAction) BlockchainNetwork(Blockchain.Bitcoin, result.data), BlockchainNetwork(Blockchain.Ethereum, result.data) ) - store.dispatchOnMain(WalletAction.MultiWallet.SaveCurrencies(blockchainNetworks)) + store.dispatchOnMain( + WalletAction.MultiWallet.SaveCurrencies( + blockchainNetworks = blockchainNetworks, cardId = result.data.cardId + ) + ) if (backupService.currentState == BackupService.State.Finished) { store.dispatchOnMain(BackupAction.FinishBackup) } else { From f0d2edefc84b6c6837d070ee52604835c2a0b09b Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 5 Jul 2022 12:56:46 +0300 Subject: [PATCH 040/177] Updated on 2026-08-14 --- .../features/tokens/ui/compose/CurrenciesScreen.kt | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/CurrenciesScreen.kt b/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/CurrenciesScreen.kt index 18dabc7e87..49886cbf86 100644 --- a/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/CurrenciesScreen.kt +++ b/app/src/main/java/com/tangem/tap/features/tokens/ui/compose/CurrenciesScreen.kt @@ -58,14 +58,14 @@ fun CurrenciesScreen( blockchain, blockchainsAddedOnMainScreen, addedBlockchainsState, - addedTokensState, + addedTokensState.value, ) } else if (token != null) { toggleToken( token, tokensAddedOnMainScreen, addedTokensState, - tokensState, + tokensState.value, ) } } @@ -122,11 +122,11 @@ private fun toggleBlockchain( blockchain: Blockchain, blockchainsAddedOnMainScreen: List, addedBlockchainsState: MutableState>, - addedTokensState: MutableState> + addedTokens: List ) { val isTryingToRemove = addedBlockchainsState.value.contains(blockchain) val isAddedOnMainScreen = blockchainsAddedOnMainScreen.contains(blockchain) - val isTokenWithSameBlockchainFound = addedTokensState.value.any { it.blockchain == blockchain } + val isTokenWithSameBlockchainFound = addedTokens.any { it.blockchain == blockchain } if (isTryingToRemove) { if (isTokenWithSameBlockchainFound) { @@ -153,11 +153,11 @@ private fun toggleToken( token: TokenWithBlockchain, tokensAddedOnMainScreen: List, addedTokensState: MutableState>, - tokensState: MutableState, + tokensState: TokensState, ) { val isTryingToRemove = addedTokensState.value.contains(token) val isAddedOnMainScreen = tokensAddedOnMainScreen.contains(token) - val isUnsupportedToken = !tokensState.value.canHandleToken(token) + val isUnsupportedToken = !tokensState.canHandleToken(token) if (isTryingToRemove) { if (isAddedOnMainScreen) { From 1ccc05447b0008aa325d56551a27e1724251fb1f Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 5 Jul 2022 15:55:20 +0300 Subject: [PATCH 041/177] Updated on 2026-08-14 --- app/build.gradle | 6 +++--- dependencies.gradle | 8 +++++--- domain/build.gradle | 6 +++--- network/build.gradle | 2 +- 4 files changed, 12 insertions(+), 10 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index abf8cda691..c73412c88f 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -93,10 +93,10 @@ dependencies { implementation 'com.google.android.play:core-ktx:1.8.1' coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5' - implementation 'com.tangem:blockchain:develop-93' + implementation "com.tangem:blockchain:${versions.tamgem_blockchain_sdk}" // implementation 'com.tangem:blockchain:0.0.1' - implementation 'com.tangem.tangem-sdk-kotlin:core:develop-154' - implementation 'com.tangem.tangem-sdk-kotlin:android:develop-154' + implementation "com.tangem.tangem-sdk-kotlin:core:${versions.tamgem_card_sdk}" + implementation "com.tangem.tangem-sdk-kotlin:android:${versions.tamgem_card_sdk}" // WebView implementation "androidx.browser:browser:1.3.0" diff --git a/dependencies.gradle b/dependencies.gradle index d463106208..45200c5dcf 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -1,10 +1,12 @@ ext.versions = [ - kotlin : '1.6.10', - build_gradle: '7.1.3', + kotlin : '1.6.10', + build_gradle : '7.1.3', + tamgem_card_sdk : 'develop-154', + tamgem_blockchain_sdk: 'develop-93', ] ext.environmentConfig = [ - environment: "ENVIRONMENT", + environment : "ENVIRONMENT", testActionEnabled: "TEST_ACTION_ENABLED", logEnabled : "LOG_ENABLED", ] \ No newline at end of file diff --git a/domain/build.gradle b/domain/build.gradle index 5a54411b94..5e9fc9c665 100644 --- a/domain/build.gradle +++ b/domain/build.gradle @@ -59,10 +59,10 @@ dependencies { implementation implementation(project(path: ':network')) implementation implementation(project(path: ':common')) - implementation 'com.tangem:blockchain:develop-93' + implementation "com.tangem:blockchain:${versions.tamgem_blockchain_sdk}" // implementation 'com.tangem:blockchain:0.0.1' - implementation 'com.tangem.tangem-sdk-kotlin:core:develop-154' - implementation 'com.tangem.tangem-sdk-kotlin:android:develop-154' + implementation "com.tangem.tangem-sdk-kotlin:core:${versions.tamgem_card_sdk}" + implementation "com.tangem.tangem-sdk-kotlin:android:${versions.tamgem_card_sdk}" // Kotlin coroutines implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.2' diff --git a/network/build.gradle b/network/build.gradle index b90ff59980..dce3040c09 100644 --- a/network/build.gradle +++ b/network/build.gradle @@ -12,7 +12,7 @@ dependencies { implementation implementation(project(path: ':common')) // Tangem sdk's - implementation 'com.tangem.tangem-sdk-kotlin:core:develop-142' + implementation "com.tangem.tangem-sdk-kotlin:core:${versions.tamgem_card_sdk}" // Kotlin coroutines implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.2' From 320f068f00f3604f235595b678ea772eda0916fd Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 5 Jul 2022 15:56:26 +0300 Subject: [PATCH 042/177] Updated on 2026-08-14 --- app/build.gradle | 1 - domain/build.gradle | 1 - 2 files changed, 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index c73412c88f..791cb96330 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -94,7 +94,6 @@ dependencies { coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.5' implementation "com.tangem:blockchain:${versions.tamgem_blockchain_sdk}" -// implementation 'com.tangem:blockchain:0.0.1' implementation "com.tangem.tangem-sdk-kotlin:core:${versions.tamgem_card_sdk}" implementation "com.tangem.tangem-sdk-kotlin:android:${versions.tamgem_card_sdk}" diff --git a/domain/build.gradle b/domain/build.gradle index 5e9fc9c665..d7a8832fd4 100644 --- a/domain/build.gradle +++ b/domain/build.gradle @@ -60,7 +60,6 @@ dependencies { implementation implementation(project(path: ':common')) implementation "com.tangem:blockchain:${versions.tamgem_blockchain_sdk}" -// implementation 'com.tangem:blockchain:0.0.1' implementation "com.tangem.tangem-sdk-kotlin:core:${versions.tamgem_card_sdk}" implementation "com.tangem.tangem-sdk-kotlin:android:${versions.tamgem_card_sdk}" From 5fb149c018ddac6f7913146cf9a5fb965e2e9293 Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 6 Jul 2022 00:29:38 +0300 Subject: [PATCH 043/177] Updated on 2026-08-14 --- .../main/java/com/tangem/tap/TapApplication.kt | 17 ++++++++++++++++- .../tap/features/feedback/FeedbackManager.kt | 18 ++++++++++++------ dependencies.gradle | 2 +- 3 files changed, 29 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/TapApplication.kt b/app/src/main/java/com/tangem/tap/TapApplication.kt index 2e6c7b534b..c84981fa22 100644 --- a/app/src/main/java/com/tangem/tap/TapApplication.kt +++ b/app/src/main/java/com/tangem/tap/TapApplication.kt @@ -8,6 +8,7 @@ import com.google.firebase.ktx.Firebase import com.google.firebase.remoteconfig.ktx.remoteConfig import com.google.firebase.remoteconfig.ktx.remoteConfigSettings import com.tangem.Log +import com.tangem.LogFormat import com.tangem.blockchain.network.BlockchainSdkRetrofitBuilder import com.tangem.domain.DomainLayer import com.tangem.network.common.MoshiConverter @@ -97,7 +98,21 @@ class TapApplication : Application(), ImageLoaderFactory { val infoHolder = AdditionalEmailInfo() infoHolder.setAppVersion(this) - val logWriter = TangemLogCollector() + 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, + ) + val logWriter = TangemLogCollector( + levels = logLevels, + messageFormatter = LogFormat.StairsFormatter() + ) Log.addLogger(logWriter) store.dispatch(GlobalAction.SetFeedbackManager(FeedbackManager(infoHolder, logWriter))) diff --git a/app/src/main/java/com/tangem/tap/features/feedback/FeedbackManager.kt b/app/src/main/java/com/tangem/tap/features/feedback/FeedbackManager.kt index ad5a091c99..d0597bc373 100644 --- a/app/src/main/java/com/tangem/tap/features/feedback/FeedbackManager.kt +++ b/app/src/main/java/com/tangem/tap/features/feedback/FeedbackManager.kt @@ -5,6 +5,7 @@ import android.content.Context import android.content.pm.PackageManager import android.os.Build import com.tangem.Log +import com.tangem.LogFormat import com.tangem.TangemSdkLogger import com.tangem.blockchain.common.* import com.tangem.domain.common.ScanResponse @@ -81,23 +82,28 @@ class FeedbackManager( } } -class TangemLogCollector : TangemSdkLogger { +class TangemLogCollector( + private val levels: List, + private val messageFormatter: LogFormat +) : TangemSdkLogger { + private val dateFormatter = SimpleDateFormat("HH:mm:ss.SSS") private val logs = mutableListOf() private val mutex = Object() override fun log(message: () -> String, level: Log.Level) { - val time = dateFormatter.format(Date()) + if (!levels.contains(level)) return + synchronized(mutex) { - logs.add("$time: ${message()}\n") + val formattedMessage = messageFormatter.format(message, level) + val logMessage = "${dateFormatter.format(Date())}: $formattedMessage" + logs.add("$logMessage\n") } } fun getLogs(): List = synchronized(mutex) { logs.toList() } - fun clearLogs() { - synchronized(mutex) { logs.clear() } - } + fun clearLogs() = synchronized(mutex) { logs.clear() } } class AdditionalEmailInfo { diff --git a/dependencies.gradle b/dependencies.gradle index 45200c5dcf..ac02ffad75 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -1,7 +1,7 @@ ext.versions = [ kotlin : '1.6.10', build_gradle : '7.1.3', - tamgem_card_sdk : 'develop-154', + tamgem_card_sdk : 'develop-157', tamgem_blockchain_sdk: 'develop-93', ] From a0e31b3412a84744be8420edcfa158963984ae85 Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 6 Jul 2022 18:07:27 +0400 Subject: [PATCH 044/177] Updated on 2026-08-14 --- .../com/tangem/tap/common/DialogManager.kt | 14 ++ .../tap/common/extensions/Navigation.kt | 4 + .../redux/navigation/NavigationState.kt | 2 +- .../features/details/redux/DetailsAction.kt | 8 + .../details/redux/DetailsMiddleware.kt | 58 ++++++- .../features/details/redux/DetailsReducer.kt | 19 +- .../features/details/redux/DetailsState.kt | 19 +- .../features/details/ui/DetailsFragment.kt | 12 +- .../ChangeAccessCodeFragment.kt | 26 +++ .../SecurityAndPrivacyFragment.kt | 86 +++++++++ app/src/main/res/layout/fragment_details.xml | 41 ++--- .../res/layout/fragment_details_security.xml | 2 +- .../fragment_details_security_privacy.xml | 164 ++++++++++++++++++ app/src/main/res/values-de/strings_final.xml | 9 + app/src/main/res/values-fr/strings_final.xml | 9 + app/src/main/res/values-it/strings_final.xml | 9 + app/src/main/res/values-ru/strings_final.xml | 9 + app/src/main/res/values/strings_final.xml | 10 ++ 18 files changed, 448 insertions(+), 53 deletions(-) create mode 100644 app/src/main/java/com/tangem/tap/features/details/ui/securityprivacy/ChangeAccessCodeFragment.kt create mode 100644 app/src/main/java/com/tangem/tap/features/details/ui/securityprivacy/SecurityAndPrivacyFragment.kt create mode 100644 app/src/main/res/layout/fragment_details_security_privacy.xml diff --git a/app/src/main/java/com/tangem/tap/common/DialogManager.kt b/app/src/main/java/com/tangem/tap/common/DialogManager.kt index dd24af74c5..afe0c1863e 100644 --- a/app/src/main/java/com/tangem/tap/common/DialogManager.kt +++ b/app/src/main/java/com/tangem/tap/common/DialogManager.kt @@ -6,6 +6,8 @@ import com.tangem.tap.common.redux.AppDialog import com.tangem.tap.common.redux.global.GlobalState import com.tangem.tap.common.ui.SimpleAlertDialog import com.tangem.tap.common.ui.SimpleCancelableAlertDialog +import com.tangem.tap.features.details.redux.DetailsDialog +import com.tangem.tap.features.details.redux.PrivacySetting import com.tangem.tap.features.details.redux.walletconnect.WalletConnectDialog import com.tangem.tap.features.details.ui.walletconnect.dialogs.* import com.tangem.tap.features.onboarding.AddressInfoBottomSheetDialog @@ -131,6 +133,18 @@ class DialogManager : StoreSubscriber { primaryButtonRes = state.dialog.primaryButtonRes, primaryButtonAction = state.dialog.onOk ) + is DetailsDialog.ConfirmDisablingSaving -> { + val messageRes = when (state.dialog.setting) { + PrivacySetting.SAVE_CARDS -> R.string.security_and_privacy_save_card_disable_warning + PrivacySetting.SAVE_ACCESS_CODE -> R.string.security_and_privacy_save_password_disable_warning + } + SimpleCancelableAlertDialog.create( + titleRes = R.string.common_warning, + messageRes = messageRes, + context = context, + primaryButtonAction = state.dialog.onOk + ) + } else -> null } dialog?.show() diff --git a/app/src/main/java/com/tangem/tap/common/extensions/Navigation.kt b/app/src/main/java/com/tangem/tap/common/extensions/Navigation.kt index 89d9327ed6..26ec96a604 100644 --- a/app/src/main/java/com/tangem/tap/common/extensions/Navigation.kt +++ b/app/src/main/java/com/tangem/tap/common/extensions/Navigation.kt @@ -10,6 +10,8 @@ import com.tangem.tap.common.redux.navigation.FragmentShareTransition import com.tangem.tap.features.details.ui.DetailsConfirmFragment import com.tangem.tap.features.details.ui.DetailsFragment import com.tangem.tap.features.details.ui.DetailsSecurityFragment +import com.tangem.tap.features.details.ui.securityprivacy.ChangeAccessCodeFragment +import com.tangem.tap.features.details.ui.securityprivacy.SecurityAndPrivacyFragment import com.tangem.tap.features.details.ui.walletconnect.QrScanFragment import com.tangem.tap.features.details.ui.walletconnect.WalletConnectSessionsFragment import com.tangem.tap.features.disclaimer.ui.DisclaimerFragment @@ -90,6 +92,8 @@ private fun fragmentFactory(screen: AppScreen): Fragment { AppScreen.Details -> DetailsFragment() AppScreen.DetailsConfirm -> DetailsConfirmFragment() AppScreen.DetailsSecurity -> DetailsSecurityFragment() + AppScreen.SecurityAndPrivacy -> SecurityAndPrivacyFragment() + AppScreen.ChangeAccessCode -> ChangeAccessCodeFragment() AppScreen.Disclaimer -> DisclaimerFragment() AppScreen.AddTokens -> AddTokensFragment() AppScreen.AddCustomToken -> AddCustomTokenFragment() diff --git a/app/src/main/java/com/tangem/tap/common/redux/navigation/NavigationState.kt b/app/src/main/java/com/tangem/tap/common/redux/navigation/NavigationState.kt index 1fc6832148..76104a269a 100644 --- a/app/src/main/java/com/tangem/tap/common/redux/navigation/NavigationState.kt +++ b/app/src/main/java/com/tangem/tap/common/redux/navigation/NavigationState.kt @@ -16,7 +16,7 @@ enum class AppScreen { OnboardingNote, OnboardingWallet, OnboardingTwins, OnboardingOther, Wallet, WalletDetails, Send, - Details, DetailsConfirm, DetailsSecurity, + Details, DetailsConfirm, DetailsSecurity, SecurityAndPrivacy, ChangeAccessCode, AddTokens, AddCustomToken, WalletConnectSessions, QrScan diff --git a/app/src/main/java/com/tangem/tap/features/details/redux/DetailsAction.kt b/app/src/main/java/com/tangem/tap/features/details/redux/DetailsAction.kt index c37a625c54..44c78b5f4f 100644 --- a/app/src/main/java/com/tangem/tap/features/details/redux/DetailsAction.kt +++ b/app/src/main/java/com/tangem/tap/features/details/redux/DetailsAction.kt @@ -59,5 +59,13 @@ sealed class DetailsAction : Action { } } + sealed class ManagePrivacy : DetailsAction() { + data class SwitchPrivacySetting(val allow: Boolean, val setting: PrivacySetting) : + ManagePrivacy() + + data class ConfirmSwitchingSetting(val allow: Boolean, val setting: PrivacySetting) : + ManagePrivacy() + } + data class ChangeAppCurrency(val fiatCurrency: FiatCurrency) : DetailsAction() } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/details/redux/DetailsMiddleware.kt b/app/src/main/java/com/tangem/tap/features/details/redux/DetailsMiddleware.kt index efed01f9c3..93511b1bf6 100644 --- a/app/src/main/java/com/tangem/tap/features/details/redux/DetailsMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/details/redux/DetailsMiddleware.kt @@ -6,6 +6,7 @@ import com.tangem.common.core.TangemSdkError import com.tangem.operations.pins.CheckUserCodesResponse import com.tangem.tap.common.analytics.Analytics import com.tangem.tap.common.analytics.AnalyticsParam +import com.tangem.tap.common.extensions.dispatchDialogShow import com.tangem.tap.common.extensions.dispatchNotification import com.tangem.tap.common.extensions.dispatchOnMain import com.tangem.tap.common.redux.AppState @@ -28,24 +29,28 @@ import org.rekotlin.Middleware class DetailsMiddleware { private val eraseWalletMiddleware = EraseWalletMiddleware() private val manageSecurityMiddleware = ManageSecurityMiddleware() + private val managePrivacyMiddleware = ManagePrivacyMiddleware() val detailsMiddleware: Middleware = { _, _ -> { next -> { action -> when (action) { is DetailsAction.ResetToFactory -> eraseWalletMiddleware.handle(action) is DetailsAction.ManageSecurity -> manageSecurityMiddleware.handle(action) + is DetailsAction.ManagePrivacy -> managePrivacyMiddleware.handle(action) is DetailsAction.ShowDisclaimer -> { store.dispatch(DisclaimerAction.ShowAcceptedDisclaimer) store.dispatch(NavigationAction.NavigateTo(AppScreen.Disclaimer)) } is DetailsAction.ReCreateTwinsWallet -> { - val wallet = store.state.walletState.walletManagers.map { it.wallet }.firstOrNull() + val wallet = + store.state.walletState.walletManagers.map { it.wallet }.firstOrNull() if (wallet == null) { store.dispatch(TwinCardsAction.SetMode(CreateTwinWalletMode.RecreateWallet)) store.dispatch(NavigationAction.NavigateTo(AppScreen.OnboardingTwins)) } else { if (wallet.hasSendableAmountsOrPendingTransactions()) { - val walletIsNotEmpty = store.state.globalState.resources.strings.walletIsNotEmpty + val walletIsNotEmpty = + store.state.globalState.resources.strings.walletIsNotEmpty store.dispatchNotification(walletIsNotEmpty) } else { store.dispatch(TwinCardsAction.SetMode(CreateTwinWalletMode.RecreateWallet)) @@ -56,7 +61,12 @@ class DetailsMiddleware { is DetailsAction.CreateBackup -> { store.state.detailsState.scanResponse?.let { store.dispatch(NavigationAction.NavigateTo(AppScreen.OnboardingWallet)) - store.dispatch(GlobalAction.Onboarding.Start(it, fromHomeScreen = false)) + store.dispatch( + GlobalAction.Onboarding.Start( + it, + fromHomeScreen = false + ) + ) } } } @@ -121,13 +131,22 @@ class DetailsMiddleware { val simulatedResponse = CheckUserCodesResponse( action.card.isAccessCodeSet, action.card.isPasscodeSet ?: false ) - store.dispatch(DetailsAction.ManageSecurity.SetCurrentOption(simulatedResponse)) + store.dispatch( + DetailsAction.ManageSecurity.SetCurrentOption( + simulatedResponse + ) + ) store.dispatch(DetailsAction.ManageSecurity.OpenSecurity) } else { scope.launch { - when (val response = tangemSdkManager.checkUserCodes(action.card.cardId)) { + when (val response = + tangemSdkManager.checkUserCodes(action.card.cardId)) { is CompletionResult.Success -> { - store.dispatchOnMain(DetailsAction.ManageSecurity.SetCurrentOption(response.data)) + store.dispatchOnMain( + DetailsAction.ManageSecurity.SetCurrentOption( + response.data + ) + ) store.dispatchOnMain(DetailsAction.ManageSecurity.OpenSecurity) } is CompletionResult.Failure -> { @@ -152,7 +171,8 @@ class DetailsMiddleware { } is DetailsAction.ManageSecurity.SaveChanges -> { val cardId = store.state.detailsState.scanResponse?.card?.cardId - val selectedOption = store.state.detailsState.securityScreenState?.selectedOption + val selectedOption = + store.state.detailsState.securityScreenState?.selectedOption scope.launch { val result = when (selectedOption) { SecurityOption.LongTap -> tangemSdkManager.setLongTap(cardId) @@ -196,4 +216,26 @@ class DetailsMiddleware { } } } -} \ No newline at end of file + + class ManagePrivacyMiddleware { + fun handle(action: DetailsAction.ManagePrivacy) { + when (action) { + is DetailsAction.ManagePrivacy.ConfirmSwitchingSetting -> { +// TODO() + } + is DetailsAction.ManagePrivacy.SwitchPrivacySetting -> { + if (action.allow) { + store.dispatch( + DetailsAction.ManagePrivacy.ConfirmSwitchingSetting( + action.allow, + action.setting + ) + ) + } else { + store.dispatchDialogShow(DetailsDialog.ConfirmDisablingSaving(action.setting)) + } + } + } + } + } +} 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 952e2bb317..963080bc82 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 @@ -9,8 +9,8 @@ import com.tangem.tap.domain.extensions.isWalletDataSupported import com.tangem.tap.domain.extensions.signedHashesCount import com.tangem.tap.features.wallet.models.hasSendableAmountsOrPendingTransactions import com.tangem.tap.store -import java.util.EnumSet import org.rekotlin.Action +import java.util.* class DetailsReducer { companion object { @@ -32,6 +32,9 @@ private fun internalReduce(action: Action, state: AppState): DetailsState { is DetailsAction.ManageSecurity -> { handleSecurityAction(action, detailsState) } + is DetailsAction.ManagePrivacy -> { + handlePrivacyAction(action, detailsState) + } is DetailsAction.ChangeAppCurrency -> detailsState.copy(appCurrency = action.fiatCurrency) @@ -154,6 +157,20 @@ private fun handleSecurityAction( } } +private fun handlePrivacyAction( + action: DetailsAction.ManagePrivacy, state: DetailsState, +): DetailsState { + return when (action) { + is DetailsAction.ManagePrivacy.ConfirmSwitchingSetting -> { + when (action.setting) { + PrivacySetting.SAVE_CARDS -> state.copy(saveCards = action.allow) + PrivacySetting.SAVE_ACCESS_CODE -> state.copy(savePasswords = action.allow) + } + } + is DetailsAction.ManagePrivacy.SwitchPrivacySetting -> state + } +} + private fun prepareAllowedSecurityOptions( card: Card?, currentSecurityOption: SecurityOption?, ): EnumSet { diff --git a/app/src/main/java/com/tangem/tap/features/details/redux/DetailsState.kt b/app/src/main/java/com/tangem/tap/features/details/redux/DetailsState.kt index ee6fd2bb7e..00b73ae10b 100644 --- a/app/src/main/java/com/tangem/tap/features/details/redux/DetailsState.kt +++ b/app/src/main/java/com/tangem/tap/features/details/redux/DetailsState.kt @@ -5,6 +5,7 @@ import com.tangem.blockchain.common.Wallet import com.tangem.domain.common.ScanResponse import com.tangem.tap.common.entities.Button import com.tangem.tap.common.entities.FiatCurrency +import com.tangem.tap.common.redux.StateDialog import com.tangem.tap.features.onboarding.products.twins.redux.TwinCardsState import com.tangem.tap.store import org.rekotlin.StateType @@ -20,7 +21,9 @@ data class DetailsState( val securityScreenState: SecurityScreenState? = null, val cardTermsOfUseUrl: Uri? = null, val createBackupAllowed: Boolean = false, - val appCurrency: FiatCurrency = FiatCurrency.Default + val appCurrency: FiatCurrency = FiatCurrency.Default, + val saveCards: Boolean = true, + val savePasswords: Boolean = true ) : StateType { // if you do not delegate - the application crashes on startup, @@ -48,4 +51,16 @@ data class SecurityScreenState( val buttonProceed: Button = Button(true), ) -enum class SecurityOption { LongTap, PassCode, AccessCode } \ No newline at end of file +enum class SecurityOption { LongTap, PassCode, AccessCode } + + +sealed interface DetailsDialog : StateDialog { + data class ConfirmDisablingSaving(val setting: PrivacySetting) : DetailsDialog { + val onOk: () -> Unit = + { store.dispatch(DetailsAction.ManagePrivacy.ConfirmSwitchingSetting(false, setting)) } + } +} + +enum class PrivacySetting { + SAVE_CARDS, SAVE_ACCESS_CODE +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/DetailsFragment.kt b/app/src/main/java/com/tangem/tap/features/details/ui/DetailsFragment.kt index 2789b0069d..4e751b5ce1 100644 --- a/app/src/main/java/com/tangem/tap/features/details/ui/DetailsFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/details/ui/DetailsFragment.kt @@ -15,7 +15,6 @@ import com.tangem.tap.common.redux.navigation.NavigationAction import com.tangem.tap.domain.extensions.isMultiwalletAllowed import com.tangem.tap.features.details.redux.DetailsAction import com.tangem.tap.features.details.redux.DetailsState -import com.tangem.tap.features.details.redux.SecurityOption import com.tangem.tap.features.feedback.FeedbackEmail import com.tangem.tap.features.wallet.redux.WalletAction import com.tangem.tap.store @@ -132,17 +131,10 @@ class DetailsFragment : Fragment(R.layout.fragment_details), StoreSubscriber R.string.details_manage_security_long_tap - SecurityOption.PassCode -> R.string.details_manage_security_passcode - SecurityOption.AccessCode -> R.string.details_manage_security_access_code - null -> null - } - currentSecurity?.let { tvSecurity.text = getString(it) } } } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/securityprivacy/ChangeAccessCodeFragment.kt b/app/src/main/java/com/tangem/tap/features/details/ui/securityprivacy/ChangeAccessCodeFragment.kt new file mode 100644 index 0000000000..2149080c0f --- /dev/null +++ b/app/src/main/java/com/tangem/tap/features/details/ui/securityprivacy/ChangeAccessCodeFragment.kt @@ -0,0 +1,26 @@ +package com.tangem.tap.features.details.ui.securityprivacy + +import com.tangem.tap.features.BaseStoreFragment +import com.tangem.tap.features.details.redux.DetailsState +import com.tangem.tap.store +import com.tangem.wallet.R +import org.rekotlin.StoreSubscriber + +class ChangeAccessCodeFragment : BaseStoreFragment(R.layout.view_compose_fragment), + StoreSubscriber { + + + override fun newState(state: DetailsState) { + + } + + override fun subscribeToStore() { + store.subscribe(this) { state -> + state.skipRepeats { oldState, newState -> + oldState.detailsState == newState.detailsState + }.select { it.detailsState } + } + storeSubscribersList.add(this) + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/securityprivacy/SecurityAndPrivacyFragment.kt b/app/src/main/java/com/tangem/tap/features/details/ui/securityprivacy/SecurityAndPrivacyFragment.kt new file mode 100644 index 0000000000..d859f6cfff --- /dev/null +++ b/app/src/main/java/com/tangem/tap/features/details/ui/securityprivacy/SecurityAndPrivacyFragment.kt @@ -0,0 +1,86 @@ +package com.tangem.tap.features.details.ui.securityprivacy + +import android.os.Bundle +import android.view.View +import by.kirich1409.viewbindingdelegate.viewBinding +import com.tangem.tap.common.redux.navigation.AppScreen +import com.tangem.tap.common.redux.navigation.NavigationAction +import com.tangem.tap.features.BaseStoreFragment +import com.tangem.tap.features.details.redux.DetailsAction +import com.tangem.tap.features.details.redux.DetailsState +import com.tangem.tap.features.details.redux.PrivacySetting +import com.tangem.tap.features.details.redux.SecurityOption +import com.tangem.tap.store +import com.tangem.wallet.R +import com.tangem.wallet.databinding.FragmentDetailsSecurityPrivacyBinding +import org.rekotlin.StoreSubscriber + +class SecurityAndPrivacyFragment : BaseStoreFragment(R.layout.fragment_details_security_privacy), + StoreSubscriber { + + private val binding: FragmentDetailsSecurityPrivacyBinding + by viewBinding(FragmentDetailsSecurityPrivacyBinding::bind) + + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + with(binding) { + tvAccessCode.setOnClickListener { + store.dispatch(NavigationAction.NavigateTo(AppScreen.ChangeAccessCode)) + } + + switchSaveCards.setOnCheckedChangeListener { _, isChecked -> + store.dispatch( + DetailsAction.ManagePrivacy.SwitchPrivacySetting( + isChecked, + PrivacySetting.SAVE_CARDS + ) + ) + } + + switchSavePasswords.setOnCheckedChangeListener { _, isChecked -> + store.dispatch( + DetailsAction.ManagePrivacy.SwitchPrivacySetting( + isChecked, + PrivacySetting.SAVE_ACCESS_CODE + ) + ) + } + } + } + + override fun newState(state: DetailsState) { + with(binding) { + llAccessManagement.setOnClickListener { + store.dispatch( + DetailsAction.ManageSecurity.CheckCurrentSecurityOption( + state.scanResponse!!.card + ) + ) + } + + val currentSecurity = when (state.securityScreenState?.currentOption) { + SecurityOption.LongTap -> R.string.details_manage_security_long_tap + SecurityOption.PassCode -> R.string.details_manage_security_passcode + SecurityOption.AccessCode -> R.string.details_manage_security_access_code + null -> null + } + currentSecurity?.let { tvAccessManagement.text = getString(it) } + + switchSaveCards.isChecked = state.saveCards + switchSavePasswords.isChecked = state.savePasswords + } + + } + + override fun subscribeToStore() { + store.subscribe(this) { state -> + state.skipRepeats { oldState, newState -> + oldState.detailsState == newState.detailsState + }.select { it.detailsState } + } + storeSubscribersList.add(this) + } + +} \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_details.xml b/app/src/main/res/layout/fragment_details.xml index 58ac038846..2a09aecc77 100644 --- a/app/src/main/res/layout/fragment_details.xml +++ b/app/src/main/res/layout/fragment_details.xml @@ -133,39 +133,20 @@ app:layout_constraintTop_toBottomOf="@id/tv_issuer" tools:text="48 hashes" /> - - - - - - + android:text="@string/security_and_privacy_title" + android:textColor="@color/darkGray6" + android:textSize="16sp" + app:drawableEndCompat="@drawable/ic_angle_bracket_right" + app:drawableTint="@color/darkGray1" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/tv_signed_hashes_title"/> + app:layout_constraintTop_toBottomOf="@id/tv_security_and_privacy" /> + app:title="@string/security_and_privacy_access_method_title" /> diff --git a/app/src/main/res/layout/fragment_details_security_privacy.xml b/app/src/main/res/layout/fragment_details_security_privacy.xml new file mode 100644 index 0000000000..9233e2a675 --- /dev/null +++ b/app/src/main/res/layout/fragment_details_security_privacy.xml @@ -0,0 +1,164 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-de/strings_final.xml b/app/src/main/res/values-de/strings_final.xml index 4eae54e057..97ba0b8f36 100644 --- a/app/src/main/res/values-de/strings_final.xml +++ b/app/src/main/res/values-de/strings_final.xml @@ -60,4 +60,13 @@ %s network not found. Please, add it first and try again. %s network + + Security & Privacy + Security + Privacy + Change access code + Change access method + Change Access Method + Save cards + Save passwords \ No newline at end of file diff --git a/app/src/main/res/values-fr/strings_final.xml b/app/src/main/res/values-fr/strings_final.xml index 158ab46c65..5f6407ce70 100644 --- a/app/src/main/res/values-fr/strings_final.xml +++ b/app/src/main/res/values-fr/strings_final.xml @@ -60,4 +60,13 @@ %s network not found. Please, add it first and try again. %s network + + Security & Privacy + Security + Privacy + Change access code + Change access method + Change Access Method + Save cards + Save passwords \ No newline at end of file diff --git a/app/src/main/res/values-it/strings_final.xml b/app/src/main/res/values-it/strings_final.xml index 158ab46c65..5f6407ce70 100644 --- a/app/src/main/res/values-it/strings_final.xml +++ b/app/src/main/res/values-it/strings_final.xml @@ -60,4 +60,13 @@ %s network not found. Please, add it first and try again. %s network + + Security & Privacy + Security + Privacy + Change access code + Change access method + Change Access Method + Save cards + Save passwords \ No newline at end of file diff --git a/app/src/main/res/values-ru/strings_final.xml b/app/src/main/res/values-ru/strings_final.xml index 0370067579..051e40e9cc 100644 --- a/app/src/main/res/values-ru/strings_final.xml +++ b/app/src/main/res/values-ru/strings_final.xml @@ -68,4 +68,13 @@ Бэкап кошелька не был произведен Чтобы защитить свои активы, мы советуем вам выполнить эту процедуру + + Безопасность и приватность + Безопасность + Приватность + Изменить код доступа + Изменить защиту доступа + Изменить защиту доступа + Сохранять карты + Сохранять пароли diff --git a/app/src/main/res/values/strings_final.xml b/app/src/main/res/values/strings_final.xml index 25bf984bbe..7bffbf8513 100644 --- a/app/src/main/res/values/strings_final.xml +++ b/app/src/main/res/values/strings_final.xml @@ -70,4 +70,14 @@ To protect your assets, we advise you to carry out this procedure Remove token + Security & Privacy + Security + Privacy + Change access code + Change access method + Change Access Method + Save cards + Save passwords + При отключении данной опции все сохраненные карты и пароли будут сброшены, все данные удалены. Для входа в приложение понадобится прикладывать карту. + Все сохраненные пароли от карт будут удалены. Для проведения операций с картой вам необходимо будет вводить пароль. From 9ead316ef7d7c7b1ad330c9986525b6464bbb6da Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 6 Jul 2022 18:26:10 +0400 Subject: [PATCH 045/177] Updated on 2026-08-14 --- .../ChangeAccessCodeFragment.kt | 25 +++++++ .../SecurityAndPrivacyFragment.kt | 72 ++++++++++++------- .../fragment_details_security_privacy.xml | 19 ++--- 3 files changed, 78 insertions(+), 38 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/securityprivacy/ChangeAccessCodeFragment.kt b/app/src/main/java/com/tangem/tap/features/details/ui/securityprivacy/ChangeAccessCodeFragment.kt index 2149080c0f..4cc18df6f0 100644 --- a/app/src/main/java/com/tangem/tap/features/details/ui/securityprivacy/ChangeAccessCodeFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/details/ui/securityprivacy/ChangeAccessCodeFragment.kt @@ -1,14 +1,39 @@ package com.tangem.tap.features.details.ui.securityprivacy +import android.os.Bundle +import android.view.View +import androidx.activity.OnBackPressedCallback +import by.kirich1409.viewbindingdelegate.viewBinding +import com.tangem.tap.common.redux.navigation.NavigationAction import com.tangem.tap.features.BaseStoreFragment import com.tangem.tap.features.details.redux.DetailsState import com.tangem.tap.store import com.tangem.wallet.R +import com.tangem.wallet.databinding.ViewComposeFragmentBinding import org.rekotlin.StoreSubscriber class ChangeAccessCodeFragment : BaseStoreFragment(R.layout.view_compose_fragment), StoreSubscriber { + private val binding: ViewComposeFragmentBinding + by viewBinding(ViewComposeFragmentBinding::bind) + + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + activity?.onBackPressedDispatcher?.addCallback(this, object : OnBackPressedCallback(true) { + override fun handleOnBackPressed() { + store.dispatch(NavigationAction.PopBackTo()) + } + }) + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + binding.toolbar.setNavigationOnClickListener { + store.dispatch(NavigationAction.PopBackTo()) + } + } override fun newState(state: DetailsState) { diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/securityprivacy/SecurityAndPrivacyFragment.kt b/app/src/main/java/com/tangem/tap/features/details/ui/securityprivacy/SecurityAndPrivacyFragment.kt index d859f6cfff..04c1b9cc43 100644 --- a/app/src/main/java/com/tangem/tap/features/details/ui/securityprivacy/SecurityAndPrivacyFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/details/ui/securityprivacy/SecurityAndPrivacyFragment.kt @@ -2,7 +2,9 @@ package com.tangem.tap.features.details.ui.securityprivacy import android.os.Bundle import android.view.View +import androidx.activity.OnBackPressedCallback import by.kirich1409.viewbindingdelegate.viewBinding +import com.tangem.tap.common.extensions.show import com.tangem.tap.common.redux.navigation.AppScreen import com.tangem.tap.common.redux.navigation.NavigationAction import com.tangem.tap.features.BaseStoreFragment @@ -22,42 +24,62 @@ class SecurityAndPrivacyFragment : BaseStoreFragment(R.layout.fragment_details_s by viewBinding(FragmentDetailsSecurityPrivacyBinding::bind) + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + activity?.onBackPressedDispatcher?.addCallback(this, object : OnBackPressedCallback(true) { + override fun handleOnBackPressed() { + store.dispatch(NavigationAction.PopBackTo()) + } + }) + } + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - with(binding) { - tvAccessCode.setOnClickListener { - store.dispatch(NavigationAction.NavigateTo(AppScreen.ChangeAccessCode)) - } + binding.toolbar.setNavigationOnClickListener { + store.dispatch(NavigationAction.PopBackTo()) + } + setListeners() - switchSaveCards.setOnCheckedChangeListener { _, isChecked -> - store.dispatch( - DetailsAction.ManagePrivacy.SwitchPrivacySetting( - isChecked, - PrivacySetting.SAVE_CARDS - ) - ) - } + } - switchSavePasswords.setOnCheckedChangeListener { _, isChecked -> - store.dispatch( - DetailsAction.ManagePrivacy.SwitchPrivacySetting( - isChecked, - PrivacySetting.SAVE_ACCESS_CODE - ) + private fun setListeners() = with(binding) { + tvAccessCode.setOnClickListener { + store.dispatch(NavigationAction.NavigateTo(AppScreen.ChangeAccessCode)) + } + + switchSaveCards.setOnCheckedChangeListener { _, isChecked -> + store.dispatch( + DetailsAction.ManagePrivacy.SwitchPrivacySetting( + allow = isChecked, + setting = PrivacySetting.SAVE_CARDS ) - } + ) + } + + switchSavePasswords.setOnCheckedChangeListener { _, isChecked -> + store.dispatch( + DetailsAction.ManagePrivacy.SwitchPrivacySetting( + allow = isChecked, + setting = PrivacySetting.SAVE_ACCESS_CODE + ) + ) } } override fun newState(state: DetailsState) { with(binding) { - llAccessManagement.setOnClickListener { - store.dispatch( - DetailsAction.ManageSecurity.CheckCurrentSecurityOption( - state.scanResponse!!.card + + val card = state.scanResponse?.card + llAccessManagement.show(card != null) + if (card != null) { + llAccessManagement.setOnClickListener { + store.dispatch( + DetailsAction.ManageSecurity.CheckCurrentSecurityOption( + card + ) ) - ) + } } val currentSecurity = when (state.securityScreenState?.currentOption) { @@ -70,6 +92,8 @@ class SecurityAndPrivacyFragment : BaseStoreFragment(R.layout.fragment_details_s switchSaveCards.isChecked = state.saveCards switchSavePasswords.isChecked = state.savePasswords + + tvAccessCode.show(state.scanResponse?.card?.isAccessCodeSet == true) } } diff --git a/app/src/main/res/layout/fragment_details_security_privacy.xml b/app/src/main/res/layout/fragment_details_security_privacy.xml index 9233e2a675..952aef80a8 100644 --- a/app/src/main/res/layout/fragment_details_security_privacy.xml +++ b/app/src/main/res/layout/fragment_details_security_privacy.xml @@ -64,10 +64,9 @@ Date: Tue, 12 Jul 2022 14:48:28 +0400 Subject: [PATCH 046/177] Updated on 2026-08-14 --- .../com/tangem/tap/common/DialogManager.kt | 7 ---- .../tap/features/wallet/redux/WalletState.kt | 40 +------------------ .../wallet/redux/models/WalletDialog.kt | 2 + .../CurrencyExchangeManager.kt | 2 +- .../exchangeServices/ExchangeService.kt | 2 +- .../mercuryo/MercuryoService.kt | 2 +- .../moonpay/MoonPayService.kt | 2 +- 7 files changed, 8 insertions(+), 49 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/common/DialogManager.kt b/app/src/main/java/com/tangem/tap/common/DialogManager.kt index 7b67bb6555..70f4ae2d61 100644 --- a/app/src/main/java/com/tangem/tap/common/DialogManager.kt +++ b/app/src/main/java/com/tangem/tap/common/DialogManager.kt @@ -18,13 +18,6 @@ import com.tangem.tap.features.onboarding.products.wallet.ui.dialogs.ConfirmDisc import com.tangem.tap.features.onboarding.products.wallet.ui.dialogs.UnfinishedBackupFoundDialog import com.tangem.tap.features.wallet.redux.models.WalletDialog import com.tangem.tap.features.wallet.ui.dialogs.* -import com.tangem.tap.features.wallet.redux.WalletDialog -import com.tangem.tap.features.wallet.ui.dialogs.AmountToSendBottomSheetDialog -import com.tangem.tap.features.wallet.ui.dialogs.ChooseTradeActionBottomSheetDialog -import com.tangem.tap.features.wallet.ui.dialogs.RussianCardholdersWarningBottomSheetDialog -import com.tangem.tap.features.wallet.ui.dialogs.ScanFailsDialog -import com.tangem.tap.features.wallet.ui.dialogs.SignedHashesWarningDialog -import com.tangem.tap.features.wallet.ui.dialogs.SimpleOkDialog import com.tangem.tap.features.wallet.ui.wallet.CurrencySelectionDialog import com.tangem.tap.store import com.tangem.wallet.R diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletState.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletState.kt index a1e0220339..ba70c84e05 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletState.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletState.kt @@ -1,55 +1,30 @@ package com.tangem.tap.features.wallet.redux import android.graphics.Bitmap -import com.tangem.blockchain.common.Amount import com.tangem.blockchain.common.Blockchain import com.tangem.blockchain.common.Token import com.tangem.blockchain.common.Wallet import com.tangem.blockchain.common.WalletManager -import com.tangem.blockchain.common.Amount -import com.tangem.blockchain.common.Blockchain -import com.tangem.blockchain.common.DerivationStyle -import com.tangem.blockchain.common.Token -import com.tangem.blockchain.common.Wallet -import com.tangem.blockchain.common.WalletManager import com.tangem.blockchain.common.address.AddressType import com.tangem.common.extensions.isZero import com.tangem.domain.common.extensions.canHandleToken import com.tangem.tap.common.entities.Button -import com.tangem.tap.common.entities.FiatCurrency import com.tangem.tap.common.extensions.toQrCode -import com.tangem.tap.common.redux.StateDialog import com.tangem.tap.common.redux.global.CryptoCurrencyName import com.tangem.tap.common.toggleWidget.WidgetState import com.tangem.tap.domain.configurable.warningMessage.WarningMessage import com.tangem.tap.domain.tokens.models.BlockchainNetwork import com.tangem.tap.features.onboarding.products.twins.redux.TwinCardsState -import com.tangem.tap.features.wallet.models.Currency -import com.tangem.tap.features.wallet.models.PendingTransaction -import com.tangem.tap.features.wallet.models.TotalBalance -import com.tangem.tap.features.wallet.models.WalletRent -import com.tangem.tap.features.wallet.models.WalletWarning -import com.tangem.tap.features.wallet.models.hasPendingTransactions -import com.tangem.tap.features.wallet.models.hasSendableAmounts -import com.tangem.tap.features.wallet.models.isSendableAmount -import com.tangem.tap.features.tokens.redux.TokenWithBlockchain -import com.tangem.tap.features.wallet.models.PendingTransaction -import com.tangem.tap.features.wallet.models.TotalBalance -import com.tangem.tap.features.wallet.models.WalletRent -import com.tangem.tap.features.wallet.models.WalletWarning -import com.tangem.tap.features.wallet.models.hasPendingTransactions -import com.tangem.tap.features.wallet.models.hasSendableAmounts -import com.tangem.tap.features.wallet.models.isSendableAmount +import com.tangem.tap.features.wallet.models.* import com.tangem.tap.features.wallet.redux.reducers.calculateTotalFiatAmount import com.tangem.tap.features.wallet.redux.reducers.findProgressState import com.tangem.tap.features.wallet.ui.BalanceStatus import com.tangem.tap.features.wallet.ui.BalanceWidgetData import com.tangem.tap.network.exchangeServices.CurrencyExchangeManager import com.tangem.tap.store +import org.rekotlin.StateType import java.math.BigDecimal -import org.rekotlin.StateType import kotlin.properties.ReadOnlyProperty -import org.rekotlin.StateType data class WalletState( val state: ProgressState = ProgressState.Done, @@ -333,17 +308,6 @@ data class WalletState( } } -sealed interface WalletDialog : StateDialog { - data class SelectAmountToSendDialog(val amounts: List?) : WalletDialog - object SignedHashesMultiWalletDialog : WalletDialog - object ChooseTradeActionDialog : WalletDialog - data class CurrencySelectionDialog( - val currenciesList: List, - val currentAppCurrency: FiatCurrency, - ) : WalletDialog - object RussianCardholdersWarningDialog : WalletDialog -} - enum class ProgressState : WidgetState { Loading, Refreshing, Done, Error } enum class ErrorType { NoInternetConnection } diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/models/WalletDialog.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/models/WalletDialog.kt index a5a54c93f6..68718acd45 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/models/WalletDialog.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/models/WalletDialog.kt @@ -30,4 +30,6 @@ sealed interface WalletDialog : StateDialog { val messageRes: Int = R.string.token_details_unable_hide_alert_message val titleRes: Int = R.string.token_details_unable_hide_alert_title } + + object RussianCardholdersWarningDialog : WalletDialog } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/network/exchangeServices/CurrencyExchangeManager.kt b/app/src/main/java/com/tangem/tap/network/exchangeServices/CurrencyExchangeManager.kt index 745ee01053..811c9c0545 100644 --- a/app/src/main/java/com/tangem/tap/network/exchangeServices/CurrencyExchangeManager.kt +++ b/app/src/main/java/com/tangem/tap/network/exchangeServices/CurrencyExchangeManager.kt @@ -11,7 +11,7 @@ import com.tangem.tap.common.extensions.safeUpdate import com.tangem.tap.common.redux.global.CryptoCurrencyName import com.tangem.tap.common.redux.global.GlobalAction import com.tangem.tap.domain.TangemSigner -import com.tangem.tap.features.wallet.redux.Currency +import com.tangem.tap.features.wallet.models.Currency import com.tangem.tap.store import com.tangem.tap.tangemSdk import java.math.BigDecimal diff --git a/app/src/main/java/com/tangem/tap/network/exchangeServices/ExchangeService.kt b/app/src/main/java/com/tangem/tap/network/exchangeServices/ExchangeService.kt index e08e007029..712fd2d5e0 100644 --- a/app/src/main/java/com/tangem/tap/network/exchangeServices/ExchangeService.kt +++ b/app/src/main/java/com/tangem/tap/network/exchangeServices/ExchangeService.kt @@ -1,7 +1,7 @@ package com.tangem.tap.network.exchangeServices import com.tangem.blockchain.common.Blockchain -import com.tangem.tap.features.wallet.redux.Currency +import com.tangem.tap.features.wallet.models.Currency interface ExchangeService { suspend fun update() 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 2d446490ec..97190aa9fd 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 @@ -8,7 +8,7 @@ import com.tangem.common.services.Result import com.tangem.common.services.performRequest import com.tangem.network.common.createRetrofitInstance import com.tangem.tap.common.redux.global.CryptoCurrencyName -import com.tangem.tap.features.wallet.redux.Currency +import com.tangem.tap.features.wallet.models.Currency import com.tangem.tap.network.exchangeServices.CurrencyExchangeManager import com.tangem.tap.network.exchangeServices.ExchangeService import com.tangem.tap.network.exchangeServices.ExchangeUrlBuilder 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 161cfc568a..fa96286e84 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 @@ -9,7 +9,7 @@ import com.tangem.domain.common.extensions.withIOContext import com.tangem.network.common.createRetrofitInstance import com.tangem.tap.common.extensions.urlEncode import com.tangem.tap.common.redux.global.CryptoCurrencyName -import com.tangem.tap.features.wallet.redux.Currency +import com.tangem.tap.features.wallet.models.Currency import com.tangem.tap.network.exchangeServices.CurrencyExchangeManager import com.tangem.tap.network.exchangeServices.ExchangeService import com.tangem.tap.network.exchangeServices.ExchangeUrlBuilder From 8c080fdb584d78e1b88bbc0a1826b97fb58420ae Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 7 Jul 2022 18:05:02 +0300 Subject: [PATCH 047/177] Updated on 2026-08-14 --- app/build.gradle | 7 +++++-- build.gradle | 1 + 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 791cb96330..3f12b8e345 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -144,8 +144,11 @@ dependencies { implementation("com.squareup.okhttp3:okhttp") implementation("com.squareup.okhttp3:logging-interceptor") -// -// //Crypto + // Support + implementation("com.zendesk:support:5.0.9") + implementation("com.zendesk:messaging:5.2.4") + + //Crypto implementation "com.madgag.spongycastle:core:1.58.0.0" // animation diff --git a/build.gradle b/build.gradle index 23b9e4d0bc..64f57c2248 100644 --- a/build.gradle +++ b/build.gradle @@ -22,6 +22,7 @@ allprojects { mavenLocal() maven { url "https://nexus.tangem-tech.com/repository/maven-releases/" } maven { url 'https://jitpack.io' } + maven { url 'https://zendesk.jfrog.io/zendesk/repo' } } } From ba350d0de0c98362f6bb1b708504adf0328c685f Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 7 Jul 2022 19:56:44 +0300 Subject: [PATCH 048/177] Updated on 2026-08-14 --- .../tangem/tap/ForegroundActivityObserver.kt | 46 +++++++++++++++++++ .../java/com/tangem/tap/TapApplication.kt | 4 ++ 2 files changed, 50 insertions(+) create mode 100644 app/src/main/java/com/tangem/tap/ForegroundActivityObserver.kt diff --git a/app/src/main/java/com/tangem/tap/ForegroundActivityObserver.kt b/app/src/main/java/com/tangem/tap/ForegroundActivityObserver.kt new file mode 100644 index 0000000000..806769df5f --- /dev/null +++ b/app/src/main/java/com/tangem/tap/ForegroundActivityObserver.kt @@ -0,0 +1,46 @@ +package com.tangem.tap + +import android.app.Activity +import android.app.Application.ActivityLifecycleCallbacks +import android.os.Bundle +import java.util.WeakHashMap +import kotlin.reflect.KClass + +class ForegroundActivityObserver { + private val activities = WeakHashMap, Activity>() + + val foregroundActivity: Activity? + get() = activities.entries + .filterNot { it.value.isDestroyed } + .firstOrNull() + ?.value + + val callbacks get() = Callbacks() + + inner class Callbacks : ActivityLifecycleCallbacks { + override fun onActivityResumed(activity: Activity) { + activities[activity::class] = activity + } + + override fun onActivityDestroyed(activity: Activity) { + activities.remove(activity::class) + } + + override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) { + } + override fun onActivityStarted(activity: Activity) { + } + override fun onActivityPaused(activity: Activity) { + } + override fun onActivityStopped(activity: Activity) { + } + override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) { + } + } +} + +fun ForegroundActivityObserver.withForegroundActivity( + block: (Activity) -> Unit +) { + foregroundActivity?.let { block(it) } +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/TapApplication.kt b/app/src/main/java/com/tangem/tap/TapApplication.kt index 2e6c7b534b..372fb621bf 100644 --- a/app/src/main/java/com/tangem/tap/TapApplication.kt +++ b/app/src/main/java/com/tangem/tap/TapApplication.kt @@ -40,6 +40,8 @@ val store = Store( ) val logConfig = LogConfig() +lateinit var foregroundActivityObserver: ForegroundActivityObserver + lateinit var preferencesStorage: PreferencesStorage lateinit var currenciesRepository: CurrenciesRepository lateinit var walletConnectRepository: WalletConnectRepository @@ -68,6 +70,8 @@ class TapApplication : Application(), ImageLoaderFactory { ) walletConnectRepository = WalletConnectRepository(this) + foregroundActivityObserver = ForegroundActivityObserver() + registerActivityLifecycleCallbacks(foregroundActivityObserver.callbacks) initFeedbackManager() loadConfigs() From 3f2e5700fb8b85431d6b6b34b101d6f7654026a3 Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 8 Jul 2022 13:31:54 +0300 Subject: [PATCH 049/177] Updated on 2026-08-14 --- .../java/com/tangem/tap/TapApplication.kt | 8 +- .../common/feedback/AdditionalFeedbackInfo.kt | 127 ++++++ .../tap/common/feedback/FeedbackData.kt | 95 +++++ .../common/feedback/FeedbackDataBuilder.kt | 81 ++++ .../tap/common/feedback/FeedbackManager.kt | 72 ++++ .../tap/common/log/TangemLogCollector.kt | 25 ++ .../tap/common/redux/global/GlobalAction.kt | 12 +- .../common/redux/global/GlobalMidlleware.kt | 2 +- .../tap/common/redux/global/GlobalState.kt | 2 +- .../features/details/ui/DetailsFragment.kt | 2 +- .../tap/features/feedback/FeedbackManager.kt | 380 ------------------ .../ui/dialogs/SendTransactionFailsDialog.kt | 2 +- .../ui/adapters/WarningMessagesAdapter.kt | 2 +- .../wallet/ui/dialogs/ScanFailsDialog.kt | 2 +- 14 files changed, 418 insertions(+), 394 deletions(-) create mode 100644 app/src/main/java/com/tangem/tap/common/feedback/AdditionalFeedbackInfo.kt create mode 100644 app/src/main/java/com/tangem/tap/common/feedback/FeedbackData.kt create mode 100644 app/src/main/java/com/tangem/tap/common/feedback/FeedbackDataBuilder.kt create mode 100644 app/src/main/java/com/tangem/tap/common/feedback/FeedbackManager.kt create mode 100644 app/src/main/java/com/tangem/tap/common/log/TangemLogCollector.kt delete mode 100644 app/src/main/java/com/tangem/tap/features/feedback/FeedbackManager.kt diff --git a/app/src/main/java/com/tangem/tap/TapApplication.kt b/app/src/main/java/com/tangem/tap/TapApplication.kt index 372fb621bf..61b576837d 100644 --- a/app/src/main/java/com/tangem/tap/TapApplication.kt +++ b/app/src/main/java/com/tangem/tap/TapApplication.kt @@ -12,7 +12,10 @@ import com.tangem.blockchain.network.BlockchainSdkRetrofitBuilder import com.tangem.domain.DomainLayer import com.tangem.network.common.MoshiConverter import com.tangem.tap.common.analytics.GlobalAnalyticsHandler +import com.tangem.tap.common.feedback.AdditionalFeedbackInfo +import com.tangem.tap.common.feedback.FeedbackManager import com.tangem.tap.common.images.createCoilImageLoader +import com.tangem.tap.common.log.TangemLogCollector import com.tangem.tap.common.redux.AppState import com.tangem.tap.common.redux.appReducer import com.tangem.tap.common.redux.global.GlobalAction @@ -24,9 +27,6 @@ import com.tangem.tap.domain.configurable.warningMessage.RemoteWarningLoader import com.tangem.tap.domain.configurable.warningMessage.WarningMessagesManager import com.tangem.tap.domain.tokens.CurrenciesRepository import com.tangem.tap.domain.walletconnect.WalletConnectRepository -import com.tangem.tap.features.feedback.AdditionalEmailInfo -import com.tangem.tap.features.feedback.FeedbackManager -import com.tangem.tap.features.feedback.TangemLogCollector import com.tangem.tap.network.NetworkConnectivity import com.tangem.tap.persistence.PreferencesStorage import com.tangem.wallet.BuildConfig @@ -98,7 +98,7 @@ class TapApplication : Application(), ImageLoaderFactory { } private fun initFeedbackManager() { - val infoHolder = AdditionalEmailInfo() + val infoHolder = AdditionalFeedbackInfo() infoHolder.setAppVersion(this) val logWriter = TangemLogCollector() diff --git a/app/src/main/java/com/tangem/tap/common/feedback/AdditionalFeedbackInfo.kt b/app/src/main/java/com/tangem/tap/common/feedback/AdditionalFeedbackInfo.kt new file mode 100644 index 0000000000..ddc7a41b23 --- /dev/null +++ b/app/src/main/java/com/tangem/tap/common/feedback/AdditionalFeedbackInfo.kt @@ -0,0 +1,127 @@ +package com.tangem.tap.common.feedback + +import android.content.Context +import android.content.pm.PackageManager +import android.os.Build +import com.tangem.blockchain.common.Amount +import com.tangem.blockchain.common.AmountType +import com.tangem.blockchain.common.Blockchain +import com.tangem.blockchain.common.Token +import com.tangem.blockchain.common.Wallet +import com.tangem.blockchain.common.WalletManager +import com.tangem.domain.common.ScanResponse +import com.tangem.tap.common.extensions.stripZeroPlainString + +class AdditionalFeedbackInfo { + class EmailWalletInfo( + var blockchain: Blockchain = Blockchain.Unknown, + var address: String = "", + var explorerLink: String = "", + var host: String = "", + var derivationPath: String = "", + ) + + var appVersion: String = "" + + // card + var cardId: String = "" + var cardFirmwareVersion: String = "" + var cardIssuer: String = "" + var cardBlockchain: String = "" + + // wallets + internal val walletsInfo = mutableListOf() + internal val tokens = mutableMapOf>() + internal var onSendErrorWalletInfo: EmailWalletInfo? = null + var signedHashesCount: String = "" + + // device + var phoneModel: String = Build.MODEL + var osVersion: String = Build.VERSION.SDK_INT.toString() + + // send error + var destinationAddress: String = "" + var amount: String = "" + var fee: String = "" + var token: String = "" + + fun setAppVersion(context: Context) { + try { + val pInfo = context.packageManager.getPackageInfo(context.packageName, 0) + appVersion = pInfo.versionName + } catch (e: PackageManager.NameNotFoundException) { + e.printStackTrace() + } + } + + fun setCardInfo(data: ScanResponse) { + cardId = data.card.cardId + cardBlockchain = data.walletData?.blockchain ?: "" + cardFirmwareVersion = data.card.firmwareVersion.stringValue + cardIssuer = data.card.issuer.name + signedHashesCount = data.card.wallets + .joinToString("; ") { "${it.curve.curve} - ${it.totalSignedHashes}" } + } + + fun setWalletsInfo(walletManagers: List) { + walletsInfo.clear() + tokens.clear() + walletManagers.forEach { manager -> + walletsInfo.add( + EmailWalletInfo( + blockchain = manager.wallet.blockchain, + address = getAddress(manager.wallet), + explorerLink = getExploreUri(manager.wallet), + host = manager.currentHost, + derivationPath = manager.wallet.publicKey.derivationPath?.rawPath ?: "" + ) + ) + if (manager.cardTokens.isNotEmpty()) { + tokens[manager.wallet.blockchain] = manager.cardTokens + } + } + } + + fun updateOnSendError( + wallet: Wallet, + host: String, + amountToSend: Amount, + feeAmount: Amount, + destinationAddress: String, + ) { + onSendErrorWalletInfo = EmailWalletInfo( + blockchain = wallet.blockchain, + address = getAddress(wallet), + explorerLink = getExploreUri(wallet), + host = host, + derivationPath = wallet.publicKey.derivationPath?.rawPath ?: "" + ) + + this.destinationAddress = destinationAddress + amount = amountToSend.value?.stripZeroPlainString() ?: "0" + fee = feeAmount.value?.stripZeroPlainString() ?: "0" + token = if (amountToSend.type is AmountType.Token) amountToSend.currencySymbol else "" + } + + private fun getAddress(wallet: Wallet): String { + return if (wallet.addresses.size == 1) { + wallet.address + } else { + val addresses = wallet.addresses.joinToString(", ") { + "${it.type.javaClass.simpleName} - ${it.value}" + } + "Multiple address: $addresses" + } + } + + private fun getExploreUri(wallet: Wallet): String { + return if (wallet.addresses.size == 1) { + wallet.getExploreUrl(wallet.address) + } else { + val links = wallet.addresses.joinToString(", ") { + "${it.type.javaClass.simpleName} - ${wallet.getExploreUrl(it.value)}" + } + "Multiple explorers links: $links" + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/common/feedback/FeedbackData.kt b/app/src/main/java/com/tangem/tap/common/feedback/FeedbackData.kt new file mode 100644 index 0000000000..4750a444b3 --- /dev/null +++ b/app/src/main/java/com/tangem/tap/common/feedback/FeedbackData.kt @@ -0,0 +1,95 @@ +package com.tangem.tap.common.feedback + +import android.content.Context +import com.tangem.domain.common.TapWorkarounds +import com.tangem.wallet.R + +interface FeedbackData { + val subjectResId: Int + val mainMessageResId: Int + + fun getDataCollectionMessageResId(): Int = R.string.feedback_data_collection_message + + fun prepare(infoHolder: AdditionalFeedbackInfo) {} + + fun createOptionalMessage(infoHolder: AdditionalFeedbackInfo): String + + fun joinTogether(context: Context, infoHolder: AdditionalFeedbackInfo): String { + return StringBuilder().apply { + append(context.getString(mainMessageResId)) + appendLine(3) + append(context.getString(getDataCollectionMessageResId())) + appendLine() + append(createOptionalMessage(infoHolder)) + }.toString() + } +} + +class RateCanBeBetterEmail : FeedbackData { + override val subjectResId: Int = R.string.feedback_subject_rate_negative + override val mainMessageResId: Int = R.string.feedback_preface_rate_negative + + override fun createOptionalMessage(infoHolder: AdditionalFeedbackInfo): String = FeedbackDataBuilder(infoHolder) + .appendCardInfo() + .appendLine() + .appendPhoneInfo() + .build() +} + +class ScanFailsEmail : FeedbackData { + + override val subjectResId: Int = R.string.feedback_subject_scan_failed + override val mainMessageResId: Int = R.string.feedback_preface_scan_failed + + override fun joinTogether(context: Context, infoHolder: AdditionalFeedbackInfo): String = StringBuilder().apply { + append(context.getString(mainMessageResId)) + appendLine(4) + append(createOptionalMessage(infoHolder)) + }.toString() + + override fun createOptionalMessage(infoHolder: AdditionalFeedbackInfo): String = FeedbackDataBuilder(infoHolder) + .appendPhoneInfo() + .build() +} + +class SendTransactionFailedEmail( + val error: String +) : FeedbackData { + + override val subjectResId: Int = R.string.feedback_subject_tx_failed + override val mainMessageResId: Int = R.string.feedback_preface_tx_failed + + override fun createOptionalMessage(infoHolder: AdditionalFeedbackInfo): String = FeedbackDataBuilder(infoHolder) + .appendCardInfo() + .appendDelimiter() + .appendTxFailedBlockchainInfo(error) + .appendLine() + .appendPhoneInfo() + .build() +} + +class FeedbackEmail : FeedbackData { + override val subjectResId: Int + get() = if (isS2CCard) s2cSubject else tangemSubject + override val mainMessageResId: Int + get() = if (isS2CCard) s2cMainMessage else tangemMainMessage + + private val tangemSubject: Int = R.string.feedback_subject_support_tangem + private val tangemMainMessage: Int = R.string.feedback_preface_support + + private val s2cSubject: Int = R.string.feedback_subject_support + private val s2cMainMessage: Int = R.string.feedback_preface_support + + private var isS2CCard = false + + override fun prepare(infoHolder: AdditionalFeedbackInfo) { + isS2CCard = TapWorkarounds.isStart2CoinIssuer(infoHolder.cardIssuer) + } + + override fun createOptionalMessage(infoHolder: AdditionalFeedbackInfo): String = FeedbackDataBuilder(infoHolder) + .appendCardInfo() + .appendWalletsInfo() + .appendLine() + .appendPhoneInfo() + .build() +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/common/feedback/FeedbackDataBuilder.kt b/app/src/main/java/com/tangem/tap/common/feedback/FeedbackDataBuilder.kt new file mode 100644 index 0000000000..9e5378e9e5 --- /dev/null +++ b/app/src/main/java/com/tangem/tap/common/feedback/FeedbackDataBuilder.kt @@ -0,0 +1,81 @@ +package com.tangem.tap.common.feedback + +class FeedbackDataBuilder( + private val infoHolder: AdditionalFeedbackInfo +) { + val builder = StringBuilder() + + fun appendDelimiter(): FeedbackDataBuilder { + builder.appendDelimiter() + return this + } + + fun appendLine(count: Int = 1): FeedbackDataBuilder { + builder.appendLine(count) + return this + } + + fun appendCardInfo(): FeedbackDataBuilder { + builder.appendKeyValue("Card ID", infoHolder.cardId) + builder.appendKeyValue("Firmware version", infoHolder.cardFirmwareVersion) + builder.appendKeyValue("Card Blockchain", infoHolder.cardBlockchain) + builder.appendKeyValue("Signed hashes", infoHolder.signedHashesCount) + return this + } + + fun appendWalletsInfo(): FeedbackDataBuilder { + infoHolder.walletsInfo.forEach { + builder.appendDelimiter() + builder.appendKeyValue("Blockchain", it.blockchain.fullName) + builder.appendKeyValue("Host", it.host) + builder.appendKeyValue("Wallet address", it.address) + builder.appendKeyValue("Derivation path", it.derivationPath) + builder.appendKeyValue("Explorer link", it.explorerLink) + + infoHolder.tokens[it.blockchain]?.let { tokens -> + builder.append("Tokens:") + appendLine() + tokens.forEach { token -> + builder.appendKeyValue("Name", token.name) + builder.appendKeyValue("ID", token.id ?: "[custom token]") + builder.appendKeyValue("Contract address", token.contractAddress) + } + } + } + return this + } + + fun appendTxFailedBlockchainInfo(error: String): FeedbackDataBuilder { + val walletInfo = infoHolder.onSendErrorWalletInfo ?: AdditionalFeedbackInfo.EmailWalletInfo() + builder.appendKeyValue("Blockchain", walletInfo.blockchain.fullName) + builder.appendKeyValue("Derivation path", walletInfo.derivationPath) + builder.appendKeyValue("Host", walletInfo.host) + builder.appendKeyValue("Token", infoHolder.token) + builder.appendKeyValue("Error", error) + builder.appendDelimiter() + builder.appendKeyValue("Source address", walletInfo.address) + builder.appendKeyValue("Destination address", infoHolder.destinationAddress) + builder.appendKeyValue("Amount", infoHolder.amount) + builder.appendKeyValue("Fee", infoHolder.fee) + return this + } + + fun appendPhoneInfo(): FeedbackDataBuilder { + builder.appendKeyValue("Phone model", infoHolder.phoneModel) + builder.appendKeyValue("OS version", infoHolder.osVersion) + builder.appendKeyValue("App version", infoHolder.appVersion) + return this + } + + fun build(): String = builder.toString() +} + +private fun StringBuilder.appendKeyValue(key: String, value: String): StringBuilder { + return if (value.isNotBlank()) this.append("$key: $value\n") else this +} + +private fun StringBuilder.appendDelimiter(): StringBuilder = append("----------\n") + +private fun StringBuilder.appendLine(count: Int = 1): StringBuilder { + return append(List(count) { "\n" }.joinToString(separator = "")) +} \ 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 new file mode 100644 index 0000000000..3a72ece232 --- /dev/null +++ b/app/src/main/java/com/tangem/tap/common/feedback/FeedbackManager.kt @@ -0,0 +1,72 @@ +package com.tangem.tap.common.feedback + +import android.app.Activity +import com.tangem.domain.common.TapWorkarounds +import com.tangem.tap.common.extensions.sendEmail +import com.tangem.tap.common.log.TangemLogCollector +import java.io.File +import java.io.FileWriter +import java.io.StringWriter +import timber.log.Timber + + +/** +[REDACTED_AUTHOR] + */ +class FeedbackManager( + val infoHolder: AdditionalFeedbackInfo, + private val logCollector: TangemLogCollector, +) { + + private lateinit var activity: Activity + + fun updateActivity(activity: Activity) { + this.activity = activity + } + + fun sendEmail(feedbackData: FeedbackData, onFail: ((Exception) -> Unit)? = null) { + if (!this::activity.isInitialized) return + + feedbackData.prepare(infoHolder) + val fileLog = if (feedbackData is ScanFailsEmail) createLogFile() else null + activity.sendEmail( + email = getSupportEmail(), + subject = activity.getString(feedbackData.subjectResId), + message = feedbackData.joinTogether(activity, infoHolder), + file = fileLog, + onFail = onFail + ) + } + + private fun getSupportEmail(): String { + return if (TapWorkarounds.isStart2CoinIssuer(infoHolder.cardIssuer)) { + S2C_SUPPORT_EMAIL + } else { + DEFAULT_SUPPORT_EMAIL + } + } + + private fun createLogFile(): File? { + return try { + val file = File(activity.filesDir, "logs.txt") + file.delete() + file.createNewFile() + + val stringWriter = StringWriter() + logCollector.getLogs().forEach { stringWriter.append(it) } + val fileWriter = FileWriter(file) + fileWriter.write(stringWriter.toString()) + fileWriter.close() + logCollector.clearLogs() + file + } catch (ex: Exception) { + Timber.e(ex, "Can't create a file for email attachment") + null + } + } + + companion object { + const val DEFAULT_SUPPORT_EMAIL = "support@tangem.com" + const val S2C_SUPPORT_EMAIL = "cardsupport@start2coin.com" + } +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/common/log/TangemLogCollector.kt b/app/src/main/java/com/tangem/tap/common/log/TangemLogCollector.kt new file mode 100644 index 0000000000..c1ae08ebc2 --- /dev/null +++ b/app/src/main/java/com/tangem/tap/common/log/TangemLogCollector.kt @@ -0,0 +1,25 @@ +package com.tangem.tap.common.log + +import com.tangem.Log +import com.tangem.TangemSdkLogger +import java.text.SimpleDateFormat +import java.util.Date + +class TangemLogCollector : TangemSdkLogger { + private val dateFormatter = SimpleDateFormat("HH:mm:ss.SSS") + private val logs = mutableListOf() + private val mutex = Object() + + override fun log(message: () -> String, level: Log.Level) { + val time = dateFormatter.format(Date()) + synchronized(mutex) { + logs.add("$time: ${message()}\n") + } + } + + fun getLogs(): List = synchronized(mutex) { logs.toList() } + + fun clearLogs() { + synchronized(mutex) { logs.clear() } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/common/redux/global/GlobalAction.kt b/app/src/main/java/com/tangem/tap/common/redux/global/GlobalAction.kt index a82d5ba94b..a12a6d20bf 100644 --- a/app/src/main/java/com/tangem/tap/common/redux/global/GlobalAction.kt +++ b/app/src/main/java/com/tangem/tap/common/redux/global/GlobalAction.kt @@ -7,14 +7,18 @@ import com.tangem.common.core.TangemError import com.tangem.domain.common.ScanResponse import com.tangem.tap.common.analytics.GlobalAnalyticsHandler import com.tangem.tap.common.entities.FiatCurrency -import com.tangem.tap.common.redux.* +import com.tangem.tap.common.feedback.FeedbackData +import com.tangem.tap.common.feedback.FeedbackManager +import com.tangem.tap.common.redux.DebugErrorAction +import com.tangem.tap.common.redux.ErrorAction +import com.tangem.tap.common.redux.NotificationAction +import com.tangem.tap.common.redux.StateDialog +import com.tangem.tap.common.redux.ToastNotificationAction import com.tangem.tap.domain.TapError import com.tangem.tap.domain.configurable.config.ConfigManager import com.tangem.tap.domain.configurable.warningMessage.WarningMessage import com.tangem.tap.domain.configurable.warningMessage.WarningMessagesManager import com.tangem.tap.features.details.redux.SecurityOption -import com.tangem.tap.features.feedback.EmailData -import com.tangem.tap.features.feedback.FeedbackManager import org.rekotlin.Action sealed class GlobalAction : Action { @@ -73,7 +77,7 @@ sealed class GlobalAction : Action { data class SetFeedbackManager(val feedbackManager: FeedbackManager) : GlobalAction() data class SetAnanlyticHandlers(val analyticsHandlers: GlobalAnalyticsHandler) : GlobalAction() - data class SendFeedback(val emailData: EmailData) : GlobalAction() + data class SendFeedback(val feedbackData: FeedbackData) : GlobalAction() data class UpdateFeedbackInfo(val walletManagers: List) : GlobalAction() object ExchangeManager : GlobalAction() { 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 7f61d63022..55c9b20908 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 @@ -80,7 +80,7 @@ private fun handleAction(action: Action, appState: () -> AppState?, dispatch: Di } } is GlobalAction.SendFeedback -> { - store.state.globalState.feedbackManager?.send(action.emailData) + store.state.globalState.feedbackManager?.sendEmail(action.feedbackData) } is GlobalAction.UpdateWalletSignedHashes -> { store.dispatch(WalletAction.Warnings.CheckRemainingSignatures(action.remainingSignatures)) diff --git a/app/src/main/java/com/tangem/tap/common/redux/global/GlobalState.kt b/app/src/main/java/com/tangem/tap/common/redux/global/GlobalState.kt index 8588256411..62e5217866 100644 --- a/app/src/main/java/com/tangem/tap/common/redux/global/GlobalState.kt +++ b/app/src/main/java/com/tangem/tap/common/redux/global/GlobalState.kt @@ -3,12 +3,12 @@ package com.tangem.tap.common.redux.global import com.tangem.domain.common.ScanResponse import com.tangem.tap.common.analytics.AnalyticsHandler import com.tangem.tap.common.entities.FiatCurrency +import com.tangem.tap.common.feedback.FeedbackManager import com.tangem.tap.common.redux.StateDialog import com.tangem.tap.domain.PayIdManager import com.tangem.tap.domain.TapWalletManager import com.tangem.tap.domain.configurable.config.ConfigManager import com.tangem.tap.domain.configurable.warningMessage.WarningMessagesManager -import com.tangem.tap.features.feedback.FeedbackManager import com.tangem.tap.features.onboarding.OnboardingManager import com.tangem.tap.network.exchangeServices.CurrencyExchangeManager import org.rekotlin.StateType diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/DetailsFragment.kt b/app/src/main/java/com/tangem/tap/features/details/ui/DetailsFragment.kt index 2789b0069d..ce4eaf8018 100644 --- a/app/src/main/java/com/tangem/tap/features/details/ui/DetailsFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/details/ui/DetailsFragment.kt @@ -9,6 +9,7 @@ import androidx.transition.TransitionInflater import by.kirich1409.viewbindingdelegate.viewBinding import com.tangem.domain.common.getTwinCardIdForUser import com.tangem.tap.common.extensions.show +import com.tangem.tap.common.feedback.FeedbackEmail import com.tangem.tap.common.redux.global.GlobalAction import com.tangem.tap.common.redux.navigation.AppScreen import com.tangem.tap.common.redux.navigation.NavigationAction @@ -16,7 +17,6 @@ import com.tangem.tap.domain.extensions.isMultiwalletAllowed import com.tangem.tap.features.details.redux.DetailsAction import com.tangem.tap.features.details.redux.DetailsState import com.tangem.tap.features.details.redux.SecurityOption -import com.tangem.tap.features.feedback.FeedbackEmail import com.tangem.tap.features.wallet.redux.WalletAction import com.tangem.tap.store import com.tangem.wallet.R diff --git a/app/src/main/java/com/tangem/tap/features/feedback/FeedbackManager.kt b/app/src/main/java/com/tangem/tap/features/feedback/FeedbackManager.kt deleted file mode 100644 index ad5a091c99..0000000000 --- a/app/src/main/java/com/tangem/tap/features/feedback/FeedbackManager.kt +++ /dev/null @@ -1,380 +0,0 @@ -package com.tangem.tap.features.feedback - -import android.app.Activity -import android.content.Context -import android.content.pm.PackageManager -import android.os.Build -import com.tangem.Log -import com.tangem.TangemSdkLogger -import com.tangem.blockchain.common.* -import com.tangem.domain.common.ScanResponse -import com.tangem.domain.common.TapWorkarounds -import com.tangem.tap.common.extensions.sendEmail -import com.tangem.tap.common.extensions.stripZeroPlainString -import com.tangem.wallet.R -import timber.log.Timber -import java.io.File -import java.io.FileWriter -import java.io.StringWriter -import java.text.SimpleDateFormat -import java.util.* - - -/** -[REDACTED_AUTHOR] - */ -class FeedbackManager( - val infoHolder: AdditionalEmailInfo, - private val logCollector: TangemLogCollector, -) { - - private lateinit var activity: Activity - - fun updateActivity(activity: Activity) { - this.activity = activity - } - - fun send(emailData: EmailData, onFail: ((Exception) -> Unit)? = null) { - if (!this::activity.isInitialized) return - - emailData.prepare(infoHolder) - val fileLog = if (emailData is ScanFailsEmail) createLogFile() else null - activity.sendEmail( - email = getSupportEmail(), - subject = activity.getString(emailData.subjectResId), - message = emailData.joinTogether(activity, infoHolder), - file = fileLog, - onFail = onFail - ) - } - - private fun getSupportEmail(): String { - return if (TapWorkarounds.isStart2CoinIssuer(infoHolder.cardIssuer)) { - S2C_SUPPORT_EMAIL - } else { - DEFAULT_SUPPORT_EMAIL - } - } - - private fun createLogFile(): File? { - return try { - val file = File(activity.filesDir, "logs.txt") - file.delete() - file.createNewFile() - - val stringWriter = StringWriter() - logCollector.getLogs().forEach { stringWriter.append(it) } - val fileWriter = FileWriter(file) - fileWriter.write(stringWriter.toString()) - fileWriter.close() - logCollector.clearLogs() - file - } catch (ex: Exception) { - Timber.e(ex, "Can't create a file for email attachment") - null - } - } - - companion object { - const val DEFAULT_SUPPORT_EMAIL = "support@tangem.com" - const val S2C_SUPPORT_EMAIL = "cardsupport@start2coin.com" - } -} - -class TangemLogCollector : TangemSdkLogger { - private val dateFormatter = SimpleDateFormat("HH:mm:ss.SSS") - private val logs = mutableListOf() - private val mutex = Object() - - override fun log(message: () -> String, level: Log.Level) { - val time = dateFormatter.format(Date()) - synchronized(mutex) { - logs.add("$time: ${message()}\n") - } - } - - fun getLogs(): List = synchronized(mutex) { logs.toList() } - - fun clearLogs() { - synchronized(mutex) { logs.clear() } - } -} - -class AdditionalEmailInfo { - class EmailWalletInfo( - var blockchain: Blockchain = Blockchain.Unknown, - var address: String = "", - var explorerLink: String = "", - var host: String = "", - var derivationPath: String = "", - ) - - var appVersion: String = "" - - // card - var cardId: String = "" - var cardFirmwareVersion: String = "" - var cardIssuer: String = "" - var cardBlockchain: String = "" - - // wallets - internal val walletsInfo = mutableListOf() - internal val tokens = mutableMapOf>() - internal var onSendErrorWalletInfo: EmailWalletInfo? = null - var signedHashesCount: String = "" - - // device - var phoneModel: String = Build.MODEL - var osVersion: String = Build.VERSION.SDK_INT.toString() - - // send error - var destinationAddress: String = "" - var amount: String = "" - var fee: String = "" - var token: String = "" - - fun setAppVersion(context: Context) { - try { - val pInfo = context.packageManager.getPackageInfo(context.packageName, 0) - appVersion = pInfo.versionName - } catch (e: PackageManager.NameNotFoundException) { - e.printStackTrace() - } - } - - fun setCardInfo(data: ScanResponse) { - cardId = data.card.cardId - cardBlockchain = data.walletData?.blockchain ?: "" - cardFirmwareVersion = data.card.firmwareVersion.stringValue - cardIssuer = data.card.issuer.name - signedHashesCount = data.card.wallets - .joinToString("; ") { "${it.curve.curve} - ${it.totalSignedHashes}" } - } - - fun setWalletsInfo(walletManagers: List) { - walletsInfo.clear() - tokens.clear() - walletManagers.forEach { manager -> - walletsInfo.add( - EmailWalletInfo( - blockchain = manager.wallet.blockchain, - address = getAddress(manager.wallet), - explorerLink = getExploreUri(manager.wallet), - host = manager.currentHost, - derivationPath = manager.wallet.publicKey.derivationPath?.rawPath ?: "" - ) - ) - if (manager.cardTokens.isNotEmpty()) { - tokens[manager.wallet.blockchain] = manager.cardTokens - } - } - } - - fun updateOnSendError(wallet: Wallet, host: String, amountToSend: Amount, feeAmount: Amount, destinationAddress: String) { - onSendErrorWalletInfo = EmailWalletInfo( - blockchain = wallet.blockchain, - address = getAddress(wallet), - explorerLink = getExploreUri(wallet), - host = host, - derivationPath = wallet.publicKey.derivationPath?.rawPath ?: "" - ) - - this.destinationAddress = destinationAddress - amount = amountToSend.value?.stripZeroPlainString() ?: "0" - fee = feeAmount.value?.stripZeroPlainString() ?: "0" - token = if (amountToSend.type is AmountType.Token) amountToSend.currencySymbol else "" - } - - private fun getAddress(wallet: Wallet): String { - return if (wallet.addresses.size == 1) { - wallet.address - } else { - val addresses = wallet.addresses.joinToString(", ") { - "${it.type.javaClass.simpleName} - ${it.value}" - } - "Multiple address: $addresses" - } - } - - private fun getExploreUri(wallet: Wallet): String { - return if (wallet.addresses.size == 1) { - wallet.getExploreUrl(wallet.address) - } else { - val links = wallet.addresses.joinToString(", ") { - "${it.type.javaClass.simpleName} - ${wallet.getExploreUrl(it.value)}" - } - "Multiple explorers links: $links" - } - } -} - -interface EmailData { - val subjectResId: Int - val mainMessageResId: Int - - fun getDataCollectionMessageResId(): Int = R.string.feedback_data_collection_message - - fun prepare(infoHolder: AdditionalEmailInfo) {} - - fun createOptionalMessage(infoHolder: AdditionalEmailInfo): String - - fun joinTogether(context: Context, infoHolder: AdditionalEmailInfo): String { - return StringBuilder().apply { - append(context.getString(mainMessageResId)) - appendLine(3) - append(context.getString(getDataCollectionMessageResId())) - appendLine() - append(createOptionalMessage(infoHolder)) - }.toString() - } -} - -class RateCanBeBetterEmail : EmailData { - override val subjectResId: Int = R.string.feedback_subject_rate_negative - override val mainMessageResId: Int = R.string.feedback_preface_rate_negative - - override fun createOptionalMessage(infoHolder: AdditionalEmailInfo): String = EmailDataBuilder(infoHolder) - .appendCardInfo() - .appendLine() - .appendPhoneInfo() - .build() -} - -class ScanFailsEmail : EmailData { - - override val subjectResId: Int = R.string.feedback_subject_scan_failed - override val mainMessageResId: Int = R.string.feedback_preface_scan_failed - - override fun joinTogether(context: Context, infoHolder: AdditionalEmailInfo): String = StringBuilder().apply { - append(context.getString(mainMessageResId)) - appendLine(4) - append(createOptionalMessage(infoHolder)) - }.toString() - - override fun createOptionalMessage(infoHolder: AdditionalEmailInfo): String = EmailDataBuilder(infoHolder) - .appendPhoneInfo() - .build() -} - -class SendTransactionFailedEmail( - val error: String -) : EmailData { - - override val subjectResId: Int = R.string.feedback_subject_tx_failed - override val mainMessageResId: Int = R.string.feedback_preface_tx_failed - - override fun createOptionalMessage(infoHolder: AdditionalEmailInfo): String = EmailDataBuilder(infoHolder) - .appendCardInfo() - .appendDelimiter() - .appendTxFailedBlockchainInfo(error) - .appendLine() - .appendPhoneInfo() - .build() -} - -class FeedbackEmail : EmailData { - override val subjectResId: Int - get() = if (isS2CCard) s2cSubject else tangemSubject - override val mainMessageResId: Int - get() = if (isS2CCard) s2cMainMessage else tangemMainMessage - - private val tangemSubject: Int = R.string.feedback_subject_support_tangem - private val tangemMainMessage: Int = R.string.feedback_preface_support - - private val s2cSubject: Int = R.string.feedback_subject_support - private val s2cMainMessage: Int = R.string.feedback_preface_support - - private var isS2CCard = false - - override fun prepare(infoHolder: AdditionalEmailInfo) { - isS2CCard = TapWorkarounds.isStart2CoinIssuer(infoHolder.cardIssuer) - } - - override fun createOptionalMessage(infoHolder: AdditionalEmailInfo): String = EmailDataBuilder(infoHolder) - .appendCardInfo() - .appendWalletsInfo() - .appendLine() - .appendPhoneInfo() - .build() -} - - -class EmailDataBuilder( - private val infoHolder: AdditionalEmailInfo -) { - val builder = StringBuilder() - - fun appendDelimiter(): EmailDataBuilder { - builder.appendDelimiter() - return this - } - - fun appendLine(count: Int = 1): EmailDataBuilder { - builder.appendLine(count) - return this - } - - fun appendCardInfo(): EmailDataBuilder { - builder.appendKeyValue("Card ID", infoHolder.cardId) - builder.appendKeyValue("Firmware version", infoHolder.cardFirmwareVersion) - builder.appendKeyValue("Card Blockchain", infoHolder.cardBlockchain) - builder.appendKeyValue("Signed hashes", infoHolder.signedHashesCount) - return this - } - - fun appendWalletsInfo(): EmailDataBuilder { - infoHolder.walletsInfo.forEach { - builder.appendDelimiter() - builder.appendKeyValue("Blockchain", it.blockchain.fullName) - builder.appendKeyValue("Host", it.host) - builder.appendKeyValue("Wallet address", it.address) - builder.appendKeyValue("Derivation path", it.derivationPath) - builder.appendKeyValue("Explorer link", it.explorerLink) - - infoHolder.tokens[it.blockchain]?.let { tokens -> - builder.append("Tokens:") - appendLine() - tokens.forEach { token -> - builder.appendKeyValue("Name", token.name) - builder.appendKeyValue("ID", token.id ?: "[custom token]") - builder.appendKeyValue("Contract address", token.contractAddress) - } - } - } - return this - } - - fun appendTxFailedBlockchainInfo(error: String): EmailDataBuilder { - val walletInfo = infoHolder.onSendErrorWalletInfo ?: AdditionalEmailInfo.EmailWalletInfo() - builder.appendKeyValue("Blockchain", walletInfo.blockchain.fullName) - builder.appendKeyValue("Derivation path", walletInfo.derivationPath) - builder.appendKeyValue("Host", walletInfo.host) - builder.appendKeyValue("Token", infoHolder.token) - builder.appendKeyValue("Error", error) - builder.appendDelimiter() - builder.appendKeyValue("Source address", walletInfo.address) - builder.appendKeyValue("Destination address", infoHolder.destinationAddress) - builder.appendKeyValue("Amount", infoHolder.amount) - builder.appendKeyValue("Fee", infoHolder.fee) - return this - } - - fun appendPhoneInfo(): EmailDataBuilder { - builder.appendKeyValue("Phone model", infoHolder.phoneModel) - builder.appendKeyValue("OS version", infoHolder.osVersion) - builder.appendKeyValue("App version", infoHolder.appVersion) - return this - } - - fun build(): String = builder.toString() -} - -private fun StringBuilder.appendKeyValue(key: String, value: String): StringBuilder { - return if (value.isNotBlank()) this.append("$key: $value\n") else this -} - -private fun StringBuilder.appendDelimiter(): StringBuilder = append("----------\n") - -private fun StringBuilder.appendLine(count: Int = 1): StringBuilder { - return append(List(count) { "\n" }.joinToString(separator = "")) -} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/send/ui/dialogs/SendTransactionFailsDialog.kt b/app/src/main/java/com/tangem/tap/features/send/ui/dialogs/SendTransactionFailsDialog.kt index 8f4b106e97..2dfadd6362 100644 --- a/app/src/main/java/com/tangem/tap/features/send/ui/dialogs/SendTransactionFailsDialog.kt +++ b/app/src/main/java/com/tangem/tap/features/send/ui/dialogs/SendTransactionFailsDialog.kt @@ -2,8 +2,8 @@ package com.tangem.tap.features.send.ui.dialogs import android.content.Context import androidx.appcompat.app.AlertDialog +import com.tangem.tap.common.feedback.SendTransactionFailedEmail import com.tangem.tap.common.redux.global.GlobalAction -import com.tangem.tap.features.feedback.SendTransactionFailedEmail import com.tangem.tap.features.send.redux.SendAction import com.tangem.tap.store import com.tangem.wallet.R diff --git a/app/src/main/java/com/tangem/tap/features/wallet/ui/adapters/WarningMessagesAdapter.kt b/app/src/main/java/com/tangem/tap/features/wallet/ui/adapters/WarningMessagesAdapter.kt index 9014d5d4ff..820fa4167a 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/ui/adapters/WarningMessagesAdapter.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/ui/adapters/WarningMessagesAdapter.kt @@ -16,10 +16,10 @@ import com.tangem.tap.common.extensions.getColor import com.tangem.tap.common.extensions.getString import com.tangem.tap.common.extensions.hide import com.tangem.tap.common.extensions.show +import com.tangem.tap.common.feedback.RateCanBeBetterEmail import com.tangem.tap.common.redux.global.GlobalAction import com.tangem.tap.domain.configurable.warningMessage.WarningMessage import com.tangem.tap.domain.configurable.warningMessage.WarningMessagesManager -import com.tangem.tap.features.feedback.RateCanBeBetterEmail import com.tangem.tap.features.wallet.redux.WalletAction import com.tangem.tap.store import com.tangem.wallet.R diff --git a/app/src/main/java/com/tangem/tap/features/wallet/ui/dialogs/ScanFailsDialog.kt b/app/src/main/java/com/tangem/tap/features/wallet/ui/dialogs/ScanFailsDialog.kt index 496a8ff731..4122e0bd06 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/ui/dialogs/ScanFailsDialog.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/ui/dialogs/ScanFailsDialog.kt @@ -3,8 +3,8 @@ package com.tangem.tap.features.wallet.ui.dialogs import android.content.Context import androidx.appcompat.app.AlertDialog import com.tangem.tap.common.extensions.dispatchDialogHide +import com.tangem.tap.common.feedback.ScanFailsEmail import com.tangem.tap.common.redux.global.GlobalAction -import com.tangem.tap.features.feedback.ScanFailsEmail import com.tangem.tap.store import com.tangem.wallet.R From c445651ca9824e2b992aa9f898f00639197cf6aa Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 13 Jul 2022 00:19:07 +0300 Subject: [PATCH 050/177] Updated on 2026-08-14 --- .../main/java/com/tangem/tap/MainActivity.kt | 5 +- .../java/com/tangem/tap/TapApplication.kt | 11 ++- .../tap/common/feedback/FeedbackManager.kt | 95 +++++++++++++------ .../tap/common/zendesk/ZendeskConfig.kt | 16 ++++ .../configurable/config/ConfigManager.kt | 17 ++-- .../domain/configurable/config/JsonModels.kt | 4 +- 6 files changed, 108 insertions(+), 40 deletions(-) create mode 100644 app/src/main/java/com/tangem/tap/common/zendesk/ZendeskConfig.kt diff --git a/app/src/main/java/com/tangem/tap/MainActivity.kt b/app/src/main/java/com/tangem/tap/MainActivity.kt index a663e66e7a..7593f303e7 100644 --- a/app/src/main/java/com/tangem/tap/MainActivity.kt +++ b/app/src/main/java/com/tangem/tap/MainActivity.kt @@ -27,11 +27,11 @@ import com.tangem.tap.features.details.redux.walletconnect.WalletConnectAction import com.tangem.tap.features.shop.redux.ShopAction import com.tangem.wallet.R import com.tangem.wallet.databinding.ActivityMainBinding +import java.lang.ref.WeakReference +import kotlin.coroutines.CoroutineContext import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job -import java.lang.ref.WeakReference -import kotlin.coroutines.CoroutineContext lateinit var tangemSdk: TangemSdk lateinit var tangemSdkManager: TangemSdkManager @@ -57,7 +57,6 @@ class MainActivity : AppCompatActivity(), SnackbarHandler { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) systemActions() - store.state.globalState.feedbackManager?.updateActivity(this) store.dispatch(NavigationAction.ActivityCreated(WeakReference(this))) tangemSdk = TangemSdk.init(this, TangemSdkManager.config) diff --git a/app/src/main/java/com/tangem/tap/TapApplication.kt b/app/src/main/java/com/tangem/tap/TapApplication.kt index 61b576837d..518ad410c4 100644 --- a/app/src/main/java/com/tangem/tap/TapApplication.kt +++ b/app/src/main/java/com/tangem/tap/TapApplication.kt @@ -89,9 +89,16 @@ class TapApplication : Application(), ImageLoaderFactory { val localLoader = FeaturesLocalLoader(this, moshi) val remoteLoader = FeaturesRemoteLoader(moshi) val configManager = ConfigManager(localLoader, remoteLoader) - configManager.load { + configManager.load { config -> store.dispatch(GlobalAction.SetConfigManager(configManager)) - shopService = TangemShopService(this, configManager.config.shopify!!) + shopService = TangemShopService( + application = this, + shopifyShop = config.shopify!! + ) + store.state.globalState.feedbackManager?.initChat( + context = this, + zendeskConfig = config.zendesk!! + ) } val warningsManager = WarningMessagesManager(RemoteWarningLoader(moshi)) warningsManager.load { store.dispatch(GlobalAction.SetWarningManager(warningsManager)) } 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 3a72ece232..dccb805723 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 @@ -1,14 +1,22 @@ package com.tangem.tap.common.feedback -import android.app.Activity +import android.content.Context import com.tangem.domain.common.TapWorkarounds 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.withForegroundActivity import java.io.File import java.io.FileWriter import java.io.StringWriter import timber.log.Timber - +import zendesk.configurations.Configuration +import zendesk.core.Zendesk +import zendesk.support.Support +import zendesk.support.request.RequestConfiguration +import zendesk.support.requestlist.RequestListActivity +import zendesk.support.requestlist.RequestListConfiguration /** [REDACTED_AUTHOR] @@ -17,38 +25,47 @@ class FeedbackManager( val infoHolder: AdditionalFeedbackInfo, private val logCollector: TangemLogCollector, ) { - - private lateinit var activity: Activity - - fun updateActivity(activity: Activity) { - this.activity = activity + fun initChat( + context: Context, + zendeskConfig: ZendeskConfig, + ) { + Zendesk.INSTANCE.init( + /* context = */ context, + /* zendeskUrl = */ zendeskConfig.url, + /* applicationId = */ zendeskConfig.appId, + /* oauthClientId = */ zendeskConfig.clientId, + ) + Support.INSTANCE.init(Zendesk.INSTANCE) } fun sendEmail(feedbackData: FeedbackData, onFail: ((Exception) -> Unit)? = null) { - if (!this::activity.isInitialized) return - feedbackData.prepare(infoHolder) - val fileLog = if (feedbackData is ScanFailsEmail) createLogFile() else null - activity.sendEmail( - email = getSupportEmail(), - subject = activity.getString(feedbackData.subjectResId), - message = feedbackData.joinTogether(activity, infoHolder), - file = fileLog, - onFail = onFail - ) - } - - private fun getSupportEmail(): String { - return if (TapWorkarounds.isStart2CoinIssuer(infoHolder.cardIssuer)) { - S2C_SUPPORT_EMAIL - } else { - DEFAULT_SUPPORT_EMAIL + foregroundActivityObserver.withForegroundActivity { activity -> + val fileLog = if (feedbackData is ScanFailsEmail) createLogFile(activity) else null + activity.sendEmail( + email = getSupportEmail(), + subject = activity.getString(feedbackData.subjectResId), + message = feedbackData.joinTogether(activity, infoHolder), + file = fileLog, + onFail = onFail + ) } } - private fun createLogFile(): File? { + fun openChat(feedbackData: FeedbackData) { + feedbackData.prepare(infoHolder) + foregroundActivityObserver.withForegroundActivity { activity -> + RequestListActivity.builder() + .show( + /* context = */ activity, + /* configurations = */ buildConfigs(activity, feedbackData) + ) + } + } + + private fun createLogFile(context: Context): File? { return try { - val file = File(activity.filesDir, "logs.txt") + val file = File(context.filesDir, "logs.txt") file.delete() file.createNewFile() @@ -60,11 +77,35 @@ class FeedbackManager( logCollector.clearLogs() file } catch (ex: Exception) { - Timber.e(ex, "Can't create a file for email attachment") + Timber.e(ex, "Can't create the logs file") null } } + private fun buildConfigs( + context: Context, + feedbackData: FeedbackData, + ): List { + return listOf( + // Request configuration + RequestConfiguration.Builder() + .withRequestSubject(context.getString(feedbackData.subjectResId)) + .config(), + // Request list configuration + RequestListConfiguration.Builder() + .withContactUsButtonVisible(true) + .config(), + ) + } + + private fun getSupportEmail(): String { + return if (TapWorkarounds.isStart2CoinIssuer(infoHolder.cardIssuer)) { + S2C_SUPPORT_EMAIL + } else { + DEFAULT_SUPPORT_EMAIL + } + } + companion object { const val DEFAULT_SUPPORT_EMAIL = "support@tangem.com" const val S2C_SUPPORT_EMAIL = "cardsupport@start2coin.com" diff --git a/app/src/main/java/com/tangem/tap/common/zendesk/ZendeskConfig.kt b/app/src/main/java/com/tangem/tap/common/zendesk/ZendeskConfig.kt new file mode 100644 index 0000000000..aad872b7df --- /dev/null +++ b/app/src/main/java/com/tangem/tap/common/zendesk/ZendeskConfig.kt @@ -0,0 +1,16 @@ +package com.tangem.tap.common.zendesk + +import com.squareup.moshi.Json +import com.squareup.moshi.JsonClass + +@JsonClass(generateAdapter = true) +data class ZendeskConfig( + @Json(name = "zendeskApiKey") + val apiKey: String, + @Json(name = "zendeskAppId") + val appId: String, + @Json(name = "zendeskClientId") + val clientId: String, + @Json(name = "zendeskUrl") + val url: String, +) \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/domain/configurable/config/ConfigManager.kt b/app/src/main/java/com/tangem/tap/domain/configurable/config/ConfigManager.kt index 52037f828c..795e76fe06 100644 --- a/app/src/main/java/com/tangem/tap/domain/configurable/config/ConfigManager.kt +++ b/app/src/main/java/com/tangem/tap/domain/configurable/config/ConfigManager.kt @@ -1,8 +1,8 @@ package com.tangem.tap.domain.configurable.config import com.tangem.blockchain.common.BlockchainSdkConfig -import com.tangem.common.extensions.VoidCallback import com.tangem.tap.common.shop.shopify.ShopifyShop +import com.tangem.tap.common.zendesk.ZendeskConfig import com.tangem.tap.domain.configurable.Loader /** @@ -20,7 +20,8 @@ data class Config( val isTopUpEnabled: Boolean = false, @Deprecated("Not relevant since version 3.23") val isCreatingTwinCardsAllowed: Boolean = false, - val shopify: ShopifyShop? = null + val shopify: ShopifyShop? = null, + val zendesk: ZendeskConfig? = null, ) class ConfigManager( @@ -33,11 +34,11 @@ class ConfigManager( private var defaultConfig = Config() - fun load(onComplete: VoidCallback? = null) { - localLoader.load { config -> - setupFeature(config.features) - setupKey(config.configValues) - onComplete?.invoke() + fun load(onComplete: ((config: Config) -> Unit)? = null) { + localLoader.load { configModel -> + setupFeature(configModel.features) + setupKey(configModel.configValues) + onComplete?.invoke(config) } // Uncomment to enable remote config // remoteLoader.load { config -> @@ -94,6 +95,7 @@ class ConfigManager( ), appsFlyerDevKey = values.appsFlyerDevKey, shopify = values.shopifyShop, + zendesk = values.zendesk, ) defaultConfig = defaultConfig.copy( coinMarketCapKey = values.coinMarketCapKey, @@ -109,6 +111,7 @@ class ConfigManager( ), appsFlyerDevKey = values.appsFlyerDevKey, shopify = values.shopifyShop, + zendesk = values.zendesk, ) } diff --git a/app/src/main/java/com/tangem/tap/domain/configurable/config/JsonModels.kt b/app/src/main/java/com/tangem/tap/domain/configurable/config/JsonModels.kt index f9e053ee98..fc63ed5e9a 100644 --- a/app/src/main/java/com/tangem/tap/domain/configurable/config/JsonModels.kt +++ b/app/src/main/java/com/tangem/tap/domain/configurable/config/JsonModels.kt @@ -1,6 +1,7 @@ package com.tangem.tap.domain.configurable.config import com.tangem.tap.common.shop.shopify.ShopifyShop +import com.tangem.tap.common.zendesk.ZendeskConfig /** [REDACTED_AUTHOR] @@ -24,7 +25,8 @@ class ConfigValueModel( val blockcypherTokens: Set?, val infuraProjectId: String?, val appsFlyerDevKey: String, - val shopifyShop: ShopifyShop? + val shopifyShop: ShopifyShop?, + val zendesk: ZendeskConfig?, ) class ConfigModel(val features: FeatureModel?, val configValues: ConfigValueModel?) { From 1e6dc08081b4705a6733052c1a7c0c10cfaa8454 Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 13 Jul 2022 00:23:04 +0300 Subject: [PATCH 051/177] Updated on 2026-08-14 --- .../tangem/tap/common/feedback/FeedbackData.kt | 13 +++++++++++++ .../tap/common/redux/global/GlobalAction.kt | 3 ++- .../tap/common/redux/global/GlobalMidlleware.kt | 5 ++++- .../tap/features/details/ui/DetailsFragment.kt | 7 ++++++- .../ui/dialogs/SendTransactionFailsDialog.kt | 2 +- .../wallet/ui/adapters/WarningMessagesAdapter.kt | 2 +- .../wallet/ui/dialogs/ScanFailsDialog.kt | 2 +- app/src/main/res/layout/fragment_details.xml | 16 +++++++++++++++- app/src/main/res/values-ru/strings_final.xml | 2 ++ app/src/main/res/values/strings_final.xml | 2 ++ 10 files changed, 47 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/common/feedback/FeedbackData.kt b/app/src/main/java/com/tangem/tap/common/feedback/FeedbackData.kt index 4750a444b3..dc2a7d07d5 100644 --- a/app/src/main/java/com/tangem/tap/common/feedback/FeedbackData.kt +++ b/app/src/main/java/com/tangem/tap/common/feedback/FeedbackData.kt @@ -92,4 +92,17 @@ class FeedbackEmail : FeedbackData { .appendLine() .appendPhoneInfo() .build() +} + +class SupportInfo : FeedbackData { + override val subjectResId: Int = R.string.details_ask_a_question + override val mainMessageResId: Int = R.string.details_ask_a_question + + override fun createOptionalMessage(infoHolder: AdditionalFeedbackInfo): String { + return FeedbackDataBuilder(infoHolder) + .appendCardInfo() + .appendDelimiter() + .appendPhoneInfo() + .build() + } } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/common/redux/global/GlobalAction.kt b/app/src/main/java/com/tangem/tap/common/redux/global/GlobalAction.kt index a12a6d20bf..4927405ccd 100644 --- a/app/src/main/java/com/tangem/tap/common/redux/global/GlobalAction.kt +++ b/app/src/main/java/com/tangem/tap/common/redux/global/GlobalAction.kt @@ -77,7 +77,8 @@ sealed class GlobalAction : Action { data class SetFeedbackManager(val feedbackManager: FeedbackManager) : GlobalAction() data class SetAnanlyticHandlers(val analyticsHandlers: GlobalAnalyticsHandler) : GlobalAction() - data class SendFeedback(val feedbackData: FeedbackData) : GlobalAction() + data class SendEmail(val feedbackData: FeedbackData) : GlobalAction() + data class OpenChat(val feedbackData: FeedbackData) : GlobalAction() data class UpdateFeedbackInfo(val walletManagers: List) : GlobalAction() object ExchangeManager : GlobalAction() { 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 55c9b20908..17cb291621 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 @@ -79,9 +79,12 @@ private fun handleAction(action: Action, appState: () -> AppState?, dispatch: Di } } } - is GlobalAction.SendFeedback -> { + is GlobalAction.SendEmail -> { store.state.globalState.feedbackManager?.sendEmail(action.feedbackData) } + is GlobalAction.OpenChat -> { + store.state.globalState.feedbackManager?.openChat(action.feedbackData) + } is GlobalAction.UpdateWalletSignedHashes -> { store.dispatch(WalletAction.Warnings.CheckRemainingSignatures(action.remainingSignatures)) } diff --git a/app/src/main/java/com/tangem/tap/features/details/ui/DetailsFragment.kt b/app/src/main/java/com/tangem/tap/features/details/ui/DetailsFragment.kt index ce4eaf8018..71b6baa710 100644 --- a/app/src/main/java/com/tangem/tap/features/details/ui/DetailsFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/details/ui/DetailsFragment.kt @@ -10,6 +10,7 @@ import by.kirich1409.viewbindingdelegate.viewBinding import com.tangem.domain.common.getTwinCardIdForUser import com.tangem.tap.common.extensions.show import com.tangem.tap.common.feedback.FeedbackEmail +import com.tangem.tap.common.feedback.SupportInfo import com.tangem.tap.common.redux.global.GlobalAction import com.tangem.tap.common.redux.navigation.AppScreen import com.tangem.tap.common.redux.navigation.NavigationAction @@ -124,7 +125,7 @@ class DetailsFragment : Fragment(R.layout.fragment_details), StoreSubscriber - store.dispatch(GlobalAction.SendFeedback(SendTransactionFailedEmail(dialog.errorMessage))) + store.dispatch(GlobalAction.SendEmail(SendTransactionFailedEmail(dialog.errorMessage))) } setPositiveButton(R.string.common_no) { _, _ -> } setOnDismissListener { store.dispatch(SendAction.Dialog.Hide) } diff --git a/app/src/main/java/com/tangem/tap/features/wallet/ui/adapters/WarningMessagesAdapter.kt b/app/src/main/java/com/tangem/tap/features/wallet/ui/adapters/WarningMessagesAdapter.kt index 820fa4167a..f77b716bc7 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/ui/adapters/WarningMessagesAdapter.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/ui/adapters/WarningMessagesAdapter.kt @@ -135,7 +135,7 @@ class WarningMessageVH(val binding: LayoutWarningCardActionBinding) : RecyclerVi analyticsHandler?.triggerEvent(AnalyticsEvent.APP_RATING_NEGATIVE) store.dispatch(WalletAction.Warnings.AppRating.SetNeverToShow) store.dispatch(GlobalAction.HideWarningMessage(warning)) - store.dispatch(GlobalAction.SendFeedback(RateCanBeBetterEmail())) + store.dispatch(GlobalAction.SendEmail(RateCanBeBetterEmail())) } binding.btnReallyCool.setOnClickListener { val activity = binding.root.context.getActivity() ?: return@setOnClickListener diff --git a/app/src/main/java/com/tangem/tap/features/wallet/ui/dialogs/ScanFailsDialog.kt b/app/src/main/java/com/tangem/tap/features/wallet/ui/dialogs/ScanFailsDialog.kt index 4122e0bd06..91afcc3819 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/ui/dialogs/ScanFailsDialog.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/ui/dialogs/ScanFailsDialog.kt @@ -19,7 +19,7 @@ class ScanFailsDialog { setTitle(context.getString(R.string.common_warning)) setMessage(R.string.alert_troubleshooting_scan_card_title) setPositiveButton(R.string.alert_button_request_support) { _, _ -> - store.dispatch(GlobalAction.SendFeedback(ScanFailsEmail())) + store.dispatch(GlobalAction.SendEmail(ScanFailsEmail())) } setNeutralButton(R.string.alert_troubleshooting_scan_card_ok) { _, _ -> } setOnDismissListener { store.dispatchDialogHide() } diff --git a/app/src/main/res/layout/fragment_details.xml b/app/src/main/res/layout/fragment_details.xml index 58ac038846..2171b91e61 100644 --- a/app/src/main/res/layout/fragment_details.xml +++ b/app/src/main/res/layout/fragment_details.xml @@ -302,8 +302,22 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/tv_send_feedback" /> + + - \ No newline at end of file + diff --git a/app/src/main/res/values-ru/strings_final.xml b/app/src/main/res/values-ru/strings_final.xml index 0deae6285f..d2028c922e 100644 --- a/app/src/main/res/values-ru/strings_final.xml +++ b/app/src/main/res/values-ru/strings_final.xml @@ -72,4 +72,6 @@ Карты банков РФ в данный момент не принимаются У вас есть карта банка другой страны или платежной системы UnionPay? Да + + Задать вопрос diff --git a/app/src/main/res/values/strings_final.xml b/app/src/main/res/values/strings_final.xml index f5dfbc7abd..adbf1e7604 100644 --- a/app/src/main/res/values/strings_final.xml +++ b/app/src/main/res/values/strings_final.xml @@ -74,4 +74,6 @@ Do you have a bank card of another country or a UnionPay card? Yes No + + Ask a question From cfb002bee764d2996d4394e51c45b0ad21d09089 Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 8 Jul 2022 12:05:54 +0300 Subject: [PATCH 052/177] Updated on 2026-08-14 --- app/src/main/AndroidManifest.xml | 17 ++++++++++++++++- app/src/main/res/values/zendesk_styles.xml | 7 +++++++ 2 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 app/src/main/res/values/zendesk_styles.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 22fda180cd..d180642a75 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -128,6 +128,21 @@ + + + + + + + + + + - \ No newline at end of file + diff --git a/app/src/main/res/values/zendesk_styles.xml b/app/src/main/res/values/zendesk_styles.xml new file mode 100644 index 0000000000..ebb4fcab6b --- /dev/null +++ b/app/src/main/res/values/zendesk_styles.xml @@ -0,0 +1,7 @@ + + + + From 33cd0b0fc619a5b108f6ea33911283f8a1b0d87f Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 14 Jul 2022 11:51:08 +0300 Subject: [PATCH 053/177] Updated on 2026-08-14 --- .../warningMessage/WarningMessagesManager.kt | 26 ------------------- .../tap/features/wallet/redux/WalletAction.kt | 10 ++++--- .../redux/middlewares/WarningsMiddleware.kt | 17 ++++++------ .../ui/adapters/WarningMessagesAdapter.kt | 22 ++-------------- .../tap/persistence/PreferencesStorage.kt | 11 +------- 5 files changed, 17 insertions(+), 69 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/domain/configurable/warningMessage/WarningMessagesManager.kt b/app/src/main/java/com/tangem/tap/domain/configurable/warningMessage/WarningMessagesManager.kt index ac2d922c0d..10dbcb2cbb 100644 --- a/app/src/main/java/com/tangem/tap/domain/configurable/warningMessage/WarningMessagesManager.kt +++ b/app/src/main/java/com/tangem/tap/domain/configurable/warningMessage/WarningMessagesManager.kt @@ -6,7 +6,6 @@ import com.tangem.tap.common.extensions.containsAny import com.tangem.tap.common.extensions.removeBy import com.tangem.wallet.BuildConfig import com.tangem.wallet.R -import java.util.* /** [REDACTED_AUTHOR] @@ -188,31 +187,6 @@ class WarningMessagesManager( WarningMessage.Origin.Local ) - fun restoreFundsWarning(): WarningMessage = WarningMessage( - title = "", - message = "", - type = WarningMessage.Type.Temporary, - priority = WarningMessage.Priority.Warning, - listOf(WarningMessage.Location.MainScreen), - blockchains = null, - titleResId = R.string.alert_title, - messageResId = R.string.alert_funds_restoration_message, - origin = WarningMessage.Origin.Local, - buttonTextId = R.string.warning_button_learn_more - ) - const val REMAINING_SIGNATURES_WARNING = 10 - private const val RESTORE_FUNDS_GUIDE_URL_RU = - "https://tangem.com/ru/kak-vosstanovit-tokeny-otpravlennye-ne-na-tot-adres-v-tangem-wallet" - private const val RESTORE_FUNDS_GUIDE_URL_EN = - "https://tangem.com/en/how-to-recover-crypto-sent-to-the-wrong-address-in-tangem-wallet" - - fun getRestoreFundsGuideUrl(locale: String): String { - return if (locale == Locale("ru").language) { - RESTORE_FUNDS_GUIDE_URL_RU - } else { - RESTORE_FUNDS_GUIDE_URL_EN - } - } } } \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletAction.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletAction.kt index ea1d5fbced..89d77cd33f 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletAction.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/WalletAction.kt @@ -1,7 +1,11 @@ package com.tangem.tap.features.wallet.redux import android.content.Context -import com.tangem.blockchain.common.* +import com.tangem.blockchain.common.Amount +import com.tangem.blockchain.common.Blockchain +import com.tangem.blockchain.common.Token +import com.tangem.blockchain.common.Wallet +import com.tangem.blockchain.common.WalletManager import com.tangem.blockchain.common.address.AddressType import com.tangem.common.card.Card import com.tangem.tap.common.entities.FiatCurrency @@ -13,8 +17,8 @@ import com.tangem.tap.domain.configurable.warningMessage.WarningMessage import com.tangem.tap.domain.tokens.models.BlockchainNetwork import com.tangem.tap.features.wallet.models.Currency import com.tangem.wallet.R -import org.rekotlin.Action import java.math.BigDecimal +import org.rekotlin.Action sealed class WalletAction : Action { @@ -106,8 +110,6 @@ sealed class WalletAction : Action { } class CheckRemainingSignatures(val remainingSignatures: Int?) : Warnings() - - object RestoreFundsWarningClosed : Warnings() } data class LoadFiatRate( diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/WarningsMiddleware.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/WarningsMiddleware.kt index 5197928d6e..7aa45f997d 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/WarningsMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/WarningsMiddleware.kt @@ -8,7 +8,6 @@ import com.tangem.common.card.Card import com.tangem.common.card.FirmwareVersion import com.tangem.domain.common.ScanResponse import com.tangem.domain.common.TapWorkarounds.isTestCard -import com.tangem.domain.common.TapWorkarounds.useOldStyleDerivation import com.tangem.tap.common.analytics.AnalyticsEvent import com.tangem.tap.common.extensions.dispatchOnMain import com.tangem.tap.common.extensions.isGreaterThan @@ -26,15 +25,15 @@ import com.tangem.tap.preferencesStorage import com.tangem.tap.scope import com.tangem.tap.store import com.tangem.wallet.R +import java.math.BigDecimal import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext -import java.math.BigDecimal class WarningsMiddleware { fun handle(action: WalletAction.Warnings, globalState: GlobalState?) { when (action) { - WalletAction.Warnings.Update -> setWarningMessages() + is WalletAction.Warnings.Update -> setWarningMessages() is WalletAction.Warnings.CheckIfNeeded -> { showCardWarningsIfNeeded(globalState) val readyToShow = preferencesStorage.appRatingLaunchObserver.isReadyToShow() @@ -66,9 +65,11 @@ class WarningsMiddleware { ) } } - is WalletAction.Warnings.RestoreFundsWarningClosed -> { - preferencesStorage.saveRestoreFundsWarningClosed() - } + is WalletAction.Warnings.AppRating, + is WalletAction.Warnings.CheckHashesCount, + is WalletAction.Warnings.CheckHashesCount.ConfirmHashesCount, + is WalletAction.Warnings.CheckHashesCount.NeedToCheckHashesCountOnline, + is WalletAction.Warnings.Set -> Unit } } @@ -93,9 +94,6 @@ class WarningsMiddleware { addWarningMessage(WarningMessagesManager.testCardWarning(), autoUpdate = true) return@let } - if (card.useOldStyleDerivation && !preferencesStorage.wasRestoreFundsWarningClosed()) { - addWarningMessage(warning = WarningMessagesManager.restoreFundsWarning()) - } showWarningLowRemainingSignaturesIfNeeded(card) if (card.firmwareVersion.type != FirmwareVersion.FirmwareType.Release) { @@ -190,6 +188,7 @@ class WarningsMiddleware { true ) } + null -> Unit } } } diff --git a/app/src/main/java/com/tangem/tap/features/wallet/ui/adapters/WarningMessagesAdapter.kt b/app/src/main/java/com/tangem/tap/features/wallet/ui/adapters/WarningMessagesAdapter.kt index f77b716bc7..dee8fef67c 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/ui/adapters/WarningMessagesAdapter.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/ui/adapters/WarningMessagesAdapter.kt @@ -1,16 +1,13 @@ package com.tangem.tap.features.wallet.ui.adapters -import android.content.res.Resources import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import androidx.core.os.ConfigurationCompat import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.ListAdapter import androidx.recyclerview.widget.RecyclerView import com.google.android.play.core.review.ReviewManagerFactory import com.tangem.tap.common.analytics.AnalyticsEvent -import com.tangem.tap.common.extensions.dispatchOpenUrl import com.tangem.tap.common.extensions.getActivity import com.tangem.tap.common.extensions.getColor import com.tangem.tap.common.extensions.getString @@ -19,7 +16,6 @@ import com.tangem.tap.common.extensions.show import com.tangem.tap.common.feedback.RateCanBeBetterEmail import com.tangem.tap.common.redux.global.GlobalAction import com.tangem.tap.domain.configurable.warningMessage.WarningMessage -import com.tangem.tap.domain.configurable.warningMessage.WarningMessagesManager import com.tangem.tap.features.wallet.redux.WalletAction import com.tangem.tap.store import com.tangem.wallet.R @@ -89,26 +85,12 @@ class WarningMessageVH(val binding: LayoutWarningCardActionBinding) : RecyclerVi binding.btnClose.hide() val buttonAction = - when { - warning.titleResId == R.string.warning_important_security_info -> { + when (warning.titleResId) { + R.string.warning_important_security_info -> { View.OnClickListener { store.dispatch(WalletAction.DialogAction.SignedHashesMultiWalletDialog) } } - warning.messageResId == R.string.alert_funds_restoration_message -> { - binding.btnClose.show() - binding.btnClose.setOnClickListener { - store.dispatch(GlobalAction.HideWarningMessage(warning)) - store.dispatch(WalletAction.Warnings.RestoreFundsWarningClosed) - } - val locale = ConfigurationCompat - .getLocales(Resources.getSystem().configuration) - .get(0) - val url = WarningMessagesManager.getRestoreFundsGuideUrl(locale.language) - View.OnClickListener { - store.dispatchOpenUrl(url) - } - } else -> { View.OnClickListener { store.dispatch(GlobalAction.HideWarningMessage(warning)) diff --git a/app/src/main/java/com/tangem/tap/persistence/PreferencesStorage.kt b/app/src/main/java/com/tangem/tap/persistence/PreferencesStorage.kt index f676467852..15073fb931 100644 --- a/app/src/main/java/com/tangem/tap/persistence/PreferencesStorage.kt +++ b/app/src/main/java/com/tangem/tap/persistence/PreferencesStorage.kt @@ -5,7 +5,7 @@ import android.content.Context import android.content.SharedPreferences import androidx.core.content.edit import com.tangem.common.json.MoshiJsonConverter -import java.util.* +import java.util.Calendar class PreferencesStorage(applicationContext: Application) { @@ -53,20 +53,11 @@ class PreferencesStorage(applicationContext: Application) { preferences.edit { putInt(APP_LAUNCH_COUNT_KEY, ++count) } } - fun wasRestoreFundsWarningClosed(): Boolean { - return preferences.getBoolean(RESTORE_FUNDS_CLOSED_KEY, false) - } - - fun saveRestoreFundsWarningClosed() { - preferences.edit { putBoolean(RESTORE_FUNDS_CLOSED_KEY, true) } - } - companion object { private const val PREFERENCES_NAME = "tapPrefs" private const val DISCLAIMER_ACCEPTED_KEY = "disclaimerAccepted" private const val TWINS_ONBOARDING_SHOWN_KEY = "twinsOnboardingShown" private const val APP_LAUNCH_COUNT_KEY = "launchCount" - private const val RESTORE_FUNDS_CLOSED_KEY = "restoreFundsClosed" } } From 44b4938461ee442bb4ce68774841bfc575f14c7e Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 14 Jul 2022 16:14:00 +0400 Subject: [PATCH 054/177] Updated on 2026-08-14 --- app/src/main/java/com/tangem/tap/common/DialogManager.kt | 6 ++++++ .../details/redux/walletconnect/WalletConnectMiddleware.kt | 2 +- .../details/redux/walletconnect/WalletConnectState.kt | 1 + app/src/main/res/values-de/strings_final.xml | 1 + app/src/main/res/values-fr/strings_final.xml | 1 + app/src/main/res/values-it/strings_final.xml | 1 + app/src/main/res/values-ru/strings_final.xml | 2 ++ app/src/main/res/values/strings_final.xml | 1 + 8 files changed, 14 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/tangem/tap/common/DialogManager.kt b/app/src/main/java/com/tangem/tap/common/DialogManager.kt index 342e29a83e..fda1f1a294 100644 --- a/app/src/main/java/com/tangem/tap/common/DialogManager.kt +++ b/app/src/main/java/com/tangem/tap/common/DialogManager.kt @@ -105,6 +105,12 @@ class DialogManager : StoreSubscriber { dAppName = state.dialog.dAppName, context = context ) + is WalletConnectDialog.UnsupportedNetwork -> + SimpleAlertDialog.create( + titleRes = R.string.wallet_connect, + messageRes = R.string.wallet_connect_unsupported_blockchain, + context = context + ) is BackupDialog.AddMoreBackupCards -> AddMoreBackupCardsDialog.create(context) is BackupDialog.BackupInProgress -> BackupInProgressDialog.create(context) is BackupDialog.UnfinishedBackupFound -> UnfinishedBackupFoundDialog.create(context) diff --git a/app/src/main/java/com/tangem/tap/features/details/redux/walletconnect/WalletConnectMiddleware.kt b/app/src/main/java/com/tangem/tap/features/details/redux/walletconnect/WalletConnectMiddleware.kt index 40da1f4df2..7f7a88748a 100644 --- a/app/src/main/java/com/tangem/tap/features/details/redux/walletconnect/WalletConnectMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/details/redux/walletconnect/WalletConnectMiddleware.kt @@ -158,7 +158,7 @@ class WalletConnectMiddleware { } is WalletConnectAction.SwitchBlockchain -> { val blockchain = action.blockchain.guard { - store.dispatchOnMain(GlobalAction.ShowDialog(WalletConnectDialog.UnsupportedCard)) // TODO: add relevant dialog + store.dispatchOnMain(GlobalAction.ShowDialog(WalletConnectDialog.UnsupportedNetwork)) return } diff --git a/app/src/main/java/com/tangem/tap/features/details/redux/walletconnect/WalletConnectState.kt b/app/src/main/java/com/tangem/tap/features/details/redux/walletconnect/WalletConnectState.kt index 4f5861c67b..fbd95c6393 100644 --- a/app/src/main/java/com/tangem/tap/features/details/redux/walletconnect/WalletConnectState.kt +++ b/app/src/main/java/com/tangem/tap/features/details/redux/walletconnect/WalletConnectState.kt @@ -82,6 +82,7 @@ data class WalletForSession( sealed class WalletConnectDialog : StateDialog { data class ClipboardOrScanQr(val clipboardUri: String) : WalletConnectDialog() object UnsupportedCard : WalletConnectDialog() + object UnsupportedNetwork : WalletConnectDialog() data class AddNetwork(val network: String) : WalletConnectDialog() object OpeningSessionRejected : WalletConnectDialog() object SessionTimeout : WalletConnectDialog() diff --git a/app/src/main/res/values-de/strings_final.xml b/app/src/main/res/values-de/strings_final.xml index 7dd40e2633..b944fee969 100644 --- a/app/src/main/res/values-de/strings_final.xml +++ b/app/src/main/res/values-de/strings_final.xml @@ -56,4 +56,5 @@ The %s token is the main currency on the %s network and cannot be hidden as long as you have other tokens on this network in the list. %s network not found. Please, add it first and try again. + Blockchain is not supported. Please select another blockchain. \ No newline at end of file diff --git a/app/src/main/res/values-fr/strings_final.xml b/app/src/main/res/values-fr/strings_final.xml index 7fb2245b89..571a03b91a 100644 --- a/app/src/main/res/values-fr/strings_final.xml +++ b/app/src/main/res/values-fr/strings_final.xml @@ -56,4 +56,5 @@ The %s token is the main currency on the %s network and cannot be hidden as long as you have other tokens on this network in the list. %s network not found. Please, add it first and try again. + Blockchain is not supported. Please select another blockchain. \ No newline at end of file diff --git a/app/src/main/res/values-it/strings_final.xml b/app/src/main/res/values-it/strings_final.xml index d561bcdb56..f534f5caf5 100644 --- a/app/src/main/res/values-it/strings_final.xml +++ b/app/src/main/res/values-it/strings_final.xml @@ -56,5 +56,6 @@ The %s token is the main currency on the %s network and cannot be hidden as long as you have other tokens on this network in the list. %s network not found. Please, add it first and try again. + Blockchain is not supported. Please select another blockchain. \ No newline at end of file diff --git a/app/src/main/res/values-ru/strings_final.xml b/app/src/main/res/values-ru/strings_final.xml index 496f4f7815..4cb3e5fbbb 100644 --- a/app/src/main/res/values-ru/strings_final.xml +++ b/app/src/main/res/values-ru/strings_final.xml @@ -61,4 +61,6 @@ Токен %s является основной валютой в сети %s и не может быть скрыт, до тех пор пока у вас в списке есть другие токены этой сети. Сеть %s не найдена. Пожалуйста, добавьте её и попробуйте заново. + Сеть не поддерживается. Пожалуйста, выберите другую сеть. + diff --git a/app/src/main/res/values/strings_final.xml b/app/src/main/res/values/strings_final.xml index 75bcce3b9a..5fe04101e5 100644 --- a/app/src/main/res/values/strings_final.xml +++ b/app/src/main/res/values/strings_final.xml @@ -61,4 +61,5 @@ The %s token is the main currency on the %s network and cannot be hidden as long as you have other tokens on this network in the list. %s network not found. Please, add it first and try again. + Blockchain is not supported. Please select another blockchain. From 04fd78e2a1170f7591c7ada8eabd8d2219520f11 Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 14 Jul 2022 16:19:11 +0400 Subject: [PATCH 055/177] Updated on 2026-08-14 --- .../com/tangem/tap/domain/walletconnect/WalletConnectManager.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/com/tangem/tap/domain/walletconnect/WalletConnectManager.kt b/app/src/main/java/com/tangem/tap/domain/walletconnect/WalletConnectManager.kt index 40ef0df234..7d36064f1e 100644 --- a/app/src/main/java/com/tangem/tap/domain/walletconnect/WalletConnectManager.kt +++ b/app/src/main/java/com/tangem/tap/domain/walletconnect/WalletConnectManager.kt @@ -444,7 +444,7 @@ class WalletConnectManager { } } else -> { - + Timber.d("WC: unrecognized custom request") } } } From 6989986c9e7eba05b3880be79d7479e915053c0f Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 15 Jul 2022 12:38:49 +0300 Subject: [PATCH 056/177] Updated on 2026-08-14 --- .../main/java/com/tangem/tap/common/feedback/FeedbackManager.kt | 2 ++ 1 file changed, 2 insertions(+) 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 dccb805723..4e551608e5 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 @@ -12,6 +12,7 @@ import java.io.FileWriter import java.io.StringWriter import timber.log.Timber import zendesk.configurations.Configuration +import zendesk.core.AnonymousIdentity import zendesk.core.Zendesk import zendesk.support.Support import zendesk.support.request.RequestConfiguration @@ -36,6 +37,7 @@ class FeedbackManager( /* oauthClientId = */ zendeskConfig.clientId, ) Support.INSTANCE.init(Zendesk.INSTANCE) + Zendesk.INSTANCE.setIdentity(AnonymousIdentity()) } fun sendEmail(feedbackData: FeedbackData, onFail: ((Exception) -> Unit)? = null) { From a72ba0edea4600d842a3d33ea127b70915a83ba5 Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 15 Jul 2022 11:50:34 +0300 Subject: [PATCH 057/177] Updated on 2026-08-14 --- .../tap/features/wallet/ui/WalletFragment.kt | 3 ++ app/src/main/res/layout/fragment_wallet.xml | 37 +++++++++---------- 2 files changed, 21 insertions(+), 19 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/features/wallet/ui/WalletFragment.kt b/app/src/main/java/com/tangem/tap/features/wallet/ui/WalletFragment.kt index 176fa48a14..73f315e29b 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/ui/WalletFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/ui/WalletFragment.kt @@ -13,6 +13,7 @@ import androidx.recyclerview.widget.RecyclerView import androidx.transition.TransitionInflater import by.kirich1409.viewbindingdelegate.viewBinding import coil.load +import coil.size.Scale import com.tangem.tap.MainActivity import com.tangem.tap.common.extensions.show import com.tangem.tap.common.recyclerView.SpaceItemDecoration @@ -166,6 +167,8 @@ class WalletFragment : Fragment(R.layout.fragment_wallet), StoreSubscriber + android:id="@+id/cl_wallet" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:paddingBottom="74dp"> + android:id="@+id/iv_card" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginStart="16dp" + android:layout_marginTop="8dp" + android:layout_marginEnd="16dp" + android:layout_marginBottom="12dp" + android:scaleType="fitCenter" + android:adjustViewBounds="true" + android:elevation="3dp" + android:maxHeight="215dp" + android:contentDescription="@null" + app:layout_constraintTop_toTopOf="parent" + tools:src="@drawable/card_placeholder_black" /> Date: Fri, 15 Jul 2022 13:28:19 +0300 Subject: [PATCH 058/177] Updated on 2026-08-14 --- app/src/main/res/layout/fragment_wallet.xml | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/app/src/main/res/layout/fragment_wallet.xml b/app/src/main/res/layout/fragment_wallet.xml index 1545257fc9..e77908ee26 100644 --- a/app/src/main/res/layout/fragment_wallet.xml +++ b/app/src/main/res/layout/fragment_wallet.xml @@ -174,6 +174,8 @@ android:layout_height="wrap_content" android:visibility="gone" android:layout_marginTop="30dp" + android:layout_marginStart="16dp" + android:layout_marginEnd="16dp" app:layout_constraintTop_toBottomOf="@id/l_address" app:layout_constraintVertical_bias="1" app:layout_constraintBottom_toBottomOf="parent" /> @@ -185,6 +187,8 @@ android:layout_height="wrap_content" android:visibility="gone" android:layout_marginTop="30dp" + android:layout_marginStart="16dp" + android:layout_marginEnd="16dp" app:layout_constraintTop_toBottomOf="@id/l_address" app:layout_constraintVertical_bias="1" app:layout_constraintBottom_toBottomOf="parent" /> From 926dd78d1a02c13331196900cc3ee0e8d8deeab0 Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 15 Jul 2022 16:18:47 +0300 Subject: [PATCH 059/177] Updated on 2026-08-14 --- .../wallet/ui/adapters/WalletAdapter.kt | 3 ++ .../drawable/shape_badge_custom_currency.xml | 2 +- .../main/res/layout/item_currency_wallet.xml | 45 +++++++++++++------ 3 files changed, 36 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/features/wallet/ui/adapters/WalletAdapter.kt b/app/src/main/java/com/tangem/tap/features/wallet/ui/adapters/WalletAdapter.kt index 8514f1e384..b4f5f84a1f 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/ui/adapters/WalletAdapter.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/ui/adapters/WalletAdapter.kt @@ -9,6 +9,7 @@ import androidx.recyclerview.widget.RecyclerView import com.tangem.blockchain.common.Blockchain import com.tangem.blockchain.common.Token import com.tangem.domain.common.TapWorkarounds.derivationStyle +import com.tangem.tap.common.extensions.getGreyedOutIconRes import com.tangem.tap.common.extensions.getString import com.tangem.tap.common.extensions.hide import com.tangem.tap.common.extensions.show @@ -116,6 +117,8 @@ class WalletAdapter ?: root.getString(id = R.string.token_item_no_rate) badgeCustomBalance.isVisible = isCustomCurrency + ivBlockchain.isVisible = wallet.currency.isToken() + ivBlockchain.setImageResource(wallet.currency.blockchain.getGreyedOutIconRes()) cardWallet.setOnClickListener { store.dispatch(WalletAction.MultiWallet.SelectWallet(wallet)) diff --git a/app/src/main/res/drawable/shape_badge_custom_currency.xml b/app/src/main/res/drawable/shape_badge_custom_currency.xml index 2c3b7f7bd4..cfd740103d 100644 --- a/app/src/main/res/drawable/shape_badge_custom_currency.xml +++ b/app/src/main/res/drawable/shape_badge_custom_currency.xml @@ -7,7 +7,7 @@ android:height="12dp" /> diff --git a/app/src/main/res/layout/item_currency_wallet.xml b/app/src/main/res/layout/item_currency_wallet.xml index de692cfa83..7f145c3e1d 100644 --- a/app/src/main/res/layout/item_currency_wallet.xml +++ b/app/src/main/res/layout/item_currency_wallet.xml @@ -18,11 +18,12 @@ + android:paddingTop="12dp" + android:paddingBottom="12dp" + android:paddingStart="16dp" + android:paddingEnd="16dp" + android:animateLayoutChanges="true" + android:clipToPadding="false"> + tools:src="@drawable/shape_circle" + tools:tint="@color/iconGray" /> + + + android:id="@+id/badge_custom_balance" + android:layout_width="10dp" + android:layout_height="10dp" + android:background="@drawable/shape_badge_custom_currency" + android:visibility="gone" + app:layout_constraintBottom_toBottomOf="@id/iv_currency" + app:layout_constraintEnd_toEndOf="@id/iv_currency" + tools:visibility="visible" /> Date: Fri, 15 Jul 2022 17:10:13 +0300 Subject: [PATCH 060/177] Updated on 2026-08-14 --- app/src/main/res/layout/fragment_wallet.xml | 43 ++++++++++----------- 1 file changed, 21 insertions(+), 22 deletions(-) diff --git a/app/src/main/res/layout/fragment_wallet.xml b/app/src/main/res/layout/fragment_wallet.xml index 55fe30d0a9..d9339cbb3a 100644 --- a/app/src/main/res/layout/fragment_wallet.xml +++ b/app/src/main/res/layout/fragment_wallet.xml @@ -43,10 +43,11 @@ android:overScrollMode="never"> + android:id="@+id/cl_wallet" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:paddingBottom="74dp" + android:clipToPadding="false"> + + - - - - - From f683452b864b2c32360b3486214a9a6be9895b90 Mon Sep 17 00:00:00 2001 From: Tangem Date: Wed, 20 Jul 2022 16:42:17 +0300 Subject: [PATCH 061/177] Updated on 2026-08-14 --- app/src/main/res/values/zendesk_styles.xml | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/app/src/main/res/values/zendesk_styles.xml b/app/src/main/res/values/zendesk_styles.xml index ebb4fcab6b..0022b241b1 100644 --- a/app/src/main/res/values/zendesk_styles.xml +++ b/app/src/main/res/values/zendesk_styles.xml @@ -4,4 +4,15 @@ @color/darkGray6 @color/darkGray6 + + // Contact us FAB style + From 2c36329434af1de61638c152259095115e43ce79 Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 21 Jul 2022 09:31:33 +0300 Subject: [PATCH 062/177] Updated on 2026-08-14 --- app/src/main/res/values-ru/strings_final.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values-ru/strings_final.xml b/app/src/main/res/values-ru/strings_final.xml index d2028c922e..f7c9df689f 100644 --- a/app/src/main/res/values-ru/strings_final.xml +++ b/app/src/main/res/values-ru/strings_final.xml @@ -61,7 +61,7 @@ Скрыть Вы скрываете токен с главного экрана, но в любой момент сможете добавить его обратно. Невозможно скрыть %s - Токен %s является основной валютой в сети %s и не может быть скрыт, до тех пор пока у вас в списке есть другие токены этой сети. + Токен %s является основной валютой в сети %s и не может быть скрыт до тех пор, пока у вас в списке есть другие токены этой сети. Сеть %s не найдена. Пожалуйста, добавьте её и попробуйте заново. Сеть %s From 5f22df243a2ea26325ff8a72c32bb558a13e6dc6 Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 21 Jul 2022 09:41:27 +0300 Subject: [PATCH 063/177] Updated on 2026-08-14 --- .../wallet/redux/middlewares/WalletMiddleware.kt | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/WalletMiddleware.kt b/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/WalletMiddleware.kt index 7a4ac13ea5..1f8060618a 100644 --- a/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/WalletMiddleware.kt +++ b/app/src/main/java/com/tangem/tap/features/wallet/redux/middlewares/WalletMiddleware.kt @@ -15,12 +15,7 @@ import com.tangem.domain.common.extensions.withMainContext import com.tangem.operations.attestation.Attestation import com.tangem.operations.attestation.OnlineCardVerifier import com.tangem.tap.common.analytics.Analytics -import com.tangem.tap.common.extensions.copyToClipboard -import com.tangem.tap.common.extensions.dispatchDebugErrorNotification -import com.tangem.tap.common.extensions.dispatchOnMain -import com.tangem.tap.common.extensions.onCardScanned -import com.tangem.tap.common.extensions.shareText -import com.tangem.tap.common.extensions.stripZeroPlainString +import com.tangem.tap.common.extensions.* import com.tangem.tap.common.redux.AppState import com.tangem.tap.common.redux.global.GlobalAction import com.tangem.tap.common.redux.navigation.AppScreen @@ -29,6 +24,7 @@ import com.tangem.tap.domain.failedRates import com.tangem.tap.domain.loadedRates import com.tangem.tap.features.demo.DemoHelper import com.tangem.tap.features.home.redux.HomeAction +import com.tangem.tap.features.home.redux.HomeMiddleware import com.tangem.tap.features.send.redux.PrepareSendScreen import com.tangem.tap.features.wallet.models.PendingTransactionType import com.tangem.tap.features.wallet.models.filterByCoin @@ -233,9 +229,7 @@ class WalletMiddleware { action.context.shareText(action.address) } is WalletAction.ExploreAddress -> { - val uri = Uri.parse(action.exploreUrl) - val intent = Intent(Intent.ACTION_VIEW, uri) - ContextCompat.startActivity(action.context, intent, null) + store.dispatchOpenUrl(action.exploreUrl) } is WalletAction.Send -> { val newAction = prepareSendAction(action.amount, store.state.walletState) From 4ff768af303d989309ba06af525af9dbc7c3a583 Mon Sep 17 00:00:00 2001 From: Tangem Date: Thu, 21 Jul 2022 10:47:20 +0300 Subject: [PATCH 064/177] Updated on 2026-08-14 --- .../java/com/tangem/tap/features/home/HomeFragment.kt | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/tangem/tap/features/home/HomeFragment.kt b/app/src/main/java/com/tangem/tap/features/home/HomeFragment.kt index c453cdadc4..fe998d4f19 100644 --- a/app/src/main/java/com/tangem/tap/features/home/HomeFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/home/HomeFragment.kt @@ -4,16 +4,20 @@ import android.os.Bundle import android.view.View import androidx.compose.runtime.MutableState import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.setValue import androidx.compose.ui.platform.ComposeView import androidx.fragment.app.Fragment import com.google.accompanist.appcompattheme.AppCompatTheme +import com.tangem.tap.common.entities.IndeterminateProgressButton import com.tangem.tap.common.redux.navigation.AppScreen import com.tangem.tap.common.redux.navigation.NavigationAction import com.tangem.tap.features.home.compose.StoriesScreen import com.tangem.tap.features.home.redux.HomeAction import com.tangem.tap.features.home.redux.HomeState import com.tangem.tap.features.onboarding.products.wallet.redux.BackupAction +import com.tangem.tap.features.send.redux.states.ButtonState import com.tangem.tap.features.tokens.redux.TokensAction +import com.tangem.tap.features.wallet.redux.ProgressState import com.tangem.tap.store import com.tangem.wallet.R import org.rekotlin.StoreSubscriber @@ -37,7 +41,12 @@ class HomeFragment : Fragment(R.layout.fragment_home), StoreSubscriber Date: Mon, 4 Jul 2022 18:48:26 +0300 Subject: [PATCH 065/177] Updated on 2026-08-14 --- .gitignore | 4 +- .idea/codeStyles/Project.xml | 202 +++++++++++++++++++ .idea/codeStyles/codeStyleConfig.xml | 5 + .idea/inspectionProfiles/Project_Default.xml | 92 +++++++++ 4 files changed, 302 insertions(+), 1 deletion(-) create mode 100644 .idea/codeStyles/Project.xml create mode 100644 .idea/codeStyles/codeStyleConfig.xml create mode 100644 .idea/inspectionProfiles/Project_Default.xml diff --git a/.gitignore b/.gitignore index 4cc00a7e1f..dd64e70b22 100644 --- a/.gitignore +++ b/.gitignore @@ -14,6 +14,8 @@ local.properties # User-specific configurations .idea +!.idea/codeStyles +!.idea/inspectionProfiles # LayoutInspector files /captures @@ -26,4 +28,4 @@ local.properties **/fastlane/report.xml **/fastlane/Preview.html **/fastlane/screenshots -**/fastlane/test_output \ No newline at end of file +**/fastlane/test_output diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml new file mode 100644 index 0000000000..96ff0f5af3 --- /dev/null +++ b/.idea/codeStyles/Project.xml @@ -0,0 +1,202 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +