diff --git a/navi-hl/src/main/java/com/navi/homeloan/common/customview/HLCommonBottomSheet.kt b/navi-hl/src/main/java/com/navi/homeloan/common/customview/HLCommonBottomSheet.kt index 7ed9c84251..a6c1982be7 100644 --- a/navi-hl/src/main/java/com/navi/homeloan/common/customview/HLCommonBottomSheet.kt +++ b/navi-hl/src/main/java/com/navi/homeloan/common/customview/HLCommonBottomSheet.kt @@ -8,8 +8,12 @@ package com.navi.homeloan.common.customview import android.os.Bundle +import android.text.Editable +import android.text.TextWatcher import android.view.ViewStub +import androidx.core.view.isVisible import androidx.databinding.DataBindingUtil +import androidx.fragment.app.DialogFragment import com.navi.base.model.CtaData import com.navi.base.utils.EMPTY import com.navi.common.ui.fragment.BaseBottomSheet @@ -19,8 +23,9 @@ import com.navi.homeloan.common.listeners.HLFooterListener import com.navi.homeloan.common.models.HomeLoanGenericBottomSheetData import com.navi.homeloan.common.utils.NaviHLAnalytics import com.navi.homeloan.databinding.BottomSheetHlCommonBinding +import com.navi.naviwidgets.callbacks.WidgetCallback -class HLCommonBottomSheet : BaseBottomSheet(), HLFooterListener { +class HLCommonBottomSheet : BaseBottomSheet(), HLFooterListener, WidgetCallback { private lateinit var binding: BottomSheetHlCommonBinding private val analyticsEventTracker = NaviHLAnalytics.naviHLAnalytics.HomeLoanCommonBottomSheet() @@ -29,6 +34,14 @@ class HLCommonBottomSheet : BaseBottomSheet(), HLFooterListener { private var backCtaBodyMap: HashMap? = null private var bottomSheetType: String = EMPTY + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setStyle( + DialogFragment.STYLE_NORMAL, + R.style.DialogStyleAdjustResizeInput + ) + } + override fun setContainerView(viewStub: ViewStub) { viewStub.layoutResource = R.layout.bottom_sheet_hl_common binding = DataBindingUtil.getBinding(viewStub.inflate())!! @@ -40,9 +53,45 @@ class HLCommonBottomSheet : BaseBottomSheet(), HLFooterListener { analyticsEventTracker.onBottomSheetLanded(it.analyticsEventProperties) binding.footerView.setFooterInteractionListener(this) binding.data = it + it.inputTextWidget?.let { inputTextWidget -> + bottomSheetType = INPUT_TYPE_BOTTOM_SHEET + binding.labeledTextInput.isVisible = true + binding.footerView.enableContinueCta(false) + initInputTextWatcher() + binding.labeledTextInput.updateData(inputTextWidget, this) + } + } } + private fun initInputTextWatcher() { + binding.labeledTextInput.addTextWatcher( + object : TextWatcher { + override fun afterTextChanged(s: Editable?) { + s?.let { inputText -> + if (inputText.toString().isNotEmpty()) { + val validText = + binding.labeledTextInput.getUserInputPostValidation() ?: "" + binding.footerView.enableContinueCta(validText.isNotEmpty()) + } else { + binding.footerView.enableContinueCta(false) + } + } + } + + override fun beforeTextChanged( + s: CharSequence?, + start: Int, + count: Int, + after: Int + ) { + } + + override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {} + } + ) + } + fun setCommonBottomSheetListener(listener: HLCommonBottomSheetListener) { this.listener = listener } @@ -62,6 +111,7 @@ class HLCommonBottomSheet : BaseBottomSheet(), HLFooterListener { companion object { const val TAG = "HL_COMMON_BOTTOM_SHEET" const val ARG_DATA = "hlBottomSheetInfo" + const val INPUT_TYPE_BOTTOM_SHEET = "INPUT_TYPE_BOTTOM_SHEET" fun getInstance(bottomSheetData: HomeLoanGenericBottomSheetData) = HLCommonBottomSheet().apply { @@ -74,8 +124,16 @@ class HLCommonBottomSheet : BaseBottomSheet(), HLFooterListener { get() = EMPTY override fun onFooterCtaClick(ctaData: CtaData?) { - safelyDismissDialog() - listener?.onBsCtaClick(ctaData, bottomSheetType) + if (bottomSheetType == INPUT_TYPE_BOTTOM_SHEET) { + val inputDate = binding.labeledTextInput.getUserInputPostValidation() ?: "" + if (inputDate.isNotEmpty()) { + safelyDismissDialog() + listener?.onBsCtaClick(ctaData, bottomSheetType, inputDate) + } + } else { + safelyDismissDialog() + listener?.onBsCtaClick(ctaData, bottomSheetType) + } } override fun onFooterNextCtaClick(ctaData: CtaData?) { diff --git a/navi-hl/src/main/java/com/navi/homeloan/common/listeners/HLCommonBottomSheetListener.kt b/navi-hl/src/main/java/com/navi/homeloan/common/listeners/HLCommonBottomSheetListener.kt index 840a9675f1..3c8ee05882 100644 --- a/navi-hl/src/main/java/com/navi/homeloan/common/listeners/HLCommonBottomSheetListener.kt +++ b/navi-hl/src/main/java/com/navi/homeloan/common/listeners/HLCommonBottomSheetListener.kt @@ -10,7 +10,7 @@ package com.navi.homeloan.common.listeners import com.navi.base.model.CtaData interface HLCommonBottomSheetListener { - fun onBsCtaClick(ctaData: CtaData?, bottomSheetType: String) {} + fun onBsCtaClick(ctaData: CtaData?, bottomSheetType: String, inputTextData: String = "") {} fun onBsBottomCtaClick(ctaData: CtaData?) {} diff --git a/navi-hl/src/main/java/com/navi/homeloan/common/models/CommunicationAddressScreenResponse.kt b/navi-hl/src/main/java/com/navi/homeloan/common/models/CommunicationAddressScreenResponse.kt index 631e68df7c..f2591578de 100644 --- a/navi-hl/src/main/java/com/navi/homeloan/common/models/CommunicationAddressScreenResponse.kt +++ b/navi-hl/src/main/java/com/navi/homeloan/common/models/CommunicationAddressScreenResponse.kt @@ -17,5 +17,6 @@ data class CommunicationAddressScreenResponse( ) data class CommunicationAddressScreenContent( - @SerializedName("widgets") val widgets: List? = null + @SerializedName("widgets") val widgets: List? = null, + @SerializedName("enterEmailBottomSheet") val enterEmailBottomSheet: HomeLoanGenericBottomSheetData? = null ) diff --git a/navi-hl/src/main/java/com/navi/homeloan/common/models/HLPanVerificationStatusFromAP.kt b/navi-hl/src/main/java/com/navi/homeloan/common/models/HLPanVerificationStatusFromAP.kt new file mode 100644 index 0000000000..74c85617f4 --- /dev/null +++ b/navi-hl/src/main/java/com/navi/homeloan/common/models/HLPanVerificationStatusFromAP.kt @@ -0,0 +1,5 @@ +package com.navi.homeloan.common.models + +data class HLPanVerificationStatusFromAP ( + val panVerificationResultReceived: Boolean +) diff --git a/navi-hl/src/main/java/com/navi/homeloan/common/models/HomeLoanFormScreenResponse.kt b/navi-hl/src/main/java/com/navi/homeloan/common/models/HomeLoanFormScreenResponse.kt index 397ecbb443..1aad4d57c2 100644 --- a/navi-hl/src/main/java/com/navi/homeloan/common/models/HomeLoanFormScreenResponse.kt +++ b/navi-hl/src/main/java/com/navi/homeloan/common/models/HomeLoanFormScreenResponse.kt @@ -28,5 +28,7 @@ data class HomeLoanFormScreenContent( var panRequiredBottomSheet: HomeLoanGenericBottomSheetData? = null, @SerializedName("toastMessage") val toastMessage: String? = null, @SerializedName("interestRate") val interestRate: Double? = null, - @SerializedName("keyValueTextField") val keyValueTextField: KeyValueTextFieldData? = null + @SerializedName("keyValueTextField") val keyValueTextField: KeyValueTextFieldData? = null, + @SerializedName("isPanVerified") val isPanVerified: Boolean? = false, + @SerializedName("panVerificationPendingBottomSheet") val panVerificationPendingBottomSheet: HomeLoanGenericBottomSheetData? = null, ) diff --git a/navi-hl/src/main/java/com/navi/homeloan/common/models/HomeLoanGenericBottomSheetData.kt b/navi-hl/src/main/java/com/navi/homeloan/common/models/HomeLoanGenericBottomSheetData.kt index d9957f707a..6b9495d913 100644 --- a/navi-hl/src/main/java/com/navi/homeloan/common/models/HomeLoanGenericBottomSheetData.kt +++ b/navi-hl/src/main/java/com/navi/homeloan/common/models/HomeLoanGenericBottomSheetData.kt @@ -11,6 +11,8 @@ import android.os.Parcelable import com.google.gson.annotations.SerializedName import com.navi.base.model.AnalyticsEvent import com.navi.naviwidgets.models.response.TextFieldData +import com.navi.naviwidgets.widgets.labledtextinput.LabeledTextInputWidgetModelV2 +import com.navi.naviwidgets.widgets.labledtextinput.TextInputWidgetData import kotlinx.parcelize.Parcelize @Parcelize @@ -21,5 +23,6 @@ data class HomeLoanGenericBottomSheetData( @SerializedName("footer") val footer: HLFooter? = null, @SerializedName("infoList") val infoList: ArrayList? = null, @SerializedName("listItemMargin") val listItemMargin: Int? = null, - @SerializedName("analyticsEventProperties") val analyticsEventProperties: AnalyticsEvent? = null + @SerializedName("analyticsEventProperties") val analyticsEventProperties: AnalyticsEvent? = null, + @SerializedName("inputTextWidget") val inputTextWidget: LabeledTextInputWidgetModelV2? = null ) : Parcelable diff --git a/navi-hl/src/main/java/com/navi/homeloan/common/models/HomeLoanPanVerificationResponse.kt b/navi-hl/src/main/java/com/navi/homeloan/common/models/HomeLoanPanVerificationResponse.kt new file mode 100644 index 0000000000..2f21de66c8 --- /dev/null +++ b/navi-hl/src/main/java/com/navi/homeloan/common/models/HomeLoanPanVerificationResponse.kt @@ -0,0 +1,16 @@ +/* + * + * * Copyright © 2022-2023 by Navi Technologies Limited + * * All rights reserved. Strictly confidential + * + */ + +package com.navi.homeloan.common.models + +import com.google.gson.annotations.SerializedName +import com.navi.base.model.CtaData + +data class HomeLoanPanVerificationResponse( + @SerializedName("isPanVerified") val isPanVerified: Boolean? = null, + @SerializedName("cta") val cta: CtaData? = null +) diff --git a/navi-hl/src/main/java/com/navi/homeloan/common/utils/HLIconUtils.kt b/navi-hl/src/main/java/com/navi/homeloan/common/utils/HLIconUtils.kt index 188027bfb7..1ece6c70ce 100644 --- a/navi-hl/src/main/java/com/navi/homeloan/common/utils/HLIconUtils.kt +++ b/navi-hl/src/main/java/com/navi/homeloan/common/utils/HLIconUtils.kt @@ -18,30 +18,32 @@ import com.navi.naviwidgets.R as WidgetsR @Keep object HLIconUtils { - const val ICON_HL_HAMBURGER = "ICON_HL_HAMBURGER" + private const val ICON_HL_HAMBURGER = "ICON_HL_HAMBURGER" const val ICON_ARROW_LEFT_BLUE = "ICON_ARROW_LEFT_BLUE" - const val ICON_ARROW_CROSS_BLUE = "ICON_ARROW_CROSS_BLUE" + private const val ICON_ARROW_CROSS_BLUE = "ICON_ARROW_CROSS_BLUE" const val ICON_RED_BORDER_ALERT = "ICON_RED_BORDER_ALERT" - const val ICON_BLUE_BORDER_ALERT = "ICON_BLUE_BORDER_ALERT" - const val ICON_SMALL_YELLOW_BULB = "ICON_SMALL_YELLOW_BULB" - const val ICON_INFO_SIMPLE = "ICON_INFO_SIMPLE" - const val ICON_HL_SMALL_RED_WHITE_BG_RIGHT_ARROW = "ICON_HL_SMALL_RED_WHITE_BG_RIGHT_ARROW" - const val OUTLINED_INFO_ICON_BLACK = "OUTLINED_INFO_ICON_BLACK" - const val INVALID_CITY_ICON = "INVALID_CITY_ICON" + private const val ICON_BLUE_BORDER_ALERT = "ICON_BLUE_BORDER_ALERT" + private const val ICON_SMALL_YELLOW_BULB = "ICON_SMALL_YELLOW_BULB" + private const val ICON_INFO_SIMPLE = "ICON_INFO_SIMPLE" + private const val ICON_HL_SMALL_RED_WHITE_BG_RIGHT_ARROW = "ICON_HL_SMALL_RED_WHITE_BG_RIGHT_ARROW" + private const val OUTLINED_INFO_ICON_BLACK = "OUTLINED_INFO_ICON_BLACK" + private const val INVALID_CITY_ICON = "INVALID_CITY_ICON" const val ICON_LARGE_PURPLE_ALERT_WITH_DOG = "ICON_LARGE_PURPLE_ALERT_WITH_DOG" - const val ICON_HL_GREY_LOCK = "ICON_HL_GREY_LOCK" + private const val ICON_HL_GREY_LOCK = "ICON_HL_GREY_LOCK" private const val ICON_HL_HELP_FAQ = "ICON_HL_HELP_FAQ" private const val ICON_HL_HELP_CHAT = "ICON_HL_HELP_CHAT" private const val ICON_HL_HELP_EMAIL = "ICON_HL_HELP_EMAIL" private const val ICON_HL_HELP_CALL = "ICON_HL_HELP_CALL" private const val ICON_RED_BORDER_DOWNLOAD = "ICON_RED_BORDER_DOWNLOAD" private const val ICON_HL_RED_TICK_SMALL = "ICON_HL_RED_TICK_SMALL" + private const val ICON_ARROW_DOWN_RED = "ICON_ARROW_DOWN_RED" private const val RED_TICK_MARK_24 = "RED_TICK_MARK_24" - const val ICON_ARROW_DOWN_RED = "ICON_ARROW_DOWN_RED" - const val ICON_GREY_DARK_INFO = "ICON_GREY_DARK_INFO" - const val ICON_HL_INFO_FILLED_SIMPLE = "ICON_HL_INFO_FILLED_SIMPLE" - const val ICON_HL_ERROR_INFO_RED = "ICON_HL_ERROR_INFO_RED" - const val OUTLINED_INFO_ICON_BLACK_LARGE = "OUTLINED_INFO_ICON_BLACK_LARGE" + private const val ICON_GREY_DARK_INFO = "ICON_GREY_DARK_INFO" + private const val ICON_HL_INFO_FILLED_SIMPLE = "ICON_HL_INFO_FILLED_SIMPLE" + private const val ICON_HL_ERROR_INFO_RED = "ICON_HL_ERROR_INFO_RED" + private const val OUTLINED_INFO_ICON_BLACK_LARGE = "OUTLINED_INFO_ICON_BLACK_LARGE" + private const val ICON_HL_IMAGE_LARGE = "ICON_HL_IMAGE_LARGE" + private const val ICON_HL_PAN_IN_HAND = "ICON_HL_PAN_IN_HAND" const val ICON_CALL = "CALL" const val ICON_SEND_EMAIL = "SEND_EMAIL" const val ICON_CHAT = "CHAT" @@ -73,6 +75,7 @@ object HLIconUtils { ICON_HL_HELP_FAQ -> WidgetsR.drawable.ic_hl_help_faq_svg ICON_HL_HELP_CHAT -> WidgetsR.drawable.ic_hl_help_chat_svg ICON_HL_HELP_EMAIL -> WidgetsR.drawable.ic_hl_help_email_svg + ICON_HL_IMAGE_LARGE -> R.drawable.ic_email_large ICON_HL_HELP_CALL -> WidgetsR.drawable.ic_hl_help_call ICON_RED_BORDER_DOWNLOAD -> WidgetsR.drawable.ic_red_border_download_svg ICON_HL_RED_TICK_SMALL -> WidgetsR.drawable.ic_red_tick_small @@ -81,6 +84,7 @@ object HLIconUtils { ICON_HL_INFO_FILLED_SIMPLE -> WidgetsR.drawable.ic_info_dark ICON_HL_ERROR_INFO_RED -> R.drawable.ic_hl_error_info_red OUTLINED_INFO_ICON_BLACK_LARGE -> R.drawable.ic_hl_info_icon_black_32 + ICON_HL_PAN_IN_HAND -> R.drawable.ic_pan_card_in_hand RED_TICK_MARK_24 -> R.drawable.ic_red_alert ICON_CALL -> CommonR.drawable.ic_call_menu ICON_SEND_EMAIL -> CommonR.drawable.ic_email_menu diff --git a/navi-hl/src/main/res/drawable/ic_email_large.xml b/navi-hl/src/main/res/drawable/ic_email_large.xml new file mode 100644 index 0000000000..2c409270c5 --- /dev/null +++ b/navi-hl/src/main/res/drawable/ic_email_large.xml @@ -0,0 +1,14 @@ + + + + diff --git a/navi-hl/src/main/res/drawable/ic_pan_card_in_hand.xml b/navi-hl/src/main/res/drawable/ic_pan_card_in_hand.xml new file mode 100644 index 0000000000..cfee5ee160 --- /dev/null +++ b/navi-hl/src/main/res/drawable/ic_pan_card_in_hand.xml @@ -0,0 +1,131 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/navi-hl/src/main/res/layout/bottom_sheet_hl_common.xml b/navi-hl/src/main/res/layout/bottom_sheet_hl_common.xml index 9eacb8a980..77c6ac116f 100644 --- a/navi-hl/src/main/res/layout/bottom_sheet_hl_common.xml +++ b/navi-hl/src/main/res/layout/bottom_sheet_hl_common.xml @@ -64,6 +64,18 @@ tools:text="Applicant" tools:visibility="visible" /> + + diff --git a/navi_hl_dynamic/src/main/java/com/navi/hl/emiplans/fragment/HomeLoanEmiPlanFragment.kt b/navi_hl_dynamic/src/main/java/com/navi/hl/emiplans/fragment/HomeLoanEmiPlanFragment.kt index c7c830f5a1..25f7df1b1d 100644 --- a/navi_hl_dynamic/src/main/java/com/navi/hl/emiplans/fragment/HomeLoanEmiPlanFragment.kt +++ b/navi_hl_dynamic/src/main/java/com/navi/hl/emiplans/fragment/HomeLoanEmiPlanFragment.kt @@ -400,7 +400,7 @@ class HomeLoanEmiPlanFragment : } } - override fun onBsCtaClick(ctaData: CtaData?, bottomSheetType: String) { + override fun onBsCtaClick(ctaData: CtaData?, bottomSheetType: String, inputTextData: String) { moveToNextScreen(ctaData) } diff --git a/navi_hl_dynamic/src/main/java/com/navi/hl/landingpage/fragment/HomeLoanLandingPageFragment.kt b/navi_hl_dynamic/src/main/java/com/navi/hl/landingpage/fragment/HomeLoanLandingPageFragment.kt index fefdbeb497..b8ffc0a3da 100644 --- a/navi_hl_dynamic/src/main/java/com/navi/hl/landingpage/fragment/HomeLoanLandingPageFragment.kt +++ b/navi_hl_dynamic/src/main/java/com/navi/hl/landingpage/fragment/HomeLoanLandingPageFragment.kt @@ -254,7 +254,7 @@ class HomeLoanLandingPageFragment : openBottomSheet(ctaData) } - override fun onBsCtaClick(ctaData: CtaData?, bottomSheetType: String) { + override fun onBsCtaClick(ctaData: CtaData?, bottomSheetType: String, inputTextData: String) { navigateTo(ctaData, false) } diff --git a/navi_hl_dynamic/src/main/java/com/navi/hl/network/retrofit/RetrofitService.kt b/navi_hl_dynamic/src/main/java/com/navi/hl/network/retrofit/RetrofitService.kt index 10c1443876..49d983e9fd 100644 --- a/navi_hl_dynamic/src/main/java/com/navi/hl/network/retrofit/RetrofitService.kt +++ b/navi_hl_dynamic/src/main/java/com/navi/hl/network/retrofit/RetrofitService.kt @@ -48,6 +48,11 @@ interface RetrofitService { @QueryMap queryMap: HashMap ): Response> + @GET("/home-loan/customers/me/journey/pan-verification-status") + suspend fun fetchPanVerificationStatus( + @QueryMap queryMap: HashMap + ): Response> + @GET("/status/ui-status") suspend fun getRedirectPageStatus(): Response> diff --git a/navi_hl_dynamic/src/main/java/com/navi/hl/network/util/ApiErrorTagType.kt b/navi_hl_dynamic/src/main/java/com/navi/hl/network/util/ApiErrorTagType.kt index d224b6bd43..0afc72fd56 100644 --- a/navi_hl_dynamic/src/main/java/com/navi/hl/network/util/ApiErrorTagType.kt +++ b/navi_hl_dynamic/src/main/java/com/navi/hl/network/util/ApiErrorTagType.kt @@ -68,6 +68,7 @@ object ApiErrorTagType { const val HL_GET_LANDING_PAGE_ERROR = "HL_GET_LANDING_PAGE_ERROR" const val HL_GET_INTRO_RESPONSE_ERROR = "HL_GET_INTRO_RESPONSE_ERROR" const val HL_INTRO_PATCH_API_ERROR = "HL_INTRO_PATCH_API_ERROR" + const val HL_PAN_VERIFICATION_RESPONSE_ERROR = "HL_PAN_VERIFICATION_RESPONSE_ERROR" @StringDef(NO_INTERNET_ERROR) @Retention(AnnotationRetention.SOURCE) diff --git a/navi_hl_dynamic/src/main/java/com/navi/hl/steps/activity/HomeLoanStepsActivity.kt b/navi_hl_dynamic/src/main/java/com/navi/hl/steps/activity/HomeLoanStepsActivity.kt index cdf9496fca..554222b10a 100644 --- a/navi_hl_dynamic/src/main/java/com/navi/hl/steps/activity/HomeLoanStepsActivity.kt +++ b/navi_hl_dynamic/src/main/java/com/navi/hl/steps/activity/HomeLoanStepsActivity.kt @@ -7,6 +7,7 @@ package com.navi.hl.steps.activity +import android.content.Intent import com.navi.design.R as DesignR import android.graphics.Color import android.net.Uri @@ -61,6 +62,8 @@ import com.navi.hl.steps.helper.HomeLoanSelfieCaptureHelper import com.navi.hl.steps.viewmodel.HomeLoanSelfieVerificationSharedVM import com.navi.hl.steps.viewmodel.HomeLoanStepsActivityVM import com.navi.hl.steps.viewmodel.PermissionVM +import com.navi.hl.steps.viewmodel.SharedFormSearchVM +import com.navi.hl.utils.Constants import com.navi.hl.utils.Constants.ACTION import com.navi.hl.utils.Constants.HL_PERMISSION_REQUEST_CODE import com.navi.hl.utils.Constants.KEY_OPEN_SIDE_TRACKER @@ -125,9 +128,9 @@ class HomeLoanStepsActivity : private var header: HLHeader? = null private lateinit var toggle: ActionBarDrawerToggle private val viewModel by viewModels() - private val permissionSharedVM by lazy { ViewModelProvider(this).get(PermissionVM::class.java) } + private val permissionSharedVM by lazy { ViewModelProvider(this)[PermissionVM::class.java] } private val selfieSharedVM by lazy { - ViewModelProvider(this).get(HomeLoanSelfieVerificationSharedVM::class.java) + ViewModelProvider(this)[HomeLoanSelfieVerificationSharedVM::class.java] } private val selfieVerificationHelper by lazy { HomeLoanSelfieCaptureHelper() } private val headerAdapter = @@ -140,6 +143,7 @@ class HomeLoanStepsActivity : private var digioResponseListener: DigioResponseListener? = null private var scrollListener: RecyclerView.OnScrollListener? = null private var isHamburgerVisible = false + private val sharedFormSearchVM by lazy { ViewModelProvider(this)[SharedFormSearchVM::class.java] } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) @@ -179,6 +183,14 @@ class HomeLoanStepsActivity : } } + @Deprecated("Deprecated in Java") + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + super.onActivityResult(requestCode, resultCode, data) + if (resultCode == RESULT_OK && requestCode == Constants.PAN_VERIFICATION_REQUEST_CODE) { + sharedFormSearchVM.setPanVerificationStatusResult(true) + } + } + private fun initScrollListener() { scrollListener = object : RecyclerView.OnScrollListener() { @@ -553,7 +565,7 @@ class HomeLoanStepsActivity : return true } - override fun onBsCtaClick(ctaData: CtaData?, bottomSheetType: String) { + override fun onBsCtaClick(ctaData: CtaData?, bottomSheetType: String, inputTextData: String) { ctaData?.let { navigateTo(it) } } diff --git a/navi_hl_dynamic/src/main/java/com/navi/hl/steps/fragment/HomeLoanCloseLoansFragment.kt b/navi_hl_dynamic/src/main/java/com/navi/hl/steps/fragment/HomeLoanCloseLoansFragment.kt index 0ba2683a16..c29aa3098c 100644 --- a/navi_hl_dynamic/src/main/java/com/navi/hl/steps/fragment/HomeLoanCloseLoansFragment.kt +++ b/navi_hl_dynamic/src/main/java/com/navi/hl/steps/fragment/HomeLoanCloseLoansFragment.kt @@ -401,7 +401,7 @@ class HomeLoanCloseLoansFragment : HomeLoanCloseLoansFragment().apply { this.arguments = arguments } } - override fun onBsCtaClick(ctaData: CtaData?, bottomSheetType: String) { + override fun onBsCtaClick(ctaData: CtaData?, bottomSheetType: String, inputTextData: String) { ctaData?.let { savedBsCtaData = it showLoader() diff --git a/navi_hl_dynamic/src/main/java/com/navi/hl/steps/fragment/HomeLoanCommunicationAddressFragment.kt b/navi_hl_dynamic/src/main/java/com/navi/hl/steps/fragment/HomeLoanCommunicationAddressFragment.kt index 9292b2af42..0f88e6ea4f 100644 --- a/navi_hl_dynamic/src/main/java/com/navi/hl/steps/fragment/HomeLoanCommunicationAddressFragment.kt +++ b/navi_hl_dynamic/src/main/java/com/navi/hl/steps/fragment/HomeLoanCommunicationAddressFragment.kt @@ -21,16 +21,20 @@ import com.navi.analytics.utils.NaviTrackEvent import com.navi.base.model.CtaData import com.navi.base.model.NaviClickAction import com.navi.base.model.NaviWidgetInfoClick +import com.navi.base.utils.isNotNull import com.navi.hl.common.ui.fragment.HomeLoanBaseFragment import com.navi.hl.network.util.ApiErrorTagType import com.navi.hl.steps.viewmodel.HomeLoanCommunicationAddressFragmentVM import com.navi.hl.utils.Constants import com.navi.hl.utils.Constants.ADDRESS_REFERENCE_ID +import com.navi.hl.utils.Constants.PERSONAL_EMAIL import com.navi.hl.utils.Constants.REFERENCE_ID import com.navi.hl.utils.NaviHLAnalytics import com.navi.hl.utils.observeNullable +import com.navi.homeloan.common.customview.HLCommonBottomSheet import com.navi.homeloan.common.customview.HLTopNavigationHeaderInterface import com.navi.homeloan.common.listeners.BackListener +import com.navi.homeloan.common.listeners.HLCommonBottomSheetListener import com.navi.homeloan.common.listeners.HLFooterListener import com.navi.homeloan.databinding.FragmentHomeLoanCommunicationAddressBinding import com.navi.naviwidgets.adapters.NaviAdapter @@ -41,7 +45,8 @@ import kotlinx.coroutines.delay import kotlinx.coroutines.launch class HomeLoanCommunicationAddressFragment : - HomeLoanBaseFragment(), WidgetCallback, BackListener, HLFooterListener { + HomeLoanBaseFragment(), WidgetCallback, BackListener, HLFooterListener, + HLCommonBottomSheetListener { private lateinit var binding: FragmentHomeLoanCommunicationAddressBinding private val viewModel by viewModels() @@ -155,8 +160,9 @@ class HomeLoanCommunicationAddressFragment : is CtaData -> { moveToNextScreen(naviClickAction) } + is NaviWidgetInfoClick -> { - viewModel.selectedReferenceId = naviClickAction.widgetId + viewModel.selectedReferenceId = naviClickAction.widgetId ?: "" } } } @@ -186,13 +192,29 @@ class HomeLoanCommunicationAddressFragment : override fun onFooterNextCtaClick(ctaData: CtaData?) { footerNextCtaData = ctaData + binding.response?.content?.enterEmailBottomSheet?.let { + if (viewModel.selectedReferenceId.isNotNull()) { + val bottomSheet = HLCommonBottomSheet.getInstance(it) + safelyShowBottomSheet(bottomSheet, HLCommonBottomSheet.TAG) + bottomSheet.setCommonBottomSheetListener(this) + } + } ?: run { + callScreenPatchApi(ctaData) + } + } + + private fun callScreenPatchApi(ctaData: CtaData?, emailId: String? = null) { viewModel.selectedReferenceId?.let { + val bodyMap = hashMapOf( + ADDRESS_REFERENCE_ID to it, + REFERENCE_ID to queryMap[REFERENCE_ID].orEmpty() + ) + emailId?.let { email -> + bodyMap[PERSONAL_EMAIL] = email + } viewModel.patchKycAddressDetails( queryMap, - hashMapOf( - ADDRESS_REFERENCE_ID to it, - REFERENCE_ID to queryMap[REFERENCE_ID].orEmpty() - ), + bodyMap, ctaData ) } @@ -202,5 +224,11 @@ class HomeLoanCommunicationAddressFragment : moveToNextScreen(ctaData) } + override fun onBsCtaClick(ctaData: CtaData?, bottomSheetType: String, inputTextData: String) { + if (bottomSheetType == HLCommonBottomSheet.INPUT_TYPE_BOTTOM_SHEET) { + callScreenPatchApi(footerNextCtaData, inputTextData) + } + } + override fun getLifeCycle(): Lifecycle = lifecycle } diff --git a/navi_hl_dynamic/src/main/java/com/navi/hl/steps/fragment/HomeLoanESignVerificationFragment.kt b/navi_hl_dynamic/src/main/java/com/navi/hl/steps/fragment/HomeLoanESignVerificationFragment.kt index dc6191a5ae..f72f2e2505 100644 --- a/navi_hl_dynamic/src/main/java/com/navi/hl/steps/fragment/HomeLoanESignVerificationFragment.kt +++ b/navi_hl_dynamic/src/main/java/com/navi/hl/steps/fragment/HomeLoanESignVerificationFragment.kt @@ -275,7 +275,7 @@ class HomeLoanESignVerificationFragment : loanDetailsListener?.setLoanDetails(loanDetailsBottomSheetData) } - override fun onBsCtaClick(ctaData: CtaData?, bottomSheetType: String) { + override fun onBsCtaClick(ctaData: CtaData?, bottomSheetType: String, inputTextData: String) { if (bottomSheetType == E_SIGN_API_ERROR) { showLoader() viewModel.digioStatusUpdate( diff --git a/navi_hl_dynamic/src/main/java/com/navi/hl/steps/fragment/HomeLoanFormScreenFragment.kt b/navi_hl_dynamic/src/main/java/com/navi/hl/steps/fragment/HomeLoanFormScreenFragment.kt index 00f33049e2..ecf00500d4 100644 --- a/navi_hl_dynamic/src/main/java/com/navi/hl/steps/fragment/HomeLoanFormScreenFragment.kt +++ b/navi_hl_dynamic/src/main/java/com/navi/hl/steps/fragment/HomeLoanFormScreenFragment.kt @@ -70,6 +70,8 @@ import com.navi.hl.utils.Constants.FLAT import com.navi.hl.utils.Constants.HIDE import com.navi.hl.utils.Constants.ID_PROPERTY_ID import com.navi.hl.utils.Constants.NOT_DECIDED +import com.navi.hl.utils.Constants.PAN_VERIFICATION_BOTTOM_SHEET +import com.navi.hl.utils.Constants.PAN_VERIFICATION_REQUEST_CODE import com.navi.hl.utils.Constants.PIN_CODE_WIDGET_ID import com.navi.hl.utils.Constants.POLLING_TIMEOUT import com.navi.hl.utils.Constants.PROPERTY_NAME @@ -101,6 +103,7 @@ import com.navi.naviwidgets.callbacks.WidgetCallback import com.navi.naviwidgets.models.NaviBaseAdapterModel import com.navi.naviwidgets.models.NaviWidget import com.navi.naviwidgets.models.response.ProductBenefitsGridWidget +import com.navi.naviwidgets.utils.toCtaData import com.navi.naviwidgets.widgets.bottomsheetselector.LabeledOptionSelectorListWidgetModel import com.navi.naviwidgets.widgets.bottomsheetselector.OptionSelectAction import com.navi.naviwidgets.widgets.bottomsheetselector.ui.LabeledOptionSelectorListWidget @@ -114,6 +117,7 @@ import com.navi.naviwidgets.widgets.tileoptionselector.TileOptionClickAction import com.navi.naviwidgets.widgets.tileoptionselector.WidgetAction import com.navi.naviwidgets.widgets.tileoptionselector.WidgetActionType import com.navi.naviwidgets.widgets.tileoptionselector.WidgetClickHint +import com.naviapp.common.navigator.NaviDeepLinkNavigator import kotlinx.coroutines.delay import kotlinx.coroutines.launch @@ -137,9 +141,8 @@ class HomeLoanFormScreenFragment : private var pinCodeWidget: LabeledTextInputWidgetV2? = null private var relationWidget: LabeledOptionSelectorListWidget? = null private val knowMoreEventTracker = NaviHLAnalytics.naviHLAnalytics.HomeLoanBase() - private var ctaAfterUserDataUpload: CtaData? = null private val sharedFormSearchVM by lazy { - ViewModelProvider(requireActivity()).get(SharedFormSearchVM::class.java) + ViewModelProvider(requireActivity())[SharedFormSearchVM::class.java] } private val userDataViewModel by viewModels() private val permissionsManager by lazy { PermissionsManager(requireActivity()) } @@ -167,15 +170,12 @@ class HomeLoanFormScreenFragment : viewModel, listOf( Pair(screenGetApiRetryListener, ApiErrorTagType.HL_FORM_SCREEN_GET_RESPONSE_ERROR), - Pair( - screenPatchApiRetryListener, - ApiErrorTagType.HL_FORM_SCREEN_PATCH_RESPONSE_ERROR - ) + Pair(screenPatchApiRetryListener, ApiErrorTagType.HL_FORM_SCREEN_PATCH_RESPONSE_ERROR), + Pair(panVerificationStatusApiRetryListener, ApiErrorTagType.HL_PAN_VERIFICATION_RESPONSE_ERROR) ), dialogOnBackPressed = { activity?.onBackPressed() } ) initObservers() - initUserDataObserver() initUI() fetchFormScreenResponse() return binding.root @@ -187,61 +187,8 @@ class HomeLoanFormScreenFragment : private val screenPatchApiRetryListener: View.OnClickListener = View.OnClickListener { _ -> onFooterNextCtaClick(null) } - private fun callScreenAfterUserDataUpload() { - hideLoader() - apiPollScheduler?.stopApiPoll() - deInitializeAsyncListeners() - viewModel.deInit() - ctaAfterUserDataUpload?.let { moveToNextScreen(it) } ?: run { showApiErrorBottomSheet() } - } - - private fun showApiErrorBottomSheet() { - userDataViewModel.deInit() - binding.response?.content?.apiErrorBottomSheetData?.let { - val bottomSheet = HLCommonBottomSheet.getInstance(it) - safelyShowBottomSheet(bottomSheet, HLCommonBottomSheet.TAG) - } - } - - private fun initUserDataObserver() { - viewModel.apiPollStatus.observeNullable(viewLifecycleOwner) { - it?.let { - if (it == FirebaseStatusType.SUCCESS || it == FirebaseStatusType.FAILURE) { - callScreenAfterUserDataUpload() - } - } - } - - userDataViewModel.deviceDataSentStatus.observeNonNull(viewLifecycleOwner) { deviceDataSent - -> - if (deviceDataSent) { - userDataViewModel.userDataSentStatus.observeNonNull(viewLifecycleOwner) { - userDataUploadCallbackResponse -> - if (userDataUploadCallbackResponse.ingestionStatusList == null) { - hideLoader() - showApiErrorBottomSheet() - } else { - userDataUploadCallbackResponse.uploadDataAsyncResponse?.let { - val requestId = it.requestId.orEmpty() - val notificationPath = it.notificationPath.orEmpty() - val type = it.requestType.orEmpty() - if ( - requestId.isNotEmpty() && - notificationPath.isNotEmpty() && - type.isNotEmpty() - ) { - firebaseInit(requestId, notificationPath, type) - apiPollInit(requestId, it.requestConfig) - } else { - callScreenAfterUserDataUpload() - } - } - ?: callScreenAfterUserDataUpload() - } - } - } - } - } + private val panVerificationStatusApiRetryListener: View.OnClickListener = + View.OnClickListener { _ -> viewModel.fetchPanVerificationStatus(queryMap) } private fun fetchFormScreenResponse() { listener?.hideTrackerHeader() @@ -300,6 +247,22 @@ class HomeLoanFormScreenFragment : private fun initObservers() { sharedFormSearchVM.setSelectedSearchItem(null) + sharedFormSearchVM.panVerificationStatusFromAP.observeNonNull(viewLifecycleOwner) { + if(it.panVerificationResultReceived) { + viewModel.fetchPanVerificationStatus(queryMap) + } + + } + viewModel.panVerificationResponse.observeNullable(viewLifecycleOwner) { + it?.let { panVerificationResponse -> + if(panVerificationResponse.isPanVerified == true) { + moveToNextScreenAndStartUserDataUpload(panVerificationResponse.cta) + } else { + showPanVerificationBottomSheet() + } + } + } + viewModel.formGetResponse.observeNullable(viewLifecycleOwner) { response -> binding.response = response response?.let { @@ -354,14 +317,14 @@ class HomeLoanFormScreenFragment : apiPollInit(requestId, response.requestConfig) } else if (response?.cta.isNotNull()) { if (isPropertyDetailScreen()) { - initiateUserDataUploadProcess(response?.cta) + checkUserPanVerificationStatus(response?.cta) } else { hideLoader() moveToNextScreen(response?.cta) } } else { if (isPropertyDetailScreen()) { - initiateUserDataUploadProcess(viewModel.formGetResponse.value?.footer?.nextCta) + checkUserPanVerificationStatus(viewModel.formGetResponse.value?.footer?.nextCta) } else { hideLoader() checkCtaAndMoveToNextScreen() @@ -415,25 +378,47 @@ class HomeLoanFormScreenFragment : } } - private fun initiateUserDataUploadProcess(cta: CtaData?) { + private fun showPanVerificationBottomSheet() { + binding.response?.content?.panVerificationPendingBottomSheet?.let { bottomSheetData -> + val bottomSheet = HLCommonBottomSheet.getInstance(bottomSheetData) + bottomSheet.setBottomSheetType(PAN_VERIFICATION_BOTTOM_SHEET) + safelyShowBottomSheet(bottomSheet, HLCommonBottomSheet.TAG) + bottomSheet.setCommonBottomSheetListener(this) + } + } + + private fun moveToNextScreenAndStartUserDataUpload(cta: CtaData?) { + checkPermissionAndStartUserDataUpload() + moveToNextScreen(cta) + } + + private fun checkUserPanVerificationStatus(cta: CtaData?) { + hideLoader() + if (binding.response?.content?.isPanVerified == true) { + moveToNextScreenAndStartUserDataUpload(cta) + } else { + showPanVerificationBottomSheet() + } + } + + private fun checkPermissionAndStartUserDataUpload() { val readSmsPermissionAllowed = permissionsManager.hasPermission(Manifest.permission.READ_SMS) val readContactsPermissionAllowed = permissionsManager.hasPermission(Manifest.permission.READ_CONTACTS) val coarseLocationPermissionAllowed = permissionsManager.hasPermission(Manifest.permission.ACCESS_COARSE_LOCATION) - ctaAfterUserDataUpload = cta if (readSmsPermissionAllowed || readContactsPermissionAllowed || coarseLocationPermissionAllowed) { sendUserData(readSmsPermissionAllowed, readContactsPermissionAllowed, coarseLocationPermissionAllowed) context?.let { context -> sendDeviceData(getScreenRefreshRate(context, this.activity?.windowManager)) } - } else { - hideLoader() - moveToNextScreen(cta) } } private fun sendDeviceData(verticalScanRate: String?) { val deviceDetails = getDeviceDetails(verticalScanRate) - userDataViewModel.sendDeviceDetails(deviceDetails) + userDataViewModel.sendDeviceDetails( + deviceDetail = deviceDetails, + isOpLifecycleBound = false + ) } private fun sendUserData( @@ -445,7 +430,8 @@ class HomeLoanFormScreenFragment : uploadSms = readSmsPermissionAllowed, uploadContacts = readContactsPermissionAllowed, uploadAppUsedInfo = true, - Constants.BUSINESS_VERTICAL_HL + businessVertical = Constants.BUSINESS_VERTICAL_HL, + isOpLifecycleBound = false ) if (coarseLocationPermissionAllowed) { sendLocation(locationPermissionData = PermissionRequestData()) @@ -627,11 +613,7 @@ class HomeLoanFormScreenFragment : private val onPollingEnd = { hideLoader() - if (isPropertyDetailScreen()) { - callScreenAfterUserDataUpload() - } else { - handleTimeOutError(ApiErrorTagType.PAN_DETAILS_UPLOAD) - } + handleTimeOutError(ApiErrorTagType.PAN_DETAILS_UPLOAD) logDownTimeEvent() } @@ -652,7 +634,7 @@ class HomeLoanFormScreenFragment : ?: ApiPollScheduler.API_POLL_RETRY_COUNT, doOnTimeout = onPollingEnd ) { - viewModel.fetchAsyncRequestData(requestId, isPropertyDetailScreen()) + viewModel.fetchAsyncRequestData(requestId) } apiPollScheduler?.scheduleApiPoll() } @@ -857,6 +839,21 @@ class HomeLoanFormScreenFragment : moveToNextScreen(ctaData) } + override fun onBsCtaClick(ctaData: CtaData?, bottomSheetType: String, inputTextData: String) { + if (bottomSheetType == PAN_VERIFICATION_BOTTOM_SHEET) { + ctaData?.let { + NaviDeepLinkNavigator.navigate( + activity = activity, + ctaData = it, + needsResult = true, + requestCode = PAN_VERIFICATION_REQUEST_CODE + ) + } + } else { + moveToNextScreen(ctaData) + } + } + override fun onFooterKnowMoreInfoClicked(bottomSheetData: HomeLoanGenericBottomSheetData?) { bottomSheetData?.let { knowMoreEventTracker.onKnowMoreClicked() diff --git a/navi_hl_dynamic/src/main/java/com/navi/hl/steps/fragment/HomeLoanFormScreenFragmentV2.kt b/navi_hl_dynamic/src/main/java/com/navi/hl/steps/fragment/HomeLoanFormScreenFragmentV2.kt index 3207e357e6..94f0abaff0 100644 --- a/navi_hl_dynamic/src/main/java/com/navi/hl/steps/fragment/HomeLoanFormScreenFragmentV2.kt +++ b/navi_hl_dynamic/src/main/java/com/navi/hl/steps/fragment/HomeLoanFormScreenFragmentV2.kt @@ -362,7 +362,7 @@ class HomeLoanFormScreenFragmentV2 : viewModel.patchFormScreenDetails(queryMap, bodyMap, ctaData) } - override fun onBsCtaClick(ctaData: CtaData?, bottomSheetType: String) { + override fun onBsCtaClick(ctaData: CtaData?, bottomSheetType: String, inputTextData: String) { if (bottomSheetType != OFFER_DEGRADATION_BS || ctaData?.url.isNotNullAndNotEmpty()) { showLoader() viewModel.patchFormScreenDetails(queryMap, bodyMap, ctaData) diff --git a/navi_hl_dynamic/src/main/java/com/navi/hl/steps/fragment/HomeLoanWidgetizedInfoFragment.kt b/navi_hl_dynamic/src/main/java/com/navi/hl/steps/fragment/HomeLoanWidgetizedInfoFragment.kt index 9be51e6adb..4a26a4656c 100644 --- a/navi_hl_dynamic/src/main/java/com/navi/hl/steps/fragment/HomeLoanWidgetizedInfoFragment.kt +++ b/navi_hl_dynamic/src/main/java/com/navi/hl/steps/fragment/HomeLoanWidgetizedInfoFragment.kt @@ -387,7 +387,7 @@ class HomeLoanWidgetizedInfoFragment : loanDetailsListener?.setLoanDetails(loanDetailsBottomSheetData) } - override fun onBsCtaClick(ctaData: CtaData?, bottomSheetType: String) { + override fun onBsCtaClick(ctaData: CtaData?, bottomSheetType: String, inputTextData: String) { moveToNextScreen(ctaData) } diff --git a/navi_hl_dynamic/src/main/java/com/navi/hl/steps/repository/HomeLoanFormScreenRepository.kt b/navi_hl_dynamic/src/main/java/com/navi/hl/steps/repository/HomeLoanFormScreenRepository.kt index dfbb3cc55d..02ed97d291 100644 --- a/navi_hl_dynamic/src/main/java/com/navi/hl/steps/repository/HomeLoanFormScreenRepository.kt +++ b/navi_hl_dynamic/src/main/java/com/navi/hl/steps/repository/HomeLoanFormScreenRepository.kt @@ -27,4 +27,7 @@ class HomeLoanFormScreenRepository : ResponseCallback() { suspend fun fetchCityAndState(pinCode: String) = apiResponseCallback(retrofitService().fetchCityAndState(pinCode)) + + suspend fun fetchPanVerificationStatus(queryMap: HashMap) = + apiResponseCallback(retrofitService().fetchPanVerificationStatus(queryMap)) } diff --git a/navi_hl_dynamic/src/main/java/com/navi/hl/steps/viewmodel/HomeLoanFormScreenFragmentVM.kt b/navi_hl_dynamic/src/main/java/com/navi/hl/steps/viewmodel/HomeLoanFormScreenFragmentVM.kt index 3234daa0e8..007f0e9299 100644 --- a/navi_hl_dynamic/src/main/java/com/navi/hl/steps/viewmodel/HomeLoanFormScreenFragmentVM.kt +++ b/navi_hl_dynamic/src/main/java/com/navi/hl/steps/viewmodel/HomeLoanFormScreenFragmentVM.kt @@ -27,6 +27,7 @@ import com.navi.hl.utils.Constants.ID_PURCHASE_TYPE import com.navi.hl.utils.Constants.ID_RESALE_PROPERTY import com.navi.homeloan.common.models.HomeLoanFormPatchResponse import com.navi.homeloan.common.models.HomeLoanFormScreenResponse +import com.navi.homeloan.common.models.HomeLoanPanVerificationResponse import com.navi.homeloan.common.models.PinCodeData import com.navi.homeloan.common.models.RedirectPageStatus import com.navi.naviwidgets.models.NaviWidget @@ -44,6 +45,10 @@ class HomeLoanFormScreenFragmentVM( val formGetResponse: LiveData get() = _formGetResponse + private val _panVerificationResponse = MutableLiveData() + val panVerificationResponse: LiveData + get() = _panVerificationResponse + private val _formPatchResponse = MutableLiveData() val formPatchResponse: LiveData get() = _formPatchResponse @@ -69,10 +74,6 @@ class HomeLoanFormScreenFragmentVM( val invalidPinCode: LiveData get() = _invalidPinCode - private val _apiPollStatus = MutableLiveData() - val apiPollStatus: LiveData - get() = _apiPollStatus - fun fetchFormScreenResponse(queryMap: HashMap) = viewModelScope.launch { val response = repository.fetchFormScreenResponse(queryMap) @@ -88,6 +89,21 @@ class HomeLoanFormScreenFragmentVM( } } + fun fetchPanVerificationStatus(queryMap: HashMap) { + viewModelScope.launch { + val response = repository.fetchPanVerificationStatus(queryMap) + if (response.error == null && response.errors.isNullOrEmpty()) { + _panVerificationResponse.value = response.data + } else { + setErrorData( + errors = response.errors, + error = response.error, + tag = ApiErrorTagType.HL_PAN_VERIFICATION_RESPONSE_ERROR + ) + } + } + } + fun patchFormScreenDetails( queryMap: HashMap, bodyMap: HashMap, @@ -118,20 +134,16 @@ class HomeLoanFormScreenFragmentVM( } } - fun fetchAsyncRequestData(requestId: String, isUserDataUploadAsync: Boolean) = + fun fetchAsyncRequestData(requestId: String) = coroutineScope.launch { val response = repository.fetchAsyncRequestData(requestId) if (response.error == null && response.errors.isNullOrEmpty()) { - if (isUserDataUploadAsync) { - _apiPollStatus.value = response.data?.status.orEmpty() - } else { - if (TextUtils.equals(response.data?.status, FirebaseStatusType.FAILURE)) { - checkUiStatus(response.errors, response.warning) - return@launch - } + if (TextUtils.equals(response.data?.status, FirebaseStatusType.FAILURE)) { + checkUiStatus(response.errors, response.warning) + return@launch } } else { - if (!isUserDataUploadAsync) _genericPollingError.value = true + _genericPollingError.value = true setErrorData(response.errors, response.error) } } @@ -172,7 +184,7 @@ class HomeLoanFormScreenFragmentVM( } if ( widget.widgetId == ID_PROPERTY_TYPE && - widget is LabeledOptionSelectorTileWidgetModel + widget is LabeledOptionSelectorTileWidgetModel ) { widget.widgetData?.tileSelectorData?.items?.let { tileSelectorItems -> for (item in tileSelectorItems) { @@ -196,7 +208,7 @@ class HomeLoanFormScreenFragmentVM( } if ( widget.widgetId == ID_PURCHASE_TYPE && - widget is LabeledOptionSelectorListWidgetModel + widget is LabeledOptionSelectorListWidgetModel ) { widget.widgetData?.listSelectorData?.items?.let { listSelectorItems -> for (item in listSelectorItems) { @@ -227,7 +239,7 @@ class HomeLoanFormScreenFragmentVM( for (widget in it) { if ( widget.widgetId == ID_PROPERTY_ID && - widget is LabeledOptionSelectorListWidgetModel + widget is LabeledOptionSelectorListWidgetModel ) { return widget.widgetData?.listSelectorData?.listTitle } @@ -236,7 +248,4 @@ class HomeLoanFormScreenFragmentVM( return null } - fun deInit() { - _apiPollStatus.value = null - } } diff --git a/navi_hl_dynamic/src/main/java/com/navi/hl/steps/viewmodel/SharedFormSearchVM.kt b/navi_hl_dynamic/src/main/java/com/navi/hl/steps/viewmodel/SharedFormSearchVM.kt index 8a3c79aa75..caa31a9964 100644 --- a/navi_hl_dynamic/src/main/java/com/navi/hl/steps/viewmodel/SharedFormSearchVM.kt +++ b/navi_hl_dynamic/src/main/java/com/navi/hl/steps/viewmodel/SharedFormSearchVM.kt @@ -11,6 +11,7 @@ import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import com.navi.common.viewmodel.BaseVM import com.navi.homeloan.common.models.HLNavigationHeader +import com.navi.homeloan.common.models.HLPanVerificationStatusFromAP import com.navi.homeloan.common.models.HLTowerSelectionData import com.navi.homeloan.common.models.InputSearchRow import com.navi.naviwidgets.widgets.labeledinputsearch.LabeledTextInputSearchWidgetModel @@ -33,6 +34,14 @@ class SharedFormSearchVM : BaseVM() { val towerAdditionalData: LiveData get() = _towerAdditionalData + private val _panVerificationStatusFromAP = MutableLiveData() + val panVerificationStatusFromAP: LiveData + get() = _panVerificationStatusFromAP + + fun setPanVerificationStatusResult(status: Boolean) { + _panVerificationStatusFromAP.value = HLPanVerificationStatusFromAP(status) + } + fun setSelectedSearchItem(selectedItem: InputSearchRow? = null) { _selectedItem.value = selectedItem } diff --git a/navi_hl_dynamic/src/main/java/com/navi/hl/tracker/activity/HomeLoanIntroActivity.kt b/navi_hl_dynamic/src/main/java/com/navi/hl/tracker/activity/HomeLoanIntroActivity.kt index 4b1055d017..d0f0876cfc 100644 --- a/navi_hl_dynamic/src/main/java/com/navi/hl/tracker/activity/HomeLoanIntroActivity.kt +++ b/navi_hl_dynamic/src/main/java/com/navi/hl/tracker/activity/HomeLoanIntroActivity.kt @@ -204,7 +204,7 @@ class HomeLoanIntroActivity : const val NEW_HL_SCREEN_ACTIVITY = "New_HL_Screen_Activity" } - override fun onBsCtaClick(ctaData: CtaData?, bottomSheetType: String) { + override fun onBsCtaClick(ctaData: CtaData?, bottomSheetType: String, inputTextData: String) { ctaData?.let { navigateTo(it) } } diff --git a/navi_hl_dynamic/src/main/java/com/navi/hl/utils/Constants.kt b/navi_hl_dynamic/src/main/java/com/navi/hl/utils/Constants.kt index ec851aa818..f24ffca5ba 100644 --- a/navi_hl_dynamic/src/main/java/com/navi/hl/utils/Constants.kt +++ b/navi_hl_dynamic/src/main/java/com/navi/hl/utils/Constants.kt @@ -120,4 +120,7 @@ object Constants { const val SHOULD_REFRESH_SCREEN = "SHOULD_REFRESH_SCREEN" const val CO_APPLICANT_SEND_OTP = "CO_APPLICANT_SEND_OTP" const val CO_APPLICANT_PERSONAL_DETAILS = "CO_APPLICANT_PERSONAL_DETAILS" + const val PERSONAL_EMAIL = "personalEmail" + const val PAN_VERIFICATION_REQUEST_CODE = 1002 + const val PAN_VERIFICATION_BOTTOM_SHEET = "PAN_VERIFICATION_BOTTOM_SHEET" }