From 0679334d6e6f0e547162596ec04b6019df4ee214 Mon Sep 17 00:00:00 2001 From: Hardik Chaudhary Date: Thu, 21 Mar 2024 15:41:57 +0530 Subject: [PATCH] TP-61394 | parse error fix and multiple payment error fix (#10166) --- .../pay/common/utils/NaviPayCommonUtils.kt | 20 ++++++++++------- .../com/navi/pay/entry/NaviPayActivity.kt | 9 ++++++++ .../common/sendmoney/ui/SendMoneyScreen.kt | 5 ++++- .../sendmoney/viewmodel/SendMoneyViewModel.kt | 22 +++++++++++++++---- .../com/navi/pay/utils/NaviPayConstants.kt | 1 + 5 files changed, 44 insertions(+), 13 deletions(-) diff --git a/navi-pay/src/main/kotlin/com/navi/pay/common/utils/NaviPayCommonUtils.kt b/navi-pay/src/main/kotlin/com/navi/pay/common/utils/NaviPayCommonUtils.kt index 47c6431f06..3c8f4a6676 100644 --- a/navi-pay/src/main/kotlin/com/navi/pay/common/utils/NaviPayCommonUtils.kt +++ b/navi-pay/src/main/kotlin/com/navi/pay/common/utils/NaviPayCommonUtils.kt @@ -346,14 +346,18 @@ object NaviPayCommonUtils { dateTime: String?, timeZone: DateTimeZone = DateTimeZone.getDefault() ): DateTime? { - dateTime?.let { - if (it.contains(other = Z) || it.contains(other = PLUS)) { - return DateTime.parse(it).withZone(timeZone) - } else { - val updatedDateTime = "${it}Z" - return DateTime.parse(updatedDateTime).withZone(timeZone) - } - } ?: return null + try { + dateTime?.let { + if (it.contains(other = Z) || it.contains(other = PLUS)) { + return DateTime.parse(it).withZone(timeZone) + } else { + val updatedDateTime = "${it}Z" + return DateTime.parse(updatedDateTime).withZone(timeZone) + } + } ?: return DateTime.now() + } catch (e: Exception) { + return DateTime.now() + } } suspend fun validateSimInfo( diff --git a/navi-pay/src/main/kotlin/com/navi/pay/entry/NaviPayActivity.kt b/navi-pay/src/main/kotlin/com/navi/pay/entry/NaviPayActivity.kt index 5dd669a6d9..eedc324082 100644 --- a/navi-pay/src/main/kotlin/com/navi/pay/entry/NaviPayActivity.kt +++ b/navi-pay/src/main/kotlin/com/navi/pay/entry/NaviPayActivity.kt @@ -24,6 +24,7 @@ import androidx.navigation.NavHostController import com.navi.base.deeplink.DeepLinkManager import com.navi.base.deeplink.util.DeeplinkConstants import com.navi.base.model.CtaData +import com.navi.base.utils.orFalse import com.navi.common.model.ModuleNameV2 import com.navi.common.ui.activity.BaseActivity import com.navi.pay.R @@ -41,6 +42,7 @@ import com.navi.pay.onboarding.binding.ui.NaviPayOnboardingActivity import com.navi.pay.permission.model.view.PermissionState import com.navi.pay.permission.utils.PermissionKeys import com.navi.pay.utils.GenericErrorCtaHandler +import com.navi.pay.utils.IS_ACTIVITY_RECREATED import com.navi.pay.utils.NEEDS_RESULT import com.navi.pay.utils.SOURCE_MODULE import dagger.hilt.android.AndroidEntryPoint @@ -78,6 +80,7 @@ class NaviPayActivity : BaseActivity() { @Inject lateinit var genericErrorCtaHandler: GenericErrorCtaHandler private var isErrorSheetVisible = false + var isActivityRecreated = false private var isErrorSheetCancellable = true private val onboardingResultHandler by lazy { OnboardingResultHandler(this) } @@ -89,6 +92,7 @@ class NaviPayActivity : BaseActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + isActivityRecreated = savedInstanceState?.getBoolean(IS_ACTIVITY_RECREATED).orFalse() initFromIntent(intent) val naviPayAccessEligibility = NaviPayCommonUtils.getNaviPayAccessEligibility(this) @@ -225,6 +229,11 @@ class NaviPayActivity : BaseActivity() { super.finish() } + override fun onSaveInstanceState(outState: Bundle) { + outState.putBoolean(IS_ACTIVITY_RECREATED, true) + super.onSaveInstanceState(outState) + } + override fun onDestroy() { super.onDestroy() NaviPayEventBus.resetEventBus() diff --git a/navi-pay/src/main/kotlin/com/navi/pay/management/common/sendmoney/ui/SendMoneyScreen.kt b/navi-pay/src/main/kotlin/com/navi/pay/management/common/sendmoney/ui/SendMoneyScreen.kt index 89872c2d88..0d578a5bcf 100644 --- a/navi-pay/src/main/kotlin/com/navi/pay/management/common/sendmoney/ui/SendMoneyScreen.kt +++ b/navi-pay/src/main/kotlin/com/navi/pay/management/common/sendmoney/ui/SendMoneyScreen.kt @@ -146,7 +146,10 @@ fun SendMoneyScreen( val selectedBankAccountId = sendMoneyViewModel.getSelectedBankAccountId(naviPayActivity.intent.extras) sendMoneyViewModel.setMetadataForTransaction(naviPayActivity.intent.extras) - sendMoneyViewModel.validateVpa(selectedBankAccountId) + sendMoneyViewModel.validateVpa( + selectedBankAccountId = selectedBankAccountId, + isActivityRecreated = naviPayActivity.isActivityRecreated + ) naviPayAnalytics.onSendMoneyLanded( source = sendMoneyScreenSource, transactionType = transactionType, diff --git a/navi-pay/src/main/kotlin/com/navi/pay/management/common/sendmoney/viewmodel/SendMoneyViewModel.kt b/navi-pay/src/main/kotlin/com/navi/pay/management/common/sendmoney/viewmodel/SendMoneyViewModel.kt index f7abd0212f..6ba8c3dee1 100644 --- a/navi-pay/src/main/kotlin/com/navi/pay/management/common/sendmoney/viewmodel/SendMoneyViewModel.kt +++ b/navi-pay/src/main/kotlin/com/navi/pay/management/common/sendmoney/viewmodel/SendMoneyViewModel.kt @@ -663,7 +663,10 @@ constructor( accountReferenceId = trimmedBUID ) - private fun fetchLinkedBankAccounts(selectedBankAccountId: String? = null) { + private fun fetchLinkedBankAccounts( + selectedBankAccountId: String? = null, + isActivityRecreated: Boolean = false + ) { _bankAccountsState.update { BankAccountsState.Loading } viewModelScope.launch(coroutineDispatcherProvider.io) { if (!naviPayNetworkConnectivity.isInternetConnected()) { @@ -724,7 +727,15 @@ constructor( selectedBankAccountId = selectedBankAccountId.orEmpty() ) } - startPayment(payButtonSource = PMS) + if (isActivityRecreated) { + _finishWithResult.update { + SendMoneyScreenState.PaymentResultWithData( + errorConfig = NaviPayCommonUtils.getBackPressErrorConfig() + ) + } + } else { + startPayment(payButtonSource = PMS) + } return@launch } else if (_selectedBankAccount.value == null) { // If no account was selected, put default selection logic @@ -1352,7 +1363,7 @@ constructor( _mainCtaState.update { mainCtaState } } - fun validateVpa(selectedBankAccountId: String?) { + fun validateVpa(selectedBankAccountId: String?, isActivityRecreated: Boolean) { viewModelScope.launch(coroutineDispatcherProvider.io) { naviPayAnalytics.onPayeeVpaCheck( source = source, @@ -1373,7 +1384,10 @@ constructor( } else { _shouldAutoFocusOnAmount.emit(true) } - fetchLinkedBankAccounts(selectedBankAccountId = selectedBankAccountId) + fetchLinkedBankAccounts( + selectedBankAccountId = selectedBankAccountId, + isActivityRecreated = isActivityRecreated + ) return@launch } diff --git a/navi-pay/src/main/kotlin/com/navi/pay/utils/NaviPayConstants.kt b/navi-pay/src/main/kotlin/com/navi/pay/utils/NaviPayConstants.kt index 3606332976..b6bada40f1 100644 --- a/navi-pay/src/main/kotlin/com/navi/pay/utils/NaviPayConstants.kt +++ b/navi-pay/src/main/kotlin/com/navi/pay/utils/NaviPayConstants.kt @@ -17,6 +17,7 @@ const val FREQUENT_TRANSACTIONS_IN_DB_REFRESH_MIN_TIMESTAMP = 86400000L // 1 day const val PHONE_NUMBER_LENGTH = 10 const val ZERO_STRING = "0" const val IS_FROM_IAN = "IS_FROM_IAN" +const val IS_ACTIVITY_RECREATED = "isActivityRecreated" // Send & Request money constants const val NOTE_MAX_LENGTH = 50