NTP-50641 | Updated formatting to use Locale.US and added firebase remote config for upi spend analyser (#15649)
This commit is contained in:
@@ -276,7 +276,7 @@ fun <T> convertObjectToJson(type: T): JSONObject? {
|
||||
return null
|
||||
}
|
||||
|
||||
fun Double.formatToDecimalPlaces(digits: Int) = "%.${digits}f".format(this)
|
||||
fun Double.formatToDecimalPlaces(digits: Int) = "%.${digits}f".format(Locale.US, this)
|
||||
|
||||
fun Double.formatToInrWithDecimals(digits: Int = 2): String {
|
||||
val numberFormat = NumberFormat.getCurrencyInstance(Locale("en", "IN"))
|
||||
|
||||
@@ -142,6 +142,7 @@ object FirebaseRemoteConfigHelper {
|
||||
const val NAVI_PAY_SET_AS_WALLPAPER_ENABLED = "NAVI_PAY_SET_AS_WALLPAPER_ENABLED"
|
||||
const val UPI_SPEND_CROSS_VARIANT_TIMEOUT_MILLIS = "UPI_SPEND_CROSS_VARIANT_TIMEOUT_MILLIS"
|
||||
const val NAVI_PAY_AUTO_ZOOM_DELAY_IN_SECONDS = "NAVI_PAY_AUTO_ZOOM_DELAY_IN_SECONDS"
|
||||
const val UPI_SPEND_ANALYSER_ENABLED = "UPI_SPEND_ANALYSER_ENABLED"
|
||||
|
||||
// COMMON
|
||||
const val LITMUS_EXPERIMENTS_CACHE_DURATION_IN_MILLIS =
|
||||
|
||||
@@ -685,4 +685,8 @@
|
||||
<key>UPI_SPEND_CROSS_VARIANT_TIMEOUT_MILLIS</key>
|
||||
<value>1296000000</value>
|
||||
</entry>
|
||||
<entry>
|
||||
<key>UPI_SPEND_ANALYSER_ENABLED</key>
|
||||
<value>true</value>
|
||||
</entry>
|
||||
</defaultsMap>
|
||||
@@ -20,6 +20,7 @@ import com.navi.moneymanager.common.utils.Constants
|
||||
import com.navi.moneymanager.common.utils.Constants.UNCATEGORIZED
|
||||
import com.navi.moneymanager.common.utils.MonthConstants
|
||||
import dagger.hilt.android.qualifiers.ApplicationContext
|
||||
import java.util.Locale
|
||||
import javax.inject.Inject
|
||||
|
||||
class TransactionsDataHelper @Inject constructor(@ApplicationContext private val context: Context) {
|
||||
@@ -37,7 +38,8 @@ class TransactionsDataHelper @Inject constructor(@ApplicationContext private val
|
||||
linkedAccRef = it.linkedAccRef,
|
||||
txnReference = it.txnReference,
|
||||
txnTimestamp = it.txnTimestamp,
|
||||
txnAmount = String.format("%.2f", it.txnAmount).toDouble(),
|
||||
txnAmount =
|
||||
String.format(locale = Locale.US, format = "%.2f", it.txnAmount).toDouble(),
|
||||
valueDate = it.valueDate,
|
||||
narration = it.narration,
|
||||
mode = it.mode,
|
||||
|
||||
@@ -10,6 +10,7 @@ package com.navi.moneymanager.common.helper
|
||||
import com.navi.base.utils.BaseUtils.getDayMonthAndYearFromTimestamp
|
||||
import com.navi.common.firebaseremoteconfig.FirebaseRemoteConfigHelper
|
||||
import com.navi.common.firebaseremoteconfig.FirebaseRemoteConfigHelper.UPI_SPEND_CROSS_VARIANT_TIMEOUT_MILLIS
|
||||
import com.navi.common.network.models.VariantInfo
|
||||
import com.navi.common.usecase.LitmusExperimentsUseCase
|
||||
import com.navi.moneymanager.common.dataprovider.data.datastore.DataStoreInfoProvider
|
||||
import com.navi.moneymanager.common.dataprovider.domain.upi.TxnHistoryUpiSpendDataProvider
|
||||
@@ -19,11 +20,10 @@ import com.navi.moneymanager.common.model.upi.UpiTxnHistorySpendAnalysisData
|
||||
import com.navi.moneymanager.common.network.di.RoomDataStoreInfoProvider
|
||||
import com.navi.moneymanager.common.utils.Constants.CONTROL
|
||||
import com.navi.moneymanager.common.utils.Constants.LITMUS_EXPERIMENT_TXN_HISTORY_SPEND_ANALYSIS
|
||||
import com.navi.moneymanager.common.utils.Constants.SPEND_ANALYSIS_EXP_CROSS_VARIANT
|
||||
import com.navi.moneymanager.common.utils.Constants.UPI_SPEND_CROSS_VARIANT_DISMISS_TIMESTAMP
|
||||
import javax.inject.Inject
|
||||
import kotlinx.coroutines.flow.Flow
|
||||
import kotlinx.coroutines.flow.first
|
||||
import kotlinx.coroutines.flow.flow
|
||||
import org.joda.time.DateTime
|
||||
|
||||
class UpiSpendAnalysisWidgetHelper
|
||||
@@ -45,22 +45,26 @@ constructor(
|
||||
)
|
||||
}
|
||||
|
||||
fun getEntryPointExpVariant(): Flow<String> = flow {
|
||||
suspend fun getEntryPointExpVariant(): String {
|
||||
val expResponse =
|
||||
litmusExperimentsUseCase.execute(
|
||||
experimentName = LITMUS_EXPERIMENT_TXN_HISTORY_SPEND_ANALYSIS
|
||||
)
|
||||
|
||||
val currentVariant =
|
||||
if (expResponse?.variant?.enabled == true) {
|
||||
expResponse.variant.name
|
||||
} else {
|
||||
CONTROL
|
||||
}
|
||||
emit(currentVariant)
|
||||
return getVariantName(expResponse?.variant)
|
||||
}
|
||||
|
||||
suspend fun shouldShowCrossVariant(): Boolean {
|
||||
private suspend fun getVariantName(variant: VariantInfo?): String {
|
||||
return when {
|
||||
variant?.name == SPEND_ANALYSIS_EXP_CROSS_VARIANT && !shouldShowCrossVariant() -> {
|
||||
CONTROL
|
||||
}
|
||||
else -> {
|
||||
variant?.name ?: CONTROL
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private suspend fun shouldShowCrossVariant(): Boolean {
|
||||
val lastDismissTime =
|
||||
dbDataStoreProvider.getLongData(UPI_SPEND_CROSS_VARIANT_DISMISS_TIMESTAMP, 0L).first()
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@ import com.navi.moneymanager.common.network.model.MMConfigResponse
|
||||
import com.navi.moneymanager.common.network.model.UpiSpendTransactionData
|
||||
import com.navi.moneymanager.common.utils.Constants.UNCATEGORIZED
|
||||
import dagger.hilt.android.qualifiers.ApplicationContext
|
||||
import java.util.Locale
|
||||
import javax.inject.Inject
|
||||
|
||||
class UpiSpendTransactionsDataHelper
|
||||
@@ -35,7 +36,8 @@ constructor(@ApplicationContext private val context: Context) {
|
||||
upiTxnId = it.upiTxnId.orEmpty(),
|
||||
naviUpiTxnId = it.naviUpiTxnId.orEmpty(),
|
||||
txnTimestamp = it.txnTimestamp,
|
||||
txnAmount = String.format("%.2f", it.txnAmount).toDouble(),
|
||||
txnAmount =
|
||||
String.format(locale = Locale.US, format = "%.2f", it.txnAmount).toDouble(),
|
||||
valueDate = it.valueDate,
|
||||
mode = it.mode,
|
||||
type = it.type,
|
||||
|
||||
@@ -14,10 +14,8 @@ import java.util.Locale
|
||||
|
||||
class DateUtils(
|
||||
private val calendarInstance: Calendar = Calendar.getInstance(),
|
||||
private val dayMonthFormatter: SimpleDateFormat =
|
||||
SimpleDateFormat("dd MMM", Locale.getDefault()),
|
||||
private val dayMonthWeekFormatter: SimpleDateFormat =
|
||||
SimpleDateFormat("EEE, dd MMM", Locale.getDefault()),
|
||||
private val dayMonthFormatter: SimpleDateFormat = SimpleDateFormat("dd MMM", Locale.US),
|
||||
private val dayMonthWeekFormatter: SimpleDateFormat = SimpleDateFormat("EEE, dd MMM", Locale.US),
|
||||
) {
|
||||
fun normalizeDate(date: Date): Date =
|
||||
calendarInstance.run {
|
||||
|
||||
@@ -62,6 +62,7 @@ import com.navi.pay.utils.RUPEE_SYMBOL
|
||||
import com.navi.pay.utils.clickableDebounce
|
||||
import com.navi.pay.utils.noRippleClickableWithDebounce
|
||||
import com.navi.rr.utils.ext.clickable
|
||||
import java.util.Locale
|
||||
|
||||
@Composable
|
||||
fun OrderHistoryBottomSheetContent(
|
||||
@@ -252,6 +253,7 @@ private fun UpiSpendAnalyzerInfoBottomSheetContent(
|
||||
NaviText(
|
||||
text =
|
||||
String.format(
|
||||
Locale.US,
|
||||
stringResource(R.string.upi_spend_analyzer_bottomsheet_info_description),
|
||||
convertMonthStringToPair(upiSpendAnalyzerInfoBottomsheetData?.date.orEmpty())
|
||||
.first,
|
||||
|
||||
@@ -23,13 +23,14 @@ import com.google.gson.reflect.TypeToken
|
||||
import com.navi.base.utils.DateUtils
|
||||
import com.navi.base.utils.EMPTY
|
||||
import com.navi.base.utils.ResourceProvider
|
||||
import com.navi.common.firebaseremoteconfig.FirebaseRemoteConfigHelper
|
||||
import com.navi.common.firebaseremoteconfig.FirebaseRemoteConfigHelper.UPI_SPEND_ANALYSER_ENABLED
|
||||
import com.navi.common.usecase.LitmusExperimentsUseCase
|
||||
import com.navi.common.utils.CommonUtils.getDisplayableAmount
|
||||
import com.navi.moneymanager.common.datasync.UpiSpendDBSyncExecutor
|
||||
import com.navi.moneymanager.common.datasync.model.DataSyncState
|
||||
import com.navi.moneymanager.common.helper.UpiSpendAnalysisWidgetHelper
|
||||
import com.navi.moneymanager.common.utils.Constants.CONTROL
|
||||
import com.navi.moneymanager.common.utils.Constants.SPEND_ANALYSIS_EXP_CROSS_VARIANT
|
||||
import com.navi.pay.R
|
||||
import com.navi.pay.analytics.NaviPayAnalytics
|
||||
import com.navi.pay.analytics.NaviPayAnalytics.Companion.NAVI_PAY_T_STORE_ORDER_LIST
|
||||
@@ -481,33 +482,19 @@ constructor(
|
||||
}
|
||||
|
||||
private fun initUpiSpendAnalyser() {
|
||||
syncUpiSpendAnalyserData()
|
||||
fetchUpiSpendAnalyserWidgetVariant()
|
||||
}
|
||||
|
||||
private fun syncUpiSpendAnalyserData() {
|
||||
GlobalScope.launch(Dispatchers.IO) {
|
||||
if (upiSpendAnalysisWidgetHelper.isTotalSyncCompleted()) {
|
||||
upiSpendAnalysisFirstSyncCompleted.update { true }
|
||||
}
|
||||
if (FirebaseRemoteConfigHelper.getBoolean(UPI_SPEND_ANALYSER_ENABLED)) {
|
||||
val litmusExpVariant = upiSpendAnalysisWidgetHelper.getEntryPointExpVariant()
|
||||
_upiSpendAnalysisWidgetVariant.update { litmusExpVariant }
|
||||
if (litmusExpVariant != CONTROL) {
|
||||
if (upiSpendAnalysisWidgetHelper.isTotalSyncCompleted()) {
|
||||
upiSpendAnalysisFirstSyncCompleted.update { true }
|
||||
}
|
||||
|
||||
val state = upiDBSyncExecutor.execute(screenName)
|
||||
if (state is DataSyncState.Completed) {
|
||||
isUpiSpendAnalysisSyncCompleted.update { true }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun fetchUpiSpendAnalyserWidgetVariant() {
|
||||
viewModelScope.launch(Dispatchers.IO) {
|
||||
upiSpendAnalysisWidgetHelper.getEntryPointExpVariant().collect { variant ->
|
||||
if (
|
||||
variant == SPEND_ANALYSIS_EXP_CROSS_VARIANT &&
|
||||
!upiSpendAnalysisWidgetHelper.shouldShowCrossVariant()
|
||||
) {
|
||||
_upiSpendAnalysisWidgetVariant.update { CONTROL }
|
||||
} else {
|
||||
_upiSpendAnalysisWidgetVariant.update { variant }
|
||||
val dataSyncState = upiDBSyncExecutor.execute(screenName)
|
||||
if (dataSyncState is DataSyncState.Completed) {
|
||||
isUpiSpendAnalysisSyncCompleted.update { true }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user