Skip to content

Commit

Permalink
Merge pull request #1781 from novasamatech/master
Browse files Browse the repository at this point in the history
Master
  • Loading branch information
antonijzelinskij authored Jan 27, 2025
2 parents 1d5e36c + 82218e5 commit 2985ea3
Show file tree
Hide file tree
Showing 13 changed files with 63 additions and 49 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import io.novafoundation.nova.app.root.navigation.navigators.governance.TinderGo
import io.novafoundation.nova.common.di.scope.ApplicationScope
import io.novafoundation.nova.common.resources.ContextManager
import io.novafoundation.nova.feature_account_api.presenatation.account.wallet.list.SelectTracksCommunicator
import io.novafoundation.nova.feature_dapp_impl.presentation.DAppRouter
import io.novafoundation.nova.feature_governance_impl.presentation.GovernanceRouter
import io.novafoundation.nova.feature_governance_impl.presentation.referenda.vote.setup.tindergov.TinderGovVoteCommunicator

Expand All @@ -21,8 +22,9 @@ class GovernanceNavigationModule {
fun provideRouter(
navigationHoldersRegistry: NavigationHoldersRegistry,
commonNavigator: Navigator,
contextManager: ContextManager
): GovernanceRouter = GovernanceNavigator(navigationHoldersRegistry, commonNavigator, contextManager)
contextManager: ContextManager,
dAppRouter: DAppRouter
): GovernanceRouter = GovernanceNavigator(navigationHoldersRegistry, commonNavigator, contextManager, dAppRouter)

@Provides
@ApplicationScope
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import io.novafoundation.nova.app.root.navigation.navigators.NavigationHoldersRe
import io.novafoundation.nova.app.root.navigation.navigators.Navigator
import io.novafoundation.nova.app.root.navigation.navigators.staking.relaychain.RelayStakingNavigator
import io.novafoundation.nova.common.di.scope.ApplicationScope
import io.novafoundation.nova.feature_dapp_impl.presentation.DAppRouter
import io.novafoundation.nova.feature_staking_impl.presentation.StakingDashboardRouter
import io.novafoundation.nova.feature_staking_impl.presentation.StakingRouter

