diff --git a/core/ui/src/main/java/com/tangem/core/ui/components/marketprice/MarketPriceBlock.kt b/core/ui/src/main/java/com/tangem/core/ui/components/marketprice/MarketPriceBlock.kt
index 1626a42bce..efbf7b9f2a 100644
--- a/core/ui/src/main/java/com/tangem/core/ui/components/marketprice/MarketPriceBlock.kt
+++ b/core/ui/src/main/java/com/tangem/core/ui/components/marketprice/MarketPriceBlock.kt
@@ -163,11 +163,13 @@ private fun PriceChangeInPercent(config: PriceChangeState.Content) {
id = when (type) {
PriceChangeType.UP -> R.drawable.ic_arrow_up_8
PriceChangeType.DOWN -> R.drawable.ic_arrow_down_8
+ PriceChangeType.NEUTRAL -> R.drawable.ic_elipse_8
},
),
tint = when (type) {
PriceChangeType.UP -> TangemTheme.colors.icon.accent
PriceChangeType.DOWN -> TangemTheme.colors.icon.warning
+ PriceChangeType.NEUTRAL -> TangemTheme.colors.icon.inactive
},
contentDescription = null,
)
@@ -177,6 +179,7 @@ private fun PriceChangeInPercent(config: PriceChangeState.Content) {
color = when (type) {
PriceChangeType.UP -> TangemTheme.colors.text.accent
PriceChangeType.DOWN -> TangemTheme.colors.text.warning
+ PriceChangeType.NEUTRAL -> TangemTheme.colors.text.disabled
},
style = TangemTheme.typography.body2,
)
@@ -251,6 +254,14 @@ private class WalletMarketPriceBlockStateProvider : CollectionPreviewParameterPr
type = PriceChangeType.UP,
),
),
+ MarketPriceBlockState.Content(
+ currencySymbol = "BTC",
+ price = "98900 $",
+ priceChangeConfig = PriceChangeState.Content(
+ valueInPercent = "0.00%",
+ type = PriceChangeType.NEUTRAL,
+ ),
+ ),
MarketPriceBlockState.Loading(currencySymbol = "BTC"),
MarketPriceBlockState.Error(currencySymbol = "BTC"),
),
diff --git a/core/ui/src/main/java/com/tangem/core/ui/components/marketprice/PriceChangeState.kt b/core/ui/src/main/java/com/tangem/core/ui/components/marketprice/PriceChangeState.kt
index 5130e77203..8db483f50c 100644
--- a/core/ui/src/main/java/com/tangem/core/ui/components/marketprice/PriceChangeState.kt
+++ b/core/ui/src/main/java/com/tangem/core/ui/components/marketprice/PriceChangeState.kt
@@ -5,9 +5,4 @@ sealed class PriceChangeState {
data class Content(val valueInPercent: String, val type: PriceChangeType) : PriceChangeState()
object Unknown : PriceChangeState()
-}
-
-/** Price changing type */
-enum class PriceChangeType {
- UP, DOWN
}
\ No newline at end of file
diff --git a/core/ui/src/main/java/com/tangem/core/ui/components/marketprice/PriceChangeType.kt b/core/ui/src/main/java/com/tangem/core/ui/components/marketprice/PriceChangeType.kt
new file mode 100644
index 0000000000..de78fc1368
--- /dev/null
+++ b/core/ui/src/main/java/com/tangem/core/ui/components/marketprice/PriceChangeType.kt
@@ -0,0 +1,6 @@
+package com.tangem.core.ui.components.marketprice
+
+/** Price changing type */
+enum class PriceChangeType {
+ UP, DOWN, NEUTRAL,
+}
\ No newline at end of file
diff --git a/core/ui/src/main/java/com/tangem/core/ui/components/marketprice/utils/PriceChangeConverter.kt b/core/ui/src/main/java/com/tangem/core/ui/components/marketprice/utils/PriceChangeConverter.kt
new file mode 100644
index 0000000000..5d8bb93cb3
--- /dev/null
+++ b/core/ui/src/main/java/com/tangem/core/ui/components/marketprice/utils/PriceChangeConverter.kt
@@ -0,0 +1,21 @@
+package com.tangem.core.ui.components.marketprice.utils
+
+import com.tangem.core.ui.components.marketprice.PriceChangeType
+import java.math.BigDecimal
+import java.math.RoundingMode
+
+object PriceChangeConverter {
+
+ fun fromBigDecimal(value: BigDecimal?, scale: Int = 2): PriceChangeType {
+ val formattedValue = value
+ ?.movePointRight(2)
+ ?.setScale(scale, RoundingMode.HALF_UP)
+ ?: return PriceChangeType.NEUTRAL
+
+ return when (formattedValue.signum()) {
+ 1 -> PriceChangeType.UP
+ -1 -> PriceChangeType.DOWN
+ else -> PriceChangeType.NEUTRAL
+ }
+ }
+}
\ No newline at end of file
diff --git a/core/ui/src/main/res/drawable/ic_elipse_8.xml b/core/ui/src/main/res/drawable/ic_elipse_8.xml
new file mode 100644
index 0000000000..dab2aad1bb
--- /dev/null
+++ b/core/ui/src/main/res/drawable/ic_elipse_8.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/features/manage-tokens/impl/src/main/java/com/tangem/managetokens/presentation/managetokens/state/QuotesState.kt b/features/manage-tokens/impl/src/main/java/com/tangem/managetokens/presentation/managetokens/state/QuotesState.kt
index 9e255ebc77..3518626707 100644
--- a/features/manage-tokens/impl/src/main/java/com/tangem/managetokens/presentation/managetokens/state/QuotesState.kt
+++ b/features/manage-tokens/impl/src/main/java/com/tangem/managetokens/presentation/managetokens/state/QuotesState.kt
@@ -1,5 +1,6 @@
package com.tangem.managetokens.presentation.managetokens.state
+import com.tangem.core.ui.components.marketprice.PriceChangeType
import kotlinx.collections.immutable.ImmutableList
internal sealed class QuotesState {
@@ -10,8 +11,4 @@ internal sealed class QuotesState {
val changeType: PriceChangeType,
val chartData: ImmutableList,
) : QuotesState()
-}
-
-enum class PriceChangeType {
- UP, DOWN
}
\ No newline at end of file
diff --git a/features/manage-tokens/impl/src/main/java/com/tangem/managetokens/presentation/managetokens/state/factory/QuotesToQuotesStateConverter.kt b/features/manage-tokens/impl/src/main/java/com/tangem/managetokens/presentation/managetokens/state/factory/QuotesToQuotesStateConverter.kt
index b9559d3a9c..972c004779 100644
--- a/features/manage-tokens/impl/src/main/java/com/tangem/managetokens/presentation/managetokens/state/factory/QuotesToQuotesStateConverter.kt
+++ b/features/manage-tokens/impl/src/main/java/com/tangem/managetokens/presentation/managetokens/state/factory/QuotesToQuotesStateConverter.kt
@@ -1,8 +1,9 @@
package com.tangem.managetokens.presentation.managetokens.state.factory
+import com.tangem.core.ui.components.marketprice.PriceChangeType
+import com.tangem.core.ui.components.marketprice.utils.PriceChangeConverter
import com.tangem.core.ui.utils.BigDecimalFormatter
import com.tangem.domain.tokens.model.Quote
-import com.tangem.managetokens.presentation.managetokens.state.PriceChangeType
import com.tangem.managetokens.presentation.managetokens.state.QuotesState
import com.tangem.utils.converter.Converter
import kotlinx.collections.immutable.persistentListOf
@@ -16,19 +17,18 @@ internal class QuotesToQuotesStateConverter : Converter {
priceChange = BigDecimalFormatter.formatPercent(
percent = priceChange.movePointLeft(2),
useAbsoluteValue = true,
- maxFractionDigits = 1,
- minFractionDigits = 1,
),
changeType = priceChange.getPriceChangeType(),
chartData = // TODO (in [REDACTED_TASK_KEY] when endpoint is ready)
when (priceChange.getPriceChangeType()) {
PriceChangeType.UP -> persistentListOf(0f, 5f, 10f, 30f)
PriceChangeType.DOWN -> persistentListOf(15f, 12f, 13f, 18f, 10f, 3f)
+ PriceChangeType.NEUTRAL -> persistentListOf(0f, 0f, 0f, 0f)
},
)
}
private fun BigDecimal.getPriceChangeType(): PriceChangeType {
- return if (this >= BigDecimal.ZERO) PriceChangeType.UP else PriceChangeType.DOWN
+ return PriceChangeConverter.fromBigDecimal(value = this)
}
}
\ No newline at end of file
diff --git a/features/manage-tokens/impl/src/main/java/com/tangem/managetokens/presentation/managetokens/state/previewdata/ManageTokensStatePreviewData.kt b/features/manage-tokens/impl/src/main/java/com/tangem/managetokens/presentation/managetokens/state/previewdata/ManageTokensStatePreviewData.kt
index 40d4334eb3..961253bf87 100644
--- a/features/manage-tokens/impl/src/main/java/com/tangem/managetokens/presentation/managetokens/state/previewdata/ManageTokensStatePreviewData.kt
+++ b/features/manage-tokens/impl/src/main/java/com/tangem/managetokens/presentation/managetokens/state/previewdata/ManageTokensStatePreviewData.kt
@@ -32,6 +32,7 @@ internal object ManageTokensStatePreviewData {
get() = listOf(
TokenItemStatePreviewData.loadedPriceDown,
TokenItemStatePreviewData.loadedPriceUp,
+ TokenItemStatePreviewData.loadedPriceNeutral,
)
private val searchState: SearchBarState
diff --git a/features/manage-tokens/impl/src/main/java/com/tangem/managetokens/presentation/managetokens/state/previewdata/TokenItemStatePreviewData.kt b/features/manage-tokens/impl/src/main/java/com/tangem/managetokens/presentation/managetokens/state/previewdata/TokenItemStatePreviewData.kt
index 01ed9bdda9..1ba8f760e6 100644
--- a/features/manage-tokens/impl/src/main/java/com/tangem/managetokens/presentation/managetokens/state/previewdata/TokenItemStatePreviewData.kt
+++ b/features/manage-tokens/impl/src/main/java/com/tangem/managetokens/presentation/managetokens/state/previewdata/TokenItemStatePreviewData.kt
@@ -2,7 +2,11 @@ package com.tangem.managetokens.presentation.managetokens.state.previewdata
import androidx.compose.runtime.mutableStateOf
import androidx.compose.ui.graphics.Color
-import com.tangem.managetokens.presentation.managetokens.state.*
+import com.tangem.core.ui.components.marketprice.PriceChangeType
+import com.tangem.managetokens.presentation.managetokens.state.QuotesState
+import com.tangem.managetokens.presentation.managetokens.state.TokenButtonType
+import com.tangem.managetokens.presentation.managetokens.state.TokenIconState
+import com.tangem.managetokens.presentation.managetokens.state.TokenItemState
import kotlinx.collections.immutable.persistentListOf
internal object TokenItemStatePreviewData {
@@ -46,6 +50,24 @@ internal object TokenItemStatePreviewData {
chooseNetworkState = ChooseNetworkStatePreviewData.state,
)
+ val loadedPriceNeutral: TokenItemState
+ get() = TokenItemState.Loaded(
+ id = "BTC",
+ name = "Bitcoin Bitcoin Bitcoin Bitcoin Bitcoin Bitcoin Bitcoin Bitcoin",
+ tokenId = "BTC",
+ currencySymbol = "BTC",
+ tokenIcon = tokenIconState,
+ quotes = QuotesState.Content(
+ priceChange = "0.00%",
+ changeType = PriceChangeType.NEUTRAL,
+ chartData = persistentListOf(10f, 2f, 5f, 3f, 4f, 8f, 9f, 7f, 10f),
+ ),
+ rate = "31 285.72$",
+ availableAction = mutableStateOf(TokenButtonType.ADD),
+ onButtonClick = {},
+ chooseNetworkState = ChooseNetworkStatePreviewData.state,
+ )
+
private val tokenIconState: TokenIconState
get() = TokenIconState(
iconReference = null,
diff --git a/features/manage-tokens/impl/src/main/java/com/tangem/managetokens/presentation/managetokens/ui/components/PriceChangesChart.kt b/features/manage-tokens/impl/src/main/java/com/tangem/managetokens/presentation/managetokens/ui/components/PriceChangesChart.kt
index 9909709a8d..998dbebc72 100644
--- a/features/manage-tokens/impl/src/main/java/com/tangem/managetokens/presentation/managetokens/ui/components/PriceChangesChart.kt
+++ b/features/manage-tokens/impl/src/main/java/com/tangem/managetokens/presentation/managetokens/ui/components/PriceChangesChart.kt
@@ -120,4 +120,14 @@ private fun Chart_Negative_Preview() {
persistentListOf(10f, 2f, 4f, 1f, 5f),
)
}
+}
+
+@Preview(widthDp = 150, heightDp = 150, showBackground = true)
+@Composable
+private fun Chart_Neutral_Preview() {
+ TangemTheme(isDark = true) {
+ PriceChangesChart(
+ persistentListOf(5f, 2f, 4f, 1f, 5f),
+ )
+ }
}
\ No newline at end of file
diff --git a/features/manage-tokens/impl/src/main/java/com/tangem/managetokens/presentation/managetokens/ui/components/TokenPriceChange.kt b/features/manage-tokens/impl/src/main/java/com/tangem/managetokens/presentation/managetokens/ui/components/TokenPriceChange.kt
index 1b2d04c7a9..28b7691794 100644
--- a/features/manage-tokens/impl/src/main/java/com/tangem/managetokens/presentation/managetokens/ui/components/TokenPriceChange.kt
+++ b/features/manage-tokens/impl/src/main/java/com/tangem/managetokens/presentation/managetokens/ui/components/TokenPriceChange.kt
@@ -11,9 +11,9 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.text.style.TextOverflow
import com.tangem.core.ui.components.SpacerW4
+import com.tangem.core.ui.components.marketprice.PriceChangeType
import com.tangem.core.ui.res.TangemTheme
import com.tangem.features.managetokens.impl.R
-import com.tangem.managetokens.presentation.managetokens.state.PriceChangeType
import com.tangem.managetokens.presentation.managetokens.state.QuotesState
@Composable
@@ -48,11 +48,13 @@ private fun PriceChangeIcon(type: PriceChangeType?) {
id = when (animatedType) {
PriceChangeType.UP -> R.drawable.ic_arrow_up_8
PriceChangeType.DOWN -> R.drawable.ic_arrow_down_8
+ PriceChangeType.NEUTRAL -> R.drawable.ic_elipse_8
},
),
tint = when (animatedType) {
PriceChangeType.UP -> TangemTheme.colors.icon.accent
PriceChangeType.DOWN -> TangemTheme.colors.icon.warning
+ PriceChangeType.NEUTRAL -> TangemTheme.colors.icon.inactive
},
contentDescription = null,
)
@@ -69,6 +71,7 @@ private fun PriceChangeText(type: PriceChangeType?, text: String?) {
color = when (type) {
PriceChangeType.UP -> TangemTheme.colors.text.accent
PriceChangeType.DOWN -> TangemTheme.colors.text.warning
+ PriceChangeType.NEUTRAL -> TangemTheme.colors.text.disabled
null -> TangemTheme.colors.text.primary1
},
overflow = TextOverflow.Ellipsis,
diff --git a/features/manage-tokens/impl/src/main/java/com/tangem/managetokens/presentation/managetokens/ui/components/TokenRowItem.kt b/features/manage-tokens/impl/src/main/java/com/tangem/managetokens/presentation/managetokens/ui/components/TokenRowItem.kt
index 12a403e3e4..d92f0a8b81 100644
--- a/features/manage-tokens/impl/src/main/java/com/tangem/managetokens/presentation/managetokens/ui/components/TokenRowItem.kt
+++ b/features/manage-tokens/impl/src/main/java/com/tangem/managetokens/presentation/managetokens/ui/components/TokenRowItem.kt
@@ -180,7 +180,8 @@ private fun BaseSurface(modifier: Modifier = Modifier, content: @Composable () -
}
}
-@Preview()
+// region Preview
+@Preview(showBackground = true, widthDp = 360)
@Composable
private fun Preview_Tokens_LightTheme(@PreviewParameter(TokenConfigProvider::class) state: TokenItemState) {
TangemTheme(isDark = false) {
@@ -188,7 +189,7 @@ private fun Preview_Tokens_LightTheme(@PreviewParameter(TokenConfigProvider::cla
}
}
-@Preview
+@Preview(showBackground = true, widthDp = 360)
@Composable
private fun Preview_Tokens_DarkTheme(@PreviewParameter(TokenConfigProvider::class) state: TokenItemState) {
TangemTheme(isDark = true) {
@@ -201,5 +202,7 @@ private class TokenConfigProvider : CollectionPreviewParameterProvider,
@@ -118,9 +118,7 @@ internal class TokenDetailsLoadedBalanceConverter(
}
private fun getPriceChangeType(status: CryptoCurrencyStatus.Status): PriceChangeType {
- val priceChange = status.priceChange ?: return PriceChangeType.DOWN
-
- return if (priceChange > BigDecimal.ZERO) PriceChangeType.UP else PriceChangeType.DOWN
+ return PriceChangeConverter.fromBigDecimal(status.priceChange)
}
private fun formatPriceChange(status: CryptoCurrencyStatus.Status): String {
diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/common/component/token/TokenPrice.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/common/component/token/TokenPrice.kt
index 06cd93ccec..4822e0d489 100644
--- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/common/component/token/TokenPrice.kt
+++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/common/component/token/TokenPrice.kt
@@ -87,11 +87,13 @@ private fun PriceChangeIcon(type: PriceChangeType) {
id = when (animatedType) {
PriceChangeType.UP -> R.drawable.ic_arrow_up_8
PriceChangeType.DOWN -> R.drawable.ic_arrow_down_8
+ PriceChangeType.NEUTRAL -> R.drawable.ic_elipse_8
},
),
tint = when (animatedType) {
PriceChangeType.UP -> TangemTheme.colors.icon.accent
PriceChangeType.DOWN -> TangemTheme.colors.icon.warning
+ PriceChangeType.NEUTRAL -> TangemTheme.colors.icon.inactive
},
contentDescription = null,
)
@@ -106,6 +108,7 @@ private fun PriceChangeText(type: PriceChangeType?, text: String?, modifier: Mod
color = when (type) {
PriceChangeType.UP -> TangemTheme.colors.text.accent
PriceChangeType.DOWN -> TangemTheme.colors.text.warning
+ PriceChangeType.NEUTRAL -> TangemTheme.colors.text.disabled
null -> TangemTheme.colors.text.tertiary
},
overflow = TextOverflow.Ellipsis,
diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/converter/SingleWalletMarketPriceConverter.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/converter/SingleWalletMarketPriceConverter.kt
index 60fcaa1c3c..157d0a1180 100644
--- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/converter/SingleWalletMarketPriceConverter.kt
+++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/converter/SingleWalletMarketPriceConverter.kt
@@ -3,11 +3,11 @@ package com.tangem.feature.wallet.presentation.wallet.state.transformers.convert
import com.tangem.core.ui.components.marketprice.MarketPriceBlockState
import com.tangem.core.ui.components.marketprice.PriceChangeState
import com.tangem.core.ui.components.marketprice.PriceChangeType
+import com.tangem.core.ui.components.marketprice.utils.PriceChangeConverter
import com.tangem.core.ui.utils.BigDecimalFormatter
import com.tangem.domain.appcurrency.model.AppCurrency
import com.tangem.domain.tokens.model.CryptoCurrencyStatus
import com.tangem.utils.converter.Converter
-import java.math.BigDecimal
internal class SingleWalletMarketPriceConverter(
private val status: CryptoCurrencyStatus.Status,
@@ -61,8 +61,6 @@ internal class SingleWalletMarketPriceConverter(
}
private fun getPriceChangeType(status: CryptoCurrencyStatus.Status): PriceChangeType {
- val priceChange = status.priceChange ?: return PriceChangeType.DOWN
-
- return if (priceChange > BigDecimal.ZERO) PriceChangeType.UP else PriceChangeType.DOWN
+ return PriceChangeConverter.fromBigDecimal(status.priceChange)
}
}
\ No newline at end of file
diff --git a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/converter/TokenItemStateConverter.kt b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/converter/TokenItemStateConverter.kt
index 77aa101de4..aa168db655 100644
--- a/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/converter/TokenItemStateConverter.kt
+++ b/features/wallet/impl/src/main/java/com/tangem/feature/wallet/presentation/wallet/state/transformers/converter/TokenItemStateConverter.kt
@@ -2,6 +2,7 @@ package com.tangem.feature.wallet.presentation.wallet.state.transformers.convert
import com.tangem.core.ui.components.currency.tokenicon.converter.CryptoCurrencyToIconStateConverter
import com.tangem.core.ui.components.marketprice.PriceChangeType
+import com.tangem.core.ui.components.marketprice.utils.PriceChangeConverter
import com.tangem.core.ui.utils.BigDecimalFormatter
import com.tangem.domain.appcurrency.model.AppCurrency
import com.tangem.domain.tokens.model.CryptoCurrencyStatus
@@ -97,8 +98,6 @@ internal class TokenItemStateConverter(
priceChangePercent = BigDecimalFormatter.formatPercent(
percent = priceChange,
useAbsoluteValue = true,
- maxFractionDigits = 1,
- minFractionDigits = 1,
),
type = priceChange.getPriceChangeType(),
)
@@ -117,6 +116,6 @@ internal class TokenItemStateConverter(
}
private fun BigDecimal.getPriceChangeType(): PriceChangeType {
- return if (this > BigDecimal.ZERO) PriceChangeType.UP else PriceChangeType.DOWN
+ return PriceChangeConverter.fromBigDecimal(value = this)
}
}
\ No newline at end of file