Updated on 2026-08-14

This commit is contained in:
Tangem 2024-08-21 21:03:42 +05:00
parent c6fc1ab4da
commit cb203637f5
6 changed files with 81 additions and 38 deletions

View file

@ -1,10 +1,7 @@
package com.tangem.features.staking.impl.presentation.state.converters
import com.tangem.common.extensions.isZero
import com.tangem.core.ui.extensions.pluralReference
import com.tangem.core.ui.extensions.resourceReference
import com.tangem.core.ui.extensions.stringReference
import com.tangem.core.ui.extensions.wrappedList
import com.tangem.core.ui.extensions.*
import com.tangem.core.ui.utils.BigDecimalFormatter
import com.tangem.core.ui.utils.parseBigDecimal
import com.tangem.domain.appcurrency.model.AppCurrency
@ -18,6 +15,8 @@ import com.tangem.utils.Provider
import com.tangem.utils.converter.Converter
import com.tangem.utils.isNullOrZero
import kotlinx.collections.immutable.toPersistentList
import org.joda.time.DateTime
import java.util.Calendar
internal class YieldBalancesConverter(
private val cryptoCurrencyStatusProvider: Provider<CryptoCurrencyStatus>,
@ -88,7 +87,7 @@ internal class YieldBalancesConverter(
}
val cryptoAmount = balance.amount
val fiatAmount = cryptoCurrencyStatus.value.fiatRate?.times(cryptoAmount)
val unbondingPeriod = yield.metadata.cooldownPeriod.days
val unbonding = getUnbondingDate(balance.date)
validator?.let {
BalanceState(
validator = validator,
@ -108,11 +107,7 @@ internal class YieldBalancesConverter(
),
),
rawCurrencyId = balance.rawCurrencyId,
unbondingPeriod = pluralReference(
id = R.plurals.common_days,
count = unbondingPeriod,
formatArgs = wrappedList(unbondingPeriod),
),
unbondingPeriod = unbonding,
pendingActions = balance.pendingActions.toPersistentList(),
)
}
@ -153,4 +148,32 @@ internal class YieldBalancesConverter(
BalanceType.UNKNOWN,
-> false
}
private fun getUnbondingDate(date: DateTime?): TextReference {
val now = DateTime.now().millis
val nowCalendar = Calendar.getInstance()
nowCalendar.resetHours()
val endDate = Calendar.getInstance()
endDate.timeInMillis = date?.millis ?: now
endDate.resetHours()
val days = ((endDate.timeInMillis - nowCalendar.timeInMillis) / DAY_IN_MILLIS).toInt()
return if (days > 0) {
pluralReference(R.plurals.common_in_days, days, wrappedList(days))
} else {
resourceReference(R.string.common_today)
}
}
private fun Calendar.resetHours() {
this[Calendar.HOUR_OF_DAY] = 0
this[Calendar.MINUTE] = 0
this[Calendar.SECOND] = 0
this[Calendar.MILLISECOND] = 0
}
private companion object {
const val DAY_IN_MILLIS = 24 * 60 * 60 * 1000
}
}

View file

@ -232,31 +232,37 @@ private fun ActiveStakingBlock(groups: ImmutableList<BalanceGroupedState>, onCli
@Composable
private fun getCaption(balanceType: BalanceType, balance: BalanceState): TextReference {
return if (balanceType == BalanceType.UNSTAKING) {
combinedReference(
resourceReference(R.string.staking_details_unbonding_period),
annotatedReference {
appendSpace()
appendColored(
text = balance.unbondingPeriod.resolveReference(),
color = TangemTheme.colors.text.accent,
)
},
)
} else {
combinedReference(
resourceReference(R.string.app_name),
annotatedReference {
appendSpace()
appendColored(
text = BigDecimalFormatter.formatPercent(
percent = balance.validator.apr.orZero(),
useAbsoluteValue = true,
),
color = TangemTheme.colors.text.accent,
)
},
)
return when (balanceType) {
BalanceType.UNSTAKING -> {
combinedReference(
resourceReference(R.string.staking_unbonding),
annotatedReference {
appendSpace()
appendColored(
text = balance.unbondingPeriod.resolveReference(),
color = TangemTheme.colors.text.accent,
)
},
)
}
BalanceType.UNSTAKED -> {
resourceReference(R.string.staking_ready_to_withdraw)
}
else -> {
combinedReference(
resourceReference(R.string.staking_details_apr),
annotatedReference {
appendSpace()
appendColored(
text = BigDecimalFormatter.formatPercent(
percent = balance.validator.apr.orZero(),
useAbsoluteValue = true,
),
color = TangemTheme.colors.text.accent,
)
},
)
}
}
}