NTP-65041 | Shiv Natani | crash fix polling screen size limit (#16229)

This commit is contained in:
Shiv Natani
2025-05-20 14:34:54 +05:30
committed by GitHub
parent 78d13c542f
commit 072de9b0b8
10 changed files with 62 additions and 59 deletions

View File

@@ -7,7 +7,6 @@
package com.navi.payment.nativepayment.model
import android.net.Uri
import android.os.Bundle
import android.os.Parcelable
import com.navi.common.network.models.GenericErrorResponse
@@ -16,8 +15,6 @@ import com.navi.common.upi.PAYER_BANK_ACCOUNT_ID
import com.navi.common.upi.T_STORE_ORDER_REFERENCE_ID
import com.navi.common.utils.EMPTY
import com.navi.common.utils.log
import com.navi.pay.management.common.sendmoney.model.view.PayeeEntity
import com.navi.pay.management.moneytransfer.scanpay.util.getPayeeEntity
import com.navi.pay.utils.NAVI_PAY_UPI_URI_KEY
import com.navi.payment.paymentscreen.model.PaymentErrorData
import kotlinx.parcelize.Parcelize
@@ -50,7 +47,7 @@ sealed class WebPaymentData : Parcelable {
val tstoreOrderReferenceId: String,
val metadata: String,
val payerBankAccountId: String,
val payeeEntity: PayeeEntity,
val naviPayUpiUriKey: String?,
) : WebPaymentData() {
companion object {
fun from(bundle: Bundle): WebViewSendMoneyData {
@@ -58,9 +55,7 @@ sealed class WebPaymentData : Parcelable {
tstoreOrderReferenceId = bundle.getString(T_STORE_ORDER_REFERENCE_ID).orEmpty(),
metadata = bundle.getString(METADATA).orEmpty(),
payerBankAccountId = bundle.getString(PAYER_BANK_ACCOUNT_ID).orEmpty(),
payeeEntity =
Uri.parse(bundle.getString(NAVI_PAY_UPI_URI_KEY).orEmpty())
.getPayeeEntity(true),
naviPayUpiUriKey = bundle.getString(NAVI_PAY_UPI_URI_KEY).orEmpty(),
)
}
}

View File

@@ -7,7 +7,6 @@
package com.navi.payment.nativepayment.screens
import android.net.Uri
import androidx.activity.compose.BackHandler
import androidx.activity.compose.rememberLauncherForActivityResult
import androidx.activity.result.contract.ActivityResultContracts
@@ -55,7 +54,6 @@ import com.navi.pay.common.ui.NaviPayModalBottomSheetLayout
import com.navi.pay.management.common.sendmoney.model.view.BankAccountsState
import com.navi.pay.management.common.sendmoney.model.view.SendMoneyScreenSource
import com.navi.pay.management.common.sendmoney.ui.PaymentFailedRetryBottomSheetContent
import com.navi.pay.management.moneytransfer.scanpay.util.getPayeeEntity
import com.navi.pay.onboarding.account.detail.model.view.LinkedAccountEntity
import com.navi.pay.utils.isAccountIdOfTypeUpiLite
import com.navi.payment.R as PaymentR
@@ -178,10 +176,9 @@ fun MPSScreen(
),
naviUpiTransactionInfo =
NaviUpiTransactionInfo(
payeeEntity =
Uri.parse(payload?.naviPayUpiUriKey).getPayeeEntity(true),
naviPayUpiUriKey = payload?.naviPayUpiUriKey,
upiRequestId = pmsSendMoneyStatus.upiRequestId,
selectedBankAccount = selectedBankAccount,
selectedBankAccountId = selectedBankAccount?.accountId.orEmpty(),
credBlock = pmsSendMoneyStatus.credBlock.orEmpty(),
metaData = Gson().toJson(payload?.metadata),
txnTimeStamp = mpsViewModel.txnTimeStamp,

View File

@@ -7,7 +7,6 @@
package com.navi.payment.nativepayment.screens
import android.net.Uri
import androidx.activity.compose.BackHandler
import androidx.activity.compose.rememberLauncherForActivityResult
import androidx.activity.result.contract.ActivityResultContracts
@@ -38,7 +37,6 @@ import com.navi.pay.common.theme.color.NaviPayColor
import com.navi.pay.common.ui.NaviPayModalBottomSheet
import com.navi.pay.management.common.sendmoney.model.view.SendMoneyScreenSource
import com.navi.pay.management.common.sendmoney.ui.PaymentFailedRetryBottomSheetContent
import com.navi.pay.management.moneytransfer.scanpay.util.getPayeeEntity
import com.navi.payment.nativepayment.NaviPaymentAnalyticScreenName
import com.navi.payment.nativepayment.NaviPaymentAnalytics
import com.navi.payment.nativepayment.activity.NaviPaymentActivity
@@ -331,9 +329,10 @@ private fun navigateToTransactionPollingScreen(
),
naviUpiTransactionInfo =
NaviUpiTransactionInfo(
payeeEntity = Uri.parse(payload?.naviPayUpiUriKey).getPayeeEntity(true),
naviPayUpiUriKey = payload?.naviPayUpiUriKey,
upiRequestId = pmsSendMoneyStatus.upiRequestId,
selectedBankAccount = oneClickCheckoutViewModel.linkedAccountEntity,
selectedBankAccountId =
oneClickCheckoutViewModel.linkedAccountEntity?.accountId.orEmpty(),
credBlock = pmsSendMoneyStatus.credBlock.orEmpty(),
metaData = Gson().toJson(payload?.metadata),
txnTimeStamp = oneClickCheckoutViewModel.txnTimeStamp,

View File

@@ -171,9 +171,8 @@ fun WebPaymentMainScreen(
val tstoreOrderReferenceId = data?.tstoreOrderReferenceId
val metadata = data?.metadata
val payerBankAccountId = data?.payerBankAccountId
val payeeEntity = data?.payeeEntity
webPaymentViewModel.startNaviUpiPayment(
payeeEntity = payeeEntity,
naviPayUpiUriKey = data?.naviPayUpiUriKey,
tstoreOrderId = tstoreOrderReferenceId.orEmpty(),
metaData = metadata,
bankAccountId = payerBankAccountId.orEmpty(),

View File

@@ -7,6 +7,7 @@
package com.navi.payment.nativepayment.usecase
import android.net.Uri
import com.navi.base.AppServiceManager
import com.navi.base.utils.ResourceProvider
import com.navi.base.utils.UNDERSCORE
@@ -21,6 +22,7 @@ import com.navi.pay.common.model.view.NaviPayButtonAction
import com.navi.pay.common.model.view.NaviPayButtonTheme
import com.navi.pay.common.model.view.NaviPayErrorButtonConfig
import com.navi.pay.common.model.view.NaviPayErrorConfig
import com.navi.pay.common.usecase.LinkedAccountsUseCase
import com.navi.pay.common.usecase.SendMoneyUseCase
import com.navi.pay.common.usecase.UpiRequestIdUseCase
import com.navi.pay.common.utils.DeviceInfoProvider
@@ -32,6 +34,7 @@ import com.navi.pay.management.common.sendmoney.model.network.TransactionRespons
import com.navi.pay.management.common.sendmoney.model.view.PayeeEntity
import com.navi.pay.management.common.sendmoney.model.view.SendMoneyScreenSource
import com.navi.pay.management.common.sendmoney.model.view.UpiTransactionType
import com.navi.pay.management.moneytransfer.scanpay.util.getPayeeEntity
import com.navi.pay.onboarding.account.detail.model.view.LinkedAccountEntity
import com.navi.pay.onboarding.binding.model.view.NaviPayCustomerOnboardingEntity
import com.navi.pay.utils.NAVI_AXIS_UPI_HANDLE
@@ -41,6 +44,7 @@ import com.navi.payment.nativepayment.NaviPaymentAnalytics
import com.navi.payment.nativepayment.model.PMSSendMoneyStatus
import com.navi.payment.paymentscreen.model.NaviUpiTransactionInfo
import javax.inject.Inject
import kotlinx.coroutines.flow.first
class PmsSendMoneyUseCase
@Inject
@@ -51,6 +55,7 @@ constructor(
private val deviceInfoProvider: DeviceInfoProvider,
private val upiRequestIdUseCase: UpiRequestIdUseCase,
private val sendMoneyUseCase: SendMoneyUseCase,
private val linkedAccountUseCase: LinkedAccountsUseCase,
) {
private val naviPaymentAnalytics = NaviPaymentAnalytics.INSTANCE.CommonAnalytics()
@@ -304,18 +309,23 @@ constructor(
onInitialChecksFailure(errorConfig)
return
}
naviUpiTransactionInfo.selectedBankAccount?.isArcProtected =
naviUpiTransactionInfo.isArcProtected
val selectedBankAccount =
fetchLinkedAccountEntity(accountId = naviUpiTransactionInfo.selectedBankAccountId)
if (selectedBankAccount == null) {
onInitialChecksFailure(getGenericErrorConfig())
return
}
selectedBankAccount.isArcProtected = naviUpiTransactionInfo.isArcProtected
sendMoneyUseCase.executeSendMoney(
payeeEntity = naviUpiTransactionInfo.payeeEntity,
payeeEntity =
Uri.parse(naviUpiTransactionInfo.naviPayUpiUriKey)
.getPayeeEntity(isVerifiedVpa = true),
upiRequestId = naviUpiTransactionInfo.upiRequestId,
selectedBankAccount = naviUpiTransactionInfo.selectedBankAccount!!,
selectedBankAccount = selectedBankAccount,
txnTimeStamp = naviUpiTransactionInfo.txnTimeStamp,
credBlock = naviUpiTransactionInfo.credBlock,
isPaymentFromLiteAccount =
naviUpiTransactionInfo.selectedBankAccount.accountId
.isAccountIdOfTypeUpiLite()
.orFalse(),
selectedBankAccount.accountId.isAccountIdOfTypeUpiLite().orFalse(),
sendMoneyScreenSource = SendMoneyScreenSource.PMS,
transactionType = UpiTransactionType.INTENT_PAY,
tstoreOrderId = tstoreOrderId,
@@ -329,4 +339,9 @@ constructor(
customerOnboardingEntity = naviUpiTransactionInfo.onboardingDataEntity,
)
}
private suspend fun fetchLinkedAccountEntity(accountId: String): LinkedAccountEntity? {
val accounts = linkedAccountUseCase.execute(includeAllDetails = true).first()
return accounts.firstOrNull { it.accountId == accountId }
}
}

View File

@@ -1485,12 +1485,13 @@ constructor(
payNowResponse = payNowResponse,
naviUpiTransactionInfo =
NaviUpiTransactionInfo(
selectedBankAccount =
npsScreenState.naviUpiPaymentState.selectedBankAccount,
selectedBankAccountId =
npsScreenState.naviUpiPaymentState.selectedBankAccount
?.accountId
.orEmpty(),
credBlock = pmsSendMoneyStatus.credBlock.orEmpty(),
upiRequestId = pmsSendMoneyStatus.upiRequestId,
payeeEntity =
Uri.parse(payload?.naviPayUpiUriKey).getPayeeEntity(true),
naviPayUpiUriKey = payload?.naviPayUpiUriKey,
metaData = Gson().toJson(payload?.metadata),
txnTimeStamp = txnTimeStamp,
isArcProtected =

View File

@@ -242,9 +242,8 @@ constructor(
response = sendMoneyResponse,
sourceDestination = sourceDestination,
isPaymentThroughLiteAccount =
naviUpiTransactionInfo.selectedBankAccount
?.accountId
?.isAccountIdOfTypeUpiLite()
naviUpiTransactionInfo.selectedBankAccountId
.isAccountIdOfTypeUpiLite()
.orFalse(),
)
)

View File

@@ -599,15 +599,18 @@ constructor(
payNowResponse = payNowResponse,
naviUpiTransactionInfo =
NaviUpiTransactionInfo(
selectedBankAccount =
selectedBankAccountId =
getLinkedAccountEntityFromVpaIfAvailable(
vpa =
upiScreenState.npsBaseState.upiCollectOptionState.upiCollectVpa
.text
),
vpa =
upiScreenState.npsBaseState.upiCollectOptionState
.upiCollectVpa
.text
)
?.accountId
.orEmpty(),
credBlock = pmsSendMoneyStatus.credBlock.orEmpty(),
upiRequestId = pmsSendMoneyStatus.upiRequestId,
payeeEntity = Uri.parse(payload?.naviPayUpiUriKey).getPayeeEntity(true),
naviPayUpiUriKey = payload?.naviPayUpiUriKey,
metaData = Gson().toJson(payload?.metadata),
txnTimeStamp = txnTimeStamp,
onboardingDataEntity = pmsSendMoneyStatus.onboardingDataEntity,

View File

@@ -40,7 +40,6 @@ import com.navi.pay.common.setup.NaviPayManager
import com.navi.pay.common.usecase.LinkedAccountsUseCase
import com.navi.pay.common.viewmodel.NaviPayBaseVM.Companion.ERROR_DEFAULT_TAG
import com.navi.pay.management.common.sendmoney.model.view.BankAccountsState
import com.navi.pay.management.common.sendmoney.model.view.PayeeEntity
import com.navi.pay.management.common.utils.NaviPayPspManager
import com.navi.pay.management.moneytransfer.scanpay.util.getPayeeEntity
import com.navi.pay.onboarding.account.detail.model.view.LinkedAccountEntity
@@ -424,7 +423,7 @@ constructor(
}
fun startNaviUpiPayment(
payeeEntity: PayeeEntity?,
naviPayUpiUriKey: String?,
tstoreOrderId: String,
metaData: String?,
bankAccountId: String,
@@ -442,7 +441,7 @@ constructor(
linkedAccountEntity.accountId.isAccountIdOfTypeUpiLite() ->
handleLiteAccountPayment(
linkedAccountEntity = linkedAccountEntity,
payeeEntity = payeeEntity,
naviPayUpiUriKey = naviPayUpiUriKey,
tstoreOrderId = tstoreOrderId,
metaData = metaData,
txnTimeStamp = txnTimeStamp,
@@ -450,7 +449,7 @@ constructor(
else ->
handleNonLiteAccountPayment(
linkedAccountEntity = linkedAccountEntity,
payeeEntity = payeeEntity,
naviPayUpiUriKey = naviPayUpiUriKey,
tstoreOrderId = tstoreOrderId,
metaData = metaData,
txnTimeStamp = txnTimeStamp,
@@ -461,7 +460,7 @@ constructor(
private suspend fun handleLiteAccountPayment(
linkedAccountEntity: LinkedAccountEntity,
payeeEntity: PayeeEntity?,
naviPayUpiUriKey: String?,
tstoreOrderId: String,
metaData: String?,
txnTimeStamp: String,
@@ -495,7 +494,7 @@ constructor(
pspEvaluationResult.onboardingDataEntity?.let { onboardingEntity ->
proceedToCLPinPage(
payeeEntity = payeeEntity,
naviPayUpiUriKey = naviPayUpiUriKey,
linkedAccountEntity = linkedAccountEntity,
txnTimeStamp = txnTimeStamp,
metaData = metaData,
@@ -509,7 +508,7 @@ constructor(
private suspend fun handleNonLiteAccountPayment(
linkedAccountEntity: LinkedAccountEntity,
payeeEntity: PayeeEntity?,
naviPayUpiUriKey: String?,
tstoreOrderId: String,
metaData: String?,
txnTimeStamp: String,
@@ -533,7 +532,7 @@ constructor(
return@evaluateAndOnboardPspForFlow
}
proceedToCLPinPage(
payeeEntity = payeeEntity,
naviPayUpiUriKey = naviPayUpiUriKey,
linkedAccountEntity = linkedAccountEntity,
txnTimeStamp = txnTimeStamp,
metaData = metaData,
@@ -545,7 +544,7 @@ constructor(
}
private suspend fun proceedToCLPinPage(
payeeEntity: PayeeEntity?,
naviPayUpiUriKey: String?,
linkedAccountEntity: LinkedAccountEntity,
txnTimeStamp: String,
metaData: String?,
@@ -555,7 +554,7 @@ constructor(
val sendMoneyStatus =
pmsSendMoneyUseCase.performChecksAndGenerateCredBlock(
payeeEntity = payeeEntity!!,
payeeEntity = Uri.parse(naviPayUpiUriKey).getPayeeEntity(isVerifiedVpa = true),
linkedAccountEntity = linkedAccountEntity,
screenName = NaviPaymentAnalyticScreenName.WEB_PAYMENT_SCREEN.screenName,
baseAnalyticsParam = getBaseAnalyticParams(),
@@ -565,7 +564,7 @@ constructor(
_showPayNowLoader.update { false }
handlePinPageResult(
sendMoneyStatus = sendMoneyStatus,
payeeEntity = payeeEntity,
naviPayUpiUriKey = naviPayUpiUriKey,
txnTimeStamp = txnTimeStamp,
linkedAccountEntity = linkedAccountEntity,
metaData = metaData,
@@ -577,7 +576,7 @@ constructor(
private fun handlePinPageResult(
sendMoneyStatus: PMSSendMoneyStatus,
payeeEntity: PayeeEntity,
naviPayUpiUriKey: String?,
txnTimeStamp: String,
linkedAccountEntity: LinkedAccountEntity,
metaData: String?,
@@ -591,11 +590,11 @@ constructor(
onInitialChecksFailure = {},
naviUpiTransactionInfo =
NaviUpiTransactionInfo(
payeeEntity = payeeEntity,
naviPayUpiUriKey = naviPayUpiUriKey,
txnTimeStamp = txnTimeStamp,
credBlock = sendMoneyStatus.credBlock!!,
upiRequestId = sendMoneyStatus.upiRequestId,
selectedBankAccount = linkedAccountEntity,
selectedBankAccountId = linkedAccountEntity.accountId,
metaData = metaData,
onboardingDataEntity = onboardingEntity,
),
@@ -653,10 +652,8 @@ constructor(
payNowResponse = response.data
(response.data as? InternalPayNowResponse)?.let {
val payLoad = it.providerPayload
val payeeEntity =
Uri.parse(payLoad?.naviPayUpiUriKey).getPayeeEntity(isVerifiedVpa = true)
startNaviUpiPayment(
payeeEntity = payeeEntity,
naviPayUpiUriKey = payLoad?.naviPayUpiUriKey,
tstoreOrderId = payLoad?.tstoreOrderReferenceId.orEmpty(),
metaData = Gson().toJson(payLoad?.metadata),
bankAccountId = selectedBankAccount.value?.accountId.orEmpty(),

View File

@@ -9,16 +9,14 @@ package com.navi.payment.paymentscreen.model
import android.os.Parcelable
import com.navi.common.constants.EMPTY
import com.navi.pay.management.common.sendmoney.model.view.PayeeEntity
import com.navi.pay.onboarding.account.detail.model.view.LinkedAccountEntity
import com.navi.pay.onboarding.binding.model.view.NaviPayCustomerOnboardingEntity
import kotlinx.parcelize.Parcelize
@Parcelize
data class NaviUpiTransactionInfo(
val payeeEntity: PayeeEntity,
val naviPayUpiUriKey: String?,
val txnTimeStamp: String,
val selectedBankAccount: LinkedAccountEntity? = null,
val selectedBankAccountId: String,
val credBlock: String,
val metaData: String? = null,
val upiRequestId: String = EMPTY,