From 8f7bb039a984f1b69e0e57dc4cec51f115aa44e8 Mon Sep 17 00:00:00 2001 From: Ujjwal Kumar Date: Sun, 22 Sep 2024 14:04:54 +0530 Subject: [PATCH] NTP-4194 | Added support for auto decline collect request (#12681) --- .../collectrequest/ui/CollectRequestsScreen.kt | 3 ++- .../viewmodel/CollectRequestViewModel.kt | 13 ++++++++++--- .../sendmoney/model/view/SendMoneyAction.kt | 8 +++++++- .../sendmoney/model/view/SendMoneyModels.kt | 3 ++- .../sendmoney/viewmodel/SendMoneyViewModelV2.kt | 16 ++++++++++++++++ .../viewmodel/NaviPayLauncherViewModel.kt | 3 ++- 6 files changed, 39 insertions(+), 7 deletions(-) diff --git a/android/navi-pay/src/main/kotlin/com/navi/pay/management/collectrequest/ui/CollectRequestsScreen.kt b/android/navi-pay/src/main/kotlin/com/navi/pay/management/collectrequest/ui/CollectRequestsScreen.kt index 00de449ab3..76c13efd6a 100644 --- a/android/navi-pay/src/main/kotlin/com/navi/pay/management/collectrequest/ui/CollectRequestsScreen.kt +++ b/android/navi-pay/src/main/kotlin/com/navi/pay/management/collectrequest/ui/CollectRequestsScreen.kt @@ -165,7 +165,8 @@ fun CollectRequestsScreen( collectRequestViewModel.onProceedButtonClicked( collectRequestEntity = collectRequest, - totalPendingRequest = totalPendingRequests + totalPendingRequest = totalPendingRequests, + sendMoneyAction = null ) } diff --git a/android/navi-pay/src/main/kotlin/com/navi/pay/management/collectrequest/viewmodel/CollectRequestViewModel.kt b/android/navi-pay/src/main/kotlin/com/navi/pay/management/collectrequest/viewmodel/CollectRequestViewModel.kt index f755bc9d87..f744b480ed 100644 --- a/android/navi-pay/src/main/kotlin/com/navi/pay/management/collectrequest/viewmodel/CollectRequestViewModel.kt +++ b/android/navi-pay/src/main/kotlin/com/navi/pay/management/collectrequest/viewmodel/CollectRequestViewModel.kt @@ -25,6 +25,7 @@ import com.navi.pay.management.collectrequest.model.network.CollectRequestsReque import com.navi.pay.management.collectrequest.model.view.CollectRequestEntity import com.navi.pay.management.collectrequest.repository.CollectRequestsRepository import com.navi.pay.management.common.sendmoney.model.view.PayeeEntity +import com.navi.pay.management.common.sendmoney.model.view.SendMoneyAction 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.mandate.model.network.MandateDetailRequest @@ -103,6 +104,9 @@ constructor( ) { val collectRequestTransactionId = naviPayActivityDataProvider.getIntentData()?.getString("gatewayTransactionId") ?: return + val collectRequestAction = + naviPayActivityDataProvider.getIntentData()?.getString("SendMoneyAction") ?: return + val sendMoneyActionForCollectRequest = SendMoneyAction.fromString(collectRequestAction) val collectRequestEntity = collectRequests.firstOrNull { it.transactionId == collectRequestTransactionId } @@ -113,7 +117,8 @@ constructor( onProceedButtonClicked( collectRequestEntity = collectRequestEntity, - totalPendingRequest = collectRequests.size + totalPendingRequest = collectRequests.size, + sendMoneyAction = sendMoneyActionForCollectRequest ) } @@ -171,7 +176,8 @@ constructor( fun onProceedButtonClicked( collectRequestEntity: CollectRequestEntity, - totalPendingRequest: Int + totalPendingRequest: Int, + sendMoneyAction: SendMoneyAction? ) { viewModelScope.launch(Dispatchers.IO) { _collectRequestUIState.update { CollectRequestUIState.Loading } @@ -180,7 +186,8 @@ constructor( SendMoneyScreenSource.CollectRequest( collectType = collectRequestEntity.collectType, totalPendingRequests = totalPendingRequest, - payerVpa = collectRequestEntity.payerVpa + payerVpa = collectRequestEntity.payerVpa, + autoTriggerSendMoneyAction = sendMoneyAction ) naviPaySessionHelper.createNewSessionId() diff --git a/android/navi-pay/src/main/kotlin/com/navi/pay/management/common/sendmoney/model/view/SendMoneyAction.kt b/android/navi-pay/src/main/kotlin/com/navi/pay/management/common/sendmoney/model/view/SendMoneyAction.kt index 5e9b091b01..f7e309f036 100644 --- a/android/navi-pay/src/main/kotlin/com/navi/pay/management/common/sendmoney/model/view/SendMoneyAction.kt +++ b/android/navi-pay/src/main/kotlin/com/navi/pay/management/common/sendmoney/model/view/SendMoneyAction.kt @@ -11,5 +11,11 @@ enum class SendMoneyAction { StartPayment, Approve, Decline, - SetPin + SetPin; + + companion object { + fun fromString(value: String): SendMoneyAction? { + return entries.find { it.name == value } + } + } } diff --git a/android/navi-pay/src/main/kotlin/com/navi/pay/management/common/sendmoney/model/view/SendMoneyModels.kt b/android/navi-pay/src/main/kotlin/com/navi/pay/management/common/sendmoney/model/view/SendMoneyModels.kt index 41d98622dd..7fc4ae2861 100644 --- a/android/navi-pay/src/main/kotlin/com/navi/pay/management/common/sendmoney/model/view/SendMoneyModels.kt +++ b/android/navi-pay/src/main/kotlin/com/navi/pay/management/common/sendmoney/model/view/SendMoneyModels.kt @@ -211,7 +211,8 @@ sealed class SendMoneyScreenSource : Parcelable { val totalPendingRequests: Int = 0, val payerVpa: String, val umn: String? = null, - val source: CollectRequestSource = CollectRequestSource.CollectRequestScreen + val source: CollectRequestSource = CollectRequestSource.CollectRequestScreen, + val autoTriggerSendMoneyAction: SendMoneyAction? ) : SendMoneyScreenSource() @Parcelize diff --git a/android/navi-pay/src/main/kotlin/com/navi/pay/management/common/sendmoney/viewmodel/SendMoneyViewModelV2.kt b/android/navi-pay/src/main/kotlin/com/navi/pay/management/common/sendmoney/viewmodel/SendMoneyViewModelV2.kt index 5475bf17c9..7326ba5349 100644 --- a/android/navi-pay/src/main/kotlin/com/navi/pay/management/common/sendmoney/viewmodel/SendMoneyViewModelV2.kt +++ b/android/navi-pay/src/main/kotlin/com/navi/pay/management/common/sendmoney/viewmodel/SendMoneyViewModelV2.kt @@ -480,6 +480,7 @@ constructor( paymentAmountChangeListener() customerStatusListener() selectedAccountChangeListener() + autoTriggerCollectRequestActionListener() } private fun customerStatusListener() { @@ -530,6 +531,21 @@ constructor( } } + private fun autoTriggerCollectRequestActionListener() { + viewModelScope.launch(Dispatchers.IO) { + // Waiting for all listeners before triggering auto actions + delay(300.milliseconds) + if (source !is SendMoneyScreenSource.CollectRequest) { + return@launch + } + + // Auto trigger decline for Collect Request + if (source.autoTriggerSendMoneyAction == SendMoneyAction.Decline) { + declineCollectRequest() + } + } + } + private fun checkFtueNudgeVisibility() { viewModelScope.launch(Dispatchers.IO) { val ftueNudgeCounter = diff --git a/android/navi-pay/src/main/kotlin/com/navi/pay/onboarding/launcher/viewmodel/NaviPayLauncherViewModel.kt b/android/navi-pay/src/main/kotlin/com/navi/pay/onboarding/launcher/viewmodel/NaviPayLauncherViewModel.kt index 9a62cb16dd..9e962fd1cf 100644 --- a/android/navi-pay/src/main/kotlin/com/navi/pay/onboarding/launcher/viewmodel/NaviPayLauncherViewModel.kt +++ b/android/navi-pay/src/main/kotlin/com/navi/pay/onboarding/launcher/viewmodel/NaviPayLauncherViewModel.kt @@ -426,7 +426,8 @@ constructor( payerVpa = collectRequestEntity.payerVpa, source = if (isFromInAppNotification) CollectRequestSource.IAN - else CollectRequestSource.PN + else CollectRequestSource.PN, + autoTriggerSendMoneyAction = null ) if (collectRequestEntity.collectType == REQUEST_TYPE_MANDATE) {