From 76504504ec36aacfa8c646f204d8dd2fd3e4da28 Mon Sep 17 00:00:00 2001 From: Apoorv Nigam Date: Tue, 4 Jun 2024 22:57:08 +0530 Subject: [PATCH] TP-67819 | polling timeout screen (#11156) --- .../common/fragment/OrderStatusFragment.kt | 5 +- .../common/viewmodel/OrderStatusViewModel.kt | 91 ++++++++++++++----- .../main/java/com/navi/amc/utils/Constant.kt | 1 + .../FirebaseRemoteConfigHelper.kt | 2 + 4 files changed, 73 insertions(+), 26 deletions(-) diff --git a/android/navi-amc/src/main/java/com/navi/amc/common/fragment/OrderStatusFragment.kt b/android/navi-amc/src/main/java/com/navi/amc/common/fragment/OrderStatusFragment.kt index 4d346ab390..e9ceee099c 100644 --- a/android/navi-amc/src/main/java/com/navi/amc/common/fragment/OrderStatusFragment.kt +++ b/android/navi-amc/src/main/java/com/navi/amc/common/fragment/OrderStatusFragment.kt @@ -470,10 +470,7 @@ class OrderStatusFragment : apiPollScheduler?.stopApiPoll() when (type) { TURBO_CHECKOUT_FLOW -> { - viewModel.triggerPreloadIfRequired( - null, - AmcTaskManager.PAYMENT_SUCCESS_PREFETCH_TASK - ) + viewModel.fetchPaymentOrderPollingScreenTimeOutData() } } } diff --git a/android/navi-amc/src/main/java/com/navi/amc/common/viewmodel/OrderStatusViewModel.kt b/android/navi-amc/src/main/java/com/navi/amc/common/viewmodel/OrderStatusViewModel.kt index 4a82ffdacf..8e2fd1a566 100644 --- a/android/navi-amc/src/main/java/com/navi/amc/common/viewmodel/OrderStatusViewModel.kt +++ b/android/navi-amc/src/main/java/com/navi/amc/common/viewmodel/OrderStatusViewModel.kt @@ -20,6 +20,7 @@ import com.navi.amc.common.taskProcessor.AmcTaskManager import com.navi.amc.fundbuy.models.PaymentOrder import com.navi.amc.utils.AmcAnalytics import com.navi.amc.utils.Constant.REFRESH_ORDER +import com.navi.amc.utils.Constant.RUPEE_SYMBOL import com.navi.amc.utils.Constant.TURBO_CHECKOUT_FLOW import com.navi.amc.utils.getJsonObject import com.navi.amc.utils.updateCheckerResponse @@ -69,7 +70,9 @@ class OrderStatusViewModel @Inject constructor(private val repository: OrderStat var isBackAllowed: Boolean = true var sourceScreen: String? = null var orderHeaderTitle: String? = null - var orderAmount: String? = null + private var orderAmount: String? = null + private var fundId: String? = null + private var fundName: String? = null fun fetchPaymentOrderPollingScreenData( fundName: String, @@ -77,10 +80,21 @@ class OrderStatusViewModel @Inject constructor(private val repository: OrderStat orderAmount: String, paymentTimeStamp: String ) { + setFundData(fundName, fundId, orderAmount) _orderStatusScreenData.value = getPollingScreenData(fundName, fundId, orderAmount, paymentTimeStamp) } + private fun setFundData(fundName: String, fundId: String, orderAmount: String) { + this.fundName = fundName + this.fundId = fundId + this.orderAmount = orderAmount + } + + fun fetchPaymentOrderPollingScreenTimeOutData() { + _orderStatusScreenData.value = getOrderPollingTimeOutScreenData() + } + fun fetchScreenData(orderId: String, dataSource: String, extraParams: Map?) { viewModelScope.launch { val response = @@ -195,6 +209,55 @@ class OrderStatusViewModel @Inject constructor(private val repository: OrderStat _csatResponse.value = null } + private fun getOrderPollingTimeOutScreenData(): OrderStatusScreenData? { + val jsonString: String = + FirebaseRemoteConfigHelper.getString( + FirebaseRemoteConfigHelper.AMC_ORDER_STATUS_POLLING_SCREEN_TIMEOUT_UI_DATA + ) + val screenData = + getJsonObject( + type = object : TypeToken() {}.type, + jsonString = jsonString + ) + var orderStatusScreenData: OrderStatusScreenData? = null + screenData?.let { + val fundHeaderTitle = it.content?.amcHeaderData?.title?.copy(text = fundName) + val orderAmountData = + it.content + ?.orderDetails + ?.orderAmount + ?.subtitle + ?.copy(text = "${RUPEE_SYMBOL}$orderAmount") + + orderStatusScreenData = + it.copy( + content = + it.content?.copy( + amcHeaderData = + it.content.amcHeaderData?.copy( + title = fundHeaderTitle, + icon = + it.content.amcHeaderData.icon?.copy( + actionData = + getFundHeaderIconActionData( + fundId.orEmpty(), + it.content.amcHeaderData.icon.actionData + ) + ) + ), + orderDetails = + it.content.orderDetails?.copy( + orderAmount = + it.content.orderDetails.orderAmount?.copy( + subtitle = orderAmountData + ) + ) + ) + ) + } + return orderStatusScreenData + } + private fun getPollingScreenData( fundName: String, fundId: String, @@ -213,28 +276,12 @@ class OrderStatusViewModel @Inject constructor(private val repository: OrderStat var orderStatusScreenData: OrderStatusScreenData? = null screenData?.let { val fundHeaderTitle = it.content?.amcHeaderData?.title?.copy(text = fundName) - val fundHeaderIconClickEventData = - it.content - ?.amcHeaderData - ?.icon - ?.actionData - ?.metaData - ?.clickedData - ?.copy(parameters = hashMapOf("fund_id" to fundId)) - val fundHeaderIconActionData = - it.content - ?.amcHeaderData - ?.icon - ?.actionData - ?.copy( - parameters = listOf(LineItem(key = "isin", value = fundId)), - metaData = - it.content.amcHeaderData.icon.actionData.metaData?.copy( - clickedData = fundHeaderIconClickEventData - ) - ) val orderAmountData = - it.content?.orderDetails?.orderAmount?.subtitle?.copy(text = "\u20B9$orderAmount") + it.content + ?.orderDetails + ?.orderAmount + ?.subtitle + ?.copy(text = "${RUPEE_SYMBOL}$orderAmount") orderStatusScreenData = it.copy( diff --git a/android/navi-amc/src/main/java/com/navi/amc/utils/Constant.kt b/android/navi-amc/src/main/java/com/navi/amc/utils/Constant.kt index e976001d5d..58944f85f3 100644 --- a/android/navi-amc/src/main/java/com/navi/amc/utils/Constant.kt +++ b/android/navi-amc/src/main/java/com/navi/amc/utils/Constant.kt @@ -189,4 +189,5 @@ object Constant { const val ORDER_HEADER_TITLE = "orderHeaderTitle" const val PAYMENT_TIMESTAMP = "paymentTimeStamp" const val FUND_ID = "fundId" + const val RUPEE_SYMBOL = "₹" } diff --git a/android/navi-common/src/main/java/com/navi/common/firebaseremoteconfig/FirebaseRemoteConfigHelper.kt b/android/navi-common/src/main/java/com/navi/common/firebaseremoteconfig/FirebaseRemoteConfigHelper.kt index ddbb13c2da..35f3a13d4c 100644 --- a/android/navi-common/src/main/java/com/navi/common/firebaseremoteconfig/FirebaseRemoteConfigHelper.kt +++ b/android/navi-common/src/main/java/com/navi/common/firebaseremoteconfig/FirebaseRemoteConfigHelper.kt @@ -61,6 +61,8 @@ object FirebaseRemoteConfigHelper { "NAVI_UPI_NOT_RESET_CL_SERVICE_ON_DISCONNECT" const val AMC_CSAT_TIMER_DELAY_IN_SEC = "AMC_CSAT_TIMER_DELAY_IN_SEC" const val AMC_ORDER_STATUS_POLLING_SCREEN_UI_DATA = "AMC_ORDER_STATUS_POLLING_SCREEN_UI_DATA" + const val AMC_ORDER_STATUS_POLLING_SCREEN_TIMEOUT_UI_DATA = + "AMC_ORDER_STATUS_POLLING_SCREEN_TIMEOUT_UI_DATA" const val AMC_CREATING_SIP_POLLING_SCREEN_UI_DATA = "AMC_CREATING_SIP_POLLING_SCREEN_UI_DATA" const val PROFILE_CACHING_DISABLE = "PROFILE_CACHING_DISABLE" const val BROTLI_ENCODING_ENABLED = "BROTLI_ENCODING_ENABLED"