Expand All @@ -17,8 +18,9 @@ class RelayStakingNavigationModule {
fun provideRelayStakingRouter(
navigationHoldersRegistry: NavigationHoldersRegistry,
navigator: Navigator,
dashboardRouter: StakingDashboardRouter
dashboardRouter: StakingDashboardRouter,
dAppRouter: DAppRouter
): StakingRouter {
return RelayStakingNavigator(navigationHoldersRegistry, navigator, dashboardRouter)
return RelayStakingNavigator(navigationHoldersRegistry, navigator, dashboardRouter, dAppRouter)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@ class StakingNavigationModule {

@Provides
@ApplicationScope
fun provideStakingDashboardNavigator(): StakingDashboardNavigator {
return StakingDashboardNavigator()
fun provideStakingDashboardNavigator(navigationHoldersRegistry: NavigationHoldersRegistry): StakingDashboardNavigator {
return StakingDashboardNavigator(navigationHoldersRegistry)
}

@Provides
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import io.novafoundation.nova.app.root.navigation.navigators.Navigator
import io.novafoundation.nova.common.resources.ContextManager
import io.novafoundation.nova.common.utils.showBrowser
import io.novafoundation.nova.feature_dapp_api.presentation.browser.main.DAppBrowserPayload
import io.novafoundation.nova.feature_dapp_impl.presentation.browser.main.DAppBrowserFragment
import io.novafoundation.nova.feature_dapp_impl.presentation.DAppRouter
import io.novafoundation.nova.feature_governance_impl.BuildConfig
import io.novafoundation.nova.feature_governance_impl.presentation.GovernanceRouter
import io.novafoundation.nova.feature_governance_impl.presentation.common.description.DescriptionFragment
Expand Down Expand Up @@ -47,7 +47,8 @@ import io.novafoundation.nova.feature_governance_impl.presentation.referenda.vot
class GovernanceNavigator(
navigationHoldersRegistry: NavigationHoldersRegistry,
private val commonNavigator: Navigator,
private val contextManager: ContextManager
private val contextManager: ContextManager,
private val dAppRouter: DAppRouter
) : BaseNavigator(navigationHoldersRegistry), GovernanceRouter {

override fun openReferendum(payload: ReferendumDetailsPayload) {
Expand Down Expand Up @@ -235,9 +236,7 @@ class GovernanceNavigator(
}

override fun openDAppBrowser(url: String) {
navigationBuilder().action(R.id.action_referendumDetailsFragment_to_DAppBrowserGraph)
.setArgs(DAppBrowserFragment.getBundle(DAppBrowserPayload.Address(url)))
.navigateInFirstAttachedContext()
dAppRouter.openDAppBrowser(DAppBrowserPayload.Address(url))
}

override fun openReferendumDescription(payload: DescriptionPayload) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,15 @@ package io.novafoundation.nova.app.root.navigation.navigators.staking
import androidx.lifecycle.MutableLiveData
import androidx.navigation.NavController
import io.novafoundation.nova.app.R
import io.novafoundation.nova.app.root.navigation.navigators.BaseNavigator
import io.novafoundation.nova.app.root.navigation.navigators.NavigationHoldersRegistry
import io.novafoundation.nova.common.utils.Event
import io.novafoundation.nova.common.utils.event
import io.novafoundation.nova.feature_staking_impl.presentation.StakingDashboardRouter

class StakingDashboardNavigator : StakingDashboardRouter {
class StakingDashboardNavigator(
navigationHoldersRegistry: NavigationHoldersRegistry
) : BaseNavigator(navigationHoldersRegistry), StakingDashboardRouter {

private var stakingTabNavController: NavController? = null
private var pendingAction: Int? = null
Expand Down Expand Up @@ -36,7 +40,9 @@ class StakingDashboardNavigator : StakingDashboardRouter {
}

override fun returnToStakingDashboard() {
stakingTabNavController?.navigate(R.id.back_to_main)
navigationBuilder()
.action(R.id.back_to_main)
.navigateInFirstAttachedContext()

returnToStakingTabRoot()
scrollToDashboardTopEvent.value = Unit.event()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import io.novafoundation.nova.app.root.navigation.navigators.BaseNavigator
import io.novafoundation.nova.app.root.navigation.navigators.NavigationHoldersRegistry
import io.novafoundation.nova.app.root.navigation.navigators.Navigator
import io.novafoundation.nova.feature_dapp_api.presentation.browser.main.DAppBrowserPayload
import io.novafoundation.nova.feature_dapp_impl.presentation.browser.main.DAppBrowserFragment
import io.novafoundation.nova.feature_dapp_impl.presentation.DAppRouter
import io.novafoundation.nova.feature_staking_impl.domain.staking.redeem.RedeemConsequences
import io.novafoundation.nova.feature_staking_impl.presentation.StakingDashboardRouter
import io.novafoundation.nova.feature_staking_impl.presentation.StakingRouter
Expand Down Expand Up @@ -47,6 +47,7 @@ class RelayStakingNavigator(
navigationHoldersRegistry: NavigationHoldersRegistry,
private val commonNavigator: Navigator,
private val stakingDashboardRouter: StakingDashboardRouter,
private val dAppRouter: DAppRouter
) : BaseNavigator(navigationHoldersRegistry), StakingRouter {

override fun returnToStakingMain() {
Expand Down Expand Up @@ -286,8 +287,6 @@ class RelayStakingNavigator(
}

override fun openDAppBrowser(url: String) {
navigationBuilder().action(R.id.action_open_dappBrowser)
.setArgs(DAppBrowserFragment.getBundle(DAppBrowserPayload.Address(url)))
.navigateInFirstAttachedContext()
dAppRouter.openDAppBrowser(DAppBrowserPayload.Address(url))
}
}
8 changes: 0 additions & 8 deletions app/src/main/res/navigation/referendum_details_graph.xml
Original file line number Diff line number Diff line change
Expand Up @@ -21,14 +21,6 @@
app:popUpTo="@id/referendumDetailsFragment"
app:popUpToInclusive="true" />

<action
android:id="@+id/action_referendumDetailsFragment_to_DAppBrowserGraph"
app:destination="@id/dapp_browser_graph"
app:enterAnim="@anim/fragment_slide_in"
app:exitAnim="@anim/fragment_open_exit"
app:popEnterAnim="@anim/fragment_close_enter"
app:popExitAnim="@anim/fragment_slide_out" />

<action
android:id="@+id/action_referendumDetailsFragment_to_referendumDescription"
app:destination="@id/referendumDescription"
Expand Down
8 changes: 0 additions & 8 deletions app/src/main/res/navigation/root_nav_graph.xml
Original file line number Diff line number Diff line change
Expand Up @@ -89,14 +89,6 @@
app:popEnterAnim="@anim/fragment_close_enter"
app:popExitAnim="@anim/fragment_close_exit" />

<action
android:id="@+id/action_open_dappBrowser"
app:destination="@id/dapp_browser_graph"
app:enterAnim="@anim/fragment_slide_in"
app:exitAnim="@anim/fragment_open_exit"
app:popEnterAnim="@anim/fragment_close_enter"
app:popExitAnim="@anim/fragment_slide_out" />

<action
android:id="@+id/action_import_nav_graph"
app:destination="@id/import_nav_graph"
Expand Down
4 changes: 2 additions & 2 deletions build.gradle
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
buildscript {
ext {
// App version
versionName = '9.2.0'
versionCode = 168
versionName = '9.2.2'
versionCode = 172

applicationId = "io.novafoundation.nova"
releaseApplicationSuffix = "market"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ import kotlinx.coroutines.flow.Flow

interface DAppMetadataRepository {

suspend fun isDAppsSynced(): Boolean

suspend fun syncDAppMetadatas()

suspend fun syncAndGetDapp(baseUrl: String): DappMetadata?
Expand All @@ -20,3 +22,11 @@ interface DAppMetadataRepository {

fun observeDAppCatalog(): Flow<DappCatalog>
}

suspend fun DAppMetadataRepository.getDAppIfSyncedOrSync(baseUrl: String): DappMetadata? {
return if (isDAppsSynced()) {
getDAppMetadata(baseUrl)
} else {
syncAndGetDapp(baseUrl)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,10 @@ class RealDAppMetadataRepository(

private val dappMetadatasFlow = MutableSharedFlow<DappCatalog>(replay = 1, onBufferOverflow = BufferOverflow.DROP_OLDEST)

override suspend fun isDAppsSynced(): Boolean {
return dappMetadatasFlow.replayCache.isNotEmpty()
}

override suspend fun syncDAppMetadatas() {
val response = retryUntilDone { dappMetadataApi.getParachainMetadata(remoteApiUrl) }
val dappMetadatas = mapDAppMetadataResponseToDAppMetadatas(response)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -52,11 +52,11 @@ class RealBrowserTabRepository(
}

override suspend fun changeCurrentUrl(tabId: String, url: String) {
browserTabsDao.updateCurrentUrl(tabId, url)
withContext(Dispatchers.Default) { browserTabsDao.updateCurrentUrl(tabId, url) }
}

override suspend fun changeKnownDAppMetadata(tabId: String, dappIconUrl: String?) {
browserTabsDao.updateKnownDAppMetadata(tabId, dappIconUrl)
withContext(Dispatchers.Default) { browserTabsDao.updateKnownDAppMetadata(tabId, dappIconUrl) }
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import io.novafoundation.nova.common.utils.Urls
import io.novafoundation.nova.common.utils.coroutines.RootScope
import io.novafoundation.nova.feature_account_api.domain.interfaces.AccountRepository
import io.novafoundation.nova.feature_dapp_api.data.repository.DAppMetadataRepository
import io.novafoundation.nova.feature_dapp_api.data.repository.getDAppIfSyncedOrSync
import io.novafoundation.nova.feature_dapp_impl.data.repository.tabs.BrowserTabInternalRepository
import io.novafoundation.nova.feature_dapp_impl.utils.tabs.models.BrowserTab
import io.novafoundation.nova.feature_dapp_impl.utils.tabs.models.CurrentTabState
Expand All @@ -23,7 +24,6 @@ import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.flatMapLatest
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext

class RealBrowserTabService(
private val dAppMetadataRepository: DAppMetadataRepository,
Expand All @@ -47,9 +47,8 @@ class RealBrowserTabService(

override val tabStateFlow = combine(
selectedTabIdFlow,
accountRepository.selectedMetaAccountFlow(),
allTabsFlow
) { selectedTabId, metaAccount, allTabs ->
) { selectedTabId, allTabs ->
TabsState(
tabs = allTabs.values.toList(),
selectedTab = currentTabState(selectedTabId, allTabs)
Expand All @@ -76,18 +75,22 @@ class RealBrowserTabService(
selectTab(null)
}

// Create a new browser tab and save it to persistent storage
// Then we sync dapp metadata for this tab asynchronously to not block tab creation
override suspend fun createNewTab(url: String): BrowserTab {
val tab = BrowserTab(
id = UUID.randomUUID().toString(),
metaId = accountRepository.getSelectedMetaAccount().id,
pageSnapshot = PageSnapshot.fromName(Urls.domainOf(url)),
currentUrl = url,
knownDAppMetadata = getKnownDappMetadata(url),
knownDAppMetadata = null,
creationTime = Date()
)

browserTabInternalRepository.saveTab(tab)

deferredSyncKnownDAppMetadata(tab.id, url)

return tab
}

Expand Down Expand Up @@ -144,14 +147,11 @@ class RealBrowserTabService(
if (url == null) return

launch {
withContext(Dispatchers.Default) {
activeSessions[tabId].currentUrl = url
browserTabInternalRepository.changeCurrentUrl(tabId, url)

val metadata = getKnownDappMetadata(url)
browserTabInternalRepository.changeKnownDAppMetadata(tabId, metadata?.iconLink)
}
activeSessions[tabId].currentUrl = url
browserTabInternalRepository.changeCurrentUrl(tabId, url)
}

deferredSyncKnownDAppMetadata(tabId, url)
}

private fun makeTabSnapshot(tabId: String) {
Expand All @@ -166,8 +166,16 @@ class RealBrowserTabService(
}
}

private fun deferredSyncKnownDAppMetadata(tabId: String, url: String) {
launch {
getKnownDappMetadata(url)?.let {
browserTabInternalRepository.changeKnownDAppMetadata(tabId, it.iconLink)
}
}
}

private suspend fun getKnownDappMetadata(url: String): BrowserTab.KnownDAppMetadata? {
return dAppMetadataRepository.getDAppMetadata(Urls.normalizeUrl(url))?.let {
return dAppMetadataRepository.getDAppIfSyncedOrSync(Urls.normalizeUrl(url))?.let {
BrowserTab.KnownDAppMetadata(it.iconLink)
}
}
Expand Down

0 comments on commit 2985ea3

Please sign in to comment.