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

Commit 7ee56b1

Browse files
committed
Fix widget
1 parent 7aca137 commit 7ee56b1

11 files changed

Lines changed: 2138 additions & 18 deletions

File tree

app/src/main/kotlin/com/gemwallet/android/features/widgets/PricesWidget.kt

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -45,36 +45,30 @@ import coil3.toBitmap
4545
import com.gemwallet.android.data.repositoreis.di.WidgetEntryPoint
4646
import com.gemwallet.android.domains.asset.getIconUrl
4747
import com.gemwallet.android.domains.percentage.formatAsPercentage
48-
import com.gemwallet.android.ext.toIdentifier
4948
import com.gemwallet.android.model.AssetInfo
5049
import com.gemwallet.android.model.format
5150
import com.gemwallet.android.ui.R
5251
import com.gemwallet.android.ui.theme.paddingDefault
5352
import com.gemwallet.android.ui.theme.paddingHalfSmall
5453
import com.gemwallet.android.ui.theme.paddingSmall
55-
import com.wallet.core.primitives.AssetId
56-
import com.wallet.core.primitives.Chain
54+
import com.wallet.core.primitives.Currency
5755
import dagger.hilt.android.EntryPointAccessors
5856
import kotlinx.coroutines.Dispatchers
5957
import kotlinx.coroutines.flow.firstOrNull
6058
import kotlinx.coroutines.withContext
6159

62-
class PricesWidget() : GlanceAppWidget() {
60+
class PricesWidget : GlanceAppWidget() {
6361

6462
override suspend fun provideGlance(
6563
context: Context,
6664
id: GlanceId
6765
) {
6866
val assetsRepository = EntryPointAccessors.fromApplication(context, WidgetEntryPoint::class.java).assetsRepository()
67+
val sessionRepository = EntryPointAccessors.fromApplication(context, WidgetEntryPoint::class.java).sessionRepository()
6968
val noData = context.getString(R.string.errors_no_data_available)
7069
val assets = try {
71-
(assetsRepository.getTokensInfo(
72-
listOf(
73-
AssetId(Chain.Bitcoin).toIdentifier(),
74-
AssetId(Chain.Ethereum).toIdentifier(),
75-
AssetId(Chain.Solana).toIdentifier(),
76-
)
77-
).firstOrNull() ?: emptyList()).reversed()
70+
val currency = sessionRepository.session().firstOrNull()?.currency ?: Currency.USD
71+
assetsRepository.getWidgetTokens(currency)
7872
} catch (_: Throwable) {
7973
emptyList()
8074
}

data/coordinators/src/main/kotlin/com/gemwallet/android/data/coordinates/perpetuals/SyncPerpetualPositionsImpl.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ class SyncPerpetualPositionsImpl @Inject constructor(
3737
.map { it.wallet.accounts.filter { chains.contains(it.chain) } }
3838
.flatMapLatest { accounts ->
3939
flow {
40-
if (BuildConfig.DEBUG) {
40+
if (false) {
4141
while (true) {
4242
val summaries = withContext(Dispatchers.IO) {
4343
accounts.map {

data/repositories/src/main/kotlin/com/gemwallet/android/data/repositoreis/assets/AssetsRepository.kt

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,13 +33,15 @@ import com.gemwallet.android.ext.swapSupport
3333
import com.gemwallet.android.ext.toIdentifier
3434
import com.gemwallet.android.model.AssetBalance
3535
import com.gemwallet.android.model.AssetInfo
36+
import com.gemwallet.android.model.AssetPriceInfo
3637
import com.gemwallet.android.model.RecentType
3738
import com.gemwallet.android.model.TransactionExtended
3839
import com.wallet.core.primitives.Account
3940
import com.wallet.core.primitives.Asset
4041
import com.wallet.core.primitives.AssetId
4142
import com.wallet.core.primitives.AssetLink
4243
import com.wallet.core.primitives.AssetMarket
44+
import com.wallet.core.primitives.AssetPrice
4345
import com.wallet.core.primitives.AssetTag
4446
import com.wallet.core.primitives.Chain
4547
import com.wallet.core.primitives.Currency
@@ -218,8 +220,7 @@ class AssetsRepository @Inject constructor(
218220
}
219221

220222
fun getTokenInfo(assetId: AssetId): Flow<AssetInfo?> {
221-
return assetsDao.getAssetInfo(assetId.toIdentifier(), assetId.chain)
222-
.flatMapLatest { assetInfo ->
223+
return assetsDao.getAssetInfo(assetId.toIdentifier(), assetId.chain).flatMapLatest { assetInfo ->
223224
if (assetInfo == null) {
224225
assetsDao.getTokenInfo(assetId.toIdentifier(), assetId.chain).map { it?.toDTO() }
225226
} else {
@@ -234,6 +235,45 @@ class AssetsRepository @Inject constructor(
234235
.map { items -> items.distinctBy { it.id() } }
235236
}
236237

238+
suspend fun getWidgetTokens(currency: Currency): List<AssetInfo> = withContext(Dispatchers.IO) {
239+
val widgetAssetIds = listOf(AssetId(Chain.Bitcoin), AssetId(Chain.Ethereum), AssetId(Chain.Solana))
240+
241+
if (getTokensInfo(widgetAssetIds.map { it.toIdentifier() }).firstOrNull().isNullOrEmpty()) {
242+
searchTokensCase.search(widgetAssetIds, currency)
243+
}
244+
245+
val prices = widgetAssetIds.map { assetId ->
246+
async {
247+
try {
248+
gemApi.getAsset(assetId.toIdentifier())
249+
} catch (_: Throwable) {
250+
null
251+
}
252+
}
253+
}
254+
.awaitAll()
255+
.filterNotNull()
256+
(getTokensInfo(widgetAssetIds.map { it.toIdentifier() }).firstOrNull() ?: emptyList())
257+
.map { assetInfo ->
258+
val price = prices.firstOrNull { it.asset.id == assetInfo.asset.id }
259+
if (price == null) {
260+
assetInfo
261+
} else {
262+
assetInfo.copy(
263+
price = AssetPriceInfo(
264+
currency = currency,
265+
price = AssetPrice(
266+
assetId = assetInfo.asset.id,
267+
price = price.price.price,
268+
priceChangePercentage24h = price.price.priceChangePercentage24h,
269+
updatedAt = System.currentTimeMillis()
270+
)
271+
)
272+
)
273+
}
274+
}
275+
}
276+
237277
suspend fun searchToken(assetId: AssetId, currency: Currency): Boolean {
238278
return searchTokensCase.search(assetId, currency)
239279
}

data/repositories/src/main/kotlin/com/gemwallet/android/data/repositoreis/di/WidgetEntryPoint.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.gemwallet.android.data.repositoreis.di
22

33
import com.gemwallet.android.data.repositoreis.assets.AssetsRepository
4+
import com.gemwallet.android.data.repositoreis.session.SessionRepository
45
import dagger.hilt.EntryPoint
56
import dagger.hilt.InstallIn
67
import dagger.hilt.components.SingletonComponent
@@ -9,4 +10,5 @@ import dagger.hilt.components.SingletonComponent
910
@InstallIn(SingletonComponent::class)
1011
interface WidgetEntryPoint {
1112
fun assetsRepository(): AssetsRepository
13+
fun sessionRepository(): SessionRepository
1214
}

0 commit comments

Comments
 (0)