AE-6300 Custom Toast Change in Bank Details Page (#4327)

* AE-6300 Custom Toast Change in Bank Details Page
This commit is contained in:
Aparna Vadlamani
2022-11-14 14:36:54 +05:30
committed by GitHub Enterprise
parent f77da6a798
commit 8a14f92ffb
9 changed files with 144 additions and 11 deletions

View File

@@ -70,6 +70,8 @@ class BankDetailsVM(private val repository: BankDetailsRepository = BankDetailsR
val invalidBankCode: LiveData<GenericErrorResponse>
get() = _invalidBankCode
val toastId = MutableLiveData<Int>(null)
fun addBankDetail(bankDetail: BankDetail, loanApplicationId: String, loanType: String?) {
coroutineScope.launch {
val response = repository.submitBankDetails(bankDetail, loanApplicationId, loanType)

View File

@@ -19,12 +19,14 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.TextView
import android.widget.Toast
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.core.content.ContextCompat
import androidx.core.content.res.ResourcesCompat
import androidx.core.view.updateLayoutParams
import androidx.core.widget.TextViewCompat
import androidx.core.widget.addTextChangedListener
import androidx.lifecycle.ViewModelProvider
import com.navi.amc.common.view.InformationView
import com.navi.analytics.utils.NaviTrackEvent
import com.navi.analytics.uxcam.UxcamUtil
import com.navi.base.model.CtaData
@@ -36,6 +38,7 @@ import com.navi.common.utils.toggleViewDisability
import com.navi.design.font.FontWeightEnum
import com.navi.design.utils.getFontStyle
import com.navi.naviwidgets.base.BaseInputWidget
import com.navi.naviwidgets.widgets.textdisplay.Margin
import com.navi.naviwidgets.widgets.textdisplay.Padding
import com.naviapp.R
import com.naviapp.analytics.utils.NaviAnalytics
@@ -52,7 +55,7 @@ import com.naviapp.network.ApiErrorTagType.FETCH_LOAN_BASIC_DETAILS_ERROR
import com.naviapp.personalloan.getloan.activities.BankAccountVerificationLoaderActivity
import com.naviapp.personalloan.getloan.activities.GetLoanActivity
import com.naviapp.personalloan.getloan.activities.GetLoanActivity.Companion.IS_FOR_SECOND_LOAN_JOURNEY
import com.naviapp.personalloan.getloan.bankdetails.fragments.*
import com.naviapp.personalloan.getloan.bankdetails.fragments.BankDetailsFragment
import com.naviapp.personalloan.getloan.bankdetails.listeners.FindIfscListener
import com.naviapp.personalloan.getloan.bankdetails.listeners.OnSelectBankListener
import com.naviapp.personalloan.getloan.bankdetails.viewmodels.BankDetailsVM
@@ -673,7 +676,30 @@ class BankDetailsV2Fragment :
}
?: run {
binding.bankNameSearch.setError(getString(R.string.bank_name_error_header))
context?.toast(R.string.select_valid_bank)
viewModel.toastId.value?.let {
binding.root.findViewById<View>(it).visibility = View.VISIBLE
} ?: run {
val view = context?.let { InformationView(it) }
view?.id = View.generateViewId()
view?.setProperties(
BankDetailsV2Helper.getCustomToastProperties(
getString(R.string.select_valid_bank),
null
),
)
view?.setMargin(
Margin(
startDp = 16.0f,
endDp = 16.0f,
bottomDp = 144.0f
)
)
view?.updateLayoutParams<ConstraintLayout.LayoutParams> {
this.bottomToBottom = ConstraintLayout.LayoutParams.PARENT_ID
}
binding.container.addView(view)
viewModel.toastId.value = view?.id
}
}
}
@@ -768,6 +794,9 @@ class BankDetailsV2Fragment :
bank.name?.let {
binding.bankNameSearch.setText(it, false, false)
binding.bankNameSearch.setError(null)
viewModel.toastId.value?.let { toastIdValue ->
binding.root.findViewById<View>(toastIdValue).visibility = View.GONE
}
}
binding.bankAccountNumberLt.updateTextInputData("")
binding.ifscLt.widgetBinding.plainTextInput.requestFocus()
@@ -781,11 +810,7 @@ class BankDetailsV2Fragment :
}
override fun onClickUnserviceableBank() {
context?.toast(
getString(R.string.this_bank_is_not_supported),
offsetY = 200,
length = Toast.LENGTH_SHORT
)
}
override fun onFooterBackPressed(backCta: CtaData?) {

View File

@@ -18,17 +18,19 @@ import com.navi.common.utils.observeNonNull
import com.naviapp.R
import com.naviapp.common.viewmodel.ActiveLoanDetailsVM
import com.naviapp.databinding.SelectBankV2LayoutBinding
import com.naviapp.models.response.Bank
import com.naviapp.models.response.BankDetailsHeaderData
import com.naviapp.personalloan.getloan.bankdetails.listeners.OnSelectBankListener
import com.naviapp.personalloan.getloan.bankdetails.viewmodels.BankDetailsVM
import com.naviapp.personalloanrevamp.getloanRevamp.adapters.SelectBankAdapter
import com.naviapp.personalloanrevamp.getloanRevamp.customview.SearchV2Field
import com.naviapp.personalloanrevamp.getloanRevamp.helper.BankDetailsV2Helper
import com.naviapp.utils.IconUtils
import dagger.hilt.android.AndroidEntryPoint
@AndroidEntryPoint
class SelectBankV2Fragment :
BaseBottomSheet(), SearchV2Field.SearchFieldListener {
BaseBottomSheet(), SearchV2Field.SearchFieldListener, OnSelectBankListener {
private lateinit var binding: SelectBankV2LayoutBinding
private var adapter: SelectBankAdapter? = null
private val viewModel by lazy { ViewModelProvider(this).get(BankDetailsVM::class.java) }
@@ -52,7 +54,7 @@ class SelectBankV2Fragment :
}
private fun initUI() {
adapter = SelectBankAdapter(bankSelectListener)
adapter = SelectBankAdapter(this)
binding.bankNameSf.setOnSearchListener(this)
binding.bankNameSf.setHint(R.string.search)
arguments?.getString(SELECTED_BANK)?.let { binding.bankNameSf.setText(it) }
@@ -142,4 +144,19 @@ class SelectBankV2Fragment :
HOME_LOAN,
ACCOUNT_AGGREGATOR
}
override fun onSelectBank(bank: Bank) {
binding.toast.visibility = View.GONE
bankSelectListener?.onSelectBank(bank)
}
override fun onClickUnserviceableBank() {
binding.toast.setProperties(
BankDetailsV2Helper.getCustomToastProperties(
getString(R.string.this_bank_is_not_supported_title),
getString(R.string.kindly_select_some_other_bank_subtitle)
)
)
bankSelectListener?.onClickUnserviceableBank()
}
}

View File

@@ -1,6 +1,11 @@
package com.naviapp.personalloanrevamp.getloanRevamp.helper
import android.content.Context
import com.navi.amc.common.model.InformationCardData
import com.navi.design.font.FontWeightEnum
import com.navi.design.textview.model.NaviSpan
import com.navi.design.textview.model.TextWithStyle
import com.navi.naviwidgets.utils.NaviWidgetIconUtils
import com.navi.naviwidgets.widgets.TextInputUtil
import com.navi.naviwidgets.widgets.labledtextinput.InputTextWidgetMeta
import com.navi.naviwidgets.widgets.labledtextinput.LabeledTextInputWidgetModelV2
@@ -38,4 +43,44 @@ object BankDetailsV2Helper {
}
)
}
fun getCustomToastProperties(title: String?, subtitle: String?): InformationCardData {
return InformationCardData(
leftIcon = NaviWidgetIconUtils.ICON_ERROR_OUTLINED_ROUND_EXCLAMATION,
rightIcon = NaviWidgetIconUtils.CROSS,
bgColor = "#FFFFEAEA",
title = getTitleTextProperties(title),
subtitle = getSubtitleTextProperties(subtitle)
)
}
private fun getTitleTextProperties(title: String?): TextWithStyle? {
return title?.let {
TextWithStyle(
text = title,
style = listOf(
NaviSpan(
fontSize = 14.0,
spanColor = "#EF0000",
fontName = FontWeightEnum.BOLD.name
)
)
)
}
}
private fun getSubtitleTextProperties(subtitle: String?): TextWithStyle? {
return subtitle?.let {
TextWithStyle(
text = subtitle,
style = listOf(
NaviSpan(
fontSize = 12.0,
spanColor = "#4D4D4D",
fontName = FontWeightEnum.SEMI_BOLD.name
)
)
)
}
}
}

