NTP-68061 | lite default pre-filled amounts experiment removal (#16396)
This commit is contained in:
@@ -1,80 +0,0 @@
|
||||
/*
|
||||
*
|
||||
* * Copyright © 2024-2025 by Navi Technologies Limited
|
||||
* * All rights reserved. Strictly confidential
|
||||
*
|
||||
*/
|
||||
|
||||
package com.navi.pay.common.usecase
|
||||
|
||||
import com.google.gson.Gson
|
||||
import com.google.gson.reflect.TypeToken
|
||||
import com.navi.common.usecase.LitmusExperimentsUseCase
|
||||
import com.navi.pay.management.lite.models.NaviPayUpiLiteConfig
|
||||
import com.navi.pay.management.lite.models.view.UpiLiteDefaultEnteredAmountExperimentData
|
||||
import com.navi.pay.network.di.NaviPayGsonBuilder
|
||||
import com.navi.pay.utils.LITMUS_EXPERIMENT_NAVIPAY_LITE_DEFAULT_ENTERED_AMOUNT
|
||||
import com.navi.pay.utils.UPI_LITE_CONFIG
|
||||
import javax.inject.Inject
|
||||
import org.json.JSONObject
|
||||
|
||||
class UpiLiteExperimentationUseCase
|
||||
@Inject
|
||||
constructor(
|
||||
private val litmusExperimentsUseCase: LitmusExperimentsUseCase,
|
||||
private val naviPayConfigUseCase: NaviPayConfigUseCase,
|
||||
@NaviPayGsonBuilder private val gson: Gson,
|
||||
) {
|
||||
suspend fun getUpiLiteDefaultEnteredAmountExperimentData(
|
||||
screenName: String
|
||||
): UpiLiteDefaultEnteredAmountExperimentData {
|
||||
|
||||
val upiLiteConfig =
|
||||
naviPayConfigUseCase.execute<NaviPayUpiLiteConfig>(
|
||||
configKey = UPI_LITE_CONFIG,
|
||||
type = object : TypeToken<NaviPayUpiLiteConfig>() {}.type,
|
||||
screenName = screenName,
|
||||
) ?: NaviPayUpiLiteConfig()
|
||||
|
||||
val defaultPreFilledAmount = upiLiteConfig.config.defaultPreFilledAmount
|
||||
|
||||
val liteExperimentInfoJson =
|
||||
litmusExperimentsUseCase.execute(
|
||||
experimentName = LITMUS_EXPERIMENT_NAVIPAY_LITE_DEFAULT_ENTERED_AMOUNT
|
||||
)
|
||||
|
||||
if (liteExperimentInfoJson == null) {
|
||||
return UpiLiteDefaultEnteredAmountExperimentData(
|
||||
initialTopUpAmount = defaultPreFilledAmount,
|
||||
subsequentTopUpAmount = defaultPreFilledAmount,
|
||||
)
|
||||
}
|
||||
|
||||
val experimentData = liteExperimentInfoJson.variant
|
||||
|
||||
val experimentPayloadJson =
|
||||
(experimentData?.payload?.get("value") as? String)?.let { JSONObject(it) }
|
||||
|
||||
if (experimentPayloadJson == null) {
|
||||
return UpiLiteDefaultEnteredAmountExperimentData(
|
||||
initialTopUpAmount = defaultPreFilledAmount,
|
||||
subsequentTopUpAmount = defaultPreFilledAmount,
|
||||
)
|
||||
}
|
||||
|
||||
val type = object : TypeToken<Map<String, Int>>() {}.type
|
||||
val initialTopUpAmount =
|
||||
gson
|
||||
.fromJson<Map<String, Int>>(experimentPayloadJson.toString(), type)
|
||||
.getOrElse(key = "initialTopUpAmount", defaultValue = { defaultPreFilledAmount })
|
||||
val subsequentTopUpAmount =
|
||||
gson
|
||||
.fromJson<Map<String, Int>>(experimentPayloadJson.toString(), type)
|
||||
.getOrElse(key = "subsequentTopUpAmount", defaultValue = { defaultPreFilledAmount })
|
||||
|
||||
return UpiLiteDefaultEnteredAmountExperimentData(
|
||||
initialTopUpAmount = initialTopUpAmount,
|
||||
subsequentTopUpAmount = subsequentTopUpAmount,
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -19,7 +19,8 @@ data class NaviPayUpiLiteConfig(
|
||||
|
||||
data class NaviPayUpiLiteConfigContent(
|
||||
@SerializedName("mandateThresholdAmount") val mandateThresholdAmount: Int = 100,
|
||||
@SerializedName("defaultPreFilledAmount") val defaultPreFilledAmount: Int = 1000,
|
||||
@SerializedName("defaultInitialTopUpAmount") val defaultInitialTopUpAmount: Int = 10,
|
||||
@SerializedName("defaultSubsequentTopUpAmount") val defaultSubsequentTopUpAmount: Int = 1000,
|
||||
@SerializedName("maxTopUpLimit") val maxTopUpLimit: Int = 5000,
|
||||
@SerializedName("amountChips") val amountChips: List<String> = listOf("100", "200", "500"),
|
||||
@SerializedName("maxPayableAmount") val maxPayableAmount: Int = 500,
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
|
||||
package com.navi.pay.management.lite.models.view
|
||||
|
||||
data class UpiLiteDefaultEnteredAmountExperimentData(
|
||||
data class UpiLiteDefaultEnteredAmountData(
|
||||
val initialTopUpAmount: Int,
|
||||
val subsequentTopUpAmount: Int,
|
||||
)
|
||||
@@ -59,7 +59,6 @@ import com.navi.pay.common.usecase.LocationUseCase
|
||||
import com.navi.pay.common.usecase.NaviPayConfigUseCase
|
||||
import com.navi.pay.common.usecase.UpiLiteBalanceUseCase
|
||||
import com.navi.pay.common.usecase.UpiLiteBannerRotationUseCase
|
||||
import com.navi.pay.common.usecase.UpiLiteExperimentationUseCase
|
||||
import com.navi.pay.common.usecase.UpiRequestIdUseCase
|
||||
import com.navi.pay.common.utils.DeviceInfoProvider
|
||||
import com.navi.pay.common.utils.NaviPayCommonUtils
|
||||
@@ -99,7 +98,7 @@ import com.navi.pay.management.lite.models.view.UPILiteAccountStatus
|
||||
import com.navi.pay.management.lite.models.view.UPILiteEntity
|
||||
import com.navi.pay.management.lite.models.view.UpiLiteBannerDisplayType
|
||||
import com.navi.pay.management.lite.models.view.UpiLiteBottomSheetStateHolder
|
||||
import com.navi.pay.management.lite.models.view.UpiLiteDefaultEnteredAmountExperimentData
|
||||
import com.navi.pay.management.lite.models.view.UpiLiteDefaultEnteredAmountData
|
||||
import com.navi.pay.management.lite.repository.UPILiteRepository
|
||||
import com.navi.pay.management.lite.util.AddBalanceButtonSource
|
||||
import com.navi.pay.management.lite.util.DisableUpiLiteStatus
|
||||
@@ -151,6 +150,7 @@ import com.navi.pay.utils.ACTION_PIN_SET
|
||||
import com.navi.pay.utils.CUSTOMER_DEBITED_VIA_PAY
|
||||
import com.navi.pay.utils.DATE_TIME_FORMAT_YEAR_MONTH_DATE_WITH_SLASH_SEPARATOR
|
||||
import com.navi.pay.utils.DEFAULT_MANDATE_AMOUNT_RULE
|
||||
import com.navi.pay.utils.DEFAULT_TOP_UP_AMOUNT
|
||||
import com.navi.pay.utils.DEFAULT_UPI_CURRENCY
|
||||
import com.navi.pay.utils.DEFAULT_UPI_MODE
|
||||
import com.navi.pay.utils.KEY_UPI_LITE_ACTIVE_ACCOUNT_INFO
|
||||
@@ -229,7 +229,6 @@ constructor(
|
||||
private val orderRepository: OrderRepository,
|
||||
private val naviCacheRepository: NaviCacheRepository,
|
||||
private val mandateRepository: MandateRepository,
|
||||
private val upiLiteExperimentationUseCase: UpiLiteExperimentationUseCase,
|
||||
val accountListCheckBalanceUseCase: AccountListCheckBalanceUseCase,
|
||||
private val upiLiteBannerRotationUseCase: UpiLiteBannerRotationUseCase,
|
||||
private val naviPayPspManager: NaviPayPspManager,
|
||||
@@ -287,8 +286,7 @@ constructor(
|
||||
private val _isUserOnboarded = MutableStateFlow(false)
|
||||
val isUserOnboarded = _isUserOnboarded.asStateFlow()
|
||||
|
||||
private val _enteredAmount =
|
||||
MutableStateFlow(naviPayUpiLiteConfig.value.config.defaultPreFilledAmount.toString())
|
||||
private val _enteredAmount = MutableStateFlow(DEFAULT_TOP_UP_AMOUNT)
|
||||
val enteredAmount = _enteredAmount.asStateFlow()
|
||||
|
||||
private val _enableButtonLottie = MutableStateFlow(false)
|
||||
@@ -424,11 +422,12 @@ constructor(
|
||||
private val _upiLiteMandateInfo = MutableStateFlow<MandateItem?>(null)
|
||||
val upiLiteMandateInfo = _upiLiteMandateInfo.asStateFlow()
|
||||
|
||||
private val upiLiteDefaultEnteredAmountExperimentInfo =
|
||||
private val upiLiteDefaultEnteredAmountInfo =
|
||||
MutableStateFlow(
|
||||
UpiLiteDefaultEnteredAmountExperimentData(
|
||||
initialTopUpAmount = naviPayUpiLiteConfig.value.config.defaultPreFilledAmount,
|
||||
subsequentTopUpAmount = naviPayUpiLiteConfig.value.config.defaultPreFilledAmount,
|
||||
UpiLiteDefaultEnteredAmountData(
|
||||
initialTopUpAmount = naviPayUpiLiteConfig.value.config.defaultInitialTopUpAmount,
|
||||
subsequentTopUpAmount =
|
||||
naviPayUpiLiteConfig.value.config.defaultSubsequentTopUpAmount,
|
||||
)
|
||||
)
|
||||
|
||||
@@ -972,7 +971,6 @@ constructor(
|
||||
init {
|
||||
updateScreenSourceFromIntent()
|
||||
fetchNaviPayUpiLiteConfig()
|
||||
setLitmusExperimentValues()
|
||||
setUpUpiLiteBannerDisplayType()
|
||||
getLiteMandateInfo()
|
||||
updateNaviPaySessionAttributes()
|
||||
@@ -1159,24 +1157,6 @@ constructor(
|
||||
}
|
||||
}
|
||||
|
||||
private fun setLitmusExperimentValues() {
|
||||
viewModelScope.launch(coroutineDispatcherProvider.io) {
|
||||
upiLiteDefaultEnteredAmountExperimentInfo.update {
|
||||
upiLiteExperimentationUseCase.getUpiLiteDefaultEnteredAmountExperimentData(
|
||||
screenName = screenName
|
||||
)
|
||||
}
|
||||
naviPayAnalytics.onDevGenericEvent(
|
||||
event = ::setLitmusExperimentValues.name,
|
||||
params =
|
||||
mapOf(
|
||||
"upiLiteDefaultEnteredAmountExperimentInfo" to
|
||||
upiLiteDefaultEnteredAmountExperimentInfo.value.toString()
|
||||
),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
private fun setUpUpiLiteBannerDisplayType() {
|
||||
viewModelScope.launch(coroutineDispatcherProvider.io) {
|
||||
_upiLiteBannerDisplayType.update { upiLiteBannerRotationUseCase.execute() }
|
||||
@@ -1339,6 +1319,15 @@ constructor(
|
||||
_upiLiteTnCUrl.update { tncUrl }
|
||||
}
|
||||
|
||||
private fun updateDefaultTopUpAmount(initialTopUpAmount: Int, subsequentTopUpAmount: Int) {
|
||||
upiLiteDefaultEnteredAmountInfo.update {
|
||||
it.copy(
|
||||
initialTopUpAmount = initialTopUpAmount,
|
||||
subsequentTopUpAmount = subsequentTopUpAmount,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
private fun fetchNaviPayUpiLiteConfig() {
|
||||
viewModelScope.launch(coroutineDispatcherProvider.io) {
|
||||
_naviPayUpiLiteConfig.update {
|
||||
@@ -1352,6 +1341,11 @@ constructor(
|
||||
updateMaxTopUpLimit(maxTopUpLimit = naviPayUpiLiteConfig.value.config.maxTopUpLimit)
|
||||
updateAmountChips(chips = naviPayUpiLiteConfig.value.config.amountChips)
|
||||
updateTnCUrl(tncUrl = naviPayUpiLiteConfig.value.config.upiLiteTnCUrl)
|
||||
updateDefaultTopUpAmount(
|
||||
initialTopUpAmount = naviPayUpiLiteConfig.value.config.defaultInitialTopUpAmount,
|
||||
subsequentTopUpAmount =
|
||||
naviPayUpiLiteConfig.value.config.defaultSubsequentTopUpAmount,
|
||||
)
|
||||
|
||||
naviPayAnalytics.onDevGenericEvent(
|
||||
event = ::fetchNaviPayUpiLiteConfig.name,
|
||||
@@ -3711,9 +3705,9 @@ constructor(
|
||||
|
||||
private fun getDefaultTopUpAmountFromExperiment() =
|
||||
if (isUserOnboarded.value) {
|
||||
upiLiteDefaultEnteredAmountExperimentInfo.value.subsequentTopUpAmount
|
||||
upiLiteDefaultEnteredAmountInfo.value.subsequentTopUpAmount
|
||||
} else {
|
||||
upiLiteDefaultEnteredAmountExperimentInfo.value.initialTopUpAmount
|
||||
upiLiteDefaultEnteredAmountInfo.value.initialTopUpAmount
|
||||
}
|
||||
|
||||
private suspend fun processInitialTopUpPendingState(
|
||||
|
||||
@@ -33,6 +33,7 @@ const val BUTLER_VPA_TRANSACTIONS_INFO_MAX_SIZE = 10
|
||||
const val BAU = "BAU"
|
||||
const val ORDER_HISTORY_LOCAL_SYNC_BATCH_LIMIT = 500
|
||||
const val UPI_LITE_SCREEN_SOURCE_KEY = "UPILiteScreenSource"
|
||||
const val DEFAULT_TOP_UP_AMOUNT = "10"
|
||||
|
||||
const val MAX_VISIBLE_TRANSACTION_ITEMS_IN_SCREEN_HEIGHT = 5
|
||||
const val NAVI_UPI = "Navi UPI"
|
||||
@@ -182,8 +183,6 @@ const val NAVI_PAY_SYNC_TABLE_ORDER_ERROR_MAPPING_KEY = "orderErrorMappingKey"
|
||||
const val NAVI_PAY_SYNC_TABLE_CUSTOMER_ONBOARDING_DATA_KEY = "customerOnboardingDataKey"
|
||||
|
||||
// Litmus experiments
|
||||
const val LITMUS_EXPERIMENT_NAVIPAY_LITE_DEFAULT_ENTERED_AMOUNT =
|
||||
"NaviPay-lite-default-entered-amount"
|
||||
const val LITMUS_EXPERIMENT_NAVIPAY_TRANSACTION_LEDGER = "NaviPay-exp-txn-ledger"
|
||||
const val LITMUS_EXPERIMENT_NAVIPAY_SMV_BINDING = "NaviPay-exp-smv-binding"
|
||||
const val LITMUS_EXPERIMENT_NAVI_FESTIVE_THEME = "festive-theme"
|
||||
@@ -197,7 +196,6 @@ const val LITMUS_EXPERIMENT_NAVIPAY_RCC_LANDING_EXP = "NaviPay-rcc-landing-exper
|
||||
val NAVI_PAY_LITMUS_EXPERIMENTS =
|
||||
listOf(
|
||||
LITMUS_EXPERIMENT_NAVIPAY_TRANSACTION_LEDGER,
|
||||
LITMUS_EXPERIMENT_NAVIPAY_LITE_DEFAULT_ENTERED_AMOUNT,
|
||||
LITMUS_EXPERIMENT_NAVIPAY_SMV_BINDING,
|
||||
LITMUS_EXPERIMENT_NAVI_FESTIVE_THEME,
|
||||
LITMUS_EXPERIMENT_NAVIPAY_OFFER_EXPERIENCE,
|
||||
|
||||
Reference in New Issue
Block a user