From 2a7ba20501aea51afb075784b3952e9f05c513ce Mon Sep 17 00:00:00 2001 From: Ashutosh Y Date: Fri, 2 Aug 2024 01:23:18 +0530 Subject: [PATCH] NTP-949 | optimising pages for repeat users (#11971) --- .../common/fragment/OrderStatusFragment.kt | 6 +- .../navi/amc/common/fragment/OtpFragment.kt | 4 + .../amc/common/repo/OrderStatusRepository.kt | 5 +- .../common/viewmodel/OrderStatusViewModel.kt | 14 +++- .../fundbuy/fragments/FundBuyingFragmentV2.kt | 4 +- .../fundbuy/repository/FundBuyRepository.kt | 5 +- .../fundbuy/viewmodel/FundBuyV2ViewModel.kt | 8 +- .../navi/amc/kyc/model/BankDetailsResponse.kt | 4 +- .../amc/network/retrofit/RetrofitService.kt | 6 +- .../portfolio/fragments/PortfolioFragment.kt | 27 ++++--- .../portfolio/models/PortfolioScreenData.kt | 5 +- .../main/java/com/navi/amc/utils/Constant.kt | 2 + .../src/main/res/layout/icon_title_layout.xml | 29 +++++++ .../main/res/layout/overview_icon_layout.xml | 78 ++++++++++++------- .../res/drawable/gray_rounded_background.xml | 28 +++++++ 15 files changed, 169 insertions(+), 56 deletions(-) create mode 100644 android/navi-amc/src/main/res/layout/icon_title_layout.xml create mode 100644 android/navi-widgets/src/main/res/drawable/gray_rounded_background.xml 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 5620f72eea..3796eac844 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 @@ -210,7 +210,8 @@ class OrderStatusFragment : } } else { showLoader() - viewModel.fetchScreenData(orderId, dataSource, extraParams) + val sourceType = arguments?.getString(Constant.SOURCE_TYPE).orEmpty() + viewModel.fetchScreenData(orderId, dataSource, extraParams, sourceType) } if (forceRefresh.not() && viewModel.isOrderStatusPolling.orFalse().not()) viewModel.fetchCSATResponse(dataSource, orderId) @@ -691,9 +692,10 @@ class OrderStatusFragment : orderId = it.value.orEmpty() } } + val sourceType = arguments?.getString(Constant.SOURCE_TYPE).orEmpty() triggerPreloadIfRequired() viewModel.onPaymentPollingSuccess() - viewModel.fetchScreenData(orderId, dataSource, extraParams) + viewModel.fetchScreenData(orderId, dataSource, extraParams, sourceType) viewModel.fetchCSATResponse(dataSource, orderId) } } diff --git a/android/navi-amc/src/main/java/com/navi/amc/common/fragment/OtpFragment.kt b/android/navi-amc/src/main/java/com/navi/amc/common/fragment/OtpFragment.kt index be3f5979fe..7d5fe33213 100644 --- a/android/navi-amc/src/main/java/com/navi/amc/common/fragment/OtpFragment.kt +++ b/android/navi-amc/src/main/java/com/navi/amc/common/fragment/OtpFragment.kt @@ -52,6 +52,7 @@ import com.navi.amc.utils.Constant.OTP_FLOW_TYPE_RETRY_PAYMENT import com.navi.amc.utils.Constant.OTP_FLOW_TYPE_SIP_AUTOPAY import com.navi.amc.utils.Constant.OTP_FLOW_TYPE_SIP_MANUAL import com.navi.amc.utils.Constant.OTP_FLOW_TYPE_SIP_PURCHASE +import com.navi.amc.utils.Constant.PAYMENT import com.navi.amc.utils.Constant.REDEMPTION_ORDER_ID import com.navi.amc.utils.Constant.REQUEST_CONFIG import com.navi.amc.utils.Constant.SECONDS_PER_MINUTE @@ -59,6 +60,7 @@ import com.navi.amc.utils.Constant.SIP_AUTOPAY_PRESENT import com.navi.amc.utils.Constant.SIP_DATE import com.navi.amc.utils.Constant.SIP_REFERENCE_ID import com.navi.amc.utils.Constant.SOURCE_REF_ID +import com.navi.amc.utils.Constant.SOURCE_TYPE import com.navi.amc.utils.Constant.TRANSACTION_ID import com.navi.amc.utils.TempStorageHelper import com.navi.amc.utils.bundleToMap @@ -259,6 +261,7 @@ class OtpFragment : AmcBaseFragment(), View.OnClickListener { val bundle = Bundle().apply { putAll(arguments) + putString(SOURCE_TYPE, PAYMENT) putString( TRANSACTION_ID, viewModel.paymentInitiateData.value?.tokenDetails?.transactionId @@ -340,6 +343,7 @@ class OtpFragment : AmcBaseFragment(), View.OnClickListener { val bundle = Bundle().apply { putAll(arguments) + putString(SOURCE_TYPE, PAYMENT) putString( TRANSACTION_ID, viewModel.paymentInitiateData.value?.tokenDetails?.transactionId diff --git a/android/navi-amc/src/main/java/com/navi/amc/common/repo/OrderStatusRepository.kt b/android/navi-amc/src/main/java/com/navi/amc/common/repo/OrderStatusRepository.kt index e66530c094..1ca8631c4b 100644 --- a/android/navi-amc/src/main/java/com/navi/amc/common/repo/OrderStatusRepository.kt +++ b/android/navi-amc/src/main/java/com/navi/amc/common/repo/OrderStatusRepository.kt @@ -23,10 +23,11 @@ constructor( suspend fun fetchOrderStatusData( orderId: String, dataSource: String, - extraParams: Map + extraParams: Map, + sourceType: String ) = apiResponseCallback( - retrofitService.fetchOrderStatusDetails(orderId, dataSource, extraParams) + retrofitService.fetchOrderStatusDetails(orderId, dataSource, extraParams, sourceType) ) suspend fun checkApiPollStatus(requestId: String) = 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 312cef8927..ca43e98276 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 @@ -116,10 +116,20 @@ constructor( _orderStatusScreenData.value = getOrderPollingTimeOutScreenData() } - fun fetchScreenData(orderId: String, dataSource: String, extraParams: Map?) { + fun fetchScreenData( + orderId: String, + dataSource: String, + extraParams: Map?, + sourceType: String + ) { viewModelScope.launch { val response = - repository.fetchOrderStatusData(orderId, dataSource, extraParams.orEmpty()) + repository.fetchOrderStatusData( + orderId, + dataSource, + extraParams.orEmpty(), + sourceType + ) if (response.error == null && response.errors.isNullOrEmpty()) { _orderStatusScreenData.value = response.data triggerInitEvent() diff --git a/android/navi-amc/src/main/java/com/navi/amc/fundbuy/fragments/FundBuyingFragmentV2.kt b/android/navi-amc/src/main/java/com/navi/amc/fundbuy/fragments/FundBuyingFragmentV2.kt index 21c2abc542..de05136018 100644 --- a/android/navi-amc/src/main/java/com/navi/amc/fundbuy/fragments/FundBuyingFragmentV2.kt +++ b/android/navi-amc/src/main/java/com/navi/amc/fundbuy/fragments/FundBuyingFragmentV2.kt @@ -41,6 +41,7 @@ import com.navi.amc.utils.Constant.AUTOPAY_CHECKED import com.navi.amc.utils.Constant.DISMISS import com.navi.amc.utils.Constant.FREQUENCY import com.navi.amc.utils.Constant.INVESTMENT_TYPE +import com.navi.amc.utils.Constant.ORDER_AMOUNT import com.navi.amc.utils.Constant.SIP_DATE import com.navi.amc.utils.SubPageStatusType import com.navi.amc.utils.TempStorageHelper @@ -131,7 +132,8 @@ class FundBuyingFragmentV2 : AmcBaseFragment(), WidgetCallback { private fun fetchScreenData() { showLoader() - isin?.let { viewModel.getFundBuyScreenData(it, confinedInvestmentType) } + val orderAmount = arguments?.getString(ORDER_AMOUNT) + isin?.let { viewModel.getFundBuyScreenData(it, confinedInvestmentType, orderAmount) } } private fun initUI(isLeftOptionSip: Boolean, userSelectedSipChoice: Boolean?) { diff --git a/android/navi-amc/src/main/java/com/navi/amc/fundbuy/repository/FundBuyRepository.kt b/android/navi-amc/src/main/java/com/navi/amc/fundbuy/repository/FundBuyRepository.kt index eaa8a1f16c..d29ed3f343 100644 --- a/android/navi-amc/src/main/java/com/navi/amc/fundbuy/repository/FundBuyRepository.kt +++ b/android/navi-amc/src/main/java/com/navi/amc/fundbuy/repository/FundBuyRepository.kt @@ -21,14 +21,15 @@ class FundBuyRepository @Inject constructor(private val retrofitService: Retrofi suspend fun getFundBuyDetail( isin: String, - investmentType: String? = null + investmentType: String? = null, + orderAmount: String? = null ): RepoResult { val response = when (investmentType) { AmcAnalytics.SIP -> retrofitService.fetchFundSipBuyDetails(isin) AmcAnalytics.LUMPSUMP -> retrofitService.fetchFundLumpsumBuyDetails(isin) - else -> retrofitService.fetchFundBuyDetails(isin) + else -> retrofitService.fetchFundBuyDetails(isin, orderAmount) } return apiResponseCallback(response) diff --git a/android/navi-amc/src/main/java/com/navi/amc/fundbuy/viewmodel/FundBuyV2ViewModel.kt b/android/navi-amc/src/main/java/com/navi/amc/fundbuy/viewmodel/FundBuyV2ViewModel.kt index 4046859027..fed7c21bb7 100644 --- a/android/navi-amc/src/main/java/com/navi/amc/fundbuy/viewmodel/FundBuyV2ViewModel.kt +++ b/android/navi-amc/src/main/java/com/navi/amc/fundbuy/viewmodel/FundBuyV2ViewModel.kt @@ -78,9 +78,13 @@ class FundBuyV2ViewModel @Inject constructor(private val repository: FundBuyRepo private val gson by lazy { Gson() } - fun getFundBuyScreenData(isin: String, confinedInvestmentType: String? = null) { + fun getFundBuyScreenData( + isin: String, + confinedInvestmentType: String? = null, + orderAmount: String? = null + ) { viewModelScope.launch { - val response = repository.getFundBuyDetail(isin, confinedInvestmentType) + val response = repository.getFundBuyDetail(isin, confinedInvestmentType, orderAmount) if (response.error == null && response.errors.isNullOrEmpty()) { _fundBuyScreenData.value = response.data } else { diff --git a/android/navi-amc/src/main/java/com/navi/amc/kyc/model/BankDetailsResponse.kt b/android/navi-amc/src/main/java/com/navi/amc/kyc/model/BankDetailsResponse.kt index 036ade6ee1..21f15ec630 100644 --- a/android/navi-amc/src/main/java/com/navi/amc/kyc/model/BankDetailsResponse.kt +++ b/android/navi-amc/src/main/java/com/navi/amc/kyc/model/BankDetailsResponse.kt @@ -1,6 +1,6 @@ /* * - * * Copyright © 2023 by Navi Technologies Limited + * * Copyright © 2023-2024 by Navi Technologies Limited * * All rights reserved. Strictly confidential * */ @@ -36,7 +36,7 @@ data class BankDetailsContent( @Parcelize data class Note( @SerializedName("bgColor") val bgColor: String? = null, - @SerializedName("iconCode") val iconCode: String? = null, + @SerializedName("iconCode", alternate = ["icon"]) val iconCode: String? = null, @SerializedName("title") val title: TextWithStyle? = null, @SerializedName("toShowShimmer") val toShowShimmer: Boolean? = null ) : Parcelable diff --git a/android/navi-amc/src/main/java/com/navi/amc/network/retrofit/RetrofitService.kt b/android/navi-amc/src/main/java/com/navi/amc/network/retrofit/RetrofitService.kt index 36c43d5fde..9c70185086 100644 --- a/android/navi-amc/src/main/java/com/navi/amc/network/retrofit/RetrofitService.kt +++ b/android/navi-amc/src/main/java/com/navi/amc/network/retrofit/RetrofitService.kt @@ -280,7 +280,8 @@ interface RetrofitService { suspend fun fetchOrderStatusDetails( @Path("orderId") orderId: String, @Query("dataSource") dataSource: String, - @QueryMap extraParams: Map + @QueryMap extraParams: Map, + @Query("sourceType") sourceType: String ): Response> @GET("/fund/redeem-start-page") @@ -360,7 +361,8 @@ interface RetrofitService { @GET("/fund/purchase-start-page") suspend fun fetchFundBuyDetails( - @Query("isin") isin: String + @Query("isin") isin: String, + @Query("orderAmount") orderAmount: String? = null ): Response> @GET("/fund/lumpsum-purchase-start-page") diff --git a/android/navi-amc/src/main/java/com/navi/amc/portfolio/fragments/PortfolioFragment.kt b/android/navi-amc/src/main/java/com/navi/amc/portfolio/fragments/PortfolioFragment.kt index 663adeb7e8..253445d37c 100644 --- a/android/navi-amc/src/main/java/com/navi/amc/portfolio/fragments/PortfolioFragment.kt +++ b/android/navi-amc/src/main/java/com/navi/amc/portfolio/fragments/PortfolioFragment.kt @@ -196,16 +196,23 @@ class PortfolioFragment() : AmcBaseFragment() { topRight.subItem = it View.VISIBLE } ?: run { View.INVISIBLE } - bottomLeft.root.visibility = - data.bottomLeft?.let { - bottomLeft.subItem = it - View.VISIBLE - } ?: run { View.INVISIBLE } - bottomRight.root.visibility = - data.bottomRight?.let { - bottomRight.subItem = it - View.VISIBLE - } ?: run { View.INVISIBLE } + data.actionData?.primaryAction?.let { action -> + primaryBtn.visibility = View.VISIBLE + primaryBtn.isEnabled = action.disabled.orFalse().not() + primaryBtn.text = action.title + primaryBtn.setOnClickListener { navigate(action) } + } ?: run { primaryBtn.visibility = View.GONE } + data.actionData?.secondaryAction?.let { action -> + secondaryBtn.visibility = View.VISIBLE + secondaryBtn.isEnabled = !action.disabled.orFalse().not() + secondaryBtn.text = action.title + secondaryBtn.setOnClickListener { navigate(action) } + } ?: run { secondaryBtn.visibility = View.GONE } + data.noteBanner?.let { + note.root.visibility = View.VISIBLE + note.title.setSpannableString(it.title) + note.icon.showWhenDataIsAvailable(it.iconCode) + } ?: run { note.root.visibility = View.GONE } root.setOnClickListener { val bundle = Bundle().apply { diff --git a/android/navi-amc/src/main/java/com/navi/amc/portfolio/models/PortfolioScreenData.kt b/android/navi-amc/src/main/java/com/navi/amc/portfolio/models/PortfolioScreenData.kt index 96de46af3f..544124f7e4 100644 --- a/android/navi-amc/src/main/java/com/navi/amc/portfolio/models/PortfolioScreenData.kt +++ b/android/navi-amc/src/main/java/com/navi/amc/portfolio/models/PortfolioScreenData.kt @@ -9,6 +9,7 @@ package com.navi.amc.portfolio.models import com.google.gson.annotations.SerializedName import com.navi.amc.fundbuy.models.SubItemData +import com.navi.amc.kyc.model.Note import com.navi.base.model.ActionData import com.navi.common.model.LabelData import com.navi.common.model.common.CacheConfig @@ -65,9 +66,11 @@ data class OverviewCardData( @SerializedName("bottomLeft") val bottomLeft: SubItemData? = null, @SerializedName("bottomRight") val bottomRight: SubItemData? = null, @SerializedName("action") val action: ActionData? = null, + @SerializedName("actionData") val actionData: ActionData? = null, @SerializedName("cardAction") val cardAction: ActionData? = null, @SerializedName("label") val label: LabelData? = null, - @SerializedName("metadata") val metaData: OverViewCardMetaData? = null + @SerializedName("metadata") val metaData: OverViewCardMetaData? = null, + @SerializedName("noteBanner") val noteBanner: Note? = null ) : CardType() data class OverViewCardMetaData( 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 e74b840eed..c63c7c8749 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 @@ -190,6 +190,8 @@ object Constant { const val PAYMENT_TIMESTAMP = "paymentTimeStamp" const val FUND_ID = "fundId" const val RUPEE_SYMBOL = "₹" + const val SOURCE_TYPE = "sourceType" + const val ORDER_AMOUNT = "orderAmount" const val UPI_INTENT = "upi://pay" const val NAVI = "navi" } diff --git a/android/navi-amc/src/main/res/layout/icon_title_layout.xml b/android/navi-amc/src/main/res/layout/icon_title_layout.xml new file mode 100644 index 0000000000..15d6935f24 --- /dev/null +++ b/android/navi-amc/src/main/res/layout/icon_title_layout.xml @@ -0,0 +1,29 @@ + + + + + + + \ No newline at end of file diff --git a/android/navi-amc/src/main/res/layout/overview_icon_layout.xml b/android/navi-amc/src/main/res/layout/overview_icon_layout.xml index 468984a73e..7743f40c62 100644 --- a/android/navi-amc/src/main/res/layout/overview_icon_layout.xml +++ b/android/navi-amc/src/main/res/layout/overview_icon_layout.xml @@ -15,8 +15,7 @@ + android:background="@drawable/bg_border_grey_rounded_4"> - - - + android:orientation="vertical" + app:layout_constraintGuide_percent="0.5" /> + - - - + +