View File

@@ -42,6 +42,7 @@
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white">
@@ -193,6 +194,18 @@
</androidx.constraintlayout.widget.ConstraintLayout>
<com.navi.amc.common.view.InformationView
android:id="@+id/toast"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_16"
android:layout_marginEnd="@dimen/dp_16"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="parent" />
<com.naviapp.common.customview.FooterViewV2
android:id="@+id/footer_view"
android:layout_width="match_parent"

View File

@@ -18,6 +18,7 @@
</data>
<LinearLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
@@ -59,6 +60,14 @@
android:scrollbars="vertical"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />
<com.navi.amc.common.view.InformationView
android:id="@+id/toast"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/dp_16"
android:layout_marginEnd="@dimen/dp_16"
android:layout_marginTop="-144dp"
android:visibility="gone" />
<View
android:layout_width="match_parent"
android:layout_height="match_parent"

View File

@@ -413,6 +413,8 @@
<string name="otp_via_call_text">You will receive otp via call</string>
<string name="supported_banks">All Supported Banks</string>
<string name="this_bank_is_not_supported">This bank is not supported. Kindly select some other bank.</string>
<string name="this_bank_is_not_supported_title">This bank is not supported.</string>
<string name="kindly_select_some_other_bank_subtitle">Kindly select some other bank.</string>
<string name="my_loans_menu_item">My Loans</string>
<string name="insurance_menu_item">Insurance</string>

