TP-49806 | Shankar | Fix Pending bottomsheet dismiss issue (#9822)

Co-authored-by: Ashutosh Y <ashutosh.y@navi.com>
Co-authored-by: Mehul Garg <mehul.garg@navi.com>
This commit is contained in:
shankar yadav
2024-02-17 16:09:51 +05:30
committed by GitHub
parent 0d383c1799
commit 4e528e9f21
10 changed files with 39 additions and 11 deletions

View File

@@ -130,7 +130,8 @@ fun PayBillScreen(
payBillViewModel.updateIsTokenLoading(isLoading = false)
}
PaymentSdkTypes.TRANSACTION_SUCCESS.name,
PaymentSdkTypes.TRANSACTION_FAILURE.name -> {
PaymentSdkTypes.TRANSACTION_FAILURE.name,
PaymentSdkTypes.TRANSACTION_PENDING.name -> {
val dataJSONObject = data?.stringToJsonObject()
naviBbpsAnalytics.onPaymentCompleted(
@@ -612,7 +613,8 @@ private fun startPaymentFlow(
) {
when (payload[PAYMENT_RESULT_TYPE]) {
PaymentSdkTypes.TRANSACTION_FAILURE.name,
PaymentSdkTypes.TRANSACTION_SUCCESS.name -> {
PaymentSdkTypes.TRANSACTION_SUCCESS.name,
PaymentSdkTypes.TRANSACTION_PENDING.name -> {
val dataJSONObject = payload.get(DATA).toJsonObject()
naviBbpsAnalytics.onPaymentCompleted(

View File

@@ -196,6 +196,7 @@ import com.navi.payment.razorpay.RazorpayHelper
import com.navi.payment.utils.Constants.FULL_PAYMENT_SCREEN
import com.navi.payment.utils.Constants.PAYMENT_METHOD_REQUEST_CODE
import com.navi.payment.utils.Constants.TRANSACTION_FAILURE
import com.navi.payment.utils.Constants.TRANSACTION_PENDING
import com.navi.payment.utils.Constants.TRANSACTION_SUCCESS
import com.navi.payment.utils.PaymentAnalytics
import com.navi.payment.utils.toCommonGenericErrorResponse
@@ -1781,12 +1782,14 @@ class DigitalGoldHomeActivity : BasePaymentActivity(), WidgetCallback, NewBottom
PaymentSdkTypes.DISMISS_LOADER.name -> {
// NO-OP
}
PaymentSdkTypes.TRANSACTION_SUCCESS.name, PaymentSdkTypes.TRANSACTION_FAILURE.name -> {
PaymentSdkTypes.TRANSACTION_SUCCESS.name, PaymentSdkTypes.TRANSACTION_FAILURE.name , PaymentSdkTypes.TRANSACTION_PENDING.name-> {
showProcessingBottomSheet()
buyVM.setPostPaymentResponseStatus(
PaymentStatusData(
status = if(PaymentSdkTypes.TRANSACTION_SUCCESS.name == TRANSACTION_SUCCESS)
FirebaseStatusType.SUCCESS
else if(PaymentSdkTypes.TRANSACTION_PENDING.name == TRANSACTION_PENDING)
FirebaseStatusType.PENDING
else FirebaseStatusType.FAILURE,
requestId = buyVM.goldBuyOrderResponse.value?.requestId
)

View File

@@ -22,5 +22,6 @@ data class PaymentSdkInitParams(
enum class PaymentSdkTypes {
TRANSACTION_SUCCESS,
TRANSACTION_FAILURE,
TRANSACTION_PENDING,
DISMISS_LOADER
}

View File

@@ -20,5 +20,6 @@ data class TurboCheckoutScreenStructure(
val renderActions: WidgetModelDefinition.RenderActions? = null,
val backgroundColor: String? = DEFAULT_BACKGROUND_COLOR,
val backgroundBrushData: BrushData? = null,
var bottomsheets: List<TurboCheckoutScreenStructure>? = null
var bottomsheets: List<TurboCheckoutScreenStructure>? = null,
val isCancelable: Boolean = false
) : Parcelable, TransactionResponseMetaData()

View File

@@ -9,4 +9,5 @@ sealed class PaymentButtonLoaderState {
data class Failure(val title: String) : PaymentButtonLoaderState()
object Nothing: PaymentButtonLoaderState()
}

View File

@@ -75,6 +75,7 @@ import com.navi.payment.utils.Constants.CHANNEL_PL
import com.navi.payment.utils.Constants.KEY_CTA_URL
import com.navi.payment.utils.Constants.KEY_FLOW_NAME
import com.navi.payment.utils.Constants.SOURCE
import com.navi.payment.utils.Constants.TRANSACTION_PENDING
import com.navi.payment.utils.Constants.TRANSACTION_SUCCESS
import com.navi.payment.utils.Constants.TURBO_CHECKOUT_BOTTOMSHEET
import com.navi.paymentclients.viewmodel.base.PaymentSdkClientVM
@@ -181,7 +182,7 @@ class PaymentLoaderFragment : PaymentScreenBaseFragment(), PaymentBackListener {
PENDING -> {
if (!response.nextStatusCheckRequired.orTrue()) {
stopApiPoll()
openPendingBottomSheet()
openPendingBottomSheet(response.data)
}
}
@@ -434,7 +435,9 @@ class PaymentLoaderFragment : PaymentScreenBaseFragment(), PaymentBackListener {
listener = null
}
private fun openPendingBottomSheet() {
private fun openPendingBottomSheet(
transactionStatusResponseData: TransactionStatusResponseData? = null,
) {
val bottomSheetConfig =
viewModel.pendingBottomSheetData.value?.bottomSheetType?.let {
PaymentScreenUtil.getBottomSheetConfigByType(
@@ -449,7 +452,12 @@ class PaymentLoaderFragment : PaymentScreenBaseFragment(), PaymentBackListener {
override fun onClick(ctaData: CtaData) {
onCtaClick(ctaData)
}
}
override fun onCancelDialog() {
postResultAndFinish(transactionStatusResponseData, TRANSACTION_PENDING)
}
},
true
)
}
}
@@ -494,7 +502,7 @@ class PaymentLoaderFragment : PaymentScreenBaseFragment(), PaymentBackListener {
apiPollScheduler =
ApiPollScheduler(
doOnTimeout = {
openPendingBottomSheet()
openPendingBottomSheet(viewModel.transactionStatusResponse.value?.data)
if (viewModel.signalStatusApiCallStatus.value == false) {
postPaymentStatus(viewModel.getUpdatedSdkAction())
}
@@ -523,7 +531,7 @@ class PaymentLoaderFragment : PaymentScreenBaseFragment(), PaymentBackListener {
apiPollScheduler =
ApiPollScheduler(
doOnTimeout = {
openPendingBottomSheet()
openPendingBottomSheet(viewModel.transactionStatusResponse.value?.data)
postPaymentStatus(viewModel.getUpdatedSdkAction())
},
numberOfRetry = requestConfig?.numOfRetries

View File

@@ -536,6 +536,8 @@ class PaymentMethodFragment : PaymentScreenBaseFragment(), PaymentBackListener,
hideLoader()
// TODO Handle error
}
else -> {}
}
}

View File

@@ -74,7 +74,7 @@ private val deserializer: Gson) :
get() = _payAmountResponse
private val _paymentAmount =
MutableStateFlow<PaymentButtonLoaderState>(PaymentButtonLoaderState.Loading)
MutableStateFlow<PaymentButtonLoaderState>(PaymentButtonLoaderState.Nothing)
val paymentAmount = _paymentAmount.asStateFlow()
private val _paymentApiConfig = MutableLiveData<PaymentMethodApiConfig?>()
@@ -138,11 +138,11 @@ private val deserializer: Gson) :
when {
response.data != null -> {
_payAmountResponse.value = response.data
_paymentAmount.emit(PaymentButtonLoaderState.Success(response.data))
val upiAction = initiatePayAmountAction.upiAction?.apply {
payload = response.data.providerPayload
}
upiAction?.let { handleAction(it) }
_paymentAmount.emit(PaymentButtonLoaderState.Success(response.data))
}
else -> {
setErrorData(

View File

@@ -29,6 +29,7 @@ import com.google.android.material.bottomsheet.BottomSheetDialog
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import com.navi.base.deeplink.DeepLinkManager
import com.navi.base.utils.isNotNull
import com.navi.base.utils.orFalse
import com.navi.base.utils.orTrue
import com.navi.common.R
import com.navi.common.firebasedb.FirebaseStatusType
@@ -136,6 +137,7 @@ class TurboCheckoutFragment : BottomSheetDialogFragment() {
}
is TurboCheckoutScreenState.Success -> {
isCancelable = screenState.turboCheckoutScreenStructure.isCancelable.orFalse()
ScaffoldRenderer(
turboCheckoutScreenStructure = screenState.turboCheckoutScreenStructure,
uiTronViewModel = turboCheckoutFragmentVM,
@@ -584,6 +586,13 @@ class TurboCheckoutFragment : BottomSheetDialogFragment() {
)
)
turboCheckoutFragmentVM.postSdkExitSignal(paymentSdkInitParams?.token, null)
} else if (state is TurboCheckoutScreenState.Success && state.turboCheckoutScreenStructure.screenId == "TURBO_CHECKOUT_PAYMENT_PENDING_SCAFFOLD_SCREEN") {
paymentManager.setPaymentResultSuccessData(
type = PaymentSdkTypes.TRANSACTION_PENDING.name,
tag = Constants.CLIENT_POLL_REQUIRED_TAG,
data = (turboCheckoutFragmentVM.paymentTransactionStatusPolling.value as? TransactionPollingApiState.Success)?.data?.data?.transactionDetails
)
turboCheckoutFragmentVM.postSdkExitSignal(paymentSdkInitParams?.token, null)
}
}

View File

@@ -72,6 +72,7 @@ object Constants {
const val CLIENT_POLL_REQUIRED_TAG = "CLIENT_POLL_REQUIRED"
const val TRANSACTION_SUCCESS = "TRANSACTION_SUCCESS"
const val TRANSACTION_FAILURE = "TRANSACTION_FAILURE"
const val TRANSACTION_PENDING = "TRANSACTION_PENDING"
const val OTHER_PAYMENT_METHODS = "OTHER_PAYMENT_METHODS"
const val PAYMENT_SDK_INIT_DATA = "PAYMENT_SDK_INIT_DATA"
const val PAYMENT_RESULT_PAYLOAD = "PAYMENT_RESULT_PAYLOAD"