Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
package com.gemwallet.android.data.coordinators.di

import com.gemwallet.android.application.recipient.coordinators.GetRecipientAssetInfo
import com.gemwallet.android.application.recipient.coordinators.GetWallets
import com.gemwallet.android.data.coordinators.recipient.GetRecipientAssetInfoImpl
import com.gemwallet.android.data.coordinators.recipient.GetWalletsImpl
import com.gemwallet.android.data.repositories.assets.AssetsRepository
import com.gemwallet.android.data.repositories.wallets.WalletsRepository
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
import dagger.hilt.components.SingletonComponent
import javax.inject.Singleton

@InstallIn(SingletonComponent::class)
@Module
object RecipientModule {

@Provides
@Singleton
fun provideGetWallets(
walletsRepository: WalletsRepository,
): GetWallets = GetWalletsImpl(walletsRepository)

@Provides
@Singleton
fun provideGetRecipientAssetInfo(
assetsRepository: AssetsRepository,
): GetRecipientAssetInfo = GetRecipientAssetInfoImpl(assetsRepository)
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package com.gemwallet.android.data.coordinators.di

import com.gemwallet.android.application.session.coordinators.GetSession
import com.gemwallet.android.application.session.coordinators.SetCurrentCurrency
import com.gemwallet.android.cases.device.SyncDeviceInfo
import com.gemwallet.android.data.coordinators.session.GetSessionImpl
import com.gemwallet.android.data.coordinators.session.SetCurrentCurrencyImpl
import com.gemwallet.android.data.repositories.session.SessionRepository
import dagger.Module
Expand All @@ -14,6 +16,12 @@ import javax.inject.Singleton
@Module
object SessionModule {

@Provides
@Singleton
fun provideGetSession(
sessionRepository: SessionRepository,
): GetSession = GetSessionImpl(sessionRepository)

@Provides
@Singleton
fun provideSetCurrentCurrency(
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.gemwallet.android.data.coordinators.recipient

import com.gemwallet.android.application.recipient.coordinators.GetRecipientAssetInfo
import com.gemwallet.android.data.repositories.assets.AssetsRepository
import com.gemwallet.android.model.AssetInfo
import com.wallet.core.primitives.AssetId
import kotlinx.coroutines.flow.Flow

class GetRecipientAssetInfoImpl(
private val assetsRepository: AssetsRepository,
) : GetRecipientAssetInfo {
override fun invoke(assetId: AssetId): Flow<AssetInfo?> = assetsRepository.getAssetInfo(assetId)
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.gemwallet.android.data.coordinators.recipient

import com.gemwallet.android.application.recipient.coordinators.GetWallets
import com.gemwallet.android.data.repositories.wallets.WalletsRepository
import com.wallet.core.primitives.Wallet
import kotlinx.coroutines.flow.Flow

class GetWalletsImpl(
private val walletsRepository: WalletsRepository,
) : GetWallets {
override fun invoke(): Flow<List<Wallet>> = walletsRepository.getAll()
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package com.gemwallet.android.data.coordinators.session

import com.gemwallet.android.application.session.coordinators.GetSession
import com.gemwallet.android.data.repositories.session.SessionRepository
import com.gemwallet.android.model.Session
import kotlinx.coroutines.flow.StateFlow

class GetSessionImpl(
private val sessionRepository: SessionRepository,
) : GetSession {
override fun invoke(): StateFlow<Session?> = sessionRepository.session()
}
2 changes: 1 addition & 1 deletion android/features/recipient/viewmodels/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ android {

dependencies {
api(project(":ui-models"))
implementation(project(":data:repositories"))
implementation(project(":blockchain"))

implementation(libs.ktx.core)
implementation(libs.lifecycle.runtime.ktx)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@ import androidx.compose.runtime.snapshotFlow
import androidx.lifecycle.SavedStateHandle
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.gemwallet.android.application.recipient.coordinators.GetRecipientAssetInfo
import com.gemwallet.android.application.recipient.coordinators.GetWallets
import com.gemwallet.android.application.session.coordinators.GetSession
import com.gemwallet.android.blockchain.operators.ValidateAddressOperator
import com.gemwallet.android.cases.nft.GetAssetNft
import com.gemwallet.android.data.repositories.assets.AssetsRepository
import com.gemwallet.android.data.repositories.session.SessionRepository
import com.gemwallet.android.data.repositories.wallets.WalletsRepository
import com.gemwallet.android.domains.asset.chain
import com.gemwallet.android.ext.asset
import com.gemwallet.android.ext.getAccount
Expand Down Expand Up @@ -50,9 +50,9 @@ const val nftAssetIdArg = "nftAssetId"
@OptIn(ExperimentalCoroutinesApi::class)
@HiltViewModel
class RecipientViewModel @Inject constructor(
private val sessionRepository: SessionRepository,
private val walletsRepository: WalletsRepository,
private val assetsRepository: AssetsRepository,
private val getSession: GetSession,
private val getWallets: GetWallets,
private val getRecipientAssetInfo: GetRecipientAssetInfo,
private val getAssetNft: GetAssetNft,
private val validateAddressOperator: ValidateAddressOperator,
savedStateHandle: SavedStateHandle
Expand All @@ -62,15 +62,15 @@ class RecipientViewModel @Inject constructor(
val memoState = mutableStateOf("")
val nameRecordState = mutableStateOf<NameRecord?>(null)

private val session = sessionRepository.session()
private val session = getSession()
.stateIn(viewModelScope, SharingStarted.Eagerly, null)

private val assetId = savedStateHandle.getStateFlow(assetIdArg, "")
.mapNotNull { it.toAssetId() }
private val nftAssetId: StateFlow<String?> = savedStateHandle.getStateFlow(nftAssetIdArg, null)

val type: StateFlow<RecipientType?> = combine(
assetId.flatMapLatest { assetsRepository.getAssetInfo(it) }.flowOn(Dispatchers.IO),
assetId.flatMapLatest { getRecipientAssetInfo(it) }.flowOn(Dispatchers.IO),
nftAssetId,
::Pair,
).flatMapLatest { (assetInfo, nftId) ->
Expand All @@ -83,7 +83,7 @@ class RecipientViewModel @Inject constructor(
}
}.stateIn(viewModelScope, SharingStarted.Eagerly, null)

val wallets = session.combine(walletsRepository.getAll()) { session, wallets ->
val wallets = session.combine(getWallets()) { session, wallets ->
wallets.filter { it.id != session?.wallet?.id }
}
.stateIn(viewModelScope, SharingStarted.Eagerly, emptyList())
Expand Down Expand Up @@ -176,4 +176,4 @@ class RecipientViewModel @Inject constructor(
} else {
RecipientError.IncorrectAddress
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package com.gemwallet.android.application.recipient.coordinators

import com.gemwallet.android.model.AssetInfo
import com.wallet.core.primitives.AssetId
import kotlinx.coroutines.flow.Flow

interface GetRecipientAssetInfo {
operator fun invoke(assetId: AssetId): Flow<AssetInfo?>
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.gemwallet.android.application.recipient.coordinators

import com.wallet.core.primitives.Wallet
import kotlinx.coroutines.flow.Flow

interface GetWallets {
operator fun invoke(): Flow<List<Wallet>>
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package com.gemwallet.android.application.session.coordinators

import com.gemwallet.android.model.Session
import kotlinx.coroutines.flow.StateFlow

interface GetSession {
operator fun invoke(): StateFlow<Session?>
}