View File

@@ -231,7 +231,7 @@ object NaviWidgetIconUtils {
private const val INSURANCE_HAND_SHIELD = "INSURANCE_HAND_SHIELD"
private const val RED_ICON_CROSS = "RED_ICON_CROSS"
private const val EMPTY_STATE = "EMPTY_STATE"
private const val CROSS = "CROSS"
const val CROSS = "CROSS"
private const val ARROW_TERTIARY = "ARROW_TERTIARY"
private const val EXCLAMATION_TOAST = "EXCLAMATION_TOAST"
private const val YELLOW_EXCLAMATION_TOAST = "YELLOW_EXCLAMATION_TOAST"
@@ -252,6 +252,7 @@ object NaviWidgetIconUtils {
private const val ACCOUNT_TYPE_ORANGE = "ACCOUNT_TYPE_ORANGE"
private const val VERIFY_OTP_ORANGE = "VERIFY_OTP_ORANGE"
private const val ICON_BIG_ERROR_RED = "ICON_BIG_ERROR_RED"
const val ICON_ERROR_OUTLINED_ROUND_EXCLAMATION = "ICON_ERROR_OUTLINED_ROUND_EXCLAMATION"
fun updateIcon(
imageDetail: ImageDetail,
@@ -528,6 +529,7 @@ object NaviWidgetIconUtils {
ACCOUNT_TYPE_ORANGE -> R.drawable.ic_account_type_orange
VERIFY_OTP_ORANGE -> R.drawable.ic_verify_otp_orange
ICON_BIG_ERROR_RED -> R.drawable.ic_big_error
ICON_ERROR_OUTLINED_ROUND_EXCLAMATION -> R.drawable.ic_error_outlined
BADGE_PLUS_UPGRADE -> R.drawable.badge_plus_upgrade
else -> -1
}

View File

@@ -0,0 +1,18 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M12,3C7.029,3 3,7.029 3,12C3,16.971 7.029,21 12,21C16.971,21 21,16.971 21,12C21,7.029 16.971,3 12,3ZM1,12C1,5.925 5.925,1 12,1C18.075,1 23,5.925 23,12C23,18.075 18.075,23 12,23C5.925,23 1,18.075 1,12Z"
android:fillColor="#EF0000"
android:fillType="evenOdd"/>
<path
android:pathData="M12,7C12.552,7 13,7.448 13,8V12C13,12.552 12.552,13 12,13C11.448,13 11,12.552 11,12V8C11,7.448 11.448,7 12,7Z"
android:fillColor="#EF0000"
android:fillType="evenOdd"/>
<path
android:pathData="M11,16C11,15.448 11.448,15 12,15H12.01C12.562,15 13.01,15.448 13.01,16C13.01,16.552 12.562,17 12.01,17H12C11.448,17 11,16.552 11,16Z"
android:fillColor="#EF0000"
android:fillType="evenOdd"/>
</vector>