diff --git a/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/tranche_disbursal/RequestInstallmentFragment.kt b/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/tranche_disbursal/RequestInstallmentFragment.kt index d67514cc1d..288a58133b 100644 --- a/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/tranche_disbursal/RequestInstallmentFragment.kt +++ b/app/src/main/java/com/naviapp/dashboard/loanapplicationdetails/tranche_disbursal/RequestInstallmentFragment.kt @@ -173,10 +173,10 @@ class RequestInstallmentFragment : PostDetailsState.Failure -> { (activity as? BaseActivity)?.hideLoader() Toast.makeText( - context, - getString(R.string.oops_something_went_wrong), - Toast.LENGTH_SHORT - ) + context, + getString(R.string.oops_something_went_wrong), + Toast.LENGTH_SHORT + ) .show() } PostDetailsState.Loading -> { @@ -250,10 +250,10 @@ class RequestInstallmentFragment : (viewState.response.content?.uploadCard?.maxUploads ?: 1) - binding.uploadCard.getUploadedDocsSize(), maxUploadSizeInMB = - viewState.response.content - ?.uploadCard - ?.maxUploadSizeInMB - .orValue(DEFAULT_MAX_UPLOAD_SIZE_IN_MB) + viewState.response.content + ?.uploadCard + ?.maxUploadSizeInMB + .orValue(DEFAULT_MAX_UPLOAD_SIZE_IN_MB) ) }, removeDocumentCallback = { openDocumentDeleteBottomSheet() } @@ -268,21 +268,21 @@ class RequestInstallmentFragment : val prev = parentFragmentManager.findFragmentByTag(FullScreenErrorDialog.TAG) if ( prev != null && - !parentFragmentManager.isStateSaved && - !parentFragmentManager.isDestroyed + !parentFragmentManager.isStateSaved && + !parentFragmentManager.isDestroyed ) { ft.remove(prev).commit() } val errorFragment = FullScreenErrorDialog.getInstance( error = - GenericErrorResponse( - title = getString(R.string.page_load_fail_title), - message = getString(R.string.page_load_fail_message), - actions = - listOf(Action(title = getString(R.string.page_load_try_again))), - assetDetails = AssetDetails(ActionErrorFragment.PAGE_LOAD_FAILED) - ), + GenericErrorResponse( + title = getString(R.string.page_load_fail_title), + message = getString(R.string.page_load_fail_message), + actions = + listOf(Action(title = getString(R.string.page_load_try_again))), + assetDetails = AssetDetails(ActionErrorFragment.PAGE_LOAD_FAILED) + ), sourceScreenName = this.screenName, moduleName = (activity as? BaseActivity)?.getCurrentModuleName(), dialogDismissClicked = { viewModel.fetchTrancheDisbursalWidgets(arguments) } @@ -344,7 +344,10 @@ class RequestInstallmentFragment : ) binding.amountStatusText.text = numberToWords(amount) binding.amountStatusText.typeface = - ResourcesCompat.getFont(requireContext(), getFontStyle(FontWeightEnum.BOLD.name)) + ResourcesCompat.getFont( + requireContext(), + getFontStyle(FontWeightEnum.BOLD.name) + ) binding.amountStatusText.compoundDrawablePadding = dpToPxInInt(0) binding.amountStatusText.setCompoundDrawablesWithIntrinsicBounds( null, diff --git a/app/src/main/java/com/naviapp/homeloandigital/common/ui/fragment/HlDocumentPickerBottomSheet.kt b/app/src/main/java/com/naviapp/homeloandigital/common/ui/fragment/HlDocumentPickerBottomSheet.kt index 73b233e4eb..865d0676a6 100644 --- a/app/src/main/java/com/naviapp/homeloandigital/common/ui/fragment/HlDocumentPickerBottomSheet.kt +++ b/app/src/main/java/com/naviapp/homeloandigital/common/ui/fragment/HlDocumentPickerBottomSheet.kt @@ -101,13 +101,13 @@ class HlDocumentPickerBottomSheet : BaseBottomSheet() { if (selectedItemCount > min(defaultMaxUploadSize, maxUploadCount)) { Toast.makeText( - context, - String.format( - getString(com.navi.insurance.R.string.maximum_upload_text), - min(defaultMaxUploadSize, maxUploadCount) - ), - Toast.LENGTH_LONG - ) + context, + String.format( + getString(com.navi.insurance.R.string.maximum_upload_text), + min(defaultMaxUploadSize, maxUploadCount) + ), + Toast.LENGTH_LONG + ) .show() } else { documentPickerVM.setImagePickerData( diff --git a/app/src/main/java/com/naviapp/network/retrofit/RetrofitService.kt b/app/src/main/java/com/naviapp/network/retrofit/RetrofitService.kt index d26a2ab63d..d0b8beef59 100644 --- a/app/src/main/java/com/naviapp/network/retrofit/RetrofitService.kt +++ b/app/src/main/java/com/naviapp/network/retrofit/RetrofitService.kt @@ -159,10 +159,11 @@ interface RetrofitService { @GET("/customer-service/customers/me/fetch-current-address-details") suspend fun fetchCurrentAddressDetails(): - Response> + Response> @GET("/customer-service/customers/me/fetch-current-address-details/v2") - suspend fun fetchCurrentAddressDetailsV2(): Response> + suspend fun fetchCurrentAddressDetailsV2(): + Response> @GET("/customer-service/customers/me/fetch-addresses-for-current-reference") suspend fun fetchNoProofAddressList(): Response> @@ -528,7 +529,9 @@ interface RetrofitService { ): Response> @GET("/loan-origination-manager/loan-applications/{loanApplicationId}/loan-details-summary") - suspend fun fetchSummaryV2View(@Path("loanApplicationId") loanApplicationId: String): Response> + suspend fun fetchSummaryV2View( + @Path("loanApplicationId") loanApplicationId: String + ): Response> @GET("/loan-origination-manager/loan-applications/{loanApplicationId}/get-loan-agreement-view") suspend fun fetchLoanAgreementView( @@ -573,7 +576,9 @@ interface RetrofitService { ): Response> @GET("/loan-applications/{loanApplicationId}/v3/auto-debit-instructions") - suspend fun fetchEnachV2Details(@Path("loanApplicationId") loanApplicationId: String): Response> + suspend fun fetchEnachV2Details( + @Path("loanApplicationId") loanApplicationId: String + ): Response> @POST("/loan-origination-manager/fetch-installments") suspend fun fetchEmiDetails( @@ -667,7 +672,7 @@ interface RetrofitService { @GET("/customer-service/customers/me/eligibility/work-details") suspend fun fetchEmploymentVerificationData(): - Response> + Response> @GET("/customer-service/customers/me/eligibility/pan-details") suspend fun fetchPanData(): Response> @@ -678,7 +683,9 @@ interface RetrofitService { ): Response> @GET("/pl-in-review-ctas") - suspend fun fetchBankStatementData(@Query("flowType") flowType: String): Response> + suspend fun fetchBankStatementData( + @Query("flowType") flowType: String + ): Response> @GET("/financial-profile/account-aggregator/cta-and-terms-and-conditions") suspend fun fetchAggregatorStatementData(): Response> @@ -859,7 +866,7 @@ interface RetrofitService { @GET("/auth-token/v1/refresh") suspend fun refreshFirebaseAuthToken(): - Response> + Response> @POST("/v1/finoramic-upload") suspend fun sendFinoramicData( @@ -938,7 +945,7 @@ interface RetrofitService { @GET("/customer-service/customers/me/fetch-osv-details") suspend fun fetchPhysicalAddressVerificationData(): - Response> + Response> @GET("/customer-service/customers/me/fetch-osv-slot-details") suspend fun fetchOsvData(): Response> @@ -1086,7 +1093,7 @@ interface RetrofitService { @GET("/home-loan/customers/me/journey/v1/home") suspend fun fetchHomeLoanSelectTypeScreenDetails(): - Response> + Response> @GET("/home-loan/customers/me/journey/v1/form?action=CUSTOMIZE_LOAN") suspend fun fetchHomeLoanEmiTenureDetails( @@ -1361,22 +1368,22 @@ interface RetrofitService { suspend fun fetchGstLoginWithCredentialStatus( @Path("requestId") requestId: String ): Response< - GenericResponse>> - > + GenericResponse>> + > @GET("/requests/{requestId}") suspend fun fetchSendOTPForGstVerificationStatus( @Path("requestId") requestId: String ): Response< - GenericResponse>> - > + GenericResponse>> + > @GET("/requests/{requestId}") suspend fun fetchVerifyOTPForGstVerification( @Path("requestId") requestId: String ): Response< - GenericResponse>> - > + GenericResponse>> + > @GET("/customer-service/customers/me/credit-assignment") suspend fun fetchCreditAssignmentDetails(): Response> @@ -1504,9 +1511,9 @@ interface RetrofitService { @QueryMap queryMap: HashMap ): Response> - @GET("/journey-tracker") - suspend fun fetchPersonalLoanTrackerResponse(): Response> + suspend fun fetchPersonalLoanTrackerResponse(): + Response> @GET("end-screen-widgets/{screenName}") suspend fun fetchCrossSellDetails( @@ -1528,7 +1535,9 @@ interface RetrofitService { suspend fun fetchRewardsSummary(): Response> @GET("/loan-origination-manager/loan-applications/{loanApplicationId}/get-loan-agreement-view") - suspend fun fetchLoanAgreementV2View(@Path("loanApplicationId") loanApplicationId: String): Response> + suspend fun fetchLoanAgreementV2View( + @Path("loanApplicationId") loanApplicationId: String + ): Response> @GET("/litmus-proxy/v1/proxy/experiment") suspend fun fetchABExperiment( @@ -1570,7 +1579,9 @@ interface RetrofitService { ): Response> @POST("/loan-origination-manager/v4/fetch-loan-fee-details") - suspend fun fetchFeeV2Details(@Body request: LoanFeeDetailsRequest): Response> + suspend fun fetchFeeV2Details( + @Body request: LoanFeeDetailsRequest + ): Response> @GET("/widgets/sa/renewal/bottom-sheet-details") suspend fun getR11PaymentDetails( @@ -1716,5 +1727,4 @@ interface RetrofitService { @Path("rescheduleType") rescheduleType: String?, @Body customPayRequest: CustomPaymentRequest? ): Response> - } diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/loandetails/fragments/LoanDetailsFragment.kt b/app/src/main/java/com/naviapp/personalloan/getloan/loandetails/fragments/LoanDetailsFragment.kt index 89403ad5bf..f39c8a356a 100644 --- a/app/src/main/java/com/naviapp/personalloan/getloan/loandetails/fragments/LoanDetailsFragment.kt +++ b/app/src/main/java/com/naviapp/personalloan/getloan/loandetails/fragments/LoanDetailsFragment.kt @@ -75,15 +75,22 @@ import com.naviapp.utils.Constants import com.naviapp.utils.Constants.EPFO_PAGE_TYPE import com.naviapp.utils.SPACE import com.naviapp.utils.isDead +import java.math.BigDecimal +import java.math.RoundingMode import kotlinx.android.synthetic.main.emi_plans_view_layout.view.* import kotlinx.android.synthetic.main.micro_ticket_loan_card_lay.view.* import org.joda.money.BigMoney import org.joda.money.CurrencyUnit -import java.math.BigDecimal -import java.math.RoundingMode -class LoanDetailsFragment : BaseFragment(), View.OnClickListener, LoanDetailsListener, - BottomSheetListener, OfferTapListener, BackListener, EmiClickListener, LineItemListener, +class LoanDetailsFragment : + BaseFragment(), + View.OnClickListener, + LoanDetailsListener, + BottomSheetListener, + OfferTapListener, + BackListener, + EmiClickListener, + LineItemListener, EmiDateSelectListener { private lateinit var binding: FragmentLoanDetailsBinding private val loanDetailsVM by lazy { ViewModelProvider(this).get(LoanDetailsVM::class.java) } @@ -106,9 +113,9 @@ class LoanDetailsFragment : BaseFragment(), View.OnClickListener, LoanDetailsLis private var isFirstLoadScreen = false private var commonBottomSheetShown = false - override fun onCreateView( - inflater: LayoutInflater, container: ViewGroup?, + inflater: LayoutInflater, + container: ViewGroup?, savedInstanceState: Bundle? ): View { loanDetailsAndEmiSharedVM = @@ -132,8 +139,7 @@ class LoanDetailsFragment : BaseFragment(), View.OnClickListener, LoanDetailsLis if (!offerId.isNullOrBlank()) { loanDetailsVM.fetchOffer(offerId) PreferenceManager.setStringPreference(OFFER_ID, offerId) - } else - loanDetailsVM.generateOffer() + } else loanDetailsVM.generateOffer() } fetchFeedbackListener?.onFetchFeedbackOption(FeedbackPageType.LOAN_OFFER_PAGE) return binding.root @@ -179,9 +185,7 @@ class LoanDetailsFragment : BaseFragment(), View.OnClickListener, LoanDetailsLis EMI_SLIDER ) - binding.nextButton.setProperties( - title = getString(R.string.continue_text) - ) + binding.nextButton.setProperties(title = getString(R.string.continue_text)) bottomSheetBehavior = BottomSheetBehavior.from(binding.transferAmountDetailsViewParent) bottomSheetBehavior.state = BottomSheetBehavior.STATE_HIDDEN binding.loanDetailsAndEmiSharedVM = loanDetailsAndEmiSharedVM @@ -190,9 +194,12 @@ class LoanDetailsFragment : BaseFragment(), View.OnClickListener, LoanDetailsLis private fun getLoanApplicationId(): String? { val loanApplicationId = - loanDetailsVM.loanDetailsResponse.value?.footer?.nextCta?.parameters?.firstOrNull { item -> - item.key == Constants.PERSONAL_LOAN_APPLICATION_ID - }?.value + loanDetailsVM.loanDetailsResponse.value + ?.footer + ?.nextCta + ?.parameters + ?.firstOrNull { item -> item.key == Constants.PERSONAL_LOAN_APPLICATION_ID } + ?.value return loanApplicationId } @@ -205,16 +212,12 @@ class LoanDetailsFragment : BaseFragment(), View.OnClickListener, LoanDetailsLis eventName = NaviAnalytics.PL_LOAN_OFFER_NEXT_CLICK ) ) - //binding.transferAmountView.setOnClickListener(this) + // binding.transferAmountView.setOnClickListener(this) binding.bankStatementLay.ctaTitle.setOnClickListener { loanDetailsVM.feeDetails.value?.loanFeeDetails?.bannerInfo?.cta?.let { naviAnalyticsEventTracker.onOfferDetailsBankStatementTap() - NaviDeepLinkNavigator.navigate( - activity, - it - ) + NaviDeepLinkNavigator.navigate(activity, it) } - } binding.epfoDetailsLay.ctaTitle.setOnClickListener { loanDetailsVM.feeDetails.value?.loanFeeDetails?.epfoDetailsCard?.cta?.let { @@ -229,30 +232,26 @@ class LoanDetailsFragment : BaseFragment(), View.OnClickListener, LoanDetailsLis } binding.offerUpgradeLay.offerUpgradeView.setOnClickListener { val loanApplicationId = - loanDetailsVM.loanDetailsResponse.value?.footer?.nextCta?.parameters?.firstOrNull { item -> - item.key == Constants.PERSONAL_LOAN_APPLICATION_ID - }?.value + loanDetailsVM.loanDetailsResponse.value + ?.footer + ?.nextCta + ?.parameters + ?.firstOrNull { item -> item.key == Constants.PERSONAL_LOAN_APPLICATION_ID } + ?.value naviAnalyticsEventTracker.onOfferUpgradeCardClicked( binding.loanConfigLay.loanAmountSliderView.getValue()?.toString(), initialRateOfInterest?.toString(), loanApplicationId ) -// naviAnalyticsEventTracker.onOfferUpgradeCardClicked() + // naviAnalyticsEventTracker.onOfferUpgradeCardClicked() loanDetailsVM.feeDetails.value?.loanFeeDetails?.offerUpgradeCardData?.cta?.let { - NaviDeepLinkNavigator.navigate( - activity, - it - ) + NaviDeepLinkNavigator.navigate(activity, it) } } loanDetailsVM.requestIdGenerateOffer.observeNullable(this) { it?.let { - firebaseInit( - it.requestId.orEmpty(), - OFFER_GENERATE, - it.notificationPath.orEmpty() - ) + firebaseInit(it.requestId.orEmpty(), OFFER_GENERATE, it.notificationPath.orEmpty()) apiPollInit(it, OFFER_GENERATE) } } @@ -283,35 +282,33 @@ class LoanDetailsFragment : BaseFragment(), View.OnClickListener, LoanDetailsLis loanFeeDetailsResponse.loanFeeDetails?.let { binding.data = it it.amountSliderTitle?.let { amountSliderTitle -> - binding.loanConfigLay.loanAmountSliderView.setProperties( - amountSliderTitle - ) + binding.loanConfigLay.loanAmountSliderView.setProperties(amountSliderTitle) } it.emiSliderTitle?.let { emiSliderTitle -> - binding.loanConfigLay.emiAmountSliderView.setProperties( - emiSliderTitle - ) + binding.loanConfigLay.emiAmountSliderView.setProperties(emiSliderTitle) } it.greetingCard?.let { greetingCardResponse -> binding.greetingCardData = greetingCardResponse } - it.couponOffer?.let { couponOffer -> - populateCouponOfferDetails(couponOffer) - } + it.couponOffer?.let { couponOffer -> populateCouponOfferDetails(couponOffer) } it.centerDialog?.let { greetingResponse -> - if (greetingResponse.type?.equals(OfferDialogType.OFFER_BOTTOM_SHEET.name) == true) { - val bottomSheet = DailyOfferBottomSheet.getInstance( - loanDetailsVM.convertToOfferResponse(greetingResponse), - screenName - ) + if ( + greetingResponse.type?.equals(OfferDialogType.OFFER_BOTTOM_SHEET.name) == + true + ) { + val bottomSheet = + DailyOfferBottomSheet.getInstance( + loanDetailsVM.convertToOfferResponse(greetingResponse), + screenName + ) safelyShowBottomSheet(bottomSheet, DailyOfferBottomSheet.TAG) } else { displayOfferDialog(greetingResponse) } } val previousRateOfInterest = actualRateOfInterest - actualRateOfInterest = it.feeDetails?.discountedInterestRate - ?: it.feeDetails?.interestRate + actualRateOfInterest = + it.feeDetails?.discountedInterestRate ?: it.feeDetails?.interestRate loanDetailsVM.setShouldUpdateEmiSlider(previousRateOfInterest, actualRateOfInterest) binding.transferAmountValue.text = it.feeDetails?.netLoanAmount?.amount?.formatCurrency() @@ -320,9 +317,7 @@ class LoanDetailsFragment : BaseFragment(), View.OnClickListener, LoanDetailsLis val summaryCardList = mutableListOf() val loanDetailsList = mutableListOf() loanDetailsList.add(LineItem(key = getString(R.string.Loan_details))) - amountParams.forEach { item -> - loanDetailsList.add(item) - } + amountParams.forEach { item -> loanDetailsList.add(item) } loanDetailsList.add( LineItem( key = getString(R.string.amount_transferable), @@ -331,44 +326,37 @@ class LoanDetailsFragment : BaseFragment(), View.OnClickListener, LoanDetailsLis ) val loanDetailsCard = SummaryCard(cardDetails = loanDetailsList) summaryCardList.add(loanDetailsCard) - binding.loanDetailsRv.adapter = SummaryAdapter( - summaryCardList, - resources.getInteger(R.integer.font_small).toFloat(), - resources.getInteger(R.integer.font_medium).toFloat(), - context?.let { it1 -> - ResourcesCompat.getFont( - it1, - getFontStyle(FontWeightEnum.BOLD.name) - ) - } - ) - } ?: run { - binding.loanDetailsRv.visibility = View.GONE + binding.loanDetailsRv.adapter = + SummaryAdapter( + summaryCardList, + resources.getInteger(R.integer.font_small).toFloat(), + resources.getInteger(R.integer.font_medium).toFloat(), + context?.let { it1 -> + ResourcesCompat.getFont(it1, getFontStyle(FontWeightEnum.BOLD.name)) + } + ) } + ?: run { binding.loanDetailsRv.visibility = View.GONE } context?.let { context -> it.feeDetails?.amountParams?.let { amountParams -> val textStyle = TextStyle( textSize = resources.getInteger(R.integer.font_small).toFloat(), - textColor = ContextCompat.getColor( - context, - R.color.title_text_color - ) + textColor = + ContextCompat.getColor(context, R.color.title_text_color) ) if (binding.transferAmountDetailsView.lineItemsRv.adapter == null) { binding.transferAmountDetailsView.lineItemsRv.adapter = - SummaryLineItemsAdapter( - amountParams, - textStyle - ) + SummaryLineItemsAdapter(amountParams, textStyle) binding.transferAmountDetailsView.lineItemsRv.addItemDecoration( TopMarginItemDecoration( resources.getDimension(R.dimen.layout_dp_12) ) ) } else { - (binding.transferAmountDetailsView.lineItemsRv.adapter as - SummaryLineItemsAdapter).setData(amountParams) + (binding.transferAmountDetailsView.lineItemsRv.adapter + as SummaryLineItemsAdapter) + .setData(amountParams) } } } @@ -379,14 +367,17 @@ class LoanDetailsFragment : BaseFragment(), View.OnClickListener, LoanDetailsLis updateEpfoDetailsView(epfoDetailsCardInfo) } it.offerUpgradeCardData?.let { offerUpgradeCardData -> - naviAnalyticsEventTracker.isOfferUpgradeCardVisible(resources.getString(R.string.yes)) + naviAnalyticsEventTracker.isOfferUpgradeCardVisible( + resources.getString(R.string.yes) + ) updateOfferUpgradeCardData(offerUpgradeCardData) - } ?: run { - naviAnalyticsEventTracker.isOfferUpgradeCardVisible(resources.getString(R.string.no)) - } - it.dailyOfferCard?.let { dailyOfferCard -> - updateDailyOfferCard(dailyOfferCard) } + ?: run { + naviAnalyticsEventTracker.isOfferUpgradeCardVisible( + resources.getString(R.string.no) + ) + } + it.dailyOfferCard?.let { dailyOfferCard -> updateDailyOfferCard(dailyOfferCard) } } if (loanDetailsVM.shouldUpdateEmiSlider()) { binding.loanConfigLay.emiAmountSliderView.updateSlider( @@ -405,11 +396,7 @@ class LoanDetailsFragment : BaseFragment(), View.OnClickListener, LoanDetailsLis } loanDetailsVM.requestIdApplyLoan.observeNullable(this) { it?.let { - firebaseInit( - it.requestId.orEmpty(), - LOAN_APPLY, - it.notificationPath.orEmpty() - ) + firebaseInit(it.requestId.orEmpty(), LOAN_APPLY, it.notificationPath.orEmpty()) apiPollInit(it, LOAN_APPLY) } } @@ -422,13 +409,13 @@ class LoanDetailsFragment : BaseFragment(), View.OnClickListener, LoanDetailsLis hideLoader() perfUtils.endInteraction(PL_APPLY_LOAN_SUBMIT) loanDetailsAndEmiSharedVM?.resetSelectedEmiDate() - it.nextCta?.let { nextScreen -> - moveToNextScreen(nextScreen) - } ?: run { - loanDetailsVM.loanDetailsResponse.value?.footer?.nextCta?.url?.let { nextScreen -> - moveToNextScreen(nextScreen) + it.nextCta?.let { nextScreen -> moveToNextScreen(nextScreen) } + ?: run { + loanDetailsVM.loanDetailsResponse.value?.footer?.nextCta?.url?.let { nextScreen + -> + moveToNextScreen(nextScreen) + } } - } } loanDetailsVM.loanSummary.observeNonNull(this) { populateLoanDetails(it) } @@ -449,21 +436,22 @@ class LoanDetailsFragment : BaseFragment(), View.OnClickListener, LoanDetailsLis ) } - bottomSheetBehavior.addBottomSheetCallback(object : - BottomSheetBehavior.BottomSheetCallback() { - override fun onSlide(bottomSheet: View, slideOffset: Float) { + bottomSheetBehavior.addBottomSheetCallback( + object : BottomSheetBehavior.BottomSheetCallback() { + override fun onSlide(bottomSheet: View, slideOffset: Float) {} - } - - override fun onStateChanged(bottomSheet: View, newState: Int) { - if (newState == BottomSheetBehavior.STATE_HIDDEN || newState == BottomSheetBehavior.STATE_COLLAPSED) { - binding.arrowIv.animate().setDuration(200).rotation(180f) - binding.blackOutView.visibility = View.GONE - updateUIListener?.changeHeaderBackGround(false) + override fun onStateChanged(bottomSheet: View, newState: Int) { + if ( + newState == BottomSheetBehavior.STATE_HIDDEN || + newState == BottomSheetBehavior.STATE_COLLAPSED + ) { + binding.arrowIv.animate().setDuration(200).rotation(180f) + binding.blackOutView.visibility = View.GONE + updateUIListener?.changeHeaderBackGround(false) + } } } - - }) + ) loanDetailsAndEmiSharedVM?.couponInfo?.observeNonNull(viewLifecycleOwner) { couponInfo -> fetchFeeDetails(couponInfo) } @@ -482,16 +470,17 @@ class LoanDetailsFragment : BaseFragment(), View.OnClickListener, LoanDetailsLis if (prevFragment == null) { it?.let { naviAnalyticsEventTracker.onEmiStartDateEditTap() - val bottomSheet = RadioButtonBottomSheet.newInstance(Bundle().apply { - putParcelable( - RadioButtonBottomSheet.EMI_DATES_DATA, - it + val bottomSheet = + RadioButtonBottomSheet.newInstance( + Bundle().apply { + putParcelable(RadioButtonBottomSheet.EMI_DATES_DATA, it) + putString( + RadioButtonBottomSheet.EVENT_NAME, + PL_FIRST_EMI_DATE_CHANGE + ) + }, + this ) - putString( - RadioButtonBottomSheet.EVENT_NAME, - PL_FIRST_EMI_DATE_CHANGE - ) - }, this) safelyShowBottomSheet(bottomSheet, RadioButtonBottomSheet.TAG) } } @@ -500,41 +489,51 @@ class LoanDetailsFragment : BaseFragment(), View.OnClickListener, LoanDetailsLis private fun moveToNextScreen(nextScreen: String) { val loanApplicationId = - loanDetailsVM.loanDetailsResponse.value?.footer?.nextCta?.parameters?.firstOrNull { item -> - item.key == Constants.PERSONAL_LOAN_APPLICATION_ID - }?.value + loanDetailsVM.loanDetailsResponse.value + ?.footer + ?.nextCta + ?.parameters + ?.firstOrNull { item -> item.key == Constants.PERSONAL_LOAN_APPLICATION_ID } + ?.value if (handledTopUpRedirection(nextScreen)) { return } - fragmentInteractionListener?.navigateTo(nextScreen, Bundle().apply { - putString(Constants.PERSONAL_LOAN_APPLICATION_ID, loanApplicationId) - }) + fragmentInteractionListener?.navigateTo( + nextScreen, + Bundle().apply { putString(Constants.PERSONAL_LOAN_APPLICATION_ID, loanApplicationId) } + ) } - //TODO : Sorry for this ,will remove it later in topup revamp + // TODO : Sorry for this ,will remove it later in topup revamp private fun handledTopUpRedirection(screenName: String): Boolean { - var screenUrl = when (screenName) { - GetLoanV2ViewHelper.BANK_DETAILS_V2, - GetLoanV2ViewHelper.BANK_DETAILS_AUTO_DEBIT_V2, - GetLoanV2ViewHelper.KYC_V2, GetLoanV2ViewHelper.LOAN_AGREEMENT_V2, - GetLoanV2ViewHelper.SUMMARY_SCREEN_V2 - -> screenName - else -> null - } + var screenUrl = + when (screenName) { + GetLoanV2ViewHelper.BANK_DETAILS_V2, + GetLoanV2ViewHelper.BANK_DETAILS_AUTO_DEBIT_V2, + GetLoanV2ViewHelper.KYC_V2, + GetLoanV2ViewHelper.LOAN_AGREEMENT_V2, + GetLoanV2ViewHelper.SUMMARY_SCREEN_V2 -> screenName + else -> null + } if (screenUrl.isNotNullAndNotEmpty()) { - screenUrl = NaviDeepLinkNavigator.LOAN_APPLICATION_V2.plus(FORWARD_SLASH.toString()) - .plus(screenUrl) + screenUrl = + NaviDeepLinkNavigator.LOAN_APPLICATION_V2.plus(FORWARD_SLASH.toString()) + .plus(screenUrl) val loanApplicationId = - loanDetailsVM.loanDetailsResponse.value?.footer?.nextCta?.parameters?.firstOrNull { item -> - item.key == Constants.PERSONAL_LOAN_APPLICATION_ID - }?.value + loanDetailsVM.loanDetailsResponse.value + ?.footer + ?.nextCta + ?.parameters + ?.firstOrNull { item -> item.key == Constants.PERSONAL_LOAN_APPLICATION_ID } + ?.value NaviDeepLinkNavigator.navigateTo( activity = activity, ctaData = CtaData(url = screenUrl), finish = true, - bundle = Bundle().apply { - putString(Constants.PERSONAL_LOAN_APPLICATION_ID, loanApplicationId) - } + bundle = + Bundle().apply { + putString(Constants.PERSONAL_LOAN_APPLICATION_ID, loanApplicationId) + } ) return true } @@ -547,14 +546,15 @@ class LoanDetailsFragment : BaseFragment(), View.OnClickListener, LoanDetailsLis } private fun displayOfferDialog(generalGreetingResponse: GeneralGreetingResponse) { - val commonDialogBox = com.navi.common.ui.fragment.CommonDialogBox.newInstance( - screenName = NaviAnalytics.CONGRATULATORY_OFFER_DIALOG, - title = generalGreetingResponse.title, - description = generalGreetingResponse.subTitle, - ctaData = generalGreetingResponse.ctaList?.getOrNull(0), - iconCode = generalGreetingResponse.iconCode, - isCancelable = false - ) + val commonDialogBox = + com.navi.common.ui.fragment.CommonDialogBox.newInstance( + screenName = NaviAnalytics.CONGRATULATORY_OFFER_DIALOG, + title = generalGreetingResponse.title, + description = generalGreetingResponse.subTitle, + ctaData = generalGreetingResponse.ctaList?.getOrNull(0), + iconCode = generalGreetingResponse.iconCode, + isCancelable = false + ) safelyShowDialogBox(commonDialogBox, CommonDialogBox.TAG) } @@ -573,9 +573,7 @@ class LoanDetailsFragment : BaseFragment(), View.OnClickListener, LoanDetailsLis binding.bankStatementLay.ctaTitle.text = it binding.bankStatementLay.ctaTitle.underline(it) } - bannerInfo.iconCode?.let { - IconUtils.updateIcon(it, binding.bankStatementLay.icon) - } + bannerInfo.iconCode?.let { IconUtils.updateIcon(it, binding.bankStatementLay.icon) } } private fun updateEpfoDetailsView(bannerInfo: BannerInfo) { @@ -585,9 +583,7 @@ class LoanDetailsFragment : BaseFragment(), View.OnClickListener, LoanDetailsLis binding.epfoDetailsLay.ctaTitle.text = it binding.epfoDetailsLay.ctaTitle.underline(it) } - bannerInfo.iconCode?.let { - IconUtils.updateIcon(it, binding.epfoDetailsLay.icon) - } + bannerInfo.iconCode?.let { IconUtils.updateIcon(it, binding.epfoDetailsLay.icon) } } private fun fetchEmiStartDates() { @@ -604,20 +600,18 @@ class LoanDetailsFragment : BaseFragment(), View.OnClickListener, LoanDetailsLis binding.offerUpgradeLay.subTitleTv.visibility = View.VISIBLE binding.offerUpgradeLay.subTitleTv.text = bannerInfo.subTitle } - bannerInfo.cta?.url?.let { - binding.offerUpgradeLay.iconIv.visibility = View.VISIBLE - } + bannerInfo.cta?.url?.let { binding.offerUpgradeLay.iconIv.visibility = View.VISIBLE } bannerInfo.iconCode?.let { binding.offerUpgradeLay.imageIv.visibility = View.VISIBLE IconUtils.updateIcon(it, binding.offerUpgradeLay.imageIv) - } ?: run { - binding.offerUpgradeLay.imageIv.visibility = View.GONE } + ?: run { binding.offerUpgradeLay.imageIv.visibility = View.GONE } bannerInfo.offerUpgradeBenefits?.forEachIndexed { index, element -> - val benefitView = when (index) { - 0 -> binding.offerUpgradeLay.benefitOneTv - else -> binding.offerUpgradeLay.benefitTwoTv - } + val benefitView = + when (index) { + 0 -> binding.offerUpgradeLay.benefitOneTv + else -> binding.offerUpgradeLay.benefitTwoTv + } element.iconCode?.let { iconCode -> benefitView.setCompoundDrawablesWithIntrinsicBounds( IconUtils.getIconResourceId(iconCode), @@ -649,14 +643,16 @@ class LoanDetailsFragment : BaseFragment(), View.OnClickListener, LoanDetailsLis private fun handleOfferExpiry() = loanDetailsVM.generateOffer() - private val pollingTimeoutClickListener: View.OnClickListener = View.OnClickListener { _ -> - when (errorTag) { - ApiErrorTagType.OFFER_GENERATE_ERROR, ApiErrorTagType.LOAN_APPLY_ERROR -> { - showLoader() - loanDetailsVM.generateOffer() + private val pollingTimeoutClickListener: View.OnClickListener = + View.OnClickListener { _ -> + when (errorTag) { + ApiErrorTagType.OFFER_GENERATE_ERROR, + ApiErrorTagType.LOAN_APPLY_ERROR -> { + showLoader() + loanDetailsVM.generateOffer() + } } } - } private fun handleTimeOutError(errorTag: String) { showTimeoutErrorScreen( @@ -670,30 +666,29 @@ class LoanDetailsFragment : BaseFragment(), View.OnClickListener, LoanDetailsLis } private var errorTag: String? = null - private val onPollingEnd = { - handleTimeOutError(errorTag.orEmpty()) - } + private val onPollingEnd = { handleTimeOutError(errorTag.orEmpty()) } private fun apiPollInit(uploadDataAsyncResponse: UploadDataWithCtaAsyncResponse, type: String) { - errorTag = when (type) { - OFFER_GENERATE -> ApiErrorTagType.OFFER_GENERATE_ERROR - LOAN_APPLY -> ApiErrorTagType.LOAN_APPLY_ERROR - else -> null - } - apiPollScheduler = ApiPollScheduler(doOnTimeout = onPollingEnd) { - loanDetailsVM.checkApiPollStatus(uploadDataAsyncResponse.requestId.orEmpty(), type) - } + errorTag = + when (type) { + OFFER_GENERATE -> ApiErrorTagType.OFFER_GENERATE_ERROR + LOAN_APPLY -> ApiErrorTagType.LOAN_APPLY_ERROR + else -> null + } + apiPollScheduler = + ApiPollScheduler(doOnTimeout = onPollingEnd) { + loanDetailsVM.checkApiPollStatus(uploadDataAsyncResponse.requestId.orEmpty(), type) + } apiPollScheduler?.scheduleApiPoll() } private fun firebaseInit(requestId: String, type: String, notificationPath: String) { - firebaseDataReceiveListener = object : FirebaseDataReceiveListener { - override fun onDataReceive(firebaseResponse: FirebaseResponse?) { - firebaseResponse?.let { - handleFirebaseResult(it, requestId, type) + firebaseDataReceiveListener = + object : FirebaseDataReceiveListener { + override fun onDataReceive(firebaseResponse: FirebaseResponse?) { + firebaseResponse?.let { handleFirebaseResult(it, requestId, type) } } } - } firebaseDataHelper = null firebaseDataHelper = FirebaseDataHelper() firebaseDataHelper?.initFirebaseDataReceiver( @@ -744,18 +739,16 @@ class LoanDetailsFragment : BaseFragment(), View.OnClickListener, LoanDetailsLis statusHandling(status, requestId) if (requestId == null) return when (status) { - SUCCESS, FAILURE -> loanDetailsVM.fetchApplicationId(requestId) + SUCCESS, + FAILURE -> loanDetailsVM.fetchApplicationId(requestId) } } private fun statusHandling(status: String, requestId: String?) { - if (TextUtils.equals(status, SUCCESS) - || TextUtils.equals(status, FAILURE) - ) { + if (TextUtils.equals(status, SUCCESS) || TextUtils.equals(status, FAILURE)) { deInitializeAsyncListeners() apiPollScheduler?.stopApiPoll() - if (TextUtils.equals(status, FAILURE) || requestId == null) - hideLoader() + if (TextUtils.equals(status, FAILURE) || requestId == null) hideLoader() } } @@ -763,16 +756,13 @@ class LoanDetailsFragment : BaseFragment(), View.OnClickListener, LoanDetailsLis if (offer == null) return val offerId = offer.id if (offerId.isNullOrEmpty()) { - PreferenceManager.getStringPreference(OFFER_ID)?.let { - fetchLoanDetails(it) - } + PreferenceManager.getStringPreference(OFFER_ID)?.let { fetchLoanDetails(it) } } else { fetchLoanDetails(offerId) } offer.configureEmiDate?.let { binding.emiDate.visibility = View.VISIBLE - binding.emiDate.setProperties(it, { onEmiCalenderClick() }, - { fetchEmiStartDates() }) + binding.emiDate.setProperties(it, { onEmiCalenderClick() }, { fetchEmiStartDates() }) it.dateSelectedEarlier?.let { loanDetailsAndEmiSharedVM?.selectedStartEmiDate?.value = EmiStartDate(it.key, it.value) @@ -811,9 +801,7 @@ class LoanDetailsFragment : BaseFragment(), View.OnClickListener, LoanDetailsLis if (offer.emiSliderEnable.orTrue().not()) { config.emiAmountSliderView.visibility = View.GONE } - offer.productCode?.let { - PreferenceManager.setStringPreference(PRODUCT_CODE, it) - } + offer.productCode?.let { PreferenceManager.setStringPreference(PRODUCT_CODE, it) } offer.microTicketLoanData?.let { microTicketLoanData -> binding.microTicketLoanCardLay.visibility = View.VISIBLE microTicketLoanData.title?.let { @@ -838,20 +826,23 @@ class LoanDetailsFragment : BaseFragment(), View.OnClickListener, LoanDetailsLis } } if (offer.emiSliderEnable.orFalse()) { - binding.emiLineItem = LineItem( - key = resources.getString(R.string.emi_tenure), - value = offer.tenure?.max?.run { "$value $unit" }) + binding.emiLineItem = + LineItem( + key = resources.getString(R.string.emi_tenure), + value = offer.tenure?.max?.run { "$value $unit" } + ) } updateEmiSlider() - //Consent for Moratorium not being available + // Consent for Moratorium not being available if (!offer.moratoriumConfig?.isEnabled.orFalse()) return - Handler().postDelayed( - { - if (!isAdded || isDead(activity)) return@postDelayed - openMoratoriumScreen(offer) - }, - MORATORIUM_CONSENT_DELAY - ) + Handler() + .postDelayed( + { + if (!isAdded || isDead(activity)) return@postDelayed + openMoratoriumScreen(offer) + }, + MORATORIUM_CONSENT_DELAY + ) } private fun updateEmiPlans(emiPlansCardData: EmiPlansCardData?) { @@ -876,26 +867,23 @@ class LoanDetailsFragment : BaseFragment(), View.OnClickListener, LoanDetailsLis } binding.loanConfigLay.loanAmountSliderView.getValue()?.let { amount -> binding.emiPlansView.recycler_view.visibility = View.VISIBLE - binding.emiPlansView.recycler_view.adapter = EmiPlanItemsAdapter( - emiTenureParams, - actualRateOfInterest, - offer?.loanAmount?.max?.currency, - cardData.tenure, - amount, - lastSelectedPosition, - context?.let { it1 -> - ResourcesCompat.getFont( - it1, - getFontStyle(FontWeightEnum.BOLD.name) - ) - }, - this - ) + binding.emiPlansView.recycler_view.adapter = + EmiPlanItemsAdapter( + emiTenureParams, + actualRateOfInterest, + offer?.loanAmount?.max?.currency, + cardData.tenure, + amount, + lastSelectedPosition, + context?.let { it1 -> + ResourcesCompat.getFont(it1, getFontStyle(FontWeightEnum.BOLD.name)) + }, + this + ) } } - } ?: run { - binding.emiPlansView.visibility = View.GONE } + ?: run { binding.emiPlansView.visibility = View.GONE } } private fun fetchLoanDetails(offerId: String) { @@ -904,8 +892,7 @@ class LoanDetailsFragment : BaseFragment(), View.OnClickListener, LoanDetailsLis private fun openMoratoriumScreen(offer: Offer) { try { - val moratoriumDialog = - MoratoriumConsentFragment.newInstance(offer) + val moratoriumDialog = MoratoriumConsentFragment.newInstance(offer) val ft = this.childFragmentManager.beginTransaction() ft.add(moratoriumDialog, MoratoriumConsentFragment.TAG) ft.commitAllowingStateLoss() @@ -924,69 +911,74 @@ class LoanDetailsFragment : BaseFragment(), View.OnClickListener, LoanDetailsLis ) { view.setProperties(getString(title)) view.initDecorationText(isEditable, prefixText, suffixDrawable) - view.setOnSeekbarChangeListener(object : SeekBar.OnSeekBarChangeListener { - override fun onProgressChanged(seekBar: SeekBar?, progress: Int, fromUser: Boolean) { - view.updateSliderValue(progress) - if (fromUser) view.updateDecorationText() - } + view.setOnSeekbarChangeListener( + object : SeekBar.OnSeekBarChangeListener { + override fun onProgressChanged( + seekBar: SeekBar?, + progress: Int, + fromUser: Boolean + ) { + view.updateSliderValue(progress) + if (fromUser) view.updateDecorationText() + } - override fun onStartTrackingTouch(seekBar: SeekBar?) { - when (tag) { - LOAN_AMOUNT_SLIDER -> { - loanDetailsVM.setLoanAmountSliderValue( - binding.loanConfigLay.loanAmountSliderView.getValue()?.toString(), - null - ) - } - EMI_SLIDER -> { - loanDetailsVM.setEmiSliderValue( - binding.loanConfigLay.emiAmountSliderView.getValue()?.toString(), - null - ) + override fun onStartTrackingTouch(seekBar: SeekBar?) { + when (tag) { + LOAN_AMOUNT_SLIDER -> { + loanDetailsVM.setLoanAmountSliderValue( + binding.loanConfigLay.loanAmountSliderView.getValue()?.toString(), + null + ) + } + EMI_SLIDER -> { + loanDetailsVM.setEmiSliderValue( + binding.loanConfigLay.emiAmountSliderView.getValue()?.toString(), + null + ) + } } } - } - override fun onStopTrackingTouch(seekBar: SeekBar?) { - when (tag) { - LOAN_AMOUNT_SLIDER -> { - loanDetailsVM.setLoanAmountSliderValue( - null, - binding.loanConfigLay.loanAmountSliderView.getValue()?.toString() - ) - naviAnalyticsEventTracker.onLoanSliderChanged( - loanDetailsVM.getLoanAmountSliderValue().startValue, - loanDetailsVM.getLoanAmountSliderValue().stopValue, - ) - naviAnalyticsEventTracker.onLoanAmountSlider( - binding.loanConfigLay.loanAmountSliderView.getValue()?.toString() - ) - } - EMI_SLIDER -> { - loanDetailsVM.setEmiSliderValue( - null, - binding.loanConfigLay.emiAmountSliderView.getValue()?.toString() - ) - naviAnalyticsEventTracker.onEmiSliderChanged( - loanDetailsVM.getEmiSliderValue().startValue, - loanDetailsVM.getEmiSliderValue().stopValue, - ) - naviAnalyticsEventTracker.onEmiAmountSlider( - binding.loanConfigLay.emiAmountSliderView.getValue()?.toString() + override fun onStopTrackingTouch(seekBar: SeekBar?) { + when (tag) { + LOAN_AMOUNT_SLIDER -> { + loanDetailsVM.setLoanAmountSliderValue( + null, + binding.loanConfigLay.loanAmountSliderView.getValue()?.toString() + ) + naviAnalyticsEventTracker.onLoanSliderChanged( + loanDetailsVM.getLoanAmountSliderValue().startValue, + loanDetailsVM.getLoanAmountSliderValue().stopValue, + ) + naviAnalyticsEventTracker.onLoanAmountSlider( + binding.loanConfigLay.loanAmountSliderView.getValue()?.toString() + ) + } + EMI_SLIDER -> { + loanDetailsVM.setEmiSliderValue( + null, + binding.loanConfigLay.emiAmountSliderView.getValue()?.toString() + ) + naviAnalyticsEventTracker.onEmiSliderChanged( + loanDetailsVM.getEmiSliderValue().startValue, + loanDetailsVM.getEmiSliderValue().stopValue, + ) + naviAnalyticsEventTracker.onEmiAmountSlider( + binding.loanConfigLay.emiAmountSliderView.getValue()?.toString() + ) + } + } + loanDetailsVM.feeDetails.value?.loanFeeDetails?.emiPlansCardData?.let { + fetchFeeDetails( + loanDetailsAndEmiSharedVM?.couponInfo?.value + ?: CouponInfo(promoOfferAction = PromoOfferAction.NONE) ) } + ?: run { updateEmiSlider(isEditable) } + setMaxProgressToLoanDetails() } - loanDetailsVM.feeDetails.value?.loanFeeDetails?.emiPlansCardData?.let { - fetchFeeDetails( - loanDetailsAndEmiSharedVM?.couponInfo?.value - ?: CouponInfo(promoOfferAction = PromoOfferAction.NONE) - ) - } ?: run { - updateEmiSlider(isEditable) - } - setMaxProgressToLoanDetails() } - }) + ) } private fun setMaxProgressToLoanDetails() { @@ -995,23 +987,23 @@ class LoanDetailsFragment : BaseFragment(), View.OnClickListener, LoanDetailsLis isProgressSetToLoanDetails = true } - private fun fetchFeeDetails( - couponInfo: CouponInfo - ) { + private fun fetchFeeDetails(couponInfo: CouponInfo) { PreferenceManager.getStringPreference(PRODUCT_CODE)?.let { productCode -> binding.loanConfigLay.loanAmountSliderView.getValue()?.let { loanAmount -> - val request = LoanFeeDetailsRequest( - productCode, - money(loanAmount), - initialRateOfInterest, - getTenure().value, - couponOfferId = couponInfo.coupon, - promoOfferAction = couponInfo.promoOfferAction.name, - minTenureInMonths = getMinTenure()?.value, - maxTenureInMonths = getMaxTenure()?.value, - minEmiAmount = getMinEmiAmount(), - firstEmiDueDate = loanDetailsAndEmiSharedVM?.selectedStartEmiDate?.value?.key - ) + val request = + LoanFeeDetailsRequest( + productCode, + money(loanAmount), + initialRateOfInterest, + getTenure().value, + couponOfferId = couponInfo.coupon, + promoOfferAction = couponInfo.promoOfferAction.name, + minTenureInMonths = getMinTenure()?.value, + maxTenureInMonths = getMaxTenure()?.value, + minEmiAmount = getMinEmiAmount(), + firstEmiDueDate = + loanDetailsAndEmiSharedVM?.selectedStartEmiDate?.value?.key + ) showLoader() if (isFirstLoadScreen) { perfUtils.startNewRelicInteraction(PL_LOAN_OFFER_REFRESH_LOAD) @@ -1025,19 +1017,19 @@ class LoanDetailsFragment : BaseFragment(), View.OnClickListener, LoanDetailsLis when (view?.id) { R.id.emi_edit -> onEmiCalenderClick() R.id.next_button -> { - getLoanApplicationId()?.let { - naviAnalyticsEventTracker.onContinueClick(it) - } + getLoanApplicationId()?.let { naviAnalyticsEventTracker.onContinueClick(it) } NaviTrackEvent.setStartTs(screenName) - loanDetailsVM.loanDetailsResponse.value?.loanDetailsContent?.nextDialog?.let { nextDialogResponse -> + loanDetailsVM.loanDetailsResponse.value?.loanDetailsContent?.nextDialog?.let { + nextDialogResponse -> openBottomSheet( nextDialogResponse, "PL_LoanDetails_VerifyBankStatementBottomsheet_Clicked", "PL_LoanDetails_SkipBankStatementBottomsheet_Clicked" ) - } ?: run { applyLoan() } + } + ?: run { applyLoan() } } - //R.id.transfer_amount_view -> showTransferAmountDetails() + // R.id.transfer_amount_view -> showTransferAmountDetails() } } @@ -1046,21 +1038,18 @@ class LoanDetailsFragment : BaseFragment(), View.OnClickListener, LoanDetailsLis primaryButtonEventMessage: String? = null, secondaryButtonEventMessage: String? = null ) { - val commonBottomSheet = CommonBottomSheet.newInstance( - screenName = NaviAnalytics.VERIFY_BANK_STATEMENT_BOTTOM_SHEET, - title = dialogData.title, - description = dialogData.subTitle, - ctaData = dialogData.ctaList?.getOrNull( - 0 - ), - ctaDataOptional = dialogData.ctaList?.getOrNull( - 1 - ), - iconCode = dialogData.iconCode, - primaryButtonMessage = primaryButtonEventMessage, - secondaryButtonMessage = secondaryButtonEventMessage, - isComingFromReviewPage = true - ) + val commonBottomSheet = + CommonBottomSheet.newInstance( + screenName = NaviAnalytics.VERIFY_BANK_STATEMENT_BOTTOM_SHEET, + title = dialogData.title, + description = dialogData.subTitle, + ctaData = dialogData.ctaList?.getOrNull(0), + ctaDataOptional = dialogData.ctaList?.getOrNull(1), + iconCode = dialogData.iconCode, + primaryButtonMessage = primaryButtonEventMessage, + secondaryButtonMessage = secondaryButtonEventMessage, + isComingFromReviewPage = true + ) commonBottomSheet.setListener(this) safelyShowBottomSheet(commonBottomSheet, CommonBottomSheet.TAG) } @@ -1111,10 +1100,7 @@ class LoanDetailsFragment : BaseFragment(), View.OnClickListener, LoanDetailsLis private fun launchEmiSelector(loanAmount: Double) { val bundle = Bundle() bundle.putParcelable(EmiSelectorFragment.LOAN_AMOUNT, money(loanAmount)) - bundle.putDouble( - EmiSelectorFragment.RATE_OF_INTEREST, - actualRateOfInterest.orZero() - ) + bundle.putDouble(EmiSelectorFragment.RATE_OF_INTEREST, actualRateOfInterest.orZero()) bundle.putInt(EmiSelectorFragment.TENURE, getTenure().value.orZero()) if (!loanDetailsAndEmiSharedVM?.selectedEmiDateInYYYYMMDD?.value.isNull()) { @@ -1123,10 +1109,7 @@ class LoanDetailsFragment : BaseFragment(), View.OnClickListener, LoanDetailsLis loanDetailsAndEmiSharedVM?.selectedEmiDateInYYYYMMDD?.value ) } else { - bundle.putString( - SELECTED_EMI_DATE, - findFirstEmiDate() - ) + bundle.putString(SELECTED_EMI_DATE, findFirstEmiDate()) } NaviDeepLinkNavigator.navigateTo( @@ -1134,12 +1117,14 @@ class LoanDetailsFragment : BaseFragment(), View.OnClickListener, LoanDetailsLis bundle = bundle, needsResult = true, requestCode = FETCH_FIRST_SELECTED_EMI_DATE_CODE, - ctaData = CtaData( - url = NaviDeepLinkNavigator.INTERMEDIATE.appendStrings( - FORWARD_SLASH.toString(), - SubPageStatusType.EMI_SELECTOR - ) - ), + ctaData = + CtaData( + url = + NaviDeepLinkNavigator.INTERMEDIATE.appendStrings( + FORWARD_SLASH.toString(), + SubPageStatusType.EMI_SELECTOR + ) + ), finish = false ) } @@ -1149,29 +1134,30 @@ class LoanDetailsFragment : BaseFragment(), View.OnClickListener, LoanDetailsLis } private fun launchEmiCalendar(emiDetail: EmiDetail, loanAmount: Double) { - val loanFeeDetailsRequest = LoanFeeDetailsRequest( - amount = money(loanAmount), - firstEmiDueDate = emiDetail.emiStartDates?.getOrNull(0)?.key, - rateOfInterest = actualRateOfInterest, - tenureInMonths = getTenure().value, - productCode = PreferenceManager.getStringPreference(PRODUCT_CODE), - ) - - val bundle = Bundle().apply { - putParcelable( - EmiSelectorFragment.LOAN_FEE_DETAILS_REQUEST, - loanFeeDetailsRequest + val loanFeeDetailsRequest = + LoanFeeDetailsRequest( + amount = money(loanAmount), + firstEmiDueDate = emiDetail.emiStartDates?.getOrNull(0)?.key, + rateOfInterest = actualRateOfInterest, + tenureInMonths = getTenure().value, + productCode = PreferenceManager.getStringPreference(PRODUCT_CODE), ) - } + + val bundle = + Bundle().apply { + putParcelable(EmiSelectorFragment.LOAN_FEE_DETAILS_REQUEST, loanFeeDetailsRequest) + } NaviDeepLinkNavigator.navigateTo( activity = activity, - ctaData = CtaData( - url = NaviDeepLinkNavigator.INTERMEDIATE.appendStrings( - FORWARD_SLASH.toString(), - SubPageStatusType.UPCOMING_EMI_DETAILS - ) - ), + ctaData = + CtaData( + url = + NaviDeepLinkNavigator.INTERMEDIATE.appendStrings( + FORWARD_SLASH.toString(), + SubPageStatusType.UPCOMING_EMI_DETAILS + ) + ), bundle = bundle, finish = false ) @@ -1179,13 +1165,14 @@ class LoanDetailsFragment : BaseFragment(), View.OnClickListener, LoanDetailsLis private fun onEmiCalendarWithoutEmiDetail() { binding.loanConfigLay.loanAmountSliderView.getValue()?.let { loanAmount -> - val emiCalendarFragment = EmiCalendarFragment.newInstance( - null, - money(loanAmount), - actualRateOfInterest, - getTenure().value, - loanDetailsVM.feeDetails.value?.loanFeeDetails?.emiEditable - ) + val emiCalendarFragment = + EmiCalendarFragment.newInstance( + null, + money(loanAmount), + actualRateOfInterest, + getTenure().value, + loanDetailsVM.feeDetails.value?.loanFeeDetails?.emiEditable + ) safelyShowBottomSheet(emiCalendarFragment, EmiCalendarFragment.TAG) } } @@ -1196,35 +1183,42 @@ class LoanDetailsFragment : BaseFragment(), View.OnClickListener, LoanDetailsLis loanAmountSV.getValue()?.let { loanAmount -> binding.loanConfigLay.emiAmountSliderView.getValue()?.let { emiAmount -> (loanDetailsVM.offerIdResponse.value?.details?.offerId - ?: PreferenceManager.getStringPreference(OFFER_ID))?.let { offerId -> - naviAnalyticsEventTracker.onLoanDetailsNextButtonTap( - loanAmount.toString(), - emiAmount.toString(), - getTenure().value?.toString(), - actualRateOfInterest?.toString() - ) - loanDetailsAndEmiSharedVM?.selectedStartEmiDate?.value?.key?.let { emiStartDate -> - perfUtils.startNewRelicInteraction(PL_APPLY_LOAN_SUBMIT) - showLoader() - NaviTrackEvent.setStartTs(screenName) - loanDetailsVM.applyLoan( - offerId, - money(loanAmount), - money(emiAmount), - getTenure(), - emiStartDate, - loanDetailsVM.feeDetails.value?.loanFeeDetails?.couponOffer?.promotionOfferId + ?: PreferenceManager.getStringPreference(OFFER_ID)) + ?.let { offerId -> + naviAnalyticsEventTracker.onLoanDetailsNextButtonTap( + loanAmount.toString(), + emiAmount.toString(), + getTenure().value?.toString(), + actualRateOfInterest?.toString() ) - } ?: run { - if (binding.emiDate.isVisible) { - binding.emiDate.setError() - binding.nestedScrollView.smoothScrollTo( - 0, - ((binding.emiDate.parent.parent) as View).top + (binding.emiDate as View).top + loanDetailsAndEmiSharedVM?.selectedStartEmiDate?.value?.key?.let { + emiStartDate -> + perfUtils.startNewRelicInteraction(PL_APPLY_LOAN_SUBMIT) + showLoader() + NaviTrackEvent.setStartTs(screenName) + loanDetailsVM.applyLoan( + offerId, + money(loanAmount), + money(emiAmount), + getTenure(), + emiStartDate, + loanDetailsVM.feeDetails.value + ?.loanFeeDetails + ?.couponOffer + ?.promotionOfferId ) } + ?: run { + if (binding.emiDate.isVisible) { + binding.emiDate.setError() + binding.nestedScrollView.smoothScrollTo( + 0, + ((binding.emiDate.parent.parent) as View).top + + (binding.emiDate as View).top + ) + } + } } - } } } } @@ -1264,10 +1258,11 @@ class LoanDetailsFragment : BaseFragment(), View.OnClickListener, LoanDetailsLis } override fun updateEmiTenure(tenureInMonths: Int) { - val emiTenure = LineItem( - key = resources.getString(R.string.emi_tenure), - value = resources.getString(R.string.tenure_with_month, tenureInMonths) - ) + val emiTenure = + LineItem( + key = resources.getString(R.string.emi_tenure), + value = resources.getString(R.string.tenure_with_month, tenureInMonths) + ) if (loanDetailsVM.getOldTenureValue()?.equals(tenureInMonths)?.not() == true) { naviAnalyticsEventTracker.onTenureSliderChanged( loanDetailsVM.getOldTenureValue()?.toString(), @@ -1315,17 +1310,28 @@ class LoanDetailsFragment : BaseFragment(), View.OnClickListener, LoanDetailsLis val maxEmi = offer?.emiAmount?.max?.amount val minEmi = offer?.emiAmount?.min?.amount - if (maxTenure == null || minTenure == null || amount == null || maxEmi == null || minEmi == null) return emis - + if ( + maxTenure == null || + minTenure == null || + amount == null || + maxEmi == null || + minEmi == null + ) + return emis for (tenure in maxTenure downTo minTenure) { - val emi = EmiCalculator( - BigMoney.of(CurrencyUnit.of(offer?.loanAmount?.max?.currency), amount), - actualRateOfInterest?.let { BigDecimal.valueOf(it) }, - tenure - ).calculate() - val roundedOffEmi = emi.amount - .divide(BigDecimal.ONE).setScale(0, RoundingMode.HALF_UP).multiply(BigDecimal.ONE) + val emi = + EmiCalculator( + BigMoney.of(CurrencyUnit.of(offer?.loanAmount?.max?.currency), amount), + actualRateOfInterest?.let { BigDecimal.valueOf(it) }, + tenure + ) + .calculate() + val roundedOffEmi = + emi.amount + .divide(BigDecimal.ONE) + .setScale(0, RoundingMode.HALF_UP) + .multiply(BigDecimal.ONE) if (roundedOffEmi.toDouble() in minEmi..maxEmi) emis.add(Pair(tenure, roundedOffEmi)) } @@ -1351,17 +1357,17 @@ class LoanDetailsFragment : BaseFragment(), View.OnClickListener, LoanDetailsLis fun changeHeaderBackGround(blackOut: Boolean) } - override fun primaryButtonClick() { - - } + override fun primaryButtonClick() {} override fun secondaryButtonClick() { applyLoan() } - // BackDialog -> Enabled, FeedbackSheet -> Enabled => open BackDialog, next feedback fragment and then backCta + // BackDialog -> Enabled, FeedbackSheet -> Enabled => open BackDialog, next feedback fragment + // and then backCta override fun onBackPressed() { - loanDetailsVM.loanDetailsResponse.value?.loanDetailsContent?.backDialog?.let { backDialogData -> + loanDetailsVM.loanDetailsResponse.value?.loanDetailsContent?.backDialog?.let { + backDialogData -> if (commonBottomSheetShown.not()) { openBottomSheet( backDialogData, @@ -1372,26 +1378,26 @@ class LoanDetailsFragment : BaseFragment(), View.OnClickListener, LoanDetailsLis } else { handleBackCta() } - } ?: run { - handleBackCta() } + ?: run { handleBackCta() } } private fun handleBackCta() { if (openFeedbackFragment().not()) { loanDetailsVM.loanDetailsResponse.value?.footer?.backCta?.url?.let { backCtaUrl -> fragmentInteractionListener?.navigateTo(backCtaUrl, Bundle()) - } ?: run { - if (activity?.isTaskRoot.orTrue()) { - ScreenNavigator.instance.startActivityWithNoActivityStack( - activity, - ScreenNavigator.DASHBOARD_SCREEN, - null - ) - } else { - activity?.finish() - } } + ?: run { + if (activity?.isTaskRoot.orTrue()) { + ScreenNavigator.instance.startActivityWithNoActivityStack( + activity, + ScreenNavigator.DASHBOARD_SCREEN, + null + ) + } else { + activity?.finish() + } + } } } @@ -1420,4 +1426,4 @@ class LoanDetailsFragment : BaseFragment(), View.OnClickListener, LoanDetailsLis interface EmiClickListener { fun onEmiCalenderClick() -} \ No newline at end of file +} diff --git a/gradle.properties b/gradle.properties index 8bb1cec710..047e3173a8 100644 --- a/gradle.properties +++ b/gradle.properties @@ -7,7 +7,7 @@ # Specifies the JVM arguments used for the daemon process. # The setting is particularly useful for tweaking memory settings. org.gradle.jvmargs=-Xmx4096m -kotlin.daemon.jvmargs=-Xmx1g +kotlin.daemon.jvmargs=-Xmx8g # When configured, Gradle will run in incubating parallel mode. # This option should only be used with decoupled projects. More details, visit # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects diff --git a/navi-design/src/main/java/com/navi/design/utils/Constants.kt b/navi-design/src/main/java/com/navi/design/utils/Constants.kt index 691417dc12..0332db8971 100644 --- a/navi-design/src/main/java/com/navi/design/utils/Constants.kt +++ b/navi-design/src/main/java/com/navi/design/utils/Constants.kt @@ -18,4 +18,3 @@ object Constants { const val KEY_REPAYMENT_TYPE = "REPAYMENT_TYPE" const val KEY_SOURCE = "SOURCE" } - diff --git a/navi-insurance/src/main/java/com/navi/insurance/quoteredesign/fragments/QuoteOfferFragment.kt b/navi-insurance/src/main/java/com/navi/insurance/quoteredesign/fragments/QuoteOfferFragment.kt index ccab93d282..0a63ab92c0 100644 --- a/navi-insurance/src/main/java/com/navi/insurance/quoteredesign/fragments/QuoteOfferFragment.kt +++ b/navi-insurance/src/main/java/com/navi/insurance/quoteredesign/fragments/QuoteOfferFragment.kt @@ -1,6 +1,6 @@ /* * - * * Copyright © 2019 by Navi Technologies Private Limited + * * Copyright © 2019-2022 by Navi Technologies Limited * * All rights reserved. Strictly confidential * */ @@ -28,7 +28,6 @@ import com.navi.base.model.CtaData import com.navi.base.model.CtaType import com.navi.base.model.NaviClickAction import com.navi.base.sharedpref.PreferenceManager -import com.navi.base.sharedpref.PreferenceManager.saveStringSecurely import com.navi.base.utils.isNotNull import com.navi.base.utils.isNull import com.navi.common.video.YoutubeVideoPlayer @@ -88,22 +87,22 @@ import com.navi.naviwidgets.widgets.hospitalcard.HospitalCardWidgetV2Layout.Comp import com.navi.naviwidgets.widgets.hospitalcard.HospitalCardWidgetV2Layout.Companion.HOSPITAL_DATA_V2 import com.navi.naviwidgets.widgets.hospitalcard.HospitalCardWidgetV2Layout.Companion.NEARBY_HOSPITAL_INTENT_ACTION_V2 import dagger.hilt.android.AndroidEntryPoint +import java.lang.ref.WeakReference +import javax.inject.Inject import kotlinx.android.synthetic.main.expanded_quote_header_view.view.* import kotlinx.android.synthetic.main.quote_footer_view.view.* import kotlinx.android.synthetic.main.quote_header_view.view.* import kotlinx.coroutines.launch -import java.lang.ref.WeakReference -import javax.inject.Inject @AndroidEntryPoint class QuoteOfferFragment : BaseFragment(), WidgetCallback, View.OnClickListener { - private val quoteViewModel by lazy { ViewModelProvider(requireActivity()).get(QuoteVM::class.java) } + private val quoteViewModel by lazy { + ViewModelProvider(requireActivity()).get(QuoteVM::class.java) + } private val chatBackUpVM by lazy { ViewModelProvider(this).get(ChatBackUpVM::class.java) } private val policyVM by lazy { ViewModelProvider(this).get(PolicyVM::class.java) } private val requestCallbackVM by lazy { - ViewModelProvider(requireActivity()).get( - RequestCallbackVM::class.java - ) + ViewModelProvider(requireActivity()).get(RequestCallbackVM::class.java) } private lateinit var binding: QuoteRedesignFragmentBinding private var listener: FragmentCallbackListener? = null @@ -118,23 +117,17 @@ class QuoteOfferFragment : BaseFragment(), WidgetCallback, View.OnClickListener private var quoteFooterInfoData: QuoteFooterInfoData? = null private var naviPolicyDocumentDownloadManager: NaviPolicyDocumentDownloadManager? = null - @Inject - lateinit var videoPlayer: YoutubeVideoPlayer + @Inject lateinit var videoPlayer: YoutubeVideoPlayer - @Inject - lateinit var insuranceAnalyticsHandler: InsuranceAnalyticsHandler + @Inject lateinit var insuranceAnalyticsHandler: InsuranceAnalyticsHandler override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle? ): View { - binding = DataBindingUtil.inflate( - inflater, - R.layout.quote_redesign_fragment, - container, - false - ) + binding = + DataBindingUtil.inflate(inflater, R.layout.quote_redesign_fragment, container, false) initListeners() initObservers() @@ -159,11 +152,15 @@ class QuoteOfferFragment : BaseFragment(), WidgetCallback, View.OnClickListener apiErrorHandler = context as? ApiErrorHandler listener = context as? FragmentCallbackListener locationManager = NaviLocationManager(requireContext()) - val savedPincodeBasedLocation = NaviPreferenceManager.getObjectPreference( - Constants.USER_LOCATION_DATA_WITH_PINCODE, - UserLocation::class.java - ) - if (savedPincodeBasedLocation?.latitude != null && savedPincodeBasedLocation.longitude != null) { + val savedPincodeBasedLocation = + NaviPreferenceManager.getObjectPreference( + Constants.USER_LOCATION_DATA_WITH_PINCODE, + UserLocation::class.java + ) + if ( + savedPincodeBasedLocation?.latitude != null && + savedPincodeBasedLocation.longitude != null + ) { setLocation(savedPincodeBasedLocation) } else { locationManager?.getLastLocation(::setLocation) @@ -186,12 +183,9 @@ class QuoteOfferFragment : BaseFragment(), WidgetCallback, View.OnClickListener private fun fetchCards() { val quoteID = activity?.intent?.getStringExtra(QUOTE_ID_EXTRA) ?: quoteViewModel.quoteId.value - val preQuoteId = - activity?.intent?.getStringExtra(PRE_QUOTE_ID_EXTRA) - val policyToBeCopied = - activity?.intent?.getStringExtra(POLICY_TO_BE_COPIED) - val applicationType = - activity?.intent?.getStringExtra(APPLICATION_TYPE_EXTRA) + val preQuoteId = activity?.intent?.getStringExtra(PRE_QUOTE_ID_EXTRA) + val policyToBeCopied = activity?.intent?.getStringExtra(POLICY_TO_BE_COPIED) + val applicationType = activity?.intent?.getStringExtra(APPLICATION_TYPE_EXTRA) var offerRequest = activity?.intent?.getParcelableExtra(Constants.OFFER_REQUEST_EXTRA) as? OfferRequest sendQuoteAnalyticEvents(offerRequest) @@ -207,17 +201,16 @@ class QuoteOfferFragment : BaseFragment(), WidgetCallback, View.OnClickListener } private fun sendQuoteAnalyticEvents(offerParams: OfferRequest?) { - offerParams?.let { - NaviInsuranceAnalytics.instance.QuoteV2().sendQuoteOfferData(it) - } + offerParams?.let { NaviInsuranceAnalytics.instance.QuoteV2().sendQuoteOfferData(it) } } private fun initObservers() { quoteViewModel.quoteResponse.observe(viewLifecycleOwner) { widgetGenericResponse -> widgetGenericResponse?.let { - // The below prefs value is being read in chat screen for displaying form complete footer - if (NaviPreferenceManager.getBooleanPreference(ILLNESS_QUESTION_SHOWN, false) - .not() + // The below prefs value is being read in chat screen for displaying form complete + // footer + if ( + NaviPreferenceManager.getBooleanPreference(ILLNESS_QUESTION_SHOWN, false).not() ) { NaviPreferenceManager.setBooleanPreference( QUOTE_GENERATED_FOR_CURRENT_CHAT, @@ -240,17 +233,12 @@ class QuoteOfferFragment : BaseFragment(), WidgetCallback, View.OnClickListener ) } else { @Suppress("UNCHECKED_CAST") - (binding.quoteRv.adapter as QuoteOfferAdapter).setData( - widgetConfigList - ) + (binding.quoteRv.adapter as QuoteOfferAdapter) + .setData(widgetConfigList) } - } - insuranceAnalyticsHandler.sendEvent( - it.metaData?.analyticsEvent, - screenName - ) + insuranceAnalyticsHandler.sendEvent(it.metaData?.analyticsEvent, screenName) it.headerWidget?.let { widgetConfigList -> if (widgetConfigList.isNotEmpty()) { @@ -268,7 +256,12 @@ class QuoteOfferFragment : BaseFragment(), WidgetCallback, View.OnClickListener } quoteViewModel.setSumInsured(headerData.coverageDetails?.sumInsured) widgetConfigList.getOrNull(0)?.leftIconData?.iconCode?.let { iconCode -> - binding.quoteHeaderView.backBtn.setImageResource(IconUtil.getIconDrawableResource(iconCode, R.drawable.ic_back_arrow_with_tail)) + binding.quoteHeaderView.backBtn.setImageResource( + IconUtil.getIconDrawableResource( + iconCode, + R.drawable.ic_back_arrow_with_tail + ) + ) } binding.quoteHeaderView.visibility = View.VISIBLE } @@ -284,7 +277,9 @@ class QuoteOfferFragment : BaseFragment(), WidgetCallback, View.OnClickListener } it.pageLayoutParams?.let { pageLayoutParams -> if (isValidHexColor(pageLayoutParams.pageBackgroundColor)) { - binding.quotePageLayout.setBackgroundColor(Color.parseColor(pageLayoutParams.pageBackgroundColor)) + binding.quotePageLayout.setBackgroundColor( + Color.parseColor(pageLayoutParams.pageBackgroundColor) + ) } } it.metaData?.let { metaDataInfo -> @@ -317,16 +312,19 @@ class QuoteOfferFragment : BaseFragment(), WidgetCallback, View.OnClickListener quoteViewModel.launchBottomSheet.observe(viewLifecycleOwner) { val highlightWidgetName = quoteViewModel.quoteResponse.value?.metaData?.pageHighlightInfo?.widgetName - if (!quoteViewModel.quoteResponse.value?.contentWidget?.find { widgetName -> widgetName.widgetNameForBaseAdapter == highlightWidgetName } - .isNull()) { + if ( + !quoteViewModel.quoteResponse.value + ?.contentWidget + ?.find { widgetName -> + widgetName.widgetNameForBaseAdapter == highlightWidgetName + } + .isNull() + ) { if (quoteViewModel.launchBottomSheet.value?.get(QUOTE_HIGHLIGHT) == true) { quoteViewModel.turnOffLaunchFlag(QUOTE_HIGHLIGHT) val bottomSheet = QuoteHighlightFragment() bottomSheet.isCancelable = false - safelyShowBottomSheet( - bottomSheet, - QuoteHighlightFragment.TAG - ) + safelyShowBottomSheet(bottomSheet, QuoteHighlightFragment.TAG) } } } @@ -349,9 +347,7 @@ class QuoteOfferFragment : BaseFragment(), WidgetCallback, View.OnClickListener ) val intent = Intent(NEARBY_HOSPITAL_INTENT_ACTION_V2) intent.putExtra(HOSPITAL_DATA_V2, nearByHospitalDataV2) - context?.let { - LocalBroadcastManager.getInstance(it).sendBroadcast(intent) - } + context?.let { LocalBroadcastManager.getInstance(it).sendBroadcast(intent) } } } @@ -361,15 +357,11 @@ class QuoteOfferFragment : BaseFragment(), WidgetCallback, View.OnClickListener } } - requestCallbackVM.userCallback.observeNonNull(this) { - it.getContentIfNotHandled() - ?.let { // Only proceed if the event has never been handled - RequestCallbackSuccessBottomSheet.newInstance().show( - parentFragmentManager, - RequestCallbackSuccessBottomSheet.TAG - ) - } + it.getContentIfNotHandled()?.let { // Only proceed if the event has never been handled + RequestCallbackSuccessBottomSheet.newInstance() + .show(parentFragmentManager, RequestCallbackSuccessBottomSheet.TAG) + } } quoteViewModel.v1QuoteOfferDetail.observeNonNull(viewLifecycleOwner) { offerDetail -> @@ -398,7 +390,8 @@ class QuoteOfferFragment : BaseFragment(), WidgetCallback, View.OnClickListener } private fun handleCallbackResponseError() { - requestCallbackVM.errorResponse.observeNonNull(this) { err: SingleEvent> -> + requestCallbackVM.errorResponse.observeNonNull(this) { + err: SingleEvent> -> err.getContentIfNotHandled()?.first?.message?.let { Toast.makeText(context, it, Toast.LENGTH_LONG).show() } @@ -434,18 +427,19 @@ class QuoteOfferFragment : BaseFragment(), WidgetCallback, View.OnClickListener private fun showExpandedHeader() { binding.frameLayoutContainer.visibility = View.VISIBLE - quoteViewModel.quoteResponse.value?.headerWidget?.getOrNull(FIRST_ITEM) - ?.let { quoteHeaderInfoData -> - binding.expandedQuoteHeaderView.setProperties(quoteHeaderInfoData, clickCallback) - } + quoteViewModel.quoteResponse.value?.headerWidget?.getOrNull(FIRST_ITEM)?.let { + quoteHeaderInfoData -> + binding.expandedQuoteHeaderView.setProperties(quoteHeaderInfoData, clickCallback) + } } private fun showSumInsuredBottomSheet(bundle: Bundle? = null) { quoteViewModel.quoteResponse.value?.headerWidget?.let { - val bottomSheet = QuoteSumInsuredBottomSheet.getInstance( - it[FIRST_ITEM], - bundle?.getParcelable(PARAMS_EXTRA) as? CtaData - ) + val bottomSheet = + QuoteSumInsuredBottomSheet.getInstance( + it[FIRST_ITEM], + bundle?.getParcelable(PARAMS_EXTRA) as? CtaData + ) safelyShowBottomSheet(bottomSheet, QuoteSumInsuredBottomSheet.TAG) } } @@ -480,12 +474,9 @@ class QuoteOfferFragment : BaseFragment(), WidgetCallback, View.OnClickListener } private fun showHelpBottomSheet() { - //TODO :: we have to replace screen name from offer_form_v2 to new screen_name + // TODO :: we have to replace screen name from offer_form_v2 to new screen_name context?.let { context -> - launchHelpCenter( - context, - InsuranceAnalyticsConstants.OFFER_FORM_V2 - ) + launchHelpCenter(context, InsuranceAnalyticsConstants.OFFER_FORM_V2) } } @@ -497,9 +488,7 @@ class QuoteOfferFragment : BaseFragment(), WidgetCallback, View.OnClickListener } private fun setLocation(location: UserLocation?) { - location?.let { - this.userLocation = location - } + location?.let { this.userLocation = location } } private fun fetchNearByHospitals() { @@ -523,7 +512,6 @@ class QuoteOfferFragment : BaseFragment(), WidgetCallback, View.OnClickListener } } - override fun onClick(view: View?) { binding.frameLayoutContainer.visibility = View.GONE when (view?.id) { @@ -532,72 +520,92 @@ class QuoteOfferFragment : BaseFragment(), WidgetCallback, View.OnClickListener analyticsEventHandler?.postAnalyticsEvent( AnalyticsEvent( name = InsuranceAnalyticsConstants.HI_btn_click_quote_help, - properties = mutableMapOf( - Pair(NaviInsuranceAnalytics.SCREEN, screenName), - Pair( - NaviInsuranceAnalytics.APPLICATION_TYPE, - quoteViewModel.quoteResponse.value?.metaData?.applicationType.orEmpty() + properties = + mutableMapOf( + Pair(NaviInsuranceAnalytics.SCREEN, screenName), + Pair( + NaviInsuranceAnalytics.APPLICATION_TYPE, + quoteViewModel.quoteResponse.value + ?.metaData + ?.applicationType + .orEmpty() + ) ) - ) ) ) } - R.id.backBtn -> { activity?.onBackPressed() analyticsEventHandler?.postAnalyticsEvent( AnalyticsEvent( name = InsuranceAnalyticsConstants.HI_btn_click_quote_backbutton, - properties = mutableMapOf( - Pair(NaviInsuranceAnalytics.SCREEN, screenName), - Pair( - NaviInsuranceAnalytics.APPLICATION_TYPE, - quoteViewModel.quoteResponse.value?.metaData?.applicationType.orEmpty() - ), - Pair( - NaviInsuranceAnalytics.QUOTE_ID, - quoteViewModel.quoteId.value ?: "" + properties = + mutableMapOf( + Pair(NaviInsuranceAnalytics.SCREEN, screenName), + Pair( + NaviInsuranceAnalytics.APPLICATION_TYPE, + quoteViewModel.quoteResponse.value + ?.metaData + ?.applicationType + .orEmpty() + ), + Pair( + NaviInsuranceAnalytics.QUOTE_ID, + quoteViewModel.quoteId.value ?: "" + ) ) - ) ) ) } - R.id.closeBtn -> { binding.frameLayoutContainer.visibility = View.GONE } - R.id.sumInsuredChange -> { showSumInsuredBottomSheet() analyticsEventHandler?.postAnalyticsEvent( AnalyticsEvent( name = InsuranceAnalyticsConstants.HI_btn_click_change_sum_insured, - properties = mutableMapOf( - Pair(NaviInsuranceAnalytics.SCREEN, screenName), - Pair( - NaviInsuranceAnalytics.APPLICATION_TYPE, - quoteViewModel.quoteResponse.value?.metaData?.applicationType.orEmpty() - ), - Pair( - NaviInsuranceAnalytics.QUOTE_SUM_INSURED, - quoteViewModel.quoteResponse.value?.headerWidget?.get(0)?.coverageDetails?.sumInsured - ?: EMPTY - ), - Pair( - NaviInsuranceAnalytics.QUOTE_PREMIUM_AMOUNT, - quoteViewModel.quoteResponse.value?.footerWidget?.get(0)?.ctaTitle - ?: EMPTY + properties = + mutableMapOf( + Pair(NaviInsuranceAnalytics.SCREEN, screenName), + Pair( + NaviInsuranceAnalytics.APPLICATION_TYPE, + quoteViewModel.quoteResponse.value + ?.metaData + ?.applicationType + .orEmpty() + ), + Pair( + NaviInsuranceAnalytics.QUOTE_SUM_INSURED, + quoteViewModel.quoteResponse.value + ?.headerWidget + ?.get(0) + ?.coverageDetails + ?.sumInsured + ?: EMPTY + ), + Pair( + NaviInsuranceAnalytics.QUOTE_PREMIUM_AMOUNT, + quoteViewModel.quoteResponse.value + ?.footerWidget + ?.get(0) + ?.ctaTitle + ?: EMPTY + ) ) - ) ) ) } - R.id.memberChange -> { - val memberChangeCta = quoteViewModel.quoteResponse.value?.headerWidget?.get( - 0 - )?.memberInfo?.memberChangeCta - if (!quoteViewModel.quoteResponse.value?.metaData?.preQuoteId.isNullOrEmpty() && !memberChangeCta.isNull() + val memberChangeCta = + quoteViewModel.quoteResponse.value + ?.headerWidget + ?.get(0) + ?.memberInfo + ?.memberChangeCta + if ( + !quoteViewModel.quoteResponse.value?.metaData?.preQuoteId.isNullOrEmpty() && + !memberChangeCta.isNull() ) { NaviInsuranceDeeplinkNavigator.navigate( this.activity, @@ -606,7 +614,10 @@ class QuoteOfferFragment : BaseFragment(), WidgetCallback, View.OnClickListener ) } else { // Below chat code will be deprecated in future if we move buy flow to Form - if (NaviPreferenceManager.isChatDataAvailable() || quoteViewModel.quoteResponse.value?.metaData?.chatBackUpExists == true) { + if ( + NaviPreferenceManager.isChatDataAvailable() || + quoteViewModel.quoteResponse.value?.metaData?.chatBackUpExists == true + ) { editMemberListener?.onEditMembers() } else { val resetPopupBottomSheet = @@ -618,7 +629,6 @@ class QuoteOfferFragment : BaseFragment(), WidgetCallback, View.OnClickListener } } } - R.id.continueBtn -> { val btnTag = view.tag if (btnTag is CtaData) { @@ -646,31 +656,41 @@ class QuoteOfferFragment : BaseFragment(), WidgetCallback, View.OnClickListener analyticsEventHandler?.postAnalyticsEvent( AnalyticsEvent( name = InsuranceAnalyticsConstants.HI_btn_click_quote_continue, - properties = mutableMapOf( - Pair(NaviInsuranceAnalytics.SCREEN, screenName), - Pair( - NaviInsuranceAnalytics.APPLICATION_TYPE, - quoteViewModel.quoteResponse.value?.metaData?.applicationType.orEmpty() - ), - Pair( - NaviInsuranceAnalytics.QUOTE_ID, - quoteViewModel.quoteId.value.orEmpty() - ), - Pair( - NaviInsuranceAnalytics.QUOTE_SUM_INSURED, - quoteViewModel.quoteResponse.value?.headerWidget?.get(0)?.coverageDetails?.sumInsured - ?: EMPTY - ), - Pair( - NaviInsuranceAnalytics.QUOTE_PREMIUM_AMOUNT, - quoteViewModel.quoteResponse.value?.footerWidget?.get(0)?.ctaTitle - ?: EMPTY + properties = + mutableMapOf( + Pair(NaviInsuranceAnalytics.SCREEN, screenName), + Pair( + NaviInsuranceAnalytics.APPLICATION_TYPE, + quoteViewModel.quoteResponse.value + ?.metaData + ?.applicationType + .orEmpty() + ), + Pair( + NaviInsuranceAnalytics.QUOTE_ID, + quoteViewModel.quoteId.value.orEmpty() + ), + Pair( + NaviInsuranceAnalytics.QUOTE_SUM_INSURED, + quoteViewModel.quoteResponse.value + ?.headerWidget + ?.get(0) + ?.coverageDetails + ?.sumInsured + ?: EMPTY + ), + Pair( + NaviInsuranceAnalytics.QUOTE_PREMIUM_AMOUNT, + quoteViewModel.quoteResponse.value + ?.footerWidget + ?.get(0) + ?.ctaTitle + ?: EMPTY + ) ) - ) ) ) } - R.id.premium_details_text -> { showPremiumDetailsBottomSheet() } @@ -694,7 +714,9 @@ class QuoteOfferFragment : BaseFragment(), WidgetCallback, View.OnClickListener ) } else { quoteViewModel.setToastError() - NaviTrackEvent.trackEventOnClickStream(InsuranceAnalyticsConstants.GI_GLOBAL_GENERIC_ERRORS) + NaviTrackEvent.trackEventOnClickStream( + InsuranceAnalyticsConstants.GI_GLOBAL_GENERIC_ERRORS + ) } } @@ -712,11 +734,12 @@ class QuoteOfferFragment : BaseFragment(), WidgetCallback, View.OnClickListener quoteViewModel.updateQuoteDetails(quoteId!!, QuoteOfferUpdateRequest(planId = planId)) } else { quoteViewModel.setToastError() - NaviTrackEvent.trackEventOnClickStream(InsuranceAnalyticsConstants.GI_GLOBAL_GENERIC_ERRORS) + NaviTrackEvent.trackEventOnClickStream( + InsuranceAnalyticsConstants.GI_GLOBAL_GENERIC_ERRORS + ) } } - override val screenName: String get() = InsuranceAnalyticsConstants.QUOTE_V2 @@ -758,28 +781,26 @@ class QuoteOfferFragment : BaseFragment(), WidgetCallback, View.OnClickListener insuranceAnalyticsHandler.sendEvent(it, screenName) } when (naviClickAction.type) { - QuoteActivity.USP_BOTTOMSHEET, QuoteActivity.BENEFITS_BOTTOMSHEET -> listener?.navigateToBottomSheet( - naviClickAction.type ?: "", - bundle - ) - NAVIGATE_TO_DEEPLINK, HOSPITALS -> NaviInsuranceDeeplinkNavigator.navigate( - activity, - CtaData(url = naviClickAction.url), - false, - bundle - ) - "DEEP_LINK" -> NaviInsuranceDeeplinkNavigator.navigate( - activity, - naviClickAction, - true, - bundle - ) + QuoteActivity.USP_BOTTOMSHEET, + QuoteActivity.BENEFITS_BOTTOMSHEET -> + listener?.navigateToBottomSheet(naviClickAction.type ?: "", bundle) + NAVIGATE_TO_DEEPLINK, + HOSPITALS -> + NaviInsuranceDeeplinkNavigator.navigate( + activity, + CtaData(url = naviClickAction.url), + false, + bundle + ) + "DEEP_LINK" -> + NaviInsuranceDeeplinkNavigator.navigate(activity, naviClickAction, true, bundle) CtaType.CONTENT_DATA_SCROLL.value -> { when (naviClickAction.parameters?.getOrNull(0)?.value) { - PREFERENCE_WIDGET_SCROLL -> insuranceAnalyticsHandler.sendEvent( - analyticsEvent = AnalyticsEvent(name = gi_quote_si_scroll), - screen = screenName - ) + PREFERENCE_WIDGET_SCROLL -> + insuranceAnalyticsHandler.sendEvent( + analyticsEvent = AnalyticsEvent(name = gi_quote_si_scroll), + screen = screenName + ) } } CtaType.UPDATE_SUM_INSURED.value -> { @@ -787,17 +808,21 @@ class QuoteOfferFragment : BaseFragment(), WidgetCallback, View.OnClickListener analyticsEventHandler?.postAnalyticsEvent( AnalyticsEvent( name = InsuranceAnalyticsConstants.HI_btn_click_change_sum_insured, - properties = mutableMapOf( - Pair(NaviInsuranceAnalytics.SCREEN, screenName), - Pair( - NaviInsuranceAnalytics.APPLICATION_TYPE, - quoteViewModel.quoteResponse.value?.metaData?.applicationType.orEmpty() - ), - Pair( - NaviInsuranceAnalytics.QUOTE_SUM_INSURED, - naviClickAction.parameters?.getOrNull(0)?.value.orEmpty() + properties = + mutableMapOf( + Pair(NaviInsuranceAnalytics.SCREEN, screenName), + Pair( + NaviInsuranceAnalytics.APPLICATION_TYPE, + quoteViewModel.quoteResponse.value + ?.metaData + ?.applicationType + .orEmpty() + ), + Pair( + NaviInsuranceAnalytics.QUOTE_SUM_INSURED, + naviClickAction.parameters?.getOrNull(0)?.value.orEmpty() + ) ) - ) ) ) } @@ -805,13 +830,17 @@ class QuoteOfferFragment : BaseFragment(), WidgetCallback, View.OnClickListener analyticsEventHandler?.postAnalyticsEvent( AnalyticsEvent( name = InsuranceAnalyticsConstants.HI_btn_click_quote_edit_deductible, - properties = mutableMapOf( - Pair(NaviInsuranceAnalytics.SCREEN, screenName), - Pair( - NaviInsuranceAnalytics.APPLICATION_TYPE, - quoteViewModel.quoteResponse.value?.metaData?.applicationType.orEmpty() + properties = + mutableMapOf( + Pair(NaviInsuranceAnalytics.SCREEN, screenName), + Pair( + NaviInsuranceAnalytics.APPLICATION_TYPE, + quoteViewModel.quoteResponse.value + ?.metaData + ?.applicationType + .orEmpty() + ) ) - ) ) ) listener?.navigateTo(naviClickAction.url ?: "", bundle) @@ -834,17 +863,21 @@ class QuoteOfferFragment : BaseFragment(), WidgetCallback, View.OnClickListener analyticsEventHandler?.postAnalyticsEvent( AnalyticsEvent( name = InsuranceAnalyticsConstants.HI_btn_click_quote_edit_members, - properties = mutableMapOf( - Pair(NaviInsuranceAnalytics.SCREEN, screenName), - Pair( - NaviInsuranceAnalytics.APPLICATION_TYPE, - quoteViewModel.quoteResponse.value?.metaData?.applicationType.orEmpty() - ), - Pair( - NaviInsuranceAnalytics.QUOTE_ID, - quoteViewModel.quoteId.value.orEmpty() + properties = + mutableMapOf( + Pair(NaviInsuranceAnalytics.SCREEN, screenName), + Pair( + NaviInsuranceAnalytics.APPLICATION_TYPE, + quoteViewModel.quoteResponse.value + ?.metaData + ?.applicationType + .orEmpty() + ), + Pair( + NaviInsuranceAnalytics.QUOTE_ID, + quoteViewModel.quoteId.value.orEmpty() + ) ) - ) ) ) } @@ -853,23 +886,34 @@ class QuoteOfferFragment : BaseFragment(), WidgetCallback, View.OnClickListener analyticsEventHandler?.postAnalyticsEvent( AnalyticsEvent( name = InsuranceAnalyticsConstants.HI_btn_click_change_sum_insured, - properties = mutableMapOf( - Pair(NaviInsuranceAnalytics.SCREEN, screenName), - Pair( - NaviInsuranceAnalytics.APPLICATION_TYPE, - quoteViewModel.quoteResponse.value?.metaData?.applicationType.orEmpty() - ), - Pair( - NaviInsuranceAnalytics.QUOTE_SUM_INSURED, - quoteViewModel.quoteResponse.value?.headerWidget?.get(0)?.coverageDetails?.sumInsured - ?: EMPTY - ), - Pair( - NaviInsuranceAnalytics.QUOTE_PREMIUM_AMOUNT, - quoteViewModel.quoteResponse.value?.footerWidget?.get(0)?.ctaTitle - ?: EMPTY + properties = + mutableMapOf( + Pair(NaviInsuranceAnalytics.SCREEN, screenName), + Pair( + NaviInsuranceAnalytics.APPLICATION_TYPE, + quoteViewModel.quoteResponse.value + ?.metaData + ?.applicationType + .orEmpty() + ), + Pair( + NaviInsuranceAnalytics.QUOTE_SUM_INSURED, + quoteViewModel.quoteResponse.value + ?.headerWidget + ?.get(0) + ?.coverageDetails + ?.sumInsured + ?: EMPTY + ), + Pair( + NaviInsuranceAnalytics.QUOTE_PREMIUM_AMOUNT, + quoteViewModel.quoteResponse.value + ?.footerWidget + ?.get(0) + ?.ctaTitle + ?: EMPTY + ) ) - ) ) ) } @@ -880,9 +924,11 @@ class QuoteOfferFragment : BaseFragment(), WidgetCallback, View.OnClickListener } } DOWNLOAD -> { - downloadPolicyDocument(naviClickAction.parameters?.firstOrNull { - it.key == KEY_DOCUMENT_URL - }?.value) + downloadPolicyDocument( + naviClickAction.parameters + ?.firstOrNull { it.key == KEY_DOCUMENT_URL } + ?.value + ) } else -> { if (naviClickAction.url == VIEW_VIDEO) { @@ -915,25 +961,29 @@ class QuoteOfferFragment : BaseFragment(), WidgetCallback, View.OnClickListener } private fun downloadPolicyDocument(policyDocumentUrl: String?) { - naviPolicyDocumentDownloadManager = NaviPolicyDocumentDownloadManager( - screenName, - DownloadType.POLICY, - Constants.POLICY_DOCUMENT_NAME, - policyDocumentUrl, - WeakReference(activity) - ) + naviPolicyDocumentDownloadManager = + NaviPolicyDocumentDownloadManager( + screenName, + DownloadType.POLICY, + Constants.POLICY_DOCUMENT_NAME, + policyDocumentUrl, + WeakReference(activity) + ) naviPolicyDocumentDownloadManager?.start() } private fun navigateToPaymentsScreen(checkoutOptionsResponse: CheckoutOptionsResponse) { val offerDetails = quoteViewModel.v1QuoteOfferDetail.value if (offerDetails != null) { - val paymentMethodSelectionFragment = PaymentMethodSelectionFragment.newInstance( - offerDetails, - checkoutOptionsResponse, - quoteViewModel.quoteResponse.value?.metaData?.applicationType - ) - activity?.supportFragmentManager?.beginTransaction() + val paymentMethodSelectionFragment = + PaymentMethodSelectionFragment.newInstance( + offerDetails, + checkoutOptionsResponse, + quoteViewModel.quoteResponse.value?.metaData?.applicationType + ) + activity + ?.supportFragmentManager + ?.beginTransaction() ?.setCustomAnimations( R.anim.slide_in_right, R.anim.slide_out_left, @@ -953,7 +1003,6 @@ class QuoteOfferFragment : BaseFragment(), WidgetCallback, View.OnClickListener } } - private fun clearListeners() { listener = null locationManager = null @@ -976,15 +1025,9 @@ class QuoteOfferFragment : BaseFragment(), WidgetCallback, View.OnClickListener } } - override fun widgetStateChanged(position: Int?, data: Pair?, action: String) { + override fun widgetStateChanged(position: Int?, data: Pair?, action: String) {} - } + override fun widgetError(position: Int, payload: Any?, action: String) {} - override fun widgetError(position: Int, payload: Any?, action: String) { - - } - - override fun widgetScrollTo(position: Int) { - - } + override fun widgetScrollTo(position: Int) {} } diff --git a/navi-widgets/src/main/java/com/navi/naviwidgets/extensions/WidgetExt.kt b/navi-widgets/src/main/java/com/navi/naviwidgets/extensions/WidgetExt.kt index 3cd7ba3712..84297f0008 100644 --- a/navi-widgets/src/main/java/com/navi/naviwidgets/extensions/WidgetExt.kt +++ b/navi-widgets/src/main/java/com/navi/naviwidgets/extensions/WidgetExt.kt @@ -265,7 +265,7 @@ fun TextView.setTextFieldData(textFieldData: TextFieldData?) { data.gradient?.let { gradient -> if ( isValidHexColor(gradient.startGradientColor) && - isValidHexColor(gradient.endGradientColor) + isValidHexColor(gradient.endGradientColor) ) { val shader = LinearGradient( @@ -516,10 +516,10 @@ class CustomTypefaceSpan(family: String?, private val newType: Typeface) : Typef fun isValidIndexRange(textData: String, startEndIndex: Pair): Boolean { return startEndIndex.first >= 0 && - startEndIndex.first < textData.length && - startEndIndex.second >= 0 && - startEndIndex.second <= textData.length && - startEndIndex.first <= startEndIndex.second + startEndIndex.first < textData.length && + startEndIndex.second >= 0 && + startEndIndex.second <= textData.length && + startEndIndex.first <= startEndIndex.second } fun getStartEndIndex( @@ -571,22 +571,22 @@ fun List.validate(info: List): Boolean { val validateLoanAmount = validateRequiredLoanAmount( propertyPurchaseValue = - (info.getWidget(widgetId = multiWidgetConstraint.dependencyWidgetId) - as? LabelWithInputWidget) - ?.inputTextItemData() - ?.savedText, + (info.getWidget(widgetId = multiWidgetConstraint.dependencyWidgetId) + as? LabelWithInputWidget) + ?.inputTextItemData() + ?.savedText, loanAmountRequired = - (info.getWidget(widgetId = multiWidgetConstraint.widgetId) - as? LabelWithInputWidget) - ?.inputTextItemData() - ?.savedText + (info.getWidget(widgetId = multiWidgetConstraint.widgetId) + as? LabelWithInputWidget) + ?.inputTextItemData() + ?.savedText ) valid = validateLoanAmount and (valid) if (validateLoanAmount.not()) { info.forEach { if ( it is LabelWithInputWidget && - it.widgetId == multiWidgetConstraint.widgetId + it.widgetId == multiWidgetConstraint.widgetId ) { it.widgetError( WidgetError( diff --git a/navi-widgets/src/main/java/com/navi/naviwidgets/utils/Constants.kt b/navi-widgets/src/main/java/com/navi/naviwidgets/utils/Constants.kt index ed8cfc85c8..297a2a5cf8 100644 --- a/navi-widgets/src/main/java/com/navi/naviwidgets/utils/Constants.kt +++ b/navi-widgets/src/main/java/com/navi/naviwidgets/utils/Constants.kt @@ -1,6 +1,6 @@ /* * - * * Copyright © 2019 by Navi Technologies Private Limited + * * Copyright © 2019-2022 by Navi Technologies Limited * * All rights reserved. Strictly confidential * */ @@ -66,7 +66,7 @@ const val WIDGET_TIME_ELAPSED = "WIDGET_TIME_ELAPSED" const val WIDGET_ID = "WIDGET_ID" const val WIDGET_VIEWED_TIME = "WIDGET_VIEWED_TIME" const val EMPTY = "" -const val COMMA ="," +const val COMMA = "," const val OVERRIDE_EVENT = "override_event" const val TEXT_TRUE = "true" const val PRE_PAYMENT_TYPE = "PRE_PAYMENT_TYPE" @@ -81,5 +81,4 @@ const val FAILED_STATE = "failed" const val DOWNLOADING_STATE = "downloading" const val UPLOADING_STATE = "loading" const val FAILURE_AND_RETRY_STATE = "failure" -const val ZERO_STRING ="0" - +const val ZERO_STRING = "0" diff --git a/navi-widgets/src/main/java/com/navi/naviwidgets/viewholder/ViewHolderFactoryImpl.kt b/navi-widgets/src/main/java/com/navi/naviwidgets/viewholder/ViewHolderFactoryImpl.kt index 9af01f8901..d19d50b273 100644 --- a/navi-widgets/src/main/java/com/navi/naviwidgets/viewholder/ViewHolderFactoryImpl.kt +++ b/navi-widgets/src/main/java/com/navi/naviwidgets/viewholder/ViewHolderFactoryImpl.kt @@ -251,5 +251,5 @@ class ViewHolderFactoryImpl : ViewHolderTypeFactory PAYMENT_TOOLTIP_WIDGET -> PaymentTooltipWidgetVH(parent) else -> UnknownWidgetVH(parent) } - as BaseViewHolder + as BaseViewHolder }