From 1ed5322b6ac154baf00b5361647a52981d8750ed Mon Sep 17 00:00:00 2001 From: antonijzelinskij Date: Fri, 24 Jan 2025 08:31:51 +0100 Subject: [PATCH 1/5] Added popular dapps --- common/src/main/res/values/strings.xml | 3 +++ .../nova/feature_dapp_api/data/model/DApp.kt | 7 +++++++ .../feature_dapp_api/data/model/DappMetadata.kt | 7 ++++++- .../feature_dapp_impl/data/mappers/DappMetadata.kt | 2 +- .../data/network/metadata/DappMetadataRemote.kt | 1 + .../feature_dapp_impl/domain/DappInteractor.kt | 9 +++++++-- .../presentation/common/DappModel.kt | 14 ++++++++++++-- .../presentation/main/MainDAppViewModel.kt | 10 +++++----- 8 files changed, 42 insertions(+), 11 deletions(-) diff --git a/common/src/main/res/values/strings.xml b/common/src/main/res/values/strings.xml index 193dea3ed4..1168a88e50 100644 --- a/common/src/main/res/values/strings.xml +++ b/common/src/main/res/values/strings.xml @@ -1,5 +1,8 @@ + + Popular DApps + During swap execution intermediate receive amount is %s which is less than minimum balance of %s. Try specifying larger swap amount. You don\'t have enough balance to pay network fee of %s. Current balance is %s diff --git a/feature-dapp-api/src/main/java/io/novafoundation/nova/feature_dapp_api/data/model/DApp.kt b/feature-dapp-api/src/main/java/io/novafoundation/nova/feature_dapp_api/data/model/DApp.kt index 533639e96e..19c7572753 100644 --- a/feature-dapp-api/src/main/java/io/novafoundation/nova/feature_dapp_api/data/model/DApp.kt +++ b/feature-dapp-api/src/main/java/io/novafoundation/nova/feature_dapp_api/data/model/DApp.kt @@ -1,5 +1,7 @@ package io.novafoundation.nova.feature_dapp_api.data.model +import io.novafoundation.nova.common.list.GroupedList + class DApp( val name: String, val description: String, @@ -8,3 +10,8 @@ class DApp( val isFavourite: Boolean, val favoriteIndex: Int? ) + +data class DAppGroupedCatalog( + val popular: List, + val categoriesWithDApps: GroupedList +) diff --git a/feature-dapp-api/src/main/java/io/novafoundation/nova/feature_dapp_api/data/model/DappMetadata.kt b/feature-dapp-api/src/main/java/io/novafoundation/nova/feature_dapp_api/data/model/DappMetadata.kt index 49355b7343..cd45b889c6 100644 --- a/feature-dapp-api/src/main/java/io/novafoundation/nova/feature_dapp_api/data/model/DappMetadata.kt +++ b/feature-dapp-api/src/main/java/io/novafoundation/nova/feature_dapp_api/data/model/DappMetadata.kt @@ -1,6 +1,11 @@ package io.novafoundation.nova.feature_dapp_api.data.model +import io.novafoundation.nova.common.list.GroupedList + +typealias DAppUrl = String + class DappCatalog( + val popular: List, val categories: List, val dApps: List ) @@ -8,7 +13,7 @@ class DappCatalog( class DappMetadata( val name: String, val iconLink: String, - val url: String, + val url: DAppUrl, val baseUrl: String, val categories: Set ) diff --git a/feature-dapp-impl/src/main/java/io/novafoundation/nova/feature_dapp_impl/data/mappers/DappMetadata.kt b/feature-dapp-impl/src/main/java/io/novafoundation/nova/feature_dapp_impl/data/mappers/DappMetadata.kt index e55fdd5494..950ef0852b 100644 --- a/feature-dapp-impl/src/main/java/io/novafoundation/nova/feature_dapp_impl/data/mappers/DappMetadata.kt +++ b/feature-dapp-impl/src/main/java/io/novafoundation/nova/feature_dapp_impl/data/mappers/DappMetadata.kt @@ -29,5 +29,5 @@ fun mapDAppMetadataResponseToDAppMetadatas( ) } - return DappCatalog(categories, metadata) + return DappCatalog(response.popular, categories, metadata) } diff --git a/feature-dapp-impl/src/main/java/io/novafoundation/nova/feature_dapp_impl/data/network/metadata/DappMetadataRemote.kt b/feature-dapp-impl/src/main/java/io/novafoundation/nova/feature_dapp_impl/data/network/metadata/DappMetadataRemote.kt index cc69fdee5f..7870d2fb99 100644 --- a/feature-dapp-impl/src/main/java/io/novafoundation/nova/feature_dapp_impl/data/network/metadata/DappMetadataRemote.kt +++ b/feature-dapp-impl/src/main/java/io/novafoundation/nova/feature_dapp_impl/data/network/metadata/DappMetadataRemote.kt @@ -1,6 +1,7 @@ package io.novafoundation.nova.feature_dapp_impl.data.network.metadata class DappMetadataResponse( + val popular: List, val categories: List, val dapps: List ) diff --git a/feature-dapp-impl/src/main/java/io/novafoundation/nova/feature_dapp_impl/domain/DappInteractor.kt b/feature-dapp-impl/src/main/java/io/novafoundation/nova/feature_dapp_impl/domain/DappInteractor.kt index 2449fd467a..99b9602895 100644 --- a/feature-dapp-impl/src/main/java/io/novafoundation/nova/feature_dapp_impl/domain/DappInteractor.kt +++ b/feature-dapp-impl/src/main/java/io/novafoundation/nova/feature_dapp_impl/domain/DappInteractor.kt @@ -3,6 +3,7 @@ package io.novafoundation.nova.feature_dapp_impl.domain import io.novafoundation.nova.common.list.GroupedList import io.novafoundation.nova.common.utils.Urls import io.novafoundation.nova.feature_dapp_api.data.model.DApp +import io.novafoundation.nova.feature_dapp_api.data.model.DAppGroupedCatalog import io.novafoundation.nova.feature_dapp_api.data.model.DappCategory import io.novafoundation.nova.feature_dapp_api.data.repository.DAppMetadataRepository import io.novafoundation.nova.feature_dapp_impl.data.model.FavouriteDApp @@ -51,7 +52,7 @@ class DappInteractor( .map { it.sortDApps() } } - fun observeDAppsByCategory(): Flow> { + fun observeDAppsByCategory(): Flow { return combine( dAppMetadataRepository.observeDAppCatalog(), favouritesDAppRepository.observeFavourites() @@ -61,12 +62,16 @@ class DappInteractor( val urlToDAppMapping = buildUrlToDappMapping(dapps, favourites) + val popular = dAppCatalog.popular.mapNotNull { urlToDAppMapping[it] } + // Regrouping in O(Categories * Dapps) // Complexity should be fine for expected amount of dApps - categories.associateWith { category -> + val catalog = categories.associateWith { category -> dapps.filter { category in it.categories } .map { urlToDAppMapping.getValue(it.url) } } + + DAppGroupedCatalog(popular, catalog) } } diff --git a/feature-dapp-impl/src/main/java/io/novafoundation/nova/feature_dapp_impl/presentation/common/DappModel.kt b/feature-dapp-impl/src/main/java/io/novafoundation/nova/feature_dapp_impl/presentation/common/DappModel.kt index e8f908e796..943de34a86 100644 --- a/feature-dapp-impl/src/main/java/io/novafoundation/nova/feature_dapp_impl/presentation/common/DappModel.kt +++ b/feature-dapp-impl/src/main/java/io/novafoundation/nova/feature_dapp_impl/presentation/common/DappModel.kt @@ -1,7 +1,10 @@ package io.novafoundation.nova.feature_dapp_impl.presentation.common +import io.novafoundation.nova.common.resources.ResourceManager import io.novafoundation.nova.feature_dapp_api.data.model.DApp +import io.novafoundation.nova.feature_dapp_api.data.model.DAppGroupedCatalog import io.novafoundation.nova.feature_dapp_api.data.model.DappCategory +import io.novafoundation.nova.feature_dapp_impl.R import io.novafoundation.nova.feature_dapp_impl.data.model.FavouriteDApp import io.novafoundation.nova.feature_dapp_impl.domain.common.dappToFavorite import io.novafoundation.nova.feature_dapp_impl.domain.common.favouriteToDApp @@ -17,8 +20,15 @@ data class DappModel( fun mapDappCategoriesToDescription(categories: Collection) = categories.joinToString { it.name } -fun mapDappCategoryToDappCategoryModel(category: DappCategory, dApps: List) = DappCategoryModel( - categoryName = category.name, +fun mapDAppCatalogToDAppCategoryModels(resourceManager: ResourceManager, dappCatalog: DAppGroupedCatalog): List { + val popular = mapDappCategoryToDappCategoryModel(resourceManager.getString(R.string.popular_dapps_title), dappCatalog.popular) + val categories = dappCatalog.categoriesWithDApps.map { (category, dapps) -> mapDappCategoryToDappCategoryModel(category.name, dapps) } + + return listOf(popular) + categories +} + +fun mapDappCategoryToDappCategoryModel(categoryName: String, dApps: List) = DappCategoryModel( + categoryName = categoryName, items = dApps.map { mapDappToDappModel(it) } ) diff --git a/feature-dapp-impl/src/main/java/io/novafoundation/nova/feature_dapp_impl/presentation/main/MainDAppViewModel.kt b/feature-dapp-impl/src/main/java/io/novafoundation/nova/feature_dapp_impl/presentation/main/MainDAppViewModel.kt index f68f07b373..32134ca810 100644 --- a/feature-dapp-impl/src/main/java/io/novafoundation/nova/feature_dapp_impl/presentation/main/MainDAppViewModel.kt +++ b/feature-dapp-impl/src/main/java/io/novafoundation/nova/feature_dapp_impl/presentation/main/MainDAppViewModel.kt @@ -4,6 +4,7 @@ import androidx.lifecycle.MutableLiveData import io.novafoundation.nova.common.base.BaseViewModel import io.novafoundation.nova.common.mixin.actionAwaitable.ActionAwaitableMixin import io.novafoundation.nova.common.mixin.api.Browserable +import io.novafoundation.nova.common.resources.ResourceManager import io.novafoundation.nova.common.utils.Event import io.novafoundation.nova.common.utils.inBackground import io.novafoundation.nova.common.utils.indexOfFirstOrNull @@ -14,7 +15,7 @@ import io.novafoundation.nova.feature_dapp_api.presentation.browser.main.DAppBro import io.novafoundation.nova.feature_dapp_impl.domain.DappInteractor import io.novafoundation.nova.feature_dapp_impl.presentation.common.DappModel import io.novafoundation.nova.feature_dapp_impl.presentation.common.dappCategoryToUi -import io.novafoundation.nova.feature_dapp_impl.presentation.common.mapDappCategoryToDappCategoryModel +import io.novafoundation.nova.feature_dapp_impl.presentation.common.mapDAppCatalogToDAppCategoryModels import io.novafoundation.nova.feature_dapp_impl.presentation.common.mapFavoriteDappToDappModel import io.novafoundation.nova.feature_dapp_impl.presentation.main.model.DAppCategoryState import kotlinx.coroutines.flow.filterNotNull @@ -26,6 +27,7 @@ class MainDAppViewModel( private val selectedAccountUseCase: SelectedAccountUseCase, private val actionAwaitableMixinFactory: ActionAwaitableMixin.Factory, private val dappInteractor: DappInteractor, + private val resourceManager: ResourceManager ) : BaseViewModel(), Browserable { override val openBrowserEvent = MutableLiveData>() @@ -41,9 +43,7 @@ class MainDAppViewModel( .share() private val groupedDAppsUiFlow = groupedDAppsFlow - .map { - it.map { (category, dapps) -> mapDappCategoryToDappCategoryModel(category, dapps) } - } + .map { mapDAppCatalogToDAppCategoryModels(resourceManager, it) } .inBackground() .share() @@ -57,7 +57,7 @@ class MainDAppViewModel( .share() val categoriesStateFlow = groupedDAppsFlow - .map { catalog -> catalog.keys.map { dappCategoryToUi(it, isSelected = false) } } + .map { catalog -> catalog.categoriesWithDApps.keys.map { dappCategoryToUi(it, isSelected = false) } } .map { categories -> DAppCategoryState( categories = categories, From 50e20ce73b838a136b062756a8914fefba062068 Mon Sep 17 00:00:00 2001 From: antonijzelinskij Date: Fri, 24 Jan 2025 08:40:35 +0100 Subject: [PATCH 2/5] Shuffling dapps in catalog --- .../data/mappers/DappMetadata.kt | 3 ++- .../domain/DappInteractor.kt | 26 +++++++++++++------ 2 files changed, 20 insertions(+), 9 deletions(-) diff --git a/feature-dapp-impl/src/main/java/io/novafoundation/nova/feature_dapp_impl/data/mappers/DappMetadata.kt b/feature-dapp-impl/src/main/java/io/novafoundation/nova/feature_dapp_impl/data/mappers/DappMetadata.kt index 950ef0852b..2c49f87fd0 100644 --- a/feature-dapp-impl/src/main/java/io/novafoundation/nova/feature_dapp_impl/data/mappers/DappMetadata.kt +++ b/feature-dapp-impl/src/main/java/io/novafoundation/nova/feature_dapp_impl/data/mappers/DappMetadata.kt @@ -25,7 +25,8 @@ fun mapDAppMetadataResponseToDAppMetadatas( iconLink = it.icon, url = it.url, baseUrl = Urls.normalizeUrl(it.url), - categories = it.categories.mapNotNullTo(mutableSetOf(), categoriesAssociatedById::get) + categories = it.categories.mapNotNullTo(mutableSetOf(), categoriesAssociatedById::get), + isPopular = it.url in response.popular ) } diff --git a/feature-dapp-impl/src/main/java/io/novafoundation/nova/feature_dapp_impl/domain/DappInteractor.kt b/feature-dapp-impl/src/main/java/io/novafoundation/nova/feature_dapp_impl/domain/DappInteractor.kt index 99b9602895..02c876850d 100644 --- a/feature-dapp-impl/src/main/java/io/novafoundation/nova/feature_dapp_impl/domain/DappInteractor.kt +++ b/feature-dapp-impl/src/main/java/io/novafoundation/nova/feature_dapp_impl/domain/DappInteractor.kt @@ -1,10 +1,11 @@ package io.novafoundation.nova.feature_dapp_impl.domain -import io.novafoundation.nova.common.list.GroupedList import io.novafoundation.nova.common.utils.Urls import io.novafoundation.nova.feature_dapp_api.data.model.DApp import io.novafoundation.nova.feature_dapp_api.data.model.DAppGroupedCatalog +import io.novafoundation.nova.feature_dapp_api.data.model.DAppUrl import io.novafoundation.nova.feature_dapp_api.data.model.DappCategory +import io.novafoundation.nova.feature_dapp_api.data.model.DappMetadata import io.novafoundation.nova.feature_dapp_api.data.repository.DAppMetadataRepository import io.novafoundation.nova.feature_dapp_impl.data.model.FavouriteDApp import io.novafoundation.nova.feature_dapp_impl.data.repository.FavouritesDAppRepository @@ -63,18 +64,27 @@ class DappInteractor( val urlToDAppMapping = buildUrlToDappMapping(dapps, favourites) val popular = dAppCatalog.popular.mapNotNull { urlToDAppMapping[it] } - - // Regrouping in O(Categories * Dapps) - // Complexity should be fine for expected amount of dApps - val catalog = categories.associateWith { category -> - dapps.filter { category in it.categories } - .map { urlToDAppMapping.getValue(it.url) } - } + val catalog = categories.associateWith { category -> getShuffledDAppsInCategory(category, dapps, urlToDAppMapping, dAppCatalog.popular) } DAppGroupedCatalog(popular, catalog) } } + private fun getShuffledDAppsInCategory( + category: DappCategory, + dapps: List, + urlToDAppMapping: Map, + popular: List + ): List { + val categoryDApps = dapps.filter { category in it.categories } + .map { urlToDAppMapping.getValue(it.url) } + + val popularDAppsInCategory = categoryDApps.filter { it.url in popular } + val otherDAppsInCategory = categoryDApps.filterNot { it.url in popular } + + return popularDAppsInCategory.shuffled() + otherDAppsInCategory.shuffled() + } + suspend fun getDAppInfo(dAppUrl: String): DAppInfo { val baseUrl = Urls.normalizeUrl(dAppUrl) From 9e7fe6ac1a5238e543da2a4238f164d670547809 Mon Sep 17 00:00:00 2001 From: antonijzelinskij Date: Fri, 24 Jan 2025 10:05:20 +0100 Subject: [PATCH 3/5] Fix shuffling dapps issues --- .../feature_dapp_impl/data/mappers/DappMetadata.kt | 3 +-- .../data/network/metadata/DappMetadataRemote.kt | 4 +++- .../nova/feature_dapp_impl/domain/DappInteractor.kt | 13 ++++++++++--- .../presentation/main/di/MainDAppModule.kt | 7 +++++-- 4 files changed, 19 insertions(+), 8 deletions(-) diff --git a/feature-dapp-impl/src/main/java/io/novafoundation/nova/feature_dapp_impl/data/mappers/DappMetadata.kt b/feature-dapp-impl/src/main/java/io/novafoundation/nova/feature_dapp_impl/data/mappers/DappMetadata.kt index 2c49f87fd0..4103f1b50b 100644 --- a/feature-dapp-impl/src/main/java/io/novafoundation/nova/feature_dapp_impl/data/mappers/DappMetadata.kt +++ b/feature-dapp-impl/src/main/java/io/novafoundation/nova/feature_dapp_impl/data/mappers/DappMetadata.kt @@ -26,9 +26,8 @@ fun mapDAppMetadataResponseToDAppMetadatas( url = it.url, baseUrl = Urls.normalizeUrl(it.url), categories = it.categories.mapNotNullTo(mutableSetOf(), categoriesAssociatedById::get), - isPopular = it.url in response.popular ) } - return DappCatalog(response.popular, categories, metadata) + return DappCatalog(response.popular.map { it.url }, categories, metadata) } diff --git a/feature-dapp-impl/src/main/java/io/novafoundation/nova/feature_dapp_impl/data/network/metadata/DappMetadataRemote.kt b/feature-dapp-impl/src/main/java/io/novafoundation/nova/feature_dapp_impl/data/network/metadata/DappMetadataRemote.kt index 7870d2fb99..102a91de9e 100644 --- a/feature-dapp-impl/src/main/java/io/novafoundation/nova/feature_dapp_impl/data/network/metadata/DappMetadataRemote.kt +++ b/feature-dapp-impl/src/main/java/io/novafoundation/nova/feature_dapp_impl/data/network/metadata/DappMetadataRemote.kt @@ -1,7 +1,7 @@ package io.novafoundation.nova.feature_dapp_impl.data.network.metadata class DappMetadataResponse( - val popular: List, + val popular: List, val categories: List, val dapps: List ) @@ -19,3 +19,5 @@ class DappCategoryRemote( val name: String, val id: String ) + +class DappPopularRemote(val url: String) diff --git a/feature-dapp-impl/src/main/java/io/novafoundation/nova/feature_dapp_impl/domain/DappInteractor.kt b/feature-dapp-impl/src/main/java/io/novafoundation/nova/feature_dapp_impl/domain/DappInteractor.kt index 02c876850d..68b4d02b73 100644 --- a/feature-dapp-impl/src/main/java/io/novafoundation/nova/feature_dapp_impl/domain/DappInteractor.kt +++ b/feature-dapp-impl/src/main/java/io/novafoundation/nova/feature_dapp_impl/domain/DappInteractor.kt @@ -22,6 +22,7 @@ import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.map import kotlinx.coroutines.joinAll import kotlinx.coroutines.withContext +import kotlin.random.Random class DappInteractor( private val dAppMetadataRepository: DAppMetadataRepository, @@ -54,17 +55,22 @@ class DappInteractor( } fun observeDAppsByCategory(): Flow { + val shufflingSeed = Random.nextInt() + return combine( dAppMetadataRepository.observeDAppCatalog(), favouritesDAppRepository.observeFavourites() ) { dAppCatalog, favourites -> + // We use random with seed to shuffle dapps in categories the same way during updates + val random = Random(shufflingSeed) + val categories = dAppCatalog.categories val dapps = dAppCatalog.dApps val urlToDAppMapping = buildUrlToDappMapping(dapps, favourites) val popular = dAppCatalog.popular.mapNotNull { urlToDAppMapping[it] } - val catalog = categories.associateWith { category -> getShuffledDAppsInCategory(category, dapps, urlToDAppMapping, dAppCatalog.popular) } + val catalog = categories.associateWith { getShuffledDAppsInCategory(it, dapps, urlToDAppMapping, dAppCatalog.popular, random) } DAppGroupedCatalog(popular, catalog) } @@ -74,7 +80,8 @@ class DappInteractor( category: DappCategory, dapps: List, urlToDAppMapping: Map, - popular: List + popular: List, + shufflingSeed: Random ): List { val categoryDApps = dapps.filter { category in it.categories } .map { urlToDAppMapping.getValue(it.url) } @@ -82,7 +89,7 @@ class DappInteractor( val popularDAppsInCategory = categoryDApps.filter { it.url in popular } val otherDAppsInCategory = categoryDApps.filterNot { it.url in popular } - return popularDAppsInCategory.shuffled() + otherDAppsInCategory.shuffled() + return popularDAppsInCategory.shuffled(shufflingSeed) + otherDAppsInCategory.shuffled(shufflingSeed) } suspend fun getDAppInfo(dAppUrl: String): DAppInfo { diff --git a/feature-dapp-impl/src/main/java/io/novafoundation/nova/feature_dapp_impl/presentation/main/di/MainDAppModule.kt b/feature-dapp-impl/src/main/java/io/novafoundation/nova/feature_dapp_impl/presentation/main/di/MainDAppModule.kt index ac5a9d393d..79b7c820bf 100644 --- a/feature-dapp-impl/src/main/java/io/novafoundation/nova/feature_dapp_impl/presentation/main/di/MainDAppModule.kt +++ b/feature-dapp-impl/src/main/java/io/novafoundation/nova/feature_dapp_impl/presentation/main/di/MainDAppModule.kt @@ -9,6 +9,7 @@ import dagger.multibindings.IntoMap import io.novafoundation.nova.common.di.viewmodel.ViewModelKey import io.novafoundation.nova.common.di.viewmodel.ViewModelModule import io.novafoundation.nova.common.mixin.actionAwaitable.ActionAwaitableMixin +import io.novafoundation.nova.common.resources.ResourceManager import io.novafoundation.nova.feature_account_api.domain.interfaces.SelectedAccountUseCase import io.novafoundation.nova.feature_dapp_impl.presentation.DAppRouter import io.novafoundation.nova.feature_dapp_impl.domain.DappInteractor @@ -29,13 +30,15 @@ class MainDAppModule { selectedAccountUseCase: SelectedAccountUseCase, actionAwaitableMixinFactory: ActionAwaitableMixin.Factory, router: DAppRouter, - dappInteractor: DappInteractor + dappInteractor: DappInteractor, + resourceManager: ResourceManager ): ViewModel { return MainDAppViewModel( router = router, selectedAccountUseCase = selectedAccountUseCase, actionAwaitableMixinFactory = actionAwaitableMixinFactory, - dappInteractor = dappInteractor + dappInteractor = dappInteractor, + resourceManager = resourceManager ) } } From 7cb06afe6eb05fe29b4b56983ddea6aaca60596a Mon Sep 17 00:00:00 2001 From: antonijzelinskij Date: Fri, 24 Jan 2025 10:14:40 +0100 Subject: [PATCH 4/5] Update DappMetadata.kt --- .../nova/feature_dapp_api/data/model/DappMetadata.kt | 2 -- 1 file changed, 2 deletions(-) diff --git a/feature-dapp-api/src/main/java/io/novafoundation/nova/feature_dapp_api/data/model/DappMetadata.kt b/feature-dapp-api/src/main/java/io/novafoundation/nova/feature_dapp_api/data/model/DappMetadata.kt index cd45b889c6..a1371aa8fa 100644 --- a/feature-dapp-api/src/main/java/io/novafoundation/nova/feature_dapp_api/data/model/DappMetadata.kt +++ b/feature-dapp-api/src/main/java/io/novafoundation/nova/feature_dapp_api/data/model/DappMetadata.kt @@ -1,7 +1,5 @@ package io.novafoundation.nova.feature_dapp_api.data.model -import io.novafoundation.nova.common.list.GroupedList - typealias DAppUrl = String class DappCatalog( From 033d3f3bedface8769fe20b0284a5d4f0c057283 Mon Sep 17 00:00:00 2001 From: antonijzelinskij Date: Fri, 31 Jan 2025 10:01:51 +0100 Subject: [PATCH 5/5] Fix pr notes --- .../nova/feature_dapp_impl/domain/DappInteractor.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/feature-dapp-impl/src/main/java/io/novafoundation/nova/feature_dapp_impl/domain/DappInteractor.kt b/feature-dapp-impl/src/main/java/io/novafoundation/nova/feature_dapp_impl/domain/DappInteractor.kt index 68b4d02b73..9297162d6e 100644 --- a/feature-dapp-impl/src/main/java/io/novafoundation/nova/feature_dapp_impl/domain/DappInteractor.kt +++ b/feature-dapp-impl/src/main/java/io/novafoundation/nova/feature_dapp_impl/domain/DappInteractor.kt @@ -70,7 +70,7 @@ class DappInteractor( val urlToDAppMapping = buildUrlToDappMapping(dapps, favourites) val popular = dAppCatalog.popular.mapNotNull { urlToDAppMapping[it] } - val catalog = categories.associateWith { getShuffledDAppsInCategory(it, dapps, urlToDAppMapping, dAppCatalog.popular, random) } + val catalog = categories.associateWith { getShuffledDAppsInCategory(it, dapps, urlToDAppMapping, dAppCatalog.popular.toSet(), random) } DAppGroupedCatalog(popular, catalog) } @@ -80,7 +80,7 @@ class DappInteractor( category: DappCategory, dapps: List, urlToDAppMapping: Map, - popular: List, + popular: Set, shufflingSeed: Random ): List { val categoryDApps = dapps.filter { category in it.categories }