From 88021b8169864ddae45720b1f9c35321604c62fc Mon Sep 17 00:00:00 2001 From: Tangem Date: Tue, 3 Sep 2024 12:22:21 +0300 Subject: [PATCH] Updated on 2026-08-14 --- core/res/src/main/res/values-de/strings.xml | 8 +++++- core/res/src/main/res/values-ru/strings.xml | 6 +++-- .../src/main/res/values-uk-rUA/strings.xml | 7 +++--- core/res/src/main/res/values/strings.xml | 5 +++- .../components/inputrow/InputRowImageBase.kt | 20 ++++++++------- .../components/inputrow/InputRowImageInfo.kt | 2 +- .../state/InnerYieldBalanceState.kt | 3 ++- .../RewardsValidatorStateConverter.kt | 1 + .../converters/YieldBalancesConverter.kt | 25 +++++++++++-------- .../previewdata/InitialStakingStatePreview.kt | 1 + .../ValidatorSelectChangeTransformer.kt | 4 ++- .../ui/StakingClaimRewardsValidatorContent.kt | 8 +++--- .../ui/StakingInitialInfoContent.kt | 10 ++++---- 13 files changed, 61 insertions(+), 39 deletions(-) diff --git a/core/res/src/main/res/values-de/strings.xml b/core/res/src/main/res/values-de/strings.xml index 54492f5825..b0e97efb9f 100644 --- a/core/res/src/main/res/values-de/strings.xml +++ b/core/res/src/main/res/values-de/strings.xml @@ -70,6 +70,7 @@ Zugang verweigert Alle Erlauben + Analysen Anwenden Genehmigung Genehmigen @@ -82,6 +83,7 @@ Gehe zu %1$s D hast keinen Zugang zur Kamera erteilt, bitte passe deine Datenschutzeinstellungen an Abbrechen + Aktion wählen Stakingbelohnungen beanstpruchen Schließen Weiter @@ -354,7 +356,7 @@ Keine Daten Schnelle Aktionen Ergebnis - Token unter 100k Marktkapitalisierung anzeigen + Token unter 100k USD Marktkapitalisierung anzeigen Token anzeigen Kein Ergebnis Netzwerk auswählen @@ -646,6 +648,7 @@ Jährliche prozentuale Rendite Die jährliche prozentuale Rendite, die du durch die Teilnahme am Staking erzielen kannst. Effektiver Jahreszins + Belohnungen sammeln sich täglich automatisch in deinem Staking-Konto an. Verfügbar Durchschnittliche Belohnungsquote Was sit Staking? @@ -664,6 +667,7 @@ Der Zeitraum, den du nach der Beantragung der Abhebung von Geldern aus dem Staking warten musst, bevor die Token verfügbar werden. Aufwärmphase Die zugewiesene Zeit für die Aktivierung der Teilnahme am Staking. + Gesperrt Migrieren Natives Staking Mit dem Staking kannst Du %1$s verdienen. Deine Staking-Belohnungen erhältst Du jeden tag. @@ -672,6 +676,8 @@ Mit dem Staking kannst Du %1$s verdienen. Deine Staking-Belohnungen erhältst Du jede Woche. Verdiene Staking-Belohnungen Die Belohnungen werden sofort nach dem unstaken gestoppt. Der unstakingprozess dauert %s. + Dein Guthaben wurde freigegeben. Du kannst es jetzt zusammen mit deinen verdienten Prämien auszahlen. + Vorbereitung Bereit zum Abheben Erneut binden Erneut staken diff --git a/core/res/src/main/res/values-ru/strings.xml b/core/res/src/main/res/values-ru/strings.xml index 50e75be7a4..2f4348ef70 100644 --- a/core/res/src/main/res/values-ru/strings.xml +++ b/core/res/src/main/res/values-ru/strings.xml @@ -357,7 +357,7 @@ Нет данных Быстрые действия Результат - Токены с капитализацией меньше 100к + Токены с капитализацией меньше 100к USD Показать токены Нет результата Выберите сеть @@ -666,7 +666,7 @@ Это период, определяющий, когда участники стейкинга получат свои вознаграждения. Вознаграждение для получения: %s Стейкинг %s - Период вывода + Период отзыва Период, который необходимо подождать после запроса на вывод средств из стейкинга, прежде чем токены станут доступны. Период прогрева Время, необходимое для начала процесса стейкинга и активации процесса начисления наград @@ -698,10 +698,12 @@ Застейкать еще Застейкать %s Вывести %s + Отзыв Разблокировать Вывод из стейкинга Проверьте процесс завершения стейкинга, чтобы вывести свои средства. Завершение стейкинга + Завершение стейкинга %s Валидатор Валидаторы Проголосовать diff --git a/core/res/src/main/res/values-uk-rUA/strings.xml b/core/res/src/main/res/values-uk-rUA/strings.xml index 767c26f4fd..83d2675b15 100644 --- a/core/res/src/main/res/values-uk-rUA/strings.xml +++ b/core/res/src/main/res/values-uk-rUA/strings.xml @@ -351,7 +351,7 @@ Не вдалося завантажити дані... Швидкі дії Результат - Переглянути токени до 100к ринкової капіталізації + Переглянути токени до 100к USD ринкової капіталізації Показати токени Жодного результату Виберіть мережу @@ -674,7 +674,7 @@ Стейкінг дозволяє заробляти %1$s. Ваші винагороди за стейкінг зараховуються щомісяця. Стейкінг дозволяє заробляти %1$s. Ваші винагороди за стейкінг зараховуються щотиждня. Отримуйте винагороду за стейкінг - Винагороди припиняють нараховуватися одразу після того, як ви знімаєте ставку. Процес зняття займає %s. + Винагорода припиняє нараховуватися одразу після того, як ви почнете процес завершення стейкінгу. Процес завершення триває %s. Зʼєднати ще раз Повторно застейкати Застейкати винагороди @@ -695,7 +695,7 @@ Застейкати %s Зняти зі стейкінгу %s Розблокувати - Скасовано зі стейкінгу + Вивід зі стейкінгу Перевірити незастейкані, щоб отримати свої активи Зняти зі стейкінгу Валідатор @@ -871,6 +871,7 @@ На цій картці залишається лише %s підписів. Ви повинні вивести всі свої кошти. Низька кількість підписів Токени в різних мережах можуть мати різні адреси. Переконайтеся, що ваша адреса відповідає мережі, коли переказуєте кошти. + Токен MATIC мігрує до POL. Однак кінцевого терміну не встановлено і MATIC ще не застарілий. Ви можете безпечно продовжувати використовувати токен MATIC або скористатися біржами, щоб обміняти його на POL. Використовуйте вашу картку, щоб отримати адресу для %d мережі Використовуйте вашу картку, щоб отримати адреси для %d мереж diff --git a/core/res/src/main/res/values/strings.xml b/core/res/src/main/res/values/strings.xml index 7b30804e92..566ba9fae5 100644 --- a/core/res/src/main/res/values/strings.xml +++ b/core/res/src/main/res/values/strings.xml @@ -356,7 +356,7 @@ No data Quick actions Result - See tokens under 100k market cap + See tokens under 100k USD market cap Show tokens No result Select network @@ -644,6 +644,7 @@ Annual percentage rate The annual percentage return you can earn from participating in staking. APR + Rewards automatically accumulate in your staking balance daily. Available Average Reward Rate What is Staking? @@ -671,6 +672,7 @@ Staking allows you to earn %1$s. Your staking rewards arrive every week. Earn staking rewards Rewards stop accruing immediately after you start unstaking. The unstaking process takes %s. + Your funds have been unstaked. You can now withdraw them along with your earned rewards. Preparing Ready to withdraw Rebond @@ -698,6 +700,7 @@ Unstaked Check unstaked to claim your assets Unstaking + Unstaking assets %s Validator Validators Vote diff --git a/core/ui/src/main/java/com/tangem/core/ui/components/inputrow/InputRowImageBase.kt b/core/ui/src/main/java/com/tangem/core/ui/components/inputrow/InputRowImageBase.kt index 0442dc06ce..fd4913770c 100644 --- a/core/ui/src/main/java/com/tangem/core/ui/components/inputrow/InputRowImageBase.kt +++ b/core/ui/src/main/java/com/tangem/core/ui/components/inputrow/InputRowImageBase.kt @@ -42,7 +42,7 @@ import com.tangem.core.ui.res.TangemThemePreview @Composable internal fun InputRowImageBase( subtitle: TextReference, - imageUrl: String, + imageUrl: String?, modifier: Modifier = Modifier, caption: TextReference? = null, subtitleColor: Color = TangemTheme.colors.text.primary1, @@ -55,14 +55,16 @@ internal fun InputRowImageBase( verticalAlignment = Alignment.CenterVertically, modifier = modifier, ) { - InputRowAsyncImage( - imageUrl = imageUrl, - isGrayscale = isGrayscaleImage, - modifier = Modifier - .size(TangemTheme.dimens.spacing36) - .clip(TangemTheme.shapes.roundedCornersXLarge), - ) - SpacerW12() + if (imageUrl != null) { + InputRowAsyncImage( + imageUrl = imageUrl, + isGrayscale = isGrayscaleImage, + modifier = Modifier + .size(TangemTheme.dimens.spacing36) + .clip(TangemTheme.shapes.roundedCornersXLarge), + ) + SpacerW12() + } Column { Text( text = subtitle.resolveReference(), diff --git a/core/ui/src/main/java/com/tangem/core/ui/components/inputrow/InputRowImageInfo.kt b/core/ui/src/main/java/com/tangem/core/ui/components/inputrow/InputRowImageInfo.kt index 967547e085..16ea439603 100644 --- a/core/ui/src/main/java/com/tangem/core/ui/components/inputrow/InputRowImageInfo.kt +++ b/core/ui/src/main/java/com/tangem/core/ui/components/inputrow/InputRowImageInfo.kt @@ -40,7 +40,7 @@ import com.tangem.core.ui.res.TangemThemePreview fun InputRowImageInfo( subtitle: TextReference, infoTitle: TextReference, - imageUrl: String, + imageUrl: String?, modifier: Modifier = Modifier, title: TextReference? = null, caption: TextReference? = null, diff --git a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/InnerYieldBalanceState.kt b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/InnerYieldBalanceState.kt index c2ed6f2d62..3056c85688 100644 --- a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/InnerYieldBalanceState.kt +++ b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/InnerYieldBalanceState.kt @@ -32,7 +32,8 @@ data class BalanceGroupedState( @Immutable data class BalanceState( - val validator: Yield.Validator, + val validator: Yield.Validator?, + val title: TextReference, val cryptoValue: String, val cryptoDecimal: BigDecimal, val cryptoAmount: TextReference, diff --git a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/converters/RewardsValidatorStateConverter.kt b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/converters/RewardsValidatorStateConverter.kt index b27bdf6c41..673e81499b 100644 --- a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/converters/RewardsValidatorStateConverter.kt +++ b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/converters/RewardsValidatorStateConverter.kt @@ -87,6 +87,7 @@ internal class RewardsValidatorStateConverter( return BalanceState( validator = this, + title = stringReference(this.name), cryptoValue = cryptoValue.parseBigDecimal(cryptoCurrency.decimals), cryptoDecimal = cryptoValue, cryptoAmount = cryptoAmount, diff --git a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/converters/YieldBalancesConverter.kt b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/converters/YieldBalancesConverter.kt index 098483c942..1524154584 100644 --- a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/converters/YieldBalancesConverter.kt +++ b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/converters/YieldBalancesConverter.kt @@ -65,7 +65,7 @@ internal class YieldBalancesConverter( val isClickable = item.key.isClickable() title?.let { BalanceGroupedState( - items = item.value.mapBalances().toPersistentList(), + items = item.value.mapBalances(item.key).toPersistentList(), footer = footer, title = it, type = item.key, @@ -76,23 +76,33 @@ internal class YieldBalancesConverter( .filterNot { it.items.isEmpty() } .toPersistentList() - private fun List.mapBalances(): List { + private fun List.mapBalances(balanceType: BalanceType): List { val cryptoCurrencyStatus = cryptoCurrencyStatusProvider() val appCurrency = appCurrencyProvider() val cryptoCurrency = cryptoCurrencyStatus.currency + var incrementingIndex = 1 return this .filterNot { it.amount.isZero() } .mapNotNull { balance -> val validator = yield.validators.firstOrNull { balance.validatorAddress?.contains(it.address, ignoreCase = true) == true - } ?: mockedValidator + } + val cryptoAmount = balance.amount val fiatAmount = cryptoCurrencyStatus.value.fiatRate?.times(cryptoAmount) val unbonding = getUnbondingDate(balance.date) val warmupPeriod = yield.metadata.warmupPeriod.days - validator?.let { + val title = when { + validator != null -> stringReference(validator.name) + balanceType == BalanceType.UNSTAKING -> { + resourceReference(R.string.staking_unstaking_item_name, wrappedList(incrementingIndex++)) + } + else -> null + } + title?.let { BalanceState( validator = validator, + title = title, cryptoValue = cryptoAmount.parseBigDecimal(cryptoCurrency.decimals), cryptoDecimal = cryptoAmount, cryptoAmount = stringReference( @@ -164,12 +174,5 @@ internal class YieldBalancesConverter( private companion object { const val DAY_IN_MILLIS = 24 * 60 * 60 * 1000 - - private val mockedValidator = Yield.Validator( - address = "", - status = "", - name = "Mocked validator", - preferred = true, - ) } } \ No newline at end of file diff --git a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/previewdata/InitialStakingStatePreview.kt b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/previewdata/InitialStakingStatePreview.kt index 15efd12337..091afc897a 100644 --- a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/previewdata/InitialStakingStatePreview.kt +++ b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/previewdata/InitialStakingStatePreview.kt @@ -71,6 +71,7 @@ internal object InitialStakingStatePreview { isClickable = true, items = persistentListOf( BalanceState( + title = stringReference("Binance"), cryptoValue = "100", cryptoAmount = stringReference("100 SOL"), cryptoDecimal = "100".toBigDecimal(), diff --git a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/validator/ValidatorSelectChangeTransformer.kt b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/validator/ValidatorSelectChangeTransformer.kt index eba4aae409..e6ba4e32db 100644 --- a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/validator/ValidatorSelectChangeTransformer.kt +++ b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/state/transformers/validator/ValidatorSelectChangeTransformer.kt @@ -7,10 +7,12 @@ import com.tangem.features.staking.impl.presentation.state.ValidatorState import com.tangem.utils.transformer.Transformer internal class ValidatorSelectChangeTransformer( - private val selectedValidator: Yield.Validator, + private val selectedValidator: Yield.Validator?, ) : Transformer { + override fun transform(prevState: StakingUiState): StakingUiState { val confirmationState = prevState.confirmationState as? StakingStates.ConfirmationState.Data ?: return prevState + selectedValidator ?: return prevState val validatorState = (confirmationState.validatorState as? ValidatorState.Content)?.copy( chosenValidator = selectedValidator, ) ?: ValidatorState.Content( diff --git a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/ui/StakingClaimRewardsValidatorContent.kt b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/ui/StakingClaimRewardsValidatorContent.kt index 3e6723c8b2..cbcb806d97 100644 --- a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/ui/StakingClaimRewardsValidatorContent.kt +++ b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/ui/StakingClaimRewardsValidatorContent.kt @@ -33,16 +33,16 @@ internal fun StakingClaimRewardsValidatorContent( .verticalScroll(rememberScrollState()), ) { state.rewards.forEachIndexed { index, item -> - key(item.validator.address) { + key(item.title.resolveReference() + index) { InputRowImageInfo( - subtitle = stringReference(item.validator.name), + subtitle = item.title, caption = combinedReference( resourceReference(R.string.staking_details_apr), annotatedReference { appendSpace() appendColored( text = BigDecimalFormatter.formatPercent( - percent = item.validator.apr.orZero(), + percent = item.validator?.apr.orZero(), useAbsoluteValue = true, ), color = TangemTheme.colors.text.accent, @@ -51,7 +51,7 @@ internal fun StakingClaimRewardsValidatorContent( ), infoTitle = item.fiatAmount, infoSubtitle = item.cryptoAmount, - imageUrl = item.validator.image.orEmpty(), + imageUrl = item.validator?.image.orEmpty(), modifier = modifier .roundedShapeItemDecoration(index, state.rewards.lastIndex, false) .background(TangemTheme.colors.background.action) diff --git a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/ui/StakingInitialInfoContent.kt b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/ui/StakingInitialInfoContent.kt index c84e8247e3..ec508e38a9 100644 --- a/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/ui/StakingInitialInfoContent.kt +++ b/features/staking/impl/src/main/java/com/tangem/features/staking/impl/presentation/ui/StakingInitialInfoContent.kt @@ -204,15 +204,15 @@ private fun ActiveStakingBlock(groups: ImmutableList, onCli end = TangemTheme.dimens.spacing12, ), ) - group.items.forEach { balance -> - key(balance.validator.address) { + group.items.forEachIndexed { index, balance -> + key(balance.title.resolveReference() + index) { InputRowImageInfo( - subtitle = stringReference(balance.validator.name), + subtitle = balance.title, caption = getCaption(group.type, balance), isGrayscaleImage = !group.isClickable, infoTitle = balance.fiatAmount, infoSubtitle = balance.cryptoAmount, - imageUrl = balance.validator.image.orEmpty(), + imageUrl = balance.validator?.image, iconEndRes = R.drawable.ic_chevron_right_24.takeIf { group.isClickable }, modifier = Modifier.clickable( interactionSource = remember { MutableInteractionSource() }, @@ -267,7 +267,7 @@ private fun getCaption(balanceType: BalanceType, balance: BalanceState): TextRef appendSpace() appendColored( text = BigDecimalFormatter.formatPercent( - percent = balance.validator.apr.orZero(), + percent = balance.validator?.apr.orZero(), useAbsoluteValue = true, ), color = TangemTheme.colors.text.accent,