diff --git a/android/navi-insurance/src/main/java/com/navi/insurance/common/widgets/FooterWithTwoButtonNewWidget.kt b/android/navi-insurance/src/main/java/com/navi/insurance/common/widgets/FooterWithTwoButtonNewWidget.kt index 8c0399aed0..914e3868b3 100644 --- a/android/navi-insurance/src/main/java/com/navi/insurance/common/widgets/FooterWithTwoButtonNewWidget.kt +++ b/android/navi-insurance/src/main/java/com/navi/insurance/common/widgets/FooterWithTwoButtonNewWidget.kt @@ -9,6 +9,7 @@ package com.navi.insurance.common.widgets import android.content.Context import android.util.AttributeSet +import androidx.core.view.isVisible import androidx.databinding.ViewDataBinding import com.navi.base.model.CtaData import com.navi.insurance.common.custom_view.addOnMultipleClicksHandler @@ -16,6 +17,7 @@ import com.navi.insurance.common.models.Action import com.navi.insurance.common.models.FooterWithTwoButtonNewData import com.navi.insurance.common.models.NaviWidgetData import com.navi.insurance.databinding.FooterWithTwoButtonNewWidgetBinding +import com.navi.insurance.util.Constants.BUTTON_LOADER_LOTTIE_URL class FooterWithTwoButtonNewWidget @JvmOverloads @@ -36,7 +38,7 @@ constructor(context: Context, attrs: AttributeSet? = null) : BaseNaviWidgetView( this.footerWithTwoButtonData = naviWidgetData as? FooterWithTwoButtonNewData this@FooterWithTwoButtonNewWidget.binding - ?.primaryButton + ?.primaryButtonText ?.setData(footerWithTwoButtonData?.buttonList?.getOrNull(0)) footerWithTwoButtonData?.buttonList?.getOrNull(0)?.cta?.let { cta -> @@ -58,7 +60,7 @@ constructor(context: Context, attrs: AttributeSet? = null) : BaseNaviWidgetView( setOnClickListener(null) } } else if (footerWithTwoButtonData?.isDisabled == false) { - this@FooterWithTwoButtonNewWidget.binding?.primaryButton?.apply { + this@FooterWithTwoButtonNewWidget.binding?.primaryButtonText?.apply { alpha = 1F addOnMultipleClicksHandler { ctaDataCallback?.invoke(cta) @@ -67,4 +69,13 @@ constructor(context: Context, attrs: AttributeSet? = null) : BaseNaviWidgetView( } } } + + fun handleLoader(showPrimaryButtonLoader: Boolean = false) { + binding?.primaryButtonText?.isVisible = !showPrimaryButtonLoader + binding?.primaryButtonLottie?.let { lottieView -> + lottieView.isVisible = showPrimaryButtonLoader + lottieView.progress = 0f + lottieView.setAnimationFromUrl(BUTTON_LOADER_LOTTIE_URL) + } + } } diff --git a/android/navi-insurance/src/main/java/com/navi/insurance/formbase/renewal/RenewalFormBasedFragment.kt b/android/navi-insurance/src/main/java/com/navi/insurance/formbase/renewal/RenewalFormBasedFragment.kt index 01e31192fa..9441b03c76 100644 --- a/android/navi-insurance/src/main/java/com/navi/insurance/formbase/renewal/RenewalFormBasedFragment.kt +++ b/android/navi-insurance/src/main/java/com/navi/insurance/formbase/renewal/RenewalFormBasedFragment.kt @@ -14,6 +14,7 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.Toast +import androidx.core.view.children import androidx.core.view.isVisible import androidx.databinding.DataBindingUtil import androidx.databinding.ViewDataBinding @@ -24,6 +25,7 @@ import com.navi.base.model.CtaData import com.navi.base.model.CtaType import com.navi.base.utils.isNull import com.navi.common.network.models.ErrorMessage +import com.navi.common.utils.setStatusBarColor import com.navi.design.utils.isValidHexColor import com.navi.insurance.R import com.navi.insurance.analytics.InsuranceAnalyticsConstants @@ -38,6 +40,7 @@ import com.navi.insurance.common.models.CardStateData import com.navi.insurance.common.models.FooterWithLeftRightButtonData import com.navi.insurance.common.models.FooterWithTwoButtonNewData import com.navi.insurance.common.models.NaviActionType +import com.navi.insurance.common.models.NaviToolbarViewData import com.navi.insurance.common.models.NaviWidget import com.navi.insurance.common.models.NaviWidgetData import com.navi.insurance.common.models.NaviWidgetType @@ -48,6 +51,7 @@ import com.navi.insurance.common.util.IdProvider import com.navi.insurance.common.util.NavigationHandler import com.navi.insurance.common.util.UiControllerUtil import com.navi.insurance.common.widgets.BaseNaviWidgetView +import com.navi.insurance.common.widgets.FooterWithTwoButtonNewWidget import com.navi.insurance.common.widgets.replaceLayout import com.navi.insurance.databinding.FragmentRenewalFormBasedBinding import com.navi.insurance.formbase.pre_purchase.FormBasedFragment @@ -110,6 +114,7 @@ class RenewalFormBasedFragment : private var currentTransition: String? = null private var isBackTransitionInProgress = false + private var backCta: CtaData? = null private var currentError: String? = null private var formPageResponse: FormPageResponse? = null @@ -130,7 +135,9 @@ class RenewalFormBasedFragment : shouldHandleBackPress && arguments?.getString(ARG_STATUS) != RenewalDetails.STATUS_SUCCESS ) { - if (isBackTransitionInProgress.not()) { + if (backCta?.type == CtaType.RENEWAL_BACK_BOTTOM_SHEET.value) { + handleCta(backCta) + } else if (isBackTransitionInProgress.not()) { processPrevious() } return true @@ -157,6 +164,7 @@ class RenewalFormBasedFragment : container, false, ) + activity?.setStatusBarColor(R.color.white) return binding.root } @@ -244,19 +252,18 @@ class RenewalFormBasedFragment : binding.retryContainer.isVisible = true shouldHandleBackPress = false currentError = viewState.errorTag - binding.progressBar.isVisible = false + toggleFooterLoader(false) setContentVisibility(false) } is RenewalFormPrevPageResponseState.Loading -> { shouldHandleBackPress = false - binding.progressBar.isVisible = true - setContentVisibility(false) + toggleFooterLoader(true) binding.retryContainer.isVisible = false } is RenewalFormPrevPageResponseState.Success -> { shouldHandleBackPress = true isBackTransitionInProgress = false - binding.progressBar.isVisible = false + toggleFooterLoader(false) setContentVisibility(true) handleCta(viewState.data?.cta) } @@ -276,23 +283,23 @@ class RenewalFormBasedFragment : ) } setContentVisibility(true) - binding.progressBar.isVisible = false + toggleFooterLoader(false) } is RenewalFormNextPageResponseState.Error -> { shouldHandleBackPress = false currentError = viewState.errorTag binding.retryContainer.isVisible = true - binding.progressBar.isVisible = false + toggleFooterLoader(false) setContentVisibility(false) } is RenewalFormNextPageResponseState.Loading -> { shouldHandleBackPress = false - binding.progressBar.isVisible = true - setContentVisibility(false) + toggleFooterLoader(true) binding.retryContainer.isVisible = false } is RenewalFormNextPageResponseState.Success -> { shouldHandleBackPress = true + toggleFooterLoader(false) handleCta(viewState.data?.cta) } else -> Unit @@ -343,6 +350,8 @@ class RenewalFormBasedFragment : } } viewState.data?.header?.getOrNull(0)?.widgetData?.run { + val toolBarData: NaviToolbarViewData? = this as? NaviToolbarViewData + backCta = toolBarData?.leftIcon?.cta updateContainer(this, binding.headerContainer) } viewState.data?.footer?.getOrNull(1)?.widgetData?.run { @@ -454,18 +463,18 @@ class RenewalFormBasedFragment : QuoteGenerationState.Init -> {} QuoteGenerationState.Loading -> { shouldHandleBackPress = false - binding.progressBar.isVisible = true + toggleFooterLoader(true) binding.retryContainer.isVisible = false - setContentVisibility(false) } is QuoteGenerationState.Success -> { handleCta(viewState.data.cta) binding.progressBar.isVisible = false + toggleFooterLoader(false) setContentVisibility(true) } is QuoteGenerationState.Error -> { setContentVisibility(true) - binding.progressBar.isVisible = false + toggleFooterLoader(false) Toast.makeText( context, getString(R.string.something_went_wrong), @@ -509,6 +518,14 @@ class RenewalFormBasedFragment : } } + private fun toggleFooterLoader(isLoading: Boolean) { + (binding.footerContainer1.children.firstOrNull() as? FooterWithTwoButtonNewWidget) + ?.handleLoader(showPrimaryButtonLoader = isLoading) + (binding.footerContainer2.children.firstOrNull() as? FooterWithTwoButtonNewWidget) + ?.handleLoader(showPrimaryButtonLoader = isLoading) + binding.root.isClickable = !isLoading + } + override fun handleCtaFromBottomSheet(cta: CtaData?) { handleCta(cta) } diff --git a/android/navi-insurance/src/main/java/com/navi/insurance/util/Constants.kt b/android/navi-insurance/src/main/java/com/navi/insurance/util/Constants.kt index c911f36634..2338143cbd 100644 --- a/android/navi-insurance/src/main/java/com/navi/insurance/util/Constants.kt +++ b/android/navi-insurance/src/main/java/com/navi/insurance/util/Constants.kt @@ -280,6 +280,8 @@ object Constants { const val ERROR_CTA = "errorCta" const val HOME_VISIT_SCREEN = "home_visit_screen" const val RESOURCE_NOT_FOUND = "Resource not found" + const val BUTTON_LOADER_LOTTIE_URL = + "https://public-assets.prod.navi-sa.in/home_uitron/cta_loader.json" // This is required for animating a component for Health risk score val numberConstant: List = diff --git a/android/navi-insurance/src/main/res/layout/footer_with_two_button_new_widget.xml b/android/navi-insurance/src/main/res/layout/footer_with_two_button_new_widget.xml index 66daaaace0..139d2604b8 100644 --- a/android/navi-insurance/src/main/res/layout/footer_with_two_button_new_widget.xml +++ b/android/navi-insurance/src/main/res/layout/footer_with_two_button_new_widget.xml @@ -34,21 +34,37 @@ app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintTop_toBottomOf="@+id/headerText" /> -