From d7744e011033bea502ae30061c0080bc039be268 Mon Sep 17 00:00:00 2001 From: A Shrihari Raju Date: Wed, 18 Sep 2024 15:42:30 +0530 Subject: [PATCH] NTP-3871 | reducing api calls on cams on sell page (#12595) --- .../dashboard/viewmodels/InvestmentsVm.kt | 8 ++++++- .../navi/amc/fundbuy/models/FundCardData.kt | 2 +- .../redemption/fragment/FundSellFragment.kt | 23 ++++++++++++++++++- .../redemption/viewmodel/FundSellViewModel.kt | 14 +++++++++++ .../main/res/layout/order_status_layout.xml | 4 ++-- 5 files changed, 46 insertions(+), 5 deletions(-) diff --git a/android/app/src/main/java/com/naviapp/home/dashboard/viewmodels/InvestmentsVm.kt b/android/app/src/main/java/com/naviapp/home/dashboard/viewmodels/InvestmentsVm.kt index f3307e6fdc..1b1aa54bd7 100644 --- a/android/app/src/main/java/com/naviapp/home/dashboard/viewmodels/InvestmentsVm.kt +++ b/android/app/src/main/java/com/naviapp/home/dashboard/viewmodels/InvestmentsVm.kt @@ -231,11 +231,17 @@ constructor( } else { // In the error case if the experiment fails, we will show the new investment tab or the // old one based on the flag - investmentTabV2Enabled = investmentTabV2Enabled ?: true + investmentTabV2Enabled = + investmentTabV2Enabled + ?: isInvestmentTabResponseInCache(INVESTMENT_TAB_AB_EXPERIMENT_NAME).orFalse() fetchInvestmentTabBasedOnABExperiment() } } + private suspend fun isInvestmentTabResponseInCache(cacheKey: String): Boolean { + return naviCacheRepository.get(cacheKey) != null + } + private fun setInvestmentTabResponseFromCache(isLoading: Boolean = false) { viewModelScope.safeLaunch(Dispatchers.IO) { val cachedResponse = diff --git a/android/navi-amc/src/main/java/com/navi/amc/fundbuy/models/FundCardData.kt b/android/navi-amc/src/main/java/com/navi/amc/fundbuy/models/FundCardData.kt index 9cc627a11f..80ef5ac77e 100644 --- a/android/navi-amc/src/main/java/com/navi/amc/fundbuy/models/FundCardData.kt +++ b/android/navi-amc/src/main/java/com/navi/amc/fundbuy/models/FundCardData.kt @@ -31,7 +31,7 @@ data class SubItemData( @SerializedName("actionData", alternate = ["action"]) val actionData: ActionData? = null, @SerializedName("titleIcon") val titleIcon: IconAction? = null, @SerializedName("timeLeft", alternate = ["timerInvalidateAfter"]) - val timerInvalidateAfter: Long? = null + var timerInvalidateAfter: Long? = null ) : Parcelable @Parcelize diff --git a/android/navi-amc/src/main/java/com/navi/amc/redemption/fragment/FundSellFragment.kt b/android/navi-amc/src/main/java/com/navi/amc/redemption/fragment/FundSellFragment.kt index 24db36f2c0..e9922bb746 100644 --- a/android/navi-amc/src/main/java/com/navi/amc/redemption/fragment/FundSellFragment.kt +++ b/android/navi-amc/src/main/java/com/navi/amc/redemption/fragment/FundSellFragment.kt @@ -75,12 +75,32 @@ class FundSellFragment : AmcBaseFragment() { override fun onResume() { super.onResume() - fetchData(genericTimer.isInitialised()) + checkIfTimerIsInitialized() + } + + private fun checkIfTimerIsInitialized() { + viewModel.entryTime = System.currentTimeMillis() + val timeDifference = viewModel.calculateTimeElapsed() + if (viewModel.hasUserReturned && timeDifference > 0L) { + viewModel.timerData?.let { timerData -> + timerData.timerInvalidateAfter?.let { timerInvalidateAfter -> + if (timerInvalidateAfter > timeDifference) { + timerData.timerInvalidateAfter = timerInvalidateAfter - timeDifference + setSettlementContainerTimer(timerData) + } else if (viewModel.exitTime != 0L) { + fetchData(genericTimer.isInitialised()) + } + } + } + } else { + viewModel.hasUserReturned = true + } } override fun onStop() { super.onStop() genericTimer.stopTimer() + viewModel.exitTime = System.currentTimeMillis() } override fun setContainerView(viewStub: ViewStub) { @@ -117,6 +137,7 @@ class FundSellFragment : AmcBaseFragment() { showWhenDataIsAvailable(item.iconCode) this.setOnClickListener { showBottomSheet(item.actionData) } } + viewModel.updateTimerData(item) setSettlementContainerTimer(item) } handleVisibility(viewModel.isAmountSelected) diff --git a/android/navi-amc/src/main/java/com/navi/amc/redemption/viewmodel/FundSellViewModel.kt b/android/navi-amc/src/main/java/com/navi/amc/redemption/viewmodel/FundSellViewModel.kt index 006e4e3f21..cf9bd6059c 100644 --- a/android/navi-amc/src/main/java/com/navi/amc/redemption/viewmodel/FundSellViewModel.kt +++ b/android/navi-amc/src/main/java/com/navi/amc/redemption/viewmodel/FundSellViewModel.kt @@ -10,6 +10,7 @@ package com.navi.amc.redemption.viewmodel import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.viewModelScope +import com.navi.amc.fundbuy.models.SubItemData import com.navi.amc.redemption.model.FundSellScreenResponse import com.navi.amc.redemption.model.RedemptionOrderDetails import com.navi.amc.redemption.repository.FundSellRepository @@ -29,6 +30,11 @@ class FundSellViewModel @Inject constructor(private val repository: FundSellRepo var approxValue: String? = null + var hasUserReturned: Boolean = false + var exitTime: Long = 0L + var entryTime: Long = 0L + var timerData: SubItemData? = null + private val _fundSellScreenData = MutableLiveData() val fundSellScreenData: LiveData get() = _fundSellScreenData @@ -116,6 +122,14 @@ class FundSellViewModel @Inject constructor(private val repository: FundSellRepo } } + fun updateTimerData(timerData: SubItemData) { + this.timerData = timerData + } + + fun calculateTimeElapsed(): Long { + return (entryTime - exitTime) + } + override fun onCleared() { _fundSellScreenData.value = null _redeemOrderDetails.value = null diff --git a/android/navi-amc/src/main/res/layout/order_status_layout.xml b/android/navi-amc/src/main/res/layout/order_status_layout.xml index 0ed3b1a433..38f1281d41 100644 --- a/android/navi-amc/src/main/res/layout/order_status_layout.xml +++ b/android/navi-amc/src/main/res/layout/order_status_layout.xml @@ -133,8 +133,8 @@ android:layout_height="wrap_content" android:layout_marginStart="@dimen/dp_16" android:layout_marginEnd="@dimen/dp_16" - android:paddingTop="@dimen/dp_24" - android:paddingBottom="@dimen/dp_24" + android:paddingTop="@dimen/_16dp" + android:paddingBottom="@dimen/_16dp" android:visibility="gone" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent"