diff --git a/feature-crowdloan-impl/src/main/java/io/novafoundation/nova/feature_crowdloan_impl/data/CrowdloanSharedState.kt b/feature-crowdloan-impl/src/main/java/io/novafoundation/nova/feature_crowdloan_impl/data/CrowdloanSharedState.kt index cb7195f..1fec549 100644 --- a/feature-crowdloan-impl/src/main/java/io/novafoundation/nova/feature_crowdloan_impl/data/CrowdloanSharedState.kt +++ b/feature-crowdloan-impl/src/main/java/io/novafoundation/nova/feature_crowdloan_impl/data/CrowdloanSharedState.kt @@ -8,6 +8,7 @@ import io.novafoundation.nova.runtime.state.NothingAdditional import io.novafoundation.nova.runtime.state.uniqueOption private const val CROWDLOAN_SHARED_STATE = "CROWDLOAN_SHARED_STATE" +private const val PEZKUWI_RELAY_CHAIN_ID = "1aa94987791a5544e9667ec249d2cef1b8fdd6083c85b93fc37892d54a1156ca" class CrowdloanSharedState( chainRegistry: ChainRegistry, @@ -16,5 +17,6 @@ class CrowdloanSharedState( preferences = preferences, chainRegistry = chainRegistry, supportedOptions = uniqueOption { chain, chainAsset -> chain.hasCrowdloans and chainAsset.isUtilityAsset }, - preferencesKey = CROWDLOAN_SHARED_STATE + preferencesKey = CROWDLOAN_SHARED_STATE, + preferredChainId = PEZKUWI_RELAY_CHAIN_ID ) diff --git a/feature-governance-impl/src/main/java/io/novafoundation/nova/feature_governance_impl/data/GovernanceSharedState.kt b/feature-governance-impl/src/main/java/io/novafoundation/nova/feature_governance_impl/data/GovernanceSharedState.kt index 07312c2..029f7cd 100644 --- a/feature-governance-impl/src/main/java/io/novafoundation/nova/feature_governance_impl/data/GovernanceSharedState.kt +++ b/feature-governance-impl/src/main/java/io/novafoundation/nova/feature_governance_impl/data/GovernanceSharedState.kt @@ -12,6 +12,7 @@ import io.novafoundation.nova.runtime.multiNetwork.chain.model.ChainId import io.novafoundation.nova.runtime.state.SelectableSingleAssetSharedState private const val GOVERNANCE_SHARED_STATE = "GOVERNANCE_SHARED_STATE" +private const val PEZKUWI_RELAY_CHAIN_ID = "1aa94987791a5544e9667ec249d2cef1b8fdd6083c85b93fc37892d54a1156ca" class GovernanceSharedState( chainRegistry: ChainRegistry, @@ -27,7 +28,8 @@ class GovernanceSharedState( emptyList() } }, - preferencesKey = GOVERNANCE_SHARED_STATE + preferencesKey = GOVERNANCE_SHARED_STATE, + preferredChainId = PEZKUWI_RELAY_CHAIN_ID ), MutableGovernanceState { diff --git a/runtime/src/main/java/io/novafoundation/nova/runtime/multiNetwork/runtime/types/custom/vote/SiVoteTypeMapping.kt b/runtime/src/main/java/io/novafoundation/nova/runtime/multiNetwork/runtime/types/custom/vote/SiVoteTypeMapping.kt index 7551ebc..225539c 100644 --- a/runtime/src/main/java/io/novafoundation/nova/runtime/multiNetwork/runtime/types/custom/vote/SiVoteTypeMapping.kt +++ b/runtime/src/main/java/io/novafoundation/nova/runtime/multiNetwork/runtime/types/custom/vote/SiVoteTypeMapping.kt @@ -7,6 +7,8 @@ fun SiVoteTypeMapping(): ReplaceTypesSiTypeMapping { return ReplaceTypesSiTypeMapping( "pallet_democracy.vote.Vote" to voteType, - "pallet_conviction_voting.vote.Vote" to voteType + "pallet_conviction_voting.vote.Vote" to voteType, + "pezpallet_democracy.vote.Vote" to voteType, + "pezpallet_conviction_voting.vote.Vote" to voteType ) } diff --git a/runtime/src/main/java/io/novafoundation/nova/runtime/state/SelectableSingleAssetSharedState.kt b/runtime/src/main/java/io/novafoundation/nova/runtime/state/SelectableSingleAssetSharedState.kt index 7434e25..33cf281 100644 --- a/runtime/src/main/java/io/novafoundation/nova/runtime/state/SelectableSingleAssetSharedState.kt +++ b/runtime/src/main/java/io/novafoundation/nova/runtime/state/SelectableSingleAssetSharedState.kt @@ -32,13 +32,17 @@ abstract class SelectableSingleAssetSharedState, - private val preferences: Preferences + private val preferences: Preferences, + private val preferredChainId: ChainId? = null ) : SelectedAssetOptionSharedState { override val selectedOption: Flow> = preferences.stringFlow( field = preferencesKey, initialValueProducer = { - val option = availableToSelect().first() + val options = availableToSelect() + val option = preferredChainId?.let { preferred -> + options.firstOrNull { it.assetWithChain.chain.id == preferred } + } ?: options.first() val chainAsset = option.assetWithChain.asset val additional = option.additional @@ -74,6 +78,12 @@ abstract class SelectableSingleAssetSharedState>): SupportedAssetOption { + return preferredChainId?.let { preferred -> + options.firstOrNull { it.assetWithChain.chain.id == preferred } + } ?: options.first() + } + private suspend fun getChainWithAssetOrFallback(chainId: ChainId, chainAssetId: Int, additionalIdentifier: String?): SupportedAssetOption { val optionalChainAndAsset = chainRegistry.enabledChainWithAssetOrNull(chainId, chainAssetId) val supportedOptions = optionalChainAndAsset?.let { @@ -82,10 +92,10 @@ abstract class SelectableSingleAssetSharedState fallback to default - optionalChainAndAsset == null -> availableToSelect().first() + optionalChainAndAsset == null -> preferredOrFirst(availableToSelect()) // previously supported option is no longer supported -> fallback to default - supportedOptions.isEmpty() -> availableToSelect().first() + supportedOptions.isEmpty() -> preferredOrFirst(availableToSelect()) // there is no particular additional option specified -> select first one additionalIdentifier == null -> SupportedAssetOption(optionalChainAndAsset, additional = supportedOptions.first())