From bc99ad8f44bc0dd56fc8d9501b9864c1201cdbe2 Mon Sep 17 00:00:00 2001 From: Shaurya Rehan Date: Tue, 25 Mar 2025 18:05:25 +0530 Subject: [PATCH] NTP-39209 | added event and notify error in link upi number screen (#15514) --- .../navi/pay/analytics/NaviPayAnalytics.kt | 9 ++++++-- .../upinumber/link/ui/LinkUpiNumberScreen.kt | 3 ++- .../link/viewmodel/LinkUpiNumberViewModel.kt | 17 ++++++++++----- .../list/viewmodel/UpiNumberViewModel.kt | 21 +++++++++---------- 4 files changed, 31 insertions(+), 19 deletions(-) diff --git a/android/navi-pay/src/main/kotlin/com/navi/pay/analytics/NaviPayAnalytics.kt b/android/navi-pay/src/main/kotlin/com/navi/pay/analytics/NaviPayAnalytics.kt index 733f2790d5..adb8b8cd13 100644 --- a/android/navi-pay/src/main/kotlin/com/navi/pay/analytics/NaviPayAnalytics.kt +++ b/android/navi-pay/src/main/kotlin/com/navi/pay/analytics/NaviPayAnalytics.kt @@ -2115,12 +2115,14 @@ class NaviPayAnalytics private constructor() { fun onUpiNumberScreenLanded( upiNumberLinkedAccounts: List, naviPayCustomerStatusMap: Map?, + noOfSavingsAccounts: Int, ) { NaviTrackEvent.trackEventOnClickStream( "NaviPay_UpiNumber_Landed_v2", mapOf( "upiNumberAccountsLinked" to upiNumberLinkedAccounts.size.toString(), "naviPayCustomerStatusMap" to naviPayCustomerStatusMap.toString(), + "no_of_savings_accounts" to noOfSavingsAccounts.toString(), ), ) } @@ -5685,10 +5687,13 @@ class NaviPayAnalytics private constructor() { } inner class NaviPayLinkUpiNumber { - fun onLinkUpiNumberLanded(source: String) { + fun onLinkUpiNumberLanded(source: String, noOfSavingsAccounts: Int) { NaviTrackEvent.trackEventOnClickStream( "NaviPay_PortedOut_Link2Navi_Landed", - mapOf("source" to source), + mapOf( + "source" to source, + "no_of_savings_accounts" to noOfSavingsAccounts.toString(), + ), ) } diff --git a/android/navi-pay/src/main/kotlin/com/navi/pay/management/upinumber/link/ui/LinkUpiNumberScreen.kt b/android/navi-pay/src/main/kotlin/com/navi/pay/management/upinumber/link/ui/LinkUpiNumberScreen.kt index ae851c640a..8b3f1e0331 100644 --- a/android/navi-pay/src/main/kotlin/com/navi/pay/management/upinumber/link/ui/LinkUpiNumberScreen.kt +++ b/android/navi-pay/src/main/kotlin/com/navi/pay/management/upinumber/link/ui/LinkUpiNumberScreen.kt @@ -82,6 +82,7 @@ import com.navi.pay.common.ui.ThemeRoundedButton import com.navi.pay.common.ui.ThemedRoundedButtonWithLottie import com.navi.pay.common.utils.ErrorEventHandler import com.navi.pay.common.utils.NaviPayEventBus +import com.navi.pay.common.viewmodel.NaviPayBaseVM.Companion.ERROR_DEFAULT_TAG import com.navi.pay.destinations.AddNewUpiNumberScreenDestination import com.navi.pay.destinations.UpiNumberScreenDestination import com.navi.pay.entry.NaviPayActivity @@ -158,7 +159,7 @@ fun LinkUpiNumberScreen( LaunchedEffect(Unit) { ErrorEventHandler.errorCtaClickEvent.collectLatest { NaviPayEventBus.resetEventBus() - if (it.errorConfig.tag == EXTERNAL_VPA_FETCH_ERROR) { + if (it.errorConfig.tag in listOf(EXTERNAL_VPA_FETCH_ERROR, ERROR_DEFAULT_TAG)) { naviPayActivity.finish() } } diff --git a/android/navi-pay/src/main/kotlin/com/navi/pay/management/upinumber/link/viewmodel/LinkUpiNumberViewModel.kt b/android/navi-pay/src/main/kotlin/com/navi/pay/management/upinumber/link/viewmodel/LinkUpiNumberViewModel.kt index 9e653eae21..73b1d49ae5 100644 --- a/android/navi-pay/src/main/kotlin/com/navi/pay/management/upinumber/link/viewmodel/LinkUpiNumberViewModel.kt +++ b/android/navi-pay/src/main/kotlin/com/navi/pay/management/upinumber/link/viewmodel/LinkUpiNumberViewModel.kt @@ -18,7 +18,6 @@ import com.navi.pay.common.connectivity.NaviPayNetworkConnectivity import com.navi.pay.common.model.view.NaviPayScreenType import com.navi.pay.common.usecase.CheckUpiNumberAvailabilityUseCase import com.navi.pay.common.usecase.LinkedAccountsUseCase -import com.navi.pay.common.usecase.RefreshUpiNumbersUseCase import com.navi.pay.common.utils.DeviceInfoProvider import com.navi.pay.common.utils.NaviPayCommonUtils.getHelpCtaData import com.navi.pay.common.utils.fetchUserPhoneNumber @@ -63,7 +62,6 @@ constructor( private val naviPayNetworkConnectivity: NaviPayNetworkConnectivity, private val naviPayActivityDataProvider: NaviPayActivityDataProvider, private val checkUpiNumberAvailabilityUseCase: CheckUpiNumberAvailabilityUseCase, - private val refreshUpiNumbersUseCase: RefreshUpiNumbersUseCase, private val naviPayPspManager: NaviPayPspManager, savedStateHandle: SavedStateHandle, ) : NaviPayBaseVM() { @@ -122,7 +120,6 @@ constructor( savedStateHandle["source"] ?: LinkUpiNumberScreenSource.PnOrIan init { - onUserLandedEvent() updatePhoneNumber() handleSuccessPNRedirection() } @@ -168,6 +165,13 @@ constructor( viewModelScope.launch(Dispatchers.IO) { linkedAccountsUseCase.execute(screenName = screenName).collect { linkedAccounts -> val filteredLinkedAccounts = getFilteredLinkedAccounts(linkedAccounts) + onUserLandedEvent(noOfSavingsAccounts = filteredLinkedAccounts.size) + + if (filteredLinkedAccounts.isEmpty()) { + notifyError(errorConfig = getGenericErrorConfig()) + return@collect + } + updateLinkedAccounts(filteredLinkedAccounts) updateBankAccountState(BankAccountsState.AccountList(filteredLinkedAccounts)) updateSelectedBankAccount( @@ -180,8 +184,11 @@ constructor( } } - private fun onUserLandedEvent() { - naviPayAnalytics.onLinkUpiNumberLanded(source = source.name) + private fun onUserLandedEvent(noOfSavingsAccounts: Int) { + naviPayAnalytics.onLinkUpiNumberLanded( + source = source.name, + noOfSavingsAccounts = noOfSavingsAccounts, + ) } private fun onUserOnboarded() { diff --git a/android/navi-pay/src/main/kotlin/com/navi/pay/management/upinumber/list/viewmodel/UpiNumberViewModel.kt b/android/navi-pay/src/main/kotlin/com/navi/pay/management/upinumber/list/viewmodel/UpiNumberViewModel.kt index 50a78f2ae8..2b938a87c5 100644 --- a/android/navi-pay/src/main/kotlin/com/navi/pay/management/upinumber/list/viewmodel/UpiNumberViewModel.kt +++ b/android/navi-pay/src/main/kotlin/com/navi/pay/management/upinumber/list/viewmodel/UpiNumberViewModel.kt @@ -165,19 +165,17 @@ constructor( val isLinkedSuccessfully = _isLinkedSuccessfully.asStateFlow() init { - updateAndFetchUpiNumberLinkedAccounts() setDeeplinkData() - onScreenLandEvent() + updateAndFetchUpiNumberLinkedAccounts() } - private fun onScreenLandEvent() { - viewModelScope.launch(Dispatchers.IO) { - _naviPayCustomerStatusMap.update { naviPayCustomerStatusHandler.getCustomerStatusMap() } - naviPayAnalytics.onUpiNumberScreenLanded( - upiNumberLinkedAccounts = upiNumberLinkedAccountEntitiesState.value, - naviPayCustomerStatusMap = naviPayCustomerStatusMap.value, - ) - } + private suspend fun onScreenLandEvent(noOfSavingsAccounts: Int) { + _naviPayCustomerStatusMap.update { naviPayCustomerStatusHandler.getCustomerStatusMap() } + naviPayAnalytics.onUpiNumberScreenLanded( + upiNumberLinkedAccounts = upiNumberLinkedAccountEntitiesState.value, + naviPayCustomerStatusMap = naviPayCustomerStatusMap.value, + noOfSavingsAccounts = noOfSavingsAccounts, + ) } private fun updateAndFetchUpiNumberLinkedAccounts() { @@ -190,6 +188,7 @@ constructor( } val noOfSavingsAccounts = savingAccounts.size if (noOfSavingsAccounts == 0) { + onScreenLandEvent(noOfSavingsAccounts = 0) updateScreenUIState(UpiSettingsScreenState.NoUpiNumberLinked) } else { fetchUpiNumberLinkedAccounts() @@ -246,7 +245,7 @@ constructor( } upiNumberLinkedAccountEntities.sortBy { !it.isPrimary } updateUpiNumberLinkedAccountEntitiesState(upiNumberLinkedAccountEntities) - + onScreenLandEvent(noOfSavingsAccounts = savingAccounts.size) countOfUpiNumberLinkedAndBankAccountsEvent() if (noUpiNumberLinked()) {