Skip to content
This repository was archived by the owner on Mar 26, 2026. It is now read-only.

Commit 1a202f0

Browse files
committed
Improve assets list
1 parent 18e18c3 commit 1a202f0

12 files changed

Lines changed: 613 additions & 38 deletions

File tree

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
package com.gemwallet.android.data.coordinates.asset
2+
3+
import androidx.compose.runtime.Stable
4+
import com.gemwallet.android.application.assets.coordinators.GetActiveAssetsInfo
5+
import com.gemwallet.android.data.repositoreis.assets.AssetsRepository
6+
import com.gemwallet.android.domains.asset.aggregates.AssetInfoDataAggregate
7+
import com.gemwallet.android.domains.price.values.PriceableValue
8+
import com.gemwallet.android.model.AssetInfo
9+
import com.gemwallet.android.model.format
10+
import com.wallet.core.primitives.AssetId
11+
import com.wallet.core.primitives.Currency
12+
import kotlinx.coroutines.flow.Flow
13+
import kotlinx.coroutines.flow.map
14+
15+
class GetActiveAssetsInfoImpl(
16+
private val assetsRepository: AssetsRepository,
17+
) : GetActiveAssetsInfo {
18+
19+
override fun getAssetsInfo(hideBalance: Boolean): Flow<List<AssetInfoDataAggregate>> {
20+
return assetsRepository.getAssetsInfo().map { items -> items.map { AssetInfoDataAggregateImpl(it, hideBalance) } }
21+
}
22+
}
23+
24+
@Stable
25+
class AssetInfoDataAggregateImpl(
26+
private val assetInfo: AssetInfo,
27+
private val hideBalance: Boolean,
28+
) : AssetInfoDataAggregate {
29+
override val id: AssetId = assetInfo.asset.id
30+
31+
override val title: String = assetInfo.asset.name
32+
33+
override val icon: Any = assetInfo.asset
34+
35+
override val balance: String
36+
get() = if (hideBalance) "*****" else assetInfo.asset.format(
37+
humanAmount = assetInfo.balance.totalAmount,
38+
decimalPlace = 2,
39+
maxDecimals = 4,
40+
dynamicPlace = true
41+
)
42+
43+
override val balanceEquivalent: String
44+
get() {
45+
val price = assetInfo.price?.price?.price ?: 0.0
46+
val fiat = if (price == 0.0) null else assetInfo.balance.totalAmount * price
47+
return if (hideBalance) "*****" else fiat?.let { currency.format(it, dynamicPlace = true) } ?: ""
48+
}
49+
50+
override val isZeroBalance: Boolean
51+
get() = assetInfo.balance.totalAmount == 0.0
52+
53+
override val price: PriceableValue?
54+
get() = assetInfo.price?.price?.let {
55+
PriceableValueImpl(
56+
currency = currency,
57+
priceValue = it.price,
58+
dayChangePercentage = it.priceChangePercentage24h,
59+
)
60+
}
61+
62+
override val position: Int
63+
get() = assetInfo.position
64+
65+
override val pinned: Boolean
66+
get() = assetInfo.metadata?.isPinned == true
67+
68+
override val accountAddress: String
69+
get() = assetInfo.owner?.address ?: ""
70+
71+
private val currency: Currency = assetInfo.price?.currency ?: Currency.USD
72+
73+
private class PriceableValueImpl(
74+
override val currency: Currency,
75+
override val priceValue: Double?,
76+
override val dayChangePercentage: Double?
77+
) : PriceableValue
78+
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package com.gemwallet.android.data.coordinates.di
2+
3+
import com.gemwallet.android.application.assets.coordinators.GetActiveAssetsInfo
4+
import com.gemwallet.android.data.coordinates.asset.GetActiveAssetsInfoImpl
5+
import com.gemwallet.android.data.repositoreis.assets.AssetsRepository
6+
import dagger.Module
7+
import dagger.Provides
8+
import dagger.hilt.InstallIn
9+
import dagger.hilt.components.SingletonComponent
10+
import javax.inject.Singleton
11+
12+
@InstallIn(SingletonComponent::class)
13+
@Module
14+
object AssetModule {
15+
@Provides
16+
@Singleton
17+
fun provideGetActiveAssetsInfo(assetsRepository: AssetsRepository): GetActiveAssetsInfo =
18+
GetActiveAssetsInfoImpl(assetsRepository)
19+
}

0 commit comments

Comments
 (0)