diff --git a/android/navi-coin/src/main/java/com/navi/coin/network/RetrofitService.kt b/android/navi-coin/src/main/java/com/navi/coin/network/RetrofitService.kt index d21f77bc31..2071b4888f 100644 --- a/android/navi-coin/src/main/java/com/navi/coin/network/RetrofitService.kt +++ b/android/navi-coin/src/main/java/com/navi/coin/network/RetrofitService.kt @@ -52,6 +52,7 @@ interface RetrofitService { suspend fun fetchScreenUiTronConfigs( @Header("Accept-Encoding") acceptEncoding: String, @Header("X-Target") target: String, + @Header("vpa") vpa: String? = null, @Path("screenId") screenId: String, ): Response> @@ -60,6 +61,7 @@ interface RetrofitService { suspend fun fetchAlchemistScreenUiTronConfigs( @Header("Accept-Encoding") acceptEncoding: String, @Header("X-Target") target: String, + @Header("vpa") vpa: String? = null, @Path("screenId") screenId: String, ): Response> diff --git a/android/navi-coin/src/main/java/com/navi/coin/repo/repository/CoinHomeScreenRepo.kt b/android/navi-coin/src/main/java/com/navi/coin/repo/repository/CoinHomeScreenRepo.kt index 267aa78f39..d8268d9e7a 100644 --- a/android/navi-coin/src/main/java/com/navi/coin/repo/repository/CoinHomeScreenRepo.kt +++ b/android/navi-coin/src/main/java/com/navi/coin/repo/repository/CoinHomeScreenRepo.kt @@ -47,6 +47,7 @@ constructor( suspend fun fetchCoinHomeScreenUiTronConfigs( screenName: String, shouldRefresh: Boolean? = null, + vpa: String? = null, ): Flow> { val cacheKeyForResponse = DBCacheConstants.COIN_HOME_SCREEN_CACHE_KEY val isCacheAvailable = cacheHandlerProxy.isCacheAvailable(key = cacheKeyForResponse) @@ -67,6 +68,7 @@ constructor( acceptEncoding = GZIP, target = ModuleNameV2.FORGE.name, screenId = COINS_SCREEN_SCREEN_NAME, + vpa = vpa, ), ) }, @@ -76,6 +78,7 @@ constructor( suspend fun fetchCoinHomeScreenV2( screenName: String, shouldRefresh: Boolean? = null, + vpa: String? = null, ): Flow> { val cacheKeyForResponse = DBCacheConstants.COIN_HOME_SCREEN_V2_CACHE_KEY @@ -98,6 +101,7 @@ constructor( acceptEncoding = GZIP, target = ModuleNameV2.ALCHEMIST.name, screenId = COINS_SCREEN_SCREEN_V2_NAME, + vpa = vpa, ), ) }, diff --git a/android/navi-coin/src/main/java/com/navi/coin/vm/CoinHomeViewModelV1.kt b/android/navi-coin/src/main/java/com/navi/coin/vm/CoinHomeViewModelV1.kt index 8ca412d9a8..3b64fcfa0d 100644 --- a/android/navi-coin/src/main/java/com/navi/coin/vm/CoinHomeViewModelV1.kt +++ b/android/navi-coin/src/main/java/com/navi/coin/vm/CoinHomeViewModelV1.kt @@ -7,6 +7,7 @@ package com.navi.coin.vm +import com.navi.base.cache.datastore.DataStoreHelper import com.navi.base.utils.orFalse import com.navi.coin.models.model.RedemptionRequest import com.navi.coin.models.model.RedemptionResponse @@ -70,20 +71,26 @@ import com.navi.uitron.model.data.UiTronActionData import com.navi.uitron.utils.orVal import com.navi.uitron.utils.transformations.moneyFormat import com.ramcosta.composedestinations.spec.Direction +import dagger.Lazy import dagger.hilt.android.lifecycle.HiltViewModel import javax.inject.Inject import kotlin.time.Duration.Companion.seconds +import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asSharedFlow import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.flow.firstOrNull import kotlinx.coroutines.flow.update import org.json.JSONObject @HiltViewModel open class CoinHomeViewModelV1 @Inject -constructor(private val coinHomeScreenRepo: CoinHomeScreenRepo) : CoinBaseVM() { +constructor( + private val coinHomeScreenRepo: CoinHomeScreenRepo, + private val dataStoreHelper: Lazy, +) : CoinBaseVM() { private val eventPublisher: NaviCoinsAnalytics.BasicEvent = NaviCoinsAnalytics.naviCoinsAnalytics.BasicEvent() @@ -116,6 +123,8 @@ constructor(private val coinHomeScreenRepo: CoinHomeScreenRepo) : CoinBaseVM() { private var hasAutoRedeemTriggered = false + var vpa: String? = null + init { launch { getActionCallback().collect { action -> handleCoinHomeScreenActions(action) } } } @@ -132,10 +141,7 @@ constructor(private val coinHomeScreenRepo: CoinHomeScreenRepo) : CoinBaseVM() { ) } is RedeemCoinAction -> { - redeemCoin( - upiId = handle.get(apiAction.upiHandleKey.orEmpty()).orEmpty(), - apiAction = apiAction, - ) + redeemCoin(upiId = vpa.orEmpty(), apiAction = apiAction) } } } @@ -149,10 +155,14 @@ constructor(private val coinHomeScreenRepo: CoinHomeScreenRepo) : CoinBaseVM() { if (shouldRefresh.orFalse()) { _coinHomeScreenData.update { CoinHomeScreenState.Loading } } + + vpa = getVpaOfPrimaryAccount().firstOrNull() + coinHomeScreenRepo .fetchCoinHomeScreenUiTronConfigs( screenName = screenName, shouldRefresh = shouldRefresh.orFalse(), + vpa = vpa, ) .collect { result -> val response = result.data @@ -541,6 +551,10 @@ constructor(private val coinHomeScreenRepo: CoinHomeScreenRepo) : CoinBaseVM() { coinHomeScreenRepo.updateNotificationsPermission(notificationSettings) } + suspend fun getVpaOfPrimaryAccount(): Flow { + return dataStoreHelper.get().get(key = KEY_UPI_PRIMARY_ACCOUNT_VPA, defaultValue = "") + } + private companion object { val SHAREABILITY_URLS = listOf( @@ -566,5 +580,6 @@ constructor(private val coinHomeScreenRepo: CoinHomeScreenRepo) : CoinBaseVM() { ) const val AUTO_REDEEM_LAYOUT_ID = "auto_redeem_layout" const val INVISIBLE = "invisible" + const val KEY_UPI_PRIMARY_ACCOUNT_VPA = "upiPrimaryAccountVpa" } } diff --git a/android/navi-coin/src/main/java/com/navi/coin/vm/CoinHomeViewModelV2.kt b/android/navi-coin/src/main/java/com/navi/coin/vm/CoinHomeViewModelV2.kt index 3a09faa56b..86a18cec0b 100644 --- a/android/navi-coin/src/main/java/com/navi/coin/vm/CoinHomeViewModelV2.kt +++ b/android/navi-coin/src/main/java/com/navi/coin/vm/CoinHomeViewModelV2.kt @@ -7,6 +7,7 @@ package com.navi.coin.vm +import com.navi.base.cache.datastore.DataStoreHelper import com.navi.base.utils.orFalse import com.navi.coin.models.states.CoinHomeScreenV2State import com.navi.coin.repo.repository.CoinHomeScreenRepo @@ -17,17 +18,23 @@ import com.navi.common.network.ApiConstants import com.navi.common.utils.isValidResponse import com.navi.rr.common.constants.COIN_HOME_SCREEN_V2 import com.navi.rr.common.models.RRErrorData +import dagger.Lazy import dagger.hilt.android.lifecycle.HiltViewModel import javax.inject.Inject import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asSharedFlow import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.flow.firstOrNull import kotlinx.coroutines.flow.update @HiltViewModel -class CoinHomeViewModelV2 @Inject constructor(private val coinHomeScreenRepo: CoinHomeScreenRepo) : - CoinHomeViewModelV1(coinHomeScreenRepo) { +class CoinHomeViewModelV2 +@Inject +constructor( + private val coinHomeScreenRepo: CoinHomeScreenRepo, + private val dataStoreHelper: Lazy, +) : CoinHomeViewModelV1(coinHomeScreenRepo, dataStoreHelper) { private val _screenData = MutableStateFlow(CoinHomeScreenV2State.Loading) val screenState = _screenData.asStateFlow() @@ -65,10 +72,12 @@ class CoinHomeViewModelV2 @Inject constructor(private val coinHomeScreenRepo: Co if (shouldRefresh.orFalse()) { _screenData.update { CoinHomeScreenV2State.Loading } } + vpa = getVpaOfPrimaryAccount().firstOrNull() coinHomeScreenRepo .fetchCoinHomeScreenV2( screenName = screenName, shouldRefresh = shouldRefresh.orFalse(), + vpa = vpa, ) .collect { result -> val response = result.data