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,