Skip to content

Commit

Permalink
Clean code
Browse files Browse the repository at this point in the history
  • Loading branch information
antonijzelinskij committed Oct 17, 2024
1 parent a6b27fb commit 727f4b0
Show file tree
Hide file tree
Showing 6 changed files with 47 additions and 37 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package io.novafoundation.nova.feature_assets.presentation.balance.common

import io.novafoundation.nova.common.data.model.AssetViewMode
import io.novafoundation.nova.common.data.model.switch
import io.novafoundation.nova.common.utils.shareInBackground
import io.novafoundation.nova.common.utils.toggle
import io.novafoundation.nova.common.utils.updateValue
import io.novafoundation.nova.feature_assets.domain.WalletInteractor
Expand All @@ -14,6 +15,7 @@ import io.novafoundation.nova.feature_assets.presentation.balance.list.model.ite
import io.novafoundation.nova.feature_assets.presentation.balance.list.model.items.TokenGroupUi
import io.novafoundation.nova.feature_currency_api.domain.CurrencyInteractor
import io.novafoundation.nova.feature_wallet_api.domain.model.Asset
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.combine
Expand All @@ -27,11 +29,12 @@ class AssetListMixinFactory(
private val externalBalancesInteractor: ExternalBalancesInteractor
) {

fun create(): AssetListMixin = RealAssetListMixin(
fun create(coroutineScope: CoroutineScope): AssetListMixin = RealAssetListMixin(
walletInteractor,
assetsListInteractor,
currencyInteractor,
externalBalancesInteractor
externalBalancesInteractor,
coroutineScope
)
}

Expand All @@ -52,20 +55,26 @@ class RealAssetListMixin(
private val walletInteractor: WalletInteractor,
private val assetsListInteractor: AssetsListInteractor,
private val currencyInteractor: CurrencyInteractor,
private val externalBalancesInteractor: ExternalBalancesInteractor
) : AssetListMixin {
private val externalBalancesInteractor: ExternalBalancesInteractor,
private val coroutineScope: CoroutineScope
) : AssetListMixin, CoroutineScope by coroutineScope {

override val assetsFlow = walletInteractor.assetsFlow()
.shareInBackground()

override val filteredAssetsFlow = walletInteractor.filterAssets(assetsFlow)
.shareInBackground()

private val selectedCurrency = currencyInteractor.observeSelectCurrency()
.shareInBackground()

private val externalBalancesFlow = externalBalancesInteractor.observeExternalBalances()
.shareInBackground()

private val expandedTokenIdsFlow = MutableStateFlow(setOf<String>())

override val assetsViewModeFlow = assetsListInteractor.assetsViewModeFlow()
.shareInBackground()

override val assetModelsFlow = combine(
filteredAssetsFlow,
Expand All @@ -81,6 +90,7 @@ class RealAssetListMixin(
.mapGroupedAssetsToUi()
}
}.distinctUntilChanged()
.shareInBackground()

override suspend fun switchViewMode() {
val assetViewMode = assetsViewModeFlow.first()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ class BalanceListAdapter(
}

is TokenAssetViewHolder -> {
val item = getItem(position) as NetworkAssetUi
val item = getItem(position) as TokenAssetUi
resolvePayload(holder, position, payloads) {
when (it) {
AssetModel::amount -> holder.bindTotal(item.asset)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,21 @@
package io.novafoundation.nova.feature_assets.presentation.balance.common.mappers

import androidx.annotation.ColorRes
import io.novafoundation.nova.common.utils.formatting.formatAsChange
import io.novafoundation.nova.common.utils.isNonNegative
import io.novafoundation.nova.common.utils.isZero
import io.novafoundation.nova.common.utils.orZero
import io.novafoundation.nova.feature_assets.R
import io.novafoundation.nova.feature_assets.domain.common.Amount
import io.novafoundation.nova.feature_assets.presentation.model.AssetModel
import io.novafoundation.nova.feature_assets.presentation.model.TokenModel
import io.novafoundation.nova.feature_currency_api.domain.model.Currency
import io.novafoundation.nova.feature_currency_api.presentation.formatters.formatAsCurrency
import io.novafoundation.nova.feature_wallet_api.domain.model.Asset
import io.novafoundation.nova.feature_wallet_api.domain.model.CoinRateChange
import io.novafoundation.nova.feature_wallet_api.domain.model.Token
import io.novafoundation.nova.feature_wallet_api.presentation.model.mapAmountToAmountModel
import java.math.BigDecimal

fun mapCoinRateChange(coinRateChange: CoinRateChange?, currency: Currency): String {
val rateChange = coinRateChange?.rate
Expand All @@ -27,3 +35,25 @@ fun mapAssetToAssetModel(
)
)
}

@ColorRes
fun mapCoinRateChangeColorRes(coinRateChange: CoinRateChange?): Int {
val rateChange = coinRateChange?.recentRateChange

return when {
rateChange == null || rateChange.isZero -> R.color.text_secondary
rateChange.isNonNegative -> R.color.text_positive
else -> R.color.text_negative
}
}

fun mapTokenToTokenModel(token: Token): TokenModel {
return with(token) {
TokenModel(
configuration = configuration,
rate = mapCoinRateChange(token.coinRate, token.currency),
recentRateChange = (coinRate?.recentRateChange ?: BigDecimal.ZERO).formatAsChange(),
rateChangeColorRes = mapCoinRateChangeColorRes(coinRate)
)
}
}
Original file line number Diff line number Diff line change
@@ -1,25 +1,17 @@
package io.novafoundation.nova.feature_assets.presentation.balance.common.mappers

import androidx.annotation.ColorRes
import io.novafoundation.nova.common.list.GroupedList
import io.novafoundation.nova.common.list.toListWithHeaders
import io.novafoundation.nova.common.utils.formatting.formatAsChange
import io.novafoundation.nova.common.utils.isNonNegative
import io.novafoundation.nova.common.utils.isZero
import io.novafoundation.nova.feature_account_api.data.mappers.mapChainToUi
import io.novafoundation.nova.feature_assets.R
import io.novafoundation.nova.feature_assets.domain.common.Amount
import io.novafoundation.nova.feature_assets.domain.common.NetworkAssetGroup
import io.novafoundation.nova.feature_assets.domain.common.AssetWithOffChainBalance
import io.novafoundation.nova.feature_assets.domain.common.TotalAndTransferableBalance
import io.novafoundation.nova.feature_assets.presentation.balance.list.model.items.BalanceListRvItem
import io.novafoundation.nova.feature_assets.presentation.balance.list.model.items.NetworkAssetUi
import io.novafoundation.nova.feature_assets.presentation.balance.list.model.items.NetworkGroupUi
import io.novafoundation.nova.feature_assets.presentation.model.TokenModel
import io.novafoundation.nova.feature_currency_api.domain.model.Currency
import io.novafoundation.nova.feature_currency_api.presentation.formatters.formatAsCurrency
import io.novafoundation.nova.feature_wallet_api.domain.model.CoinRateChange
import io.novafoundation.nova.feature_wallet_api.domain.model.Token
import java.math.BigDecimal

fun GroupedList<NetworkAssetGroup, AssetWithOffChainBalance>.mapGroupedAssetsToUi(
Expand All @@ -33,28 +25,6 @@ fun GroupedList<NetworkAssetGroup, AssetWithOffChainBalance>.mapGroupedAssetsToU
.filterIsInstance<BalanceListRvItem>()
}

fun mapTokenToTokenModel(token: Token): TokenModel {
return with(token) {
TokenModel(
configuration = configuration,
rate = mapCoinRateChange(token.coinRate, token.currency),
recentRateChange = (coinRate?.recentRateChange ?: BigDecimal.ZERO).formatAsChange(),
rateChangeColorRes = mapCoinRateChangeColorRes(coinRate)
)
}
}

@ColorRes
fun mapCoinRateChangeColorRes(coinRateChange: CoinRateChange?): Int {
val rateChange = coinRateChange?.recentRateChange

return when {
rateChange == null || rateChange.isZero -> R.color.text_secondary
rateChange.isNonNegative -> R.color.text_positive
else -> R.color.text_negative
}
}

private fun mapAssetsToAssetModels(
assets: List<AssetWithOffChainBalance>,
balance: (TotalAndTransferableBalance) -> Amount
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ class BalanceListFragment :
}

override fun tokenGroupClicked(tokenGroup: TokenGroupUi) {
showMessage("Not implemented yet")
viewModel.assetListMixin.expandToken(tokenGroup)
}

override fun totalBalanceClicked() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,7 @@ class BalanceListViewModel(

private val externalBalancesFlow = externalBalancesInteractor.observeExternalBalances()

val assetListMixin = assetListMixinFactory.create()
val assetListMixin = assetListMixinFactory.create(viewModelScope)

private val isFiltersEnabledFlow = walletInteractor.isFiltersEnabledFlow()

Expand Down

0 comments on commit 727f4b0

Please sign in to comment.