From 62be43756a1f11f4e9ba93a224c0ea8b55dbd233 Mon Sep 17 00:00:00 2001 From: Sayed Owais Ali Date: Fri, 28 Feb 2025 20:38:38 +0530 Subject: [PATCH] NTP-43306 | Owais | using common utils to download nfo document (#15162) Co-authored-by: shrihari-raju_navi Co-authored-by: Varun Jain --- .../FundBoxComposable.kt | 3 +- .../common/fragment/OrderStatusFragment.kt | 17 ++++++--- .../com/navi/amc/common/view/FooterView.kt | 3 +- .../fundbuy/fragments/NfoDetailsFragment.kt | 37 +++++++++---------- .../fragments/PaymentSummaryFragment.kt | 24 ++++++++---- .../main/java/com/navi/amc/utils/Constant.kt | 1 + 6 files changed, 50 insertions(+), 35 deletions(-) diff --git a/android/app/src/main/java/com/naviapp/home/dashboard/ui/compose/investmentTab/widgets/highestReturnFundsWidgetComposable/FundBoxComposable.kt b/android/app/src/main/java/com/naviapp/home/dashboard/ui/compose/investmentTab/widgets/highestReturnFundsWidgetComposable/FundBoxComposable.kt index cbceba58bc..4dc899a824 100644 --- a/android/app/src/main/java/com/naviapp/home/dashboard/ui/compose/investmentTab/widgets/highestReturnFundsWidgetComposable/FundBoxComposable.kt +++ b/android/app/src/main/java/com/naviapp/home/dashboard/ui/compose/investmentTab/widgets/highestReturnFundsWidgetComposable/FundBoxComposable.kt @@ -15,6 +15,7 @@ import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.width +import androidx.compose.foundation.layout.wrapContentHeight import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -83,7 +84,7 @@ fun FundBoxComposable( ShapeUtil.getShape(shape = cardData.property?.borderStrokeData?.shape), ) .width(cardWidth) - .height(134.dp) + .wrapContentHeight() .clickableWithNoGesture(onClick = { onFundClick(cardData.actionData) }) ) { Column(modifier = Modifier.setPadding(cardData.property?.padding)) { 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 89b1c7af58..ec5c980cce 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 @@ -57,7 +57,9 @@ import com.navi.amc.utils.Constant.DATA import com.navi.amc.utils.Constant.DATA_SOURCE import com.navi.amc.utils.Constant.DISMISS import com.navi.amc.utils.Constant.FLOW_TYPE_SIP_PURCHASE +import com.navi.amc.utils.Constant.FORMATTED_AMOUNT import com.navi.amc.utils.Constant.FUND_ID +import com.navi.amc.utils.Constant.FUND_NAME import com.navi.amc.utils.Constant.GET_SIP_SUMMARY_BOTTOMSHEET import com.navi.amc.utils.Constant.HELP_BOTTOMSHEET import com.navi.amc.utils.Constant.INIT_REFUND @@ -1047,16 +1049,19 @@ class OrderStatusFragment : val isSipSummaryUrl = action.url.orEmpty().endsWith(GET_SIP_SUMMARY_BOTTOMSHEET, true) if (isRetry && !isOtpUrl) { + val fund = action.parameters?.firstOrNull { it.key == FUND_NAME }?.value.orEmpty() + val formattedAmount = + action.parameters?.firstOrNull { it.key == FORMATTED_AMOUNT }?.value.orEmpty() + val orderHeaderSubtitle = + action.parameters?.firstOrNull { it.key == ORDER_HEADER_SUBTITLE }?.value.orEmpty() buyFlowVM.apply { - fundName = arguments?.getString(ORDER_HEADER_TITLE).orEmpty() + fundName = fund fundId = action.parameters?.firstOrNull { it.key == ISIN }?.value.orEmpty() } arguments?.apply { - putString( - AMOUNT, - action.parameters?.firstOrNull { it.key == AMOUNT }?.value.orEmpty(), - ) - putString(ORDER_HEADER_SUBTITLE, arguments?.getString(ORDER_HEADER_SUBTITLE)) + putString(AMOUNT, formattedAmount) + putString(ORDER_HEADER_TITLE, fund) + putString(ORDER_HEADER_SUBTITLE, orderHeaderSubtitle) } viewModel.postSameOrderPayment( PaymentOrder(orderId = arguments?.getString(ORDER_ID), paymentMode = paymentMode) diff --git a/android/navi-amc/src/main/java/com/navi/amc/common/view/FooterView.kt b/android/navi-amc/src/main/java/com/navi/amc/common/view/FooterView.kt index f3adcc7a64..f0d4d302bc 100644 --- a/android/navi-amc/src/main/java/com/navi/amc/common/view/FooterView.kt +++ b/android/navi-amc/src/main/java/com/navi/amc/common/view/FooterView.kt @@ -26,6 +26,7 @@ import com.navi.design.utils.getNaviDrawable import com.navi.design.utils.parseColorSafe import com.navi.design.utils.setSpannableString import com.navi.naviwidgets.R as WidgetsR +import com.navi.naviwidgets.extensions.addOnMultipleClicksHandler import com.navi.naviwidgets.extensions.showWhenDataIsAvailable import com.navi.naviwidgets.utils.setButtonLoaderStateNonShrinking @@ -64,7 +65,7 @@ class FooterView(context: Context, attrs: AttributeSet?) : ConstraintLayout(cont } footer?.backCta?.title?.let { binding.backCta.text = it } footer?.backCta?.titleColor?.let { binding.backCta.setTextColor(it.parseColorSafe()) } - binding.nextCta.setOnClickListener { + binding.nextCta.addOnMultipleClicksHandler { footerInteractionListener?.onFooterNextPress(footer?.nextCta) } footer?.progress?.let { diff --git a/android/navi-amc/src/main/java/com/navi/amc/fundbuy/fragments/NfoDetailsFragment.kt b/android/navi-amc/src/main/java/com/navi/amc/fundbuy/fragments/NfoDetailsFragment.kt index 46b6da2358..58f19e4ab5 100644 --- a/android/navi-amc/src/main/java/com/navi/amc/fundbuy/fragments/NfoDetailsFragment.kt +++ b/android/navi-amc/src/main/java/com/navi/amc/fundbuy/fragments/NfoDetailsFragment.kt @@ -8,7 +8,6 @@ package com.navi.amc.fundbuy.fragments import android.content.Context -import android.net.Uri import android.os.Bundle import android.view.ViewStub import android.widget.Toast @@ -27,14 +26,12 @@ import com.navi.amc.utils.AmcAnalytics.ISIN import com.navi.amc.utils.Constant.DATA import com.navi.amc.utils.Constant.DOWNLOADING import com.navi.amc.utils.Constant.SHOW_BOTTOMSHEET +import com.navi.amc.utils.downloadDocuments import com.navi.amc.utils.getBottomSheet -import com.navi.base.AppServiceManager import com.navi.base.model.ActionData import com.navi.base.model.FundDocumentDownloadWidgetClickAction import com.navi.base.model.NaviClickAction import com.navi.base.model.NaviWidgetClickWithCtaData -import com.navi.base.utils.BaseUtils -import com.navi.common.downloader.DownloadUtil import com.navi.common.listeners.FragmentInterchangeListener import com.navi.common.listeners.HeaderInteractionListener import com.navi.common.listeners.NewBottomSheetListener @@ -44,7 +41,6 @@ import com.navi.naviwidgets.adapters.NaviAdapter import com.navi.naviwidgets.callbacks.WidgetCallback import com.navi.naviwidgets.viewholder.ViewHolderFactoryImpl import dagger.hilt.android.AndroidEntryPoint -import java.net.URI @AndroidEntryPoint class NfoDetailsFragment : AmcBaseFragment(), WidgetCallback, NewBottomSheetListener { @@ -148,31 +144,32 @@ class NfoDetailsFragment : AmcBaseFragment(), WidgetCallback, NewBottomSheetList sendEvent(naviClickAction.metaData?.clickedData) Toast.makeText(context, DOWNLOADING, Toast.LENGTH_SHORT).show() naviClickAction.downloadUrlList?.let { downloadUrlList -> - downloadUrlList.forEach { downloadUrl -> downloadDocuments(downloadUrl) } - } ?: run { downloadDocuments(naviClickAction.downloadUrl) } + downloadUrlList.forEach { downloadUrl -> + context?.let { + downloadDocuments(it, downloadUrl, getFileName(downloadUrl)) + } + } + } + ?: run { + val downloadUrl = naviClickAction.downloadUrl.toString() + context?.let { + downloadDocuments(it, downloadUrl, getFileName(downloadUrl)) + } + } } } } - private fun downloadDocuments(downloadUrl: String?) { - val path = - BaseUtils.cacheDirUri( - AppServiceManager.application.applicationContext, - ("NFO_" + System.currentTimeMillis().toString()), - ) - DownloadUtil.download( - AppServiceManager.application.applicationContext, - Uri.parse(downloadUrl), - URI.create(path), - ) - } - companion object { fun newInstance(bundle: Bundle?): NfoDetailsFragment { return NfoDetailsFragment().apply { arguments = bundle } } } + private fun getFileName(url: String): String { + return url.substringAfterLast("/").removeSuffix(".pdf").substringBefore("+").plus("_NFO") + } + override fun buttonClick(actionData: ActionData?) { sendEvent(actionData?.metaData?.clickedData) actionData?.let { diff --git a/android/navi-amc/src/main/java/com/navi/amc/fundbuy/fragments/PaymentSummaryFragment.kt b/android/navi-amc/src/main/java/com/navi/amc/fundbuy/fragments/PaymentSummaryFragment.kt index 1e21958f66..69eb0e1909 100644 --- a/android/navi-amc/src/main/java/com/navi/amc/fundbuy/fragments/PaymentSummaryFragment.kt +++ b/android/navi-amc/src/main/java/com/navi/amc/fundbuy/fragments/PaymentSummaryFragment.kt @@ -30,6 +30,7 @@ import com.navi.amc.fundbuy.viewmodel.PaymentSummaryViewModel import com.navi.amc.utils.* import com.navi.amc.utils.AmcAnalytics.ISIN import com.navi.amc.utils.Constant.AMOUNT +import com.navi.amc.utils.Constant.BYPASS_OTP import com.navi.amc.utils.Constant.FLOW_TYPE_SIP_PURCHASE import com.navi.amc.utils.Constant.LUMPSUM import com.navi.amc.utils.Constant.ORDER_HEADER_SUBTITLE @@ -56,6 +57,7 @@ import com.navi.design.font.FontWeightEnum import com.navi.design.textview.model.NaviSpan import com.navi.design.textview.model.TextWithStyle import com.navi.design.utils.* +import com.navi.naviwidgets.extensions.addOnMultipleClicksHandler import com.navi.naviwidgets.extensions.showWhenDataIsAvailable import com.navi.naviwidgets.utils.getGradientDrawable import com.navi.payment.listener.PaymentListener @@ -208,7 +210,7 @@ class PaymentSummaryFragment : AmcBaseFragment() { ColorStateList.valueOf( response.content.accountFooter.nextCta?.bgColor.parseColorSafe() ) - setOnClickListener { + addOnMultipleClicksHandler { arguments?.putString( AmcAnalytics.PAY_METHOD, viewModel.paymentSelectedMode, @@ -418,7 +420,18 @@ class PaymentSummaryFragment : AmcBaseFragment() { safelyShowBottomSheet(it, key) } } - } else if (arguments?.getString(TYPE)?.contains(SIP).orFalse()) { // get cta from backend + } else if (ctaUrl == BYPASS_OTP) { + val amount = + CurrencyUtils.getNormalizedAmount( + arguments?.getString(AMOUNT)?.toBigDecimalOrNull() ?: BigDecimal(0) + ) + val formattedAmount = amount.drop(1) + val orderHeaderSubtitle = + footer.nextCta + ?.parameters + ?.firstOrNull { it.key == ORDER_HEADER_SUBTITLE } + ?.value + .orEmpty() buyFlowVM.apply { fundName = arguments?.getString(ORDER_HEADER_TITLE).orEmpty() fundId = arguments?.getString(ISIN) @@ -432,11 +445,8 @@ class PaymentSummaryFragment : AmcBaseFragment() { ) arguments?.apply { - putString(AMOUNT, arguments?.getString(AMOUNT)) // formatted amount from backend - putString( - ORDER_HEADER_SUBTITLE, - arguments?.getString(TYPE), - ) // order header subtitle get from backend cta params + putString(AMOUNT, formattedAmount) + putString(ORDER_HEADER_SUBTITLE, orderHeaderSubtitle) } viewModel.initiateSipPayment(sipDetailsData) } else { 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 4607456e6e..66c29d444f 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 @@ -217,4 +217,5 @@ object Constant { const val MIG_RATE_OF_INTEREST = "RATE_OF_INTEREST" const val CARD_SHIMMER_ANIMATION_DELAY = 2500L const val TO_SHOW_LUMPSUM_RECOMMENDATION = "toShowLumpsumRecommendation" + const val FUND_NAME = "fundName" }