diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/bankdetails/adapters/AggregatorCheckBoxAdapter.kt b/app/src/main/java/com/naviapp/personalloan/getloan/bankdetails/adapters/AggregatorCheckBoxAdapter.kt index 20c76622f8..09c505df72 100644 --- a/app/src/main/java/com/naviapp/personalloan/getloan/bankdetails/adapters/AggregatorCheckBoxAdapter.kt +++ b/app/src/main/java/com/naviapp/personalloan/getloan/bankdetails/adapters/AggregatorCheckBoxAdapter.kt @@ -57,6 +57,7 @@ class AggregatorCheckBoxAdapter( holder.binding.aggregatorBankName.setOnClickListener { //Allow user to interract only if account is not linked previously holder.binding.aaBankNameIv.isChecked = !holder.binding.aaBankNameIv.isChecked + oneMoneyAccounts[position].isChecked = !oneMoneyAccounts[position].isChecked val tag = holder.binding.aaBankNameIv.tag if (tag is Account) { updateCheckedUi() @@ -77,7 +78,14 @@ class AggregatorCheckBoxAdapter( holder.binding.tagView.visibility = View.GONE holder.binding.aggregatorBankName.isClickable = true holder.binding.aaBankNameIv.isEnabled = true - holder.binding.aaBankNameIv.isChecked = false + holder.binding.aaBankNameIv.isChecked = oneMoneyAccounts[position].isChecked + if (holder.binding.aaBankNameIv.isChecked) { + val tag = holder.binding.aaBankNameIv.tag + if (tag is Account) { + updateCheckedUi() + sharedVM.addSelectedAccountData(tag) + } + } } updateCheckedUi() } diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/bankdetails/adapters/AggregatorFipAdapter.kt b/app/src/main/java/com/naviapp/personalloan/getloan/bankdetails/adapters/AggregatorFipAdapter.kt index 0e2c193791..872515b094 100644 --- a/app/src/main/java/com/naviapp/personalloan/getloan/bankdetails/adapters/AggregatorFipAdapter.kt +++ b/app/src/main/java/com/naviapp/personalloan/getloan/bankdetails/adapters/AggregatorFipAdapter.kt @@ -22,6 +22,7 @@ class AggregatorFipAdapter( private val fipList = oneMoneyFips + private var lastSelectedPosition = 0 override fun onCreateViewHolder( parent: ViewGroup, @@ -58,6 +59,14 @@ class AggregatorFipAdapter( holder.binding.showMaskedNumTv.text = fipList[position].data.maskedAccNumber holder.binding.fipBankType.text = fipList[position].data.fiType holder.binding.fipBankNameIv.tag = fipList[position] + if(lastSelectedPosition == position) { + holder.binding.fipBankNameIv.isChecked = true + lastSelectedPosition = -1 + val tag = holder.binding.fipBankNameIv.tag + if (tag is Account) { + sharedVM.addConsentAccountData(tag) + } + } updateCheckedUi() context?.let { val logoUrl = sharedVM.fipBankDetail.value?.get(fipList[position].data.fipId)?.logoUrl diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/bankdetails/fragments/accountaggregator/AccountAggregatorFragment.kt b/app/src/main/java/com/naviapp/personalloan/getloan/bankdetails/fragments/accountaggregator/AccountAggregatorFragment.kt index 79a314578a..aea8219498 100644 --- a/app/src/main/java/com/naviapp/personalloan/getloan/bankdetails/fragments/accountaggregator/AccountAggregatorFragment.kt +++ b/app/src/main/java/com/naviapp/personalloan/getloan/bankdetails/fragments/accountaggregator/AccountAggregatorFragment.kt @@ -9,6 +9,7 @@ import android.view.ViewGroup import androidx.lifecycle.ViewModelProvider import com.navi.common.model.CtaData import com.navi.common.sharedpref.PreferenceManager +import com.navi.common.utils.CommonUtils import com.navi.insurance.models.request.FlagUpdateRequest import com.naviapp.R import com.naviapp.analytics.utils.NaviAnalytics @@ -59,6 +60,7 @@ import com.onemoney.sdk.models.output.ConsentDetailsResponse import com.onemoney.sdk.models.output.FipList import com.onemoney.sdk.models.output.LoginOtpResponse import timber.log.Timber +import com.onemoney.sdk.models.input.InputIdentifier class AccountAggregatorFragment : BaseFragment(), FooterInteractionListener, BackListener, DialogCancelListener, BottomSheetListener { @@ -156,10 +158,12 @@ class AccountAggregatorFragment : BaseFragment(), FooterInteractionListener, Bac private fun initUi() { binding.titleTv.visibility = View.VISIBLE if (bankName.isNullOrEmpty()) { + binding.bankInfoItem.root.visibility = View.GONE binding.bankInfoItem.aaBankNameIv.visibility = View.GONE binding.bankInfoItem.bankNameTv.visibility = View.GONE binding.bankInfoItem.showBankNameTv.visibility = View.GONE } else { + binding.bankInfoItem.root.visibility = View.VISIBLE binding.bankInfoItem.aaBankNameIv.visibility = View.VISIBLE binding.bankInfoItem.bankNameTv.text = bankName binding.bankInfoItem.bankNameTv.visibility = View.VISIBLE @@ -203,18 +207,40 @@ class AccountAggregatorFragment : BaseFragment(), FooterInteractionListener, Bac showLoader() fetchLinkedAccount( onSuccess = { - val linkedAccountsForFip = sharedVM.linkedAccounts.value + val linkedAccountsForFip = sharedVM.linkedAccountsForFip.value if (linkedAccountsForFip.isNullOrEmpty().not()) { showConsentScreen(false) } else { - fetchDiscoveredAccounts() + discoverAccounts() } }, onFailure = { - fetchDiscoveredAccounts() + discoverAccounts() }) } + private fun discoverAccounts() { + showLoader() + val identifier = InputIdentifier() + identifier.category = Constants.CONSENT_IDENTIFIER_CATEGORY + identifier.type = Constants.CONSENT_IDENTIFIER_TYPE + identifier.value = CommonUtils.getPhoneNumber() + val identifiers: MutableList = ArrayList() + identifiers.add(identifier) + val fipId = sharedVM.consentResponseData.value?.fipId.orEmpty() + onemoney?.discoverAccounts(identifiers, fipId, object : AccountDetailsListener { + override fun onSuccess(accountList: MutableList?) { + hideLoader() + fetchDiscoveredAccounts() + } + + override fun onFailure(onemoneyError: OnemoneyError) { + hideLoader() + showErrorScreen(getAggregatorErrorData()) + } + }) + } + private fun fetchDiscoveredAccounts() { showLoader() onemoney?.getDiscoveredAccounts(object : AccountDetailsListener { @@ -459,6 +485,7 @@ class AccountAggregatorFragment : BaseFragment(), FooterInteractionListener, Bac // refresh content with consent details // param: fetchLinkedAccount controls whether to get fresh linked account list from onemoney or not. private fun showConsentScreen(fetchLinkedAccount: Boolean = false) { + binding.bankInfoItem.root.visibility = View.GONE binding.bankInfoItem.aaBankNameIv.visibility = View.INVISIBLE binding.bankInfoItem.bankNameTv.visibility = View.INVISIBLE binding.bankInfoItem.showBankNameTv.visibility = View.INVISIBLE @@ -523,6 +550,7 @@ class AccountAggregatorFragment : BaseFragment(), FooterInteractionListener, Bac //on back press private fun showLinkingScreen() { + binding.bankInfoItem.root.visibility = View.VISIBLE binding.bankInfoItem.aaBankNameIv.visibility = View.VISIBLE binding.bankInfoItem.bankNameTv.visibility = View.VISIBLE binding.bankInfoItem.showBankNameTv.visibility = View.VISIBLE @@ -537,7 +565,7 @@ class AccountAggregatorFragment : BaseFragment(), FooterInteractionListener, Bac binding.consentDetails.visibility = View.GONE binding.lineView.visibility = View.VISIBLE binding.rejectConsentBtn.visibility = View.GONE - fetchDiscoveredAccounts() + discoverAccounts() } private fun getButtonTitle(): String { @@ -688,7 +716,7 @@ class AccountAggregatorFragment : BaseFragment(), FooterInteractionListener, Bac KEY_OTP_DETAILS, OtpDetails( getString(R.string.enter_bank_otp_text), - showTermsAndConditions = true, + showTermsAndConditions = false, showPoweredByIcon = true ) ) diff --git a/app/src/main/java/com/naviapp/personalloan/getloan/bankdetails/models/OneMoneyAccount.kt b/app/src/main/java/com/naviapp/personalloan/getloan/bankdetails/models/OneMoneyAccount.kt index bc038d3f72..23a121c837 100644 --- a/app/src/main/java/com/naviapp/personalloan/getloan/bankdetails/models/OneMoneyAccount.kt +++ b/app/src/main/java/com/naviapp/personalloan/getloan/bankdetails/models/OneMoneyAccount.kt @@ -5,5 +5,6 @@ import com.onemoney.sdk.models.input.Account data class OneMoneyAccount( @SerializedName("account") val account: Account? = null, - @SerializedName("isLinked") val isLinked: Boolean = false + @SerializedName("isLinked") val isLinked: Boolean = false, + @SerializedName("isChecked") var isChecked: Boolean = true ) \ No newline at end of file diff --git a/app/src/main/java/com/naviapp/utils/Constants.kt b/app/src/main/java/com/naviapp/utils/Constants.kt index 1c09514d19..1441179eff 100644 --- a/app/src/main/java/com/naviapp/utils/Constants.kt +++ b/app/src/main/java/com/naviapp/utils/Constants.kt @@ -162,6 +162,8 @@ object Constants { const val SA = "sa" const val URL = "url" const val ADDITIONAL_DATA_NEEDED = "additional_data_needed" + const val CONSENT_IDENTIFIER_CATEGORY = "STRONG" + const val CONSENT_IDENTIFIER_TYPE = "MOBILE" const val CONSENT_INITIATOR_PL = "PL" const val CONSENT_INITIATOR_HL = "HL" const val EPFO_PAGE_TYPE = "EPFO_PAGE_TYPE" diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 931e15a24e..1874a375d0 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -707,8 +707,8 @@ Upload Bank Statement PDF Last 6 months downloaded statement Net Banking Login - Account Aggregator - OTP based bank statements + Bank Statement via OTP + From RBI Licensed Account Aggregator We do not store your Login details Bank Statement PDF Failed loading app! @@ -809,7 +809,7 @@ Accounts discovered for your mobile number Link these accounts with Onemoney Accounts linked to Onemoney - Account %d + Deposit Account %d Need Help? Get in touch We are registering the auto-pay mandate with your bank. It may take up to 2 days. Auto-pay setup failed. Please retry again or use another bank