From 5e8bdcdc1dcad9b29c5a98d003582be83c16d00b Mon Sep 17 00:00:00 2001 From: Aditya Narayan Malik Date: Wed, 26 Feb 2025 11:19:15 +0530 Subject: [PATCH] NTP-39209 | Narayan | Check balance during transaction experiment addition (#15116) --- .../usecase/AccountListCheckBalanceUseCase.kt | 26 +++++++++++++++++++ .../com/navi/pay/utils/NaviPayConstants.kt | 3 +++ 2 files changed, 29 insertions(+) diff --git a/android/navi-pay/src/main/kotlin/com/navi/pay/common/usecase/AccountListCheckBalanceUseCase.kt b/android/navi-pay/src/main/kotlin/com/navi/pay/common/usecase/AccountListCheckBalanceUseCase.kt index 45bf8d4c60..102dea4ab6 100644 --- a/android/navi-pay/src/main/kotlin/com/navi/pay/common/usecase/AccountListCheckBalanceUseCase.kt +++ b/android/navi-pay/src/main/kotlin/com/navi/pay/common/usecase/AccountListCheckBalanceUseCase.kt @@ -9,10 +9,12 @@ package com.navi.pay.common.usecase import com.google.gson.reflect.TypeToken import com.navi.base.utils.EMPTY +import com.navi.base.utils.orTrue import com.navi.common.di.CoroutineDispatcherProvider import com.navi.common.network.models.RepoResult import com.navi.common.network.models.isSuccessWithData import com.navi.common.resourcemanager.manager.ResourceManager.exceptionHandler +import com.navi.common.usecase.LitmusExperimentsUseCase import com.navi.common.utils.CommonUtils.getDisplayableAmount import com.navi.pay.common.model.config.NaviPayDefaultConfig import com.navi.pay.common.model.view.CheckBalanceAnalyticsEventData @@ -23,6 +25,7 @@ import com.navi.pay.onboarding.account.linked.model.network.CheckBalanceResponse import com.navi.pay.utils.CHECK_BALANCE_ERROR_TRANSITION_TOTAL_DURATION import com.navi.pay.utils.DEFAULT_CONFIG import com.navi.pay.utils.INVALID_PIN +import com.navi.pay.utils.LITMUS_EXPERIMENT_NAVIPAY_CHECK_BALANCE_DURING_TRANSACTION import com.navi.pay.utils.RUPEE_SYMBOL import com.navi.pay.utils.isAccountIdOfTypeUpiLite import javax.inject.Inject @@ -42,11 +45,14 @@ class AccountListCheckBalanceUseCase constructor( private val checkAccountBalanceUseCase: CheckAccountBalanceUseCase, private val coroutineDispatcherProvider: CoroutineDispatcherProvider, + private val litmusExperimentsUseCase: LitmusExperimentsUseCase, private val naviPayConfigUseCase: NaviPayConfigUseCase, ) { val checkBalanceStateMap = mutableMapOf>() private val timerJobMap = mutableMapOf() + private val isCheckBalanceExperimentEnabled = MutableStateFlow(true) + private var naviPayDefaultConfig = NaviPayDefaultConfig() private val checkBalanceGenericError = "Unable to load" @@ -56,6 +62,7 @@ constructor( init { updateNaviPayDefaultConfig() + setLitmusExperimentValues() } suspend fun onCheckBalanceClicked( @@ -109,6 +116,11 @@ constructor( val currentCheckBalanceState = checkBalanceStateMap[linkedAccountEntity.accountId]?.value if (shouldIgnoreStateUpdate && currentCheckBalanceState != null) { return + } else if (!isCheckBalanceExperimentEnabled.value) { + updateCheckBalanceStateInStateMapForAccountId( + accountId = linkedAccountEntity.accountId, + checkBalanceState = CheckBalanceState.None, + ) } else if ( isAccountEligible == false && (currentCheckBalanceState is CheckBalanceState.Success || @@ -170,6 +182,20 @@ constructor( } } + private fun setLitmusExperimentValues() { + coroutineScope.launch(coroutineDispatcherProvider.io) { + isCheckBalanceExperimentEnabled.update { + litmusExperimentsUseCase + .execute( + experimentName = LITMUS_EXPERIMENT_NAVIPAY_CHECK_BALANCE_DURING_TRANSACTION + ) + ?.variant + ?.enabled + .orTrue() + } + } + } + private fun updateNaviPayDefaultConfig() { coroutineScope.launch(coroutineDispatcherProvider.io) { naviPayDefaultConfig = diff --git a/android/navi-pay/src/main/kotlin/com/navi/pay/utils/NaviPayConstants.kt b/android/navi-pay/src/main/kotlin/com/navi/pay/utils/NaviPayConstants.kt index 26d6b3989f..87ffb544c3 100644 --- a/android/navi-pay/src/main/kotlin/com/navi/pay/utils/NaviPayConstants.kt +++ b/android/navi-pay/src/main/kotlin/com/navi/pay/utils/NaviPayConstants.kt @@ -168,6 +168,8 @@ const val NAVI_PAY_SYNC_TABLE_UPI_LITE_MANDATE_INFO = "upiLiteMandateInfo" const val LITMUS_EXPERIMENT_NAVIPAY_LITE_DEFAULT_ENTERED_AMOUNT = "NaviPay-lite-default-entered-amount" const val LITMUS_EXPERIMENT_NAVIPAY_ORDER_TAG_SUMMARY = "NaviPay-order-tag-summary" +const val LITMUS_EXPERIMENT_NAVIPAY_CHECK_BALANCE_DURING_TRANSACTION = + "NaviPay-exp-check-balance-during-transaction-v2" const val LITMUS_EXPERIMENT_NAVIPAY_SMV_BINDING = "NaviPay-exp-smv-binding" const val LITMUS_EXPERIMENT_NAVI_FESTIVE_THEME = "festive-theme" const val LITMUS_EXPERIMENT_NAVIPAY_OFFER_EXPERIENCE = "NaviPay-offer-experience" @@ -175,6 +177,7 @@ val NAVI_PAY_LITMUS_EXPERIMENTS = listOf( LITMUS_EXPERIMENT_NAVIPAY_LITE_DEFAULT_ENTERED_AMOUNT, LITMUS_EXPERIMENT_NAVIPAY_ORDER_TAG_SUMMARY, + LITMUS_EXPERIMENT_NAVIPAY_CHECK_BALANCE_DURING_TRANSACTION, LITMUS_EXPERIMENT_NAVIPAY_SMV_BINDING, LITMUS_EXPERIMENT_NAVI_FESTIVE_THEME, LITMUS_EXPERIMENT_NAVIPAY_OFFER_EXPERIENCE,