NTP-22076 | Annual Renewal | Pre-quote screen loader fixes (#14388)

This commit is contained in:
Kshitij Pramod Ghongadi
2025-01-07 19:13:34 +05:30
committed by GitHub
parent 231aee1810
commit 4ed2cec085
4 changed files with 67 additions and 21 deletions

View File

@@ -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)
}
}
}

View File

@@ -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)
}

View File

@@ -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<String> =

View File

@@ -34,21 +34,37 @@
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintTop_toBottomOf="@+id/headerText" />
<Button
<FrameLayout
android:id="@+id/primaryButton"
android:layout_height="@dimen/dp_44"
style="@style/ButtonFontStylePurple"
android:layout_width="match_parent"
android:layout_width="@dimen/dp_0"
android:layout_height="@dimen/dp_48"
android:layout_marginHorizontal="@dimen/dp_16"
android:layout_marginTop="@dimen/dp_20"
android:layout_marginBottom="@dimen/dp_32"
android:textSize="@dimen/sp_14"
android:layout_weight="1"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/headerText"
tools:text="@string/okay_got_it"
tools:visibility="visible" />
tools:visibility="visible"
android:background="@drawable/button_violet_state_24dp_radius">
<Button
android:id="@+id/primary_button_text"
style="@style/ButtonFontStylePurple"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
tools:text="Next" />
<com.airbnb.lottie.LottieAnimationView
android:id="@+id/primary_button_lottie"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
app:lottie_autoPlay="true"
app:lottie_repeatMode="restart"
android:visibility="gone"/>
</FrameLayout>
</com.navi.insurance.common.widgets.FooterWithTwoButtonNewWidget>