TP-69840 | HL top-up phase 2 (#11414)
This commit is contained in:
@@ -176,6 +176,8 @@ import com.naviapp.utils.Constants.HPC
|
||||
import com.naviapp.utils.Constants.LOAN_ACCOUNT_NUMBER
|
||||
import com.naviapp.utils.Constants.NAVI_BBPS_REQUEST_CODE
|
||||
import com.naviapp.utils.Constants.NAVI_PAY_REQUEST_CODE
|
||||
import com.naviapp.utils.Constants.NO
|
||||
import com.naviapp.utils.Constants.PERMISSION_REQUIRED
|
||||
import com.naviapp.utils.Constants.S3URL
|
||||
import com.naviapp.utils.Constants.URL
|
||||
import com.naviapp.utils.Constants.VERIFICATION_HASH
|
||||
@@ -814,10 +816,16 @@ object NaviDeepLinkNavigator : DeepLinkListener {
|
||||
return
|
||||
}
|
||||
HL -> {
|
||||
var isPermissionRequired = true
|
||||
ctaData.parameters?.forEach { parameters ->
|
||||
if (parameters.key == PERMISSION_REQUIRED) {
|
||||
isPermissionRequired = parameters.value != NO
|
||||
}
|
||||
}
|
||||
if (
|
||||
activity?.let {
|
||||
hasPermissions(it, getLendingPermissionList()).not()
|
||||
} == true
|
||||
} == true && isPermissionRequired
|
||||
) {
|
||||
intent =
|
||||
Intent(activity, LendingPermissionActivity::class.java).apply {
|
||||
|
||||
@@ -463,8 +463,8 @@ object Constants {
|
||||
const val PROFILE = "profile"
|
||||
const val DEFAULT_PROFILE_BACKGROUND_COLOR = "#F9F9FA"
|
||||
const val PROFILE_DEFAULT_ANIMATION_TIME = 300
|
||||
|
||||
const val SECTION_CONTENT_SIZE = 3
|
||||
const val PERMISSION_REQUIRED = "permissionRequired"
|
||||
const val INVESTMENT_TAB_INIT_LANDING_PAGE = "investment_tab_init_landing_page"
|
||||
|
||||
// Constants for Animation label
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
*
|
||||
* * Copyright © 2022-2023 by Navi Technologies Limited
|
||||
* * Copyright © 2022-2024 by Navi Technologies Limited
|
||||
* * All rights reserved. Strictly confidential
|
||||
*
|
||||
*/
|
||||
@@ -22,6 +22,9 @@ data class HomeLoanIncomeVerificationResponse(
|
||||
@SerializedName("searchWidgetData")
|
||||
val searchWidgetData: LabeledTextInputSearchWidgetModel? = null,
|
||||
@SerializedName("errorBottomSheetData")
|
||||
val errorBottomSheetData: HomeLoanGenericBottomSheetData? = null
|
||||
val errorBottomSheetData: HomeLoanGenericBottomSheetData? = null,
|
||||
@SerializedName("loaderType") val loaderType: String? = null,
|
||||
@SerializedName("ctaRedirectionOnIncomeVerificationSuccess")
|
||||
val ctaRedirectionOnIncomeVerificationSuccess: Boolean? = false
|
||||
)
|
||||
}
|
||||
|
||||
@@ -53,6 +53,41 @@
|
||||
app:lottie_loop="true"
|
||||
app:lottie_speed="1.0" />
|
||||
|
||||
<androidx.constraintlayout.widget.ConstraintLayout
|
||||
android:id="@+id/circular_loader_view"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:visibility="gone"
|
||||
android:background="@color/white">
|
||||
|
||||
<com.airbnb.lottie.LottieAnimationView
|
||||
android:id="@+id/circular_lottie"
|
||||
android:layout_width="@dimen/layout_dp_100"
|
||||
android:layout_height="@dimen/layout_dp_100"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintVertical_bias="0.4"
|
||||
app:lottie_autoPlay="true"
|
||||
app:lottie_fileName="navi_new_loader.json"
|
||||
app:lottie_loop="true"
|
||||
app:lottie_speed="1.0" />
|
||||
|
||||
<com.navi.design.textview.NaviTextView
|
||||
android:id="@+id/loader_title"
|
||||
style="@style/ButtonTextBoldBlack"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_margin="@dimen/dp_20"
|
||||
android:gravity="center"
|
||||
android:paddingHorizontal="@dimen/dp_16"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintTop_toBottomOf="@+id/circular_lottie" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
|
||||
<View
|
||||
android:id="@+id/fullScreenView"
|
||||
android:layout_width="match_parent"
|
||||
|
||||
@@ -68,11 +68,15 @@ import com.navi.hl.steps.viewmodel.HomeLoanLoaderSharedVM
|
||||
import com.navi.hl.utils.Constants.ACTION
|
||||
import com.navi.hl.utils.Constants.ALTERNATIVE_CHOSEN
|
||||
import com.navi.hl.utils.Constants.APPROVED
|
||||
import com.navi.hl.utils.Constants.CIRCULAR_LOADER
|
||||
import com.navi.hl.utils.Constants.CTA_REDIRECTION_ENABLED
|
||||
import com.navi.hl.utils.Constants.FAILURE
|
||||
import com.navi.hl.utils.Constants.FS_LOTTIE
|
||||
import com.navi.hl.utils.Constants.HL_NEW
|
||||
import com.navi.hl.utils.Constants.HOME_LOAN_LOADER
|
||||
import com.navi.hl.utils.Constants.LAUNCH_PERFIOS_SDK
|
||||
import com.navi.hl.utils.Constants.LOADER_POLLING_TIMEOUT
|
||||
import com.navi.hl.utils.Constants.LOADER_TYPE
|
||||
import com.navi.hl.utils.Constants.LOAN_ACTION_TYPE
|
||||
import com.navi.hl.utils.Constants.LOAN_APPLICATION_ID
|
||||
import com.navi.hl.utils.Constants.POLLING_TIMEOUT
|
||||
@@ -121,6 +125,8 @@ class HLAccountAggregatorActivity : HomeLoanBaseActivity(), HLCommonBottomSheetL
|
||||
private var customerReferenceId: String? = null
|
||||
private val commonAnalyticsTracker = CommonNaviAnalytics.naviAnalytics.Errors()
|
||||
private var loaderQueryMap = HashMap<String, String>()
|
||||
private var loaderType: String? = null
|
||||
private var ctaRedirectionEnabled: Boolean? = null
|
||||
|
||||
private val anubhavSDK =
|
||||
registerForActivityResult(OpenFinarkeinAnubhav()) {
|
||||
@@ -143,6 +149,8 @@ class HLAccountAggregatorActivity : HomeLoanBaseActivity(), HLCommonBottomSheetL
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
binding = DataBindingUtil.setContentView(this, R.layout.account_aggregator_activity)
|
||||
loaderType = intent?.extras?.getString(LOADER_TYPE).orElse(FS_LOTTIE)
|
||||
ctaRedirectionEnabled = (intent?.extras?.getBoolean(CTA_REDIRECTION_ENABLED)).orFalse()
|
||||
setupQueryMap(intent?.extras)
|
||||
initError(
|
||||
finarkeinViewModel,
|
||||
@@ -307,9 +315,25 @@ class HLAccountAggregatorActivity : HomeLoanBaseActivity(), HLCommonBottomSheetL
|
||||
when (viewState) {
|
||||
is FinancialDataStatusAsyncResponseState.Init -> {}
|
||||
is FinancialDataStatusAsyncResponseState.Loading -> {
|
||||
binding.title.visibility = View.GONE
|
||||
binding.loaderView.visibility = View.GONE
|
||||
binding.verificationLoaderView.visibility = View.VISIBLE
|
||||
when (loaderType) {
|
||||
FS_LOTTIE -> {
|
||||
binding.title.visibility = View.GONE
|
||||
binding.loaderView.visibility = View.GONE
|
||||
binding.verificationLoaderView.visibility = View.VISIBLE
|
||||
}
|
||||
CIRCULAR_LOADER -> {
|
||||
binding.title.setTextFieldData(
|
||||
TextFieldData(
|
||||
text = getString(R.string.verifying_bank_statement),
|
||||
size = DEFAULT_TEXT_SIZE,
|
||||
font = FontWeightEnum.TT_MEDIUM.name,
|
||||
textColor = getString(R.color.colorBlack)
|
||||
)
|
||||
)
|
||||
binding.loaderView.visibility = View.VISIBLE
|
||||
binding.verificationLoaderView.visibility = View.GONE
|
||||
}
|
||||
}
|
||||
binding.progressLayout.visibility = View.VISIBLE
|
||||
}
|
||||
is FinancialDataStatusAsyncResponseState.Failure -> {
|
||||
@@ -381,7 +405,20 @@ class HLAccountAggregatorActivity : HomeLoanBaseActivity(), HLCommonBottomSheetL
|
||||
SUCCESS -> {
|
||||
releasePollingListeners()
|
||||
logRedirectionEvent(SUCCESS)
|
||||
getLoaderDetails()
|
||||
ctaRedirectionEnabled?.let {
|
||||
if (it) {
|
||||
successRedirectionCta?.let {
|
||||
DeepLinkManager.getDeepLinkListener()
|
||||
?.navigateTo(
|
||||
activity = this@HLAccountAggregatorActivity,
|
||||
ctaData = it,
|
||||
finish = true
|
||||
)
|
||||
}
|
||||
} else {
|
||||
getLoaderDetails()
|
||||
}
|
||||
}
|
||||
}
|
||||
FAILURE -> {
|
||||
releasePollingListeners()
|
||||
|
||||
@@ -30,7 +30,7 @@ import androidx.compose.foundation.layout.size
|
||||
import androidx.compose.foundation.layout.width
|
||||
import androidx.compose.foundation.layout.wrapContentHeight
|
||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||
import androidx.compose.material.Text
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
@@ -87,12 +87,16 @@ import com.navi.hl.utils.Constants.ACCOUNT_AGGREGATOR_EMPTY
|
||||
import com.navi.hl.utils.Constants.ACTION
|
||||
import com.navi.hl.utils.Constants.API_CALL_LOADER_DELAY_TIME
|
||||
import com.navi.hl.utils.Constants.APPROVED
|
||||
import com.navi.hl.utils.Constants.CIRCULAR_LOADER
|
||||
import com.navi.hl.utils.Constants.CTA_REDIRECTION_ENABLED
|
||||
import com.navi.hl.utils.Constants.FAILURE
|
||||
import com.navi.hl.utils.Constants.FLOW_ACCOUNT_AGGREGATOR
|
||||
import com.navi.hl.utils.Constants.FS_LOTTIE
|
||||
import com.navi.hl.utils.Constants.INCOME_VERIFICATION
|
||||
import com.navi.hl.utils.Constants.INCOME_VERIFICATION_UNSUCCESSFUL
|
||||
import com.navi.hl.utils.Constants.LAUNCH_PERFIOS
|
||||
import com.navi.hl.utils.Constants.LAUNCH_PERFIOS_SDK
|
||||
import com.navi.hl.utils.Constants.LOADER_TYPE
|
||||
import com.navi.hl.utils.Constants.LOAN_ACTION_TYPE
|
||||
import com.navi.hl.utils.Constants.LOAN_APPLICATION_ID
|
||||
import com.navi.hl.utils.Constants.OPERATION_CANCELLED_BY_USER
|
||||
@@ -113,6 +117,7 @@ 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.common.models.BankDataResponse
|
||||
import com.navi.homeloan.common.models.HLFooter
|
||||
import com.navi.homeloan.common.models.HomeLoanGenericBottomSheetData
|
||||
import com.navi.homeloan.common.models.IncomeVerificationPollingResponse
|
||||
import com.navi.homeloan.common.models.incomeverification.HlBankStatementRequestIdRequest
|
||||
@@ -123,6 +128,8 @@ import com.navi.naviwidgets.adapters.NaviAdapter
|
||||
import com.navi.naviwidgets.callbacks.WidgetCallback
|
||||
import com.navi.naviwidgets.extensions.NaviImage
|
||||
import com.navi.naviwidgets.extensions.NaviTextWidgetized
|
||||
import com.navi.naviwidgets.extensions.setTextFieldData
|
||||
import com.navi.naviwidgets.models.response.TextFieldData
|
||||
import com.navi.naviwidgets.viewholder.ViewHolderFactoryImpl
|
||||
import com.navi.naviwidgets.widgets.labeledinputsearch.ui.FilterAction
|
||||
import com.naviapp.common.navigator.NaviHLDeeplinkNavigator
|
||||
@@ -582,17 +589,29 @@ class HomeLoanIncomeVerificationFragment :
|
||||
private fun onBankStatementStatusReceived(pollingResponse: IncomeVerificationPollingResponse) {
|
||||
when (pollingResponse.uploadDataAsyncResponse?.status) {
|
||||
SUCCESS -> {
|
||||
getLoaderDetails()
|
||||
analyticsEventTracker.onPerfiosSuccess()
|
||||
if (
|
||||
viewModel.screenResponse.value
|
||||
?.content
|
||||
?.ctaRedirectionOnIncomeVerificationSuccess == true
|
||||
) {
|
||||
navigateThroughCta(viewModel.screenResponse.value?.footer)
|
||||
} else {
|
||||
getLoaderDetails()
|
||||
}
|
||||
}
|
||||
FAILURE -> {
|
||||
analyticsEventTracker.onPerfiosFailure()
|
||||
stopPollingAndCallNextScreen(pollingResponse.cta)
|
||||
logPollingErrorEvent()
|
||||
analyticsEventTracker.onPerfiosFailure()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun navigateThroughCta(footer: HLFooter?) {
|
||||
footer?.nextCta?.let { moveToNextScreen(it) }
|
||||
}
|
||||
|
||||
private fun logPollingErrorEvent() {
|
||||
analyticsEventTracker.onHLThirdPartyErrors(
|
||||
homeLoanType = queryMap[LOAN_ACTION_TYPE],
|
||||
@@ -837,7 +856,17 @@ class HomeLoanIncomeVerificationFragment :
|
||||
binding.searchContentRv.visibility = View.GONE
|
||||
binding.searchWidget.visibility = View.GONE
|
||||
listener?.hideTrackerHeader()
|
||||
binding.verificationLoaderView.visibility = View.VISIBLE
|
||||
viewModel.screenResponse.value?.content?.loaderType?.let {
|
||||
when (it) {
|
||||
FS_LOTTIE -> binding.verificationLoaderView.visibility = View.VISIBLE
|
||||
CIRCULAR_LOADER -> {
|
||||
binding.loaderTitle.setTextFieldData(
|
||||
TextFieldData(text = getString(CommonR.string.verifying_bank_statement))
|
||||
)
|
||||
binding.circularLoaderView.visibility = View.VISIBLE
|
||||
}
|
||||
}
|
||||
} ?: run { binding.verificationLoaderView.visibility = View.VISIBLE }
|
||||
}
|
||||
|
||||
private fun hideLottieLoader() {
|
||||
@@ -845,6 +874,7 @@ class HomeLoanIncomeVerificationFragment :
|
||||
binding.searchWidget.visibility = View.VISIBLE
|
||||
listener?.showTrackerHeader()
|
||||
binding.verificationLoaderView.visibility = View.GONE
|
||||
binding.circularLoaderView.visibility = View.GONE
|
||||
}
|
||||
|
||||
private fun navigateAsPerProvider(
|
||||
@@ -862,6 +892,14 @@ class HomeLoanIncomeVerificationFragment :
|
||||
analyticsEventTracker.onIncomeVerificationOnemoneyFlow()
|
||||
}
|
||||
val bundle = Bundle()
|
||||
bundle.putString(LOADER_TYPE, viewModel.screenResponse.value?.content?.loaderType)
|
||||
bundle.putBoolean(
|
||||
CTA_REDIRECTION_ENABLED,
|
||||
viewModel.screenResponse.value
|
||||
?.content
|
||||
?.ctaRedirectionOnIncomeVerificationSuccess
|
||||
.orFalse()
|
||||
)
|
||||
bundle.putString(FIP_ID, fipId)
|
||||
bundle.putString(Constants.INITIATED_BY, ModuleNameV2.HL.name)
|
||||
bundle.putString(Constants.SERVICE_PROVIDER, serviceProvider)
|
||||
|
||||
@@ -61,8 +61,6 @@ object Constants {
|
||||
const val SELFIE_UPLOAD_UNSUCCESSFUL = "SELFIE_UPLOAD_UNSUCCESSFUL"
|
||||
const val INCOME_VERIFICATION_UNSUCCESSFUL = "INCOME_VERIFICATION_UNSUCCESSFUL"
|
||||
const val OPERATION_CANCELLED_BY_USER = "OPERATION_CANCELLED_BY_USER"
|
||||
const val OFFER_SUCCESS_CTA = "OFFER_SUCCESS_CTA"
|
||||
const val OFFER_AMOUNT_TEXT = "OFFER_AMOUNT_TEXT"
|
||||
const val APPROVED = "APPROVED"
|
||||
const val REJECTED = "REJECTED"
|
||||
const val PINCODE_SIZE = 6
|
||||
@@ -132,4 +130,8 @@ object Constants {
|
||||
const val PAN_VERIFICATION_BOTTOM_SHEET = "PAN_VERIFICATION_BOTTOM_SHEET"
|
||||
const val TOP_UP_PROPERTY_DETAILS = "TOP_UP_PROPERTY_DETAILS"
|
||||
const val TOP_UP_SELECT_LOAN_PURPOSE = "TOP_UP_SELECT_LOAN_PURPOSE"
|
||||
const val LOADER_TYPE = "LOADER_TYPE"
|
||||
const val FS_LOTTIE = "FS_LOTTIE"
|
||||
const val CIRCULAR_LOADER = "CIRCULAR_LOADER"
|
||||
const val CTA_REDIRECTION_ENABLED = "CTA_REDIRECTION_ENABLED"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user