From 80e79993494f10b0dce6fbf40964e1241470f2c9 Mon Sep 17 00:00:00 2001 From: Hardik Chaudhary Date: Tue, 24 Sep 2024 14:31:20 +0530 Subject: [PATCH] NTP-3895 | success pn flow integrated (#12696) --- .../upinumber/link/ui/LinkUpiNumberScreen.kt | 8 +++++- .../link/viewmodel/LinkUpiNumberViewModel.kt | 25 +++++++++++++++++-- .../com/navi/pay/utils/NaviPayConstants.kt | 1 + 3 files changed, 31 insertions(+), 3 deletions(-) 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 5b7d971dad..02524bf052 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 @@ -127,6 +127,8 @@ fun LinkUpiNumberScreen( val bankAccountsState by linkUpiNumberViewModel.bankAccountsState.collectAsStateWithLifecycle() val externalLinkedVpaState by linkUpiNumberViewModel.externalLinkedVpa.collectAsStateWithLifecycle() + val isSuccessPNRedirection by + linkUpiNumberViewModel.isSuccessPNRedirection.collectAsStateWithLifecycle() val isDelayedOnboardingExperimentEnabled = remember { isDelayedOnboardingExperimentEnabled(bundle = naviPayActivity.intent.extras) } @@ -181,7 +183,11 @@ fun LinkUpiNumberScreen( } LaunchedEffect(Unit) { - if (!linkUpiNumberViewModel.isUserOnboarded() && isDelayedOnboardingExperimentEnabled) { + if ( + !linkUpiNumberViewModel.isUserOnboarded() && + isDelayedOnboardingExperimentEnabled && + !isSuccessPNRedirection + ) { naviPayActivity.launchOnboardingSDK( action = NaviPayOnboardingActionsV2Type.E2E_ONBOARDING.name, enabledAccountTypes = SAVINGS_ONLY_ENABLED_ACCOUNTS, 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 c9ab7a50f3..23ffce1333 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 @@ -20,6 +20,7 @@ import com.navi.pay.common.setup.model.NaviPayCustomerStatus import com.navi.pay.common.usecase.LinkedAccountsUseCase import com.navi.pay.common.utils.DeviceInfoProvider import com.navi.pay.common.viewmodel.NaviPayBaseVM +import com.navi.pay.entry.NaviPayActivityDataProvider import com.navi.pay.management.common.sendmoney.model.view.BankAccountsState import com.navi.pay.management.upinumber.link.model.LinkUpiNumberScreenBottomSheetStateHolder import com.navi.pay.management.upinumber.list.model.network.CheckUpiNumberAvailabilityRequest @@ -33,6 +34,8 @@ import com.navi.pay.utils.DS_KEY_NAVI_PAY_CUSTOMER_STATUS import com.navi.pay.utils.ERROR_UPI_NUMBER_MAPPING_ALREADY_EXIST_1 import com.navi.pay.utils.ERROR_UPI_NUMBER_MAPPING_ALREADY_EXIST_2 import com.navi.pay.utils.EXTERNAL_VPA_FETCH_ERROR +import com.navi.pay.utils.LINKED_SUCCESSFULLY_PN_ID +import com.navi.pay.utils.NAVI_PAY_NOTIFICATION_ID import com.navi.pay.utils.UPI_NUMBER_STATUS_ACTIVE import com.navi.pay.utils.UPI_NUMBER_STATUS_NEW import dagger.hilt.android.lifecycle.HiltViewModel @@ -54,7 +57,8 @@ constructor( private val linkedAccountsUseCase: LinkedAccountsUseCase, private val naviPayCustomerStatusHandler: Provider, private val dataStoreInfoProvider: DataStoreInfoProvider, - private val naviPayNetworkConnectivity: NaviPayNetworkConnectivity + private val naviPayNetworkConnectivity: NaviPayNetworkConnectivity, + private val naviPayActivityDataProvider: NaviPayActivityDataProvider, ) : NaviPayBaseVM(NaviPayVmData(screenName = NAVI_PAY_LINK_UPI_NUMBER)) { private val naviPayAnalytics: NaviPayAnalytics.NaviPayLinkUpiNumber = @@ -93,12 +97,29 @@ constructor( val bottomSheetStateHolder = _bottomSheetStateHolder.asStateFlow() + private val _isSuccessPNRedirection = MutableStateFlow(false) + val isSuccessPNRedirection = _isSuccessPNRedirection.asStateFlow() + private var naviPayCustomerStatus: String = "" init { onUserLandedEvent() updatePhoneNumber() - customerStatusListener() + handleSuccessPNRedirectionOrListenCustomerStatus() + } + + private fun handleSuccessPNRedirectionOrListenCustomerStatus() { + if ( + naviPayActivityDataProvider + .getIntentData() + ?.getString(NAVI_PAY_NOTIFICATION_ID) + ?.equals(LINKED_SUCCESSFULLY_PN_ID) == true + ) { + _isSuccessPNRedirection.update { true } + updateScreenUIState(LinkUPiNumberUIState.LinkedSuccessfully) + } else { + customerStatusListener() + } } private fun updatePhoneNumber() { 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 5320899550..560794e1fd 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 @@ -347,6 +347,7 @@ const val UPI_NUMBER_LINK = "UPI_NUMBER_LINK" const val ADD_ACCOUNT_LINK = "ADD_ACCOUNT_LINK" const val ACCOUNT_TYPE = "ACCOUNT_TYPE" const val PORTED_OUT_PN_ID = "ported_out_pn" +const val LINKED_SUCCESSFULLY_PN_ID = "link_success_pn" // Vibration Constant const val NAVI_PAY_ANIMATION_VIBRATION_DURATION = 500L