diff --git a/data/visa/src/main/kotlin/com/tangem/data/visa/utils/TangemPayTxHistoryItemConverter.kt b/data/visa/src/main/kotlin/com/tangem/data/visa/utils/TangemPayTxHistoryItemConverter.kt index 4b13cb8946..9181778435 100644 --- a/data/visa/src/main/kotlin/com/tangem/data/visa/utils/TangemPayTxHistoryItemConverter.kt +++ b/data/visa/src/main/kotlin/com/tangem/data/visa/utils/TangemPayTxHistoryItemConverter.kt @@ -4,6 +4,8 @@ import com.squareup.moshi.Moshi import com.tangem.datasource.api.pay.models.response.TangemPayTxHistoryResponse import com.tangem.domain.visa.model.TangemPayTxHistoryItem import com.tangem.utils.converter.Converter +import org.joda.time.DateTime +import org.joda.time.DateTimeZone import timber.log.Timber import java.util.Currency @@ -30,7 +32,7 @@ internal class TangemPayTxHistoryItemConverter(moshi: Moshi) : return TangemPayTxHistoryItem.Spend( id = id, jsonRepresentation = spendAdapter.toJson(spend), - date = spend.authorizedAt, + date = spend.authorizedAt.withLocalZone(), amount = spend.amount, currency = Currency.getInstance(spend.currency), enrichedMerchantName = spend.enrichedMerchantName, @@ -49,7 +51,7 @@ internal class TangemPayTxHistoryItemConverter(moshi: Moshi) : return TangemPayTxHistoryItem.Payment( id = id, jsonRepresentation = paymentAdapter.toJson(payment), - date = payment.postedAt, + date = payment.postedAt.withLocalZone(), currency = Currency.getInstance(payment.currency), amount = payment.amount, transactionHash = payment.transactionHash, @@ -60,9 +62,10 @@ internal class TangemPayTxHistoryItemConverter(moshi: Moshi) : return TangemPayTxHistoryItem.Fee( id = id, jsonRepresentation = feeAdapter.toJson(fee), - date = fee.postedAt, + date = fee.postedAt.withLocalZone(), currency = Currency.getInstance(fee.currency), amount = fee.amount, + description = fee.description, ) } @@ -77,10 +80,14 @@ internal class TangemPayTxHistoryItemConverter(moshi: Moshi) : return TangemPayTxHistoryItem.Collateral( id = id, jsonRepresentation = collateralAdapter.toJson(collateral), - date = date, + date = date.withLocalZone(), currency = Currency.getInstance("usd"), amount = collateral.amount, transactionHash = collateral.transactionHash, ) } + + private fun DateTime.withLocalZone(): DateTime { + return withZone(DateTimeZone.getDefault()) + } } \ No newline at end of file diff --git a/domain/visa/models/src/main/kotlin/com/tangem/domain/visa/model/TangemPayTxHistoryItem.kt b/domain/visa/models/src/main/kotlin/com/tangem/domain/visa/model/TangemPayTxHistoryItem.kt index 4f8798a4f0..750dfb2ae3 100644 --- a/domain/visa/models/src/main/kotlin/com/tangem/domain/visa/model/TangemPayTxHistoryItem.kt +++ b/domain/visa/models/src/main/kotlin/com/tangem/domain/visa/model/TangemPayTxHistoryItem.kt @@ -45,6 +45,7 @@ sealed class TangemPayTxHistoryItem { override val date: SerializedDateTime, override val amount: SerializedBigDecimal, override val currency: SerializedCurrency, + val description: String?, ) : TangemPayTxHistoryItem() @Serializable diff --git a/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/model/transformers/TangemPayTxHistoryDetailsConverter.kt b/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/model/transformers/TangemPayTxHistoryDetailsConverter.kt index 747cd54186..149ff171fd 100644 --- a/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/model/transformers/TangemPayTxHistoryDetailsConverter.kt +++ b/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/model/transformers/TangemPayTxHistoryDetailsConverter.kt @@ -14,7 +14,7 @@ import com.tangem.features.tangempay.entity.TangemPayTxHistoryDetailsUM import com.tangem.features.tangempay.entity.TangemPayTxHistoryDetailsUM.ButtonState import com.tangem.utils.StringsSigns import com.tangem.utils.converter.Converter -import com.tangem.utils.extensions.isPositive +import com.tangem.utils.extensions.isZero import kotlinx.collections.immutable.ImmutableList import kotlinx.collections.immutable.persistentListOf @@ -49,13 +49,7 @@ internal object TangemPayTxHistoryDetailsConverter : return when (this) { is TangemPayTxHistoryItem.Collateral -> ImageReference.Res(R.drawable.ic_arrow_down_24) is TangemPayTxHistoryItem.Fee -> ImageReference.Res(R.drawable.ic_percent_24) - is TangemPayTxHistoryItem.Payment -> { - if (this.amount.isPositive()) { - ImageReference.Res(R.drawable.ic_arrow_down_24) - } else { - ImageReference.Res(R.drawable.ic_arrow_up_24) - } - } + is TangemPayTxHistoryItem.Payment -> ImageReference.Res(R.drawable.ic_arrow_up_24) is TangemPayTxHistoryItem.Spend -> { val merchantIcon = this.enrichedMerchantIconUrl if (merchantIcon != null) { @@ -69,14 +63,12 @@ internal object TangemPayTxHistoryDetailsConverter : private fun TangemPayTxHistoryItem.extractTransactionTitle(): TextReference { return when (this) { - is TangemPayTxHistoryItem.Fee -> resourceReference(R.string.tangem_pay_fee_title) is TangemPayTxHistoryItem.Spend -> stringReference(this.enrichedMerchantName ?: this.merchantName) - is TangemPayTxHistoryItem.Payment -> if (this.amount.isPositive()) { - resourceReference(R.string.tangem_pay_deposit) - } else { - resourceReference(R.string.tangem_pay_withdrawal) - } + is TangemPayTxHistoryItem.Payment -> resourceReference(R.string.tangem_pay_withdrawal) is TangemPayTxHistoryItem.Collateral -> resourceReference(R.string.tangem_pay_deposit) + is TangemPayTxHistoryItem.Fee -> { + this.description?.let(::stringReference) ?: resourceReference(R.string.tangem_pay_fee_title) + } } } @@ -92,7 +84,7 @@ internal object TangemPayTxHistoryDetailsConverter : private fun TangemPayTxHistoryItem.extractAmount(): String { return when (this) { is TangemPayTxHistoryItem.Fee, - is TangemPayTxHistoryItem.Spend, + is TangemPayTxHistoryItem.Payment, -> { val amount = this.amount.format { fiat( @@ -102,20 +94,28 @@ internal object TangemPayTxHistoryDetailsConverter : } StringsSigns.MINUS + amount } - is TangemPayTxHistoryItem.Payment, - is TangemPayTxHistoryItem.Collateral, - -> { + is TangemPayTxHistoryItem.Spend -> { + val amountPrefix = when { + this.amount.isZero() -> "" + this.status == TangemPayTxHistoryItem.Status.DECLINED -> "" + else -> StringsSigns.MINUS + } val amount = this.amount.format { fiat( fiatCurrencyCode = this@extractAmount.currency.currencyCode, fiatCurrencySymbol = this@extractAmount.currency.symbol, ) } - if (this.amount.isPositive()) { - StringsSigns.PLUS + amount - } else { - StringsSigns.MINUS + amount + amountPrefix + amount + } + is TangemPayTxHistoryItem.Collateral -> { + val amount = this.amount.format { + fiat( + fiatCurrencyCode = this@extractAmount.currency.currencyCode, + fiatCurrencySymbol = this@extractAmount.currency.symbol, + ) } + StringsSigns.PLUS + amount } } } @@ -124,14 +124,8 @@ internal object TangemPayTxHistoryDetailsConverter : return when (this) { is TangemPayTxHistoryItem.Fee, is TangemPayTxHistoryItem.Spend, + is TangemPayTxHistoryItem.Payment, -> themedColor { TangemTheme.colors.text.primary1 } - is TangemPayTxHistoryItem.Payment -> themedColor { - if (this.amount.isPositive()) { - TangemTheme.colors.text.accent - } else { - TangemTheme.colors.text.primary1 - } - } is TangemPayTxHistoryItem.Collateral -> themedColor { TangemTheme.colors.text.accent } } } @@ -203,16 +197,11 @@ internal object TangemPayTxHistoryDetailsConverter : ) is TangemPayTxHistoryItem.Payment -> persistentListOf( ButtonState( - text = resourceReference(R.string.tangem_pay_explore_transaction), - onClick = { this.onExplorerClick(this.item.transactionHash) }, + text = resourceReference(R.string.tangem_pay_get_help), + onClick = this.onDisputeClick, ), ) is TangemPayTxHistoryItem.Collateral -> persistentListOf( - ButtonState( - text = resourceReference(R.string.tangem_pay_explore_transaction), - startIcon = ImageReference.Res(R.drawable.ic_explore_20), - onClick = { this.onExplorerClick(this.item.transactionHash) }, - ), ButtonState( text = resourceReference(R.string.tangem_pay_get_help), onClick = this.onDisputeClick, diff --git a/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/model/transformers/TangemPayTxHistoryItemsConverter.kt b/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/model/transformers/TangemPayTxHistoryItemsConverter.kt index 0574a7d4bb..2b005f16fb 100644 --- a/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/model/transformers/TangemPayTxHistoryItemsConverter.kt +++ b/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/model/transformers/TangemPayTxHistoryItemsConverter.kt @@ -14,7 +14,6 @@ import com.tangem.features.tangempay.entity.TangemPayTransactionState import com.tangem.features.tangempay.utils.TangemPayTxHistoryUiActions import com.tangem.utils.StringsSigns import com.tangem.utils.converter.Converter -import com.tangem.utils.extensions.isPositive import com.tangem.utils.extensions.isZero import org.joda.time.DateTimeZone @@ -59,27 +58,18 @@ internal class TangemPayTxHistoryItemsConverter( } private fun convertPayment(payment: TangemPayTxHistoryItem.Payment): TangemPayTransactionState.Content.Payment { - val isIncome = payment.amount.isPositive() - val amountPrefix = when { - payment.amount.isZero() -> "" - isIncome -> StringsSigns.PLUS - else -> StringsSigns.MINUS - } - val amount = amountPrefix + payment.amount.format { + val amount = StringsSigns.MINUS + payment.amount.format { fiat(fiatCurrencyCode = payment.currency.currencyCode, fiatCurrencySymbol = payment.currency.symbol) } - val title = if (payment.amount.isPositive()) "Deposit" else "Withdrawal" return TangemPayTransactionState.Content.Payment( id = payment.id, onClick = { txHistoryUiActions.onTransactionClick(payment) }, amount = amount, - amountColor = themedColor { - if (payment.amount.isPositive()) TangemTheme.colors.text.accent else TangemTheme.colors.text.primary1 - }, - title = stringReference(title), + amountColor = themedColor { TangemTheme.colors.text.primary1 }, + title = resourceReference(R.string.tangem_pay_withdrawal), subtitle = stringReference("Transfers"), time = DateTimeFormatters.formatDate(payment.date, DateTimeFormatters.timeFormatter), - icon = ImageReference.Res(if (isIncome) R.drawable.ic_arrow_down_24 else R.drawable.ic_arrow_up_24), + icon = ImageReference.Res(R.drawable.ic_arrow_up_24), ) } @@ -93,8 +83,8 @@ internal class TangemPayTxHistoryItemsConverter( onClick = { txHistoryUiActions.onTransactionClick(fee) }, amount = amount, amountColor = themedColor { TangemTheme.colors.text.primary1 }, - title = stringReference("Fee"), - subtitle = stringReference("Service fees"), + title = resourceReference(R.string.tangem_pay_fee_title), + subtitle = fee.description?.let(::stringReference) ?: resourceReference(R.string.tangem_pay_fee_subtitle), icon = ImageReference.Res(R.drawable.ic_percent_24), time = DateTimeFormatters.formatDate(fee.date, DateTimeFormatters.timeFormatter), ) diff --git a/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/ui/TangempayTxDetailsUi.kt b/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/ui/TangempayTxDetailsUi.kt index 4ce80b714b..63922d29c0 100644 --- a/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/ui/TangempayTxDetailsUi.kt +++ b/features/tangempay/details/impl/src/main/kotlin/com/tangem/features/tangempay/ui/TangempayTxDetailsUi.kt @@ -245,7 +245,7 @@ private class TangemPayTxHistoryDetailsUMProvider : CollectionPreviewParameterPr notification = null, buttons = persistentListOf( TangemPayTxHistoryDetailsUM.ButtonState( - text = resourceReference(R.string.tangem_pay_explore_transaction), + text = resourceReference(R.string.tangem_pay_get_help), onClick = {}, ), ), @@ -261,11 +261,6 @@ private class TangemPayTxHistoryDetailsUMProvider : CollectionPreviewParameterPr labelState = null, notification = null, buttons = persistentListOf( - TangemPayTxHistoryDetailsUM.ButtonState( - text = resourceReference(R.string.tangem_pay_explore_transaction), - startIcon = ImageReference.Res(R.drawable.ic_explore_20), - onClick = {}, - ), TangemPayTxHistoryDetailsUM.ButtonState( text = resourceReference(R.string.tangem_pay_get_help), onClick = {},