From 961df376bc52e53c1acdae6c0d499136791f3213 Mon Sep 17 00:00:00 2001 From: Aditya Narayan Malik Date: Tue, 27 May 2025 20:33:53 +0530 Subject: [PATCH] NTP-67678 | Accounts already added error fix (#16303) --- .../model/network/FetchAccountsResponse.kt | 3 ++- .../view/AccountAdditionBottomSheetType.kt | 2 ++ .../ui/AccountAdditionBottomSheetContent.kt | 22 +++++++++++++++++++ .../add/viewmodel/AccountAdditionViewModel.kt | 15 ++++++++++++- .../view/AccountAdditionScreenContract.kt | 2 ++ .../common/utils/OnboardingUtils.kt | 16 ++++++++++++++ .../navi-pay/src/main/res/values/strings.xml | 6 +++++ 7 files changed, 64 insertions(+), 2 deletions(-) diff --git a/android/navi-pay/src/main/kotlin/com/navi/pay/onboarding/account/add/model/network/FetchAccountsResponse.kt b/android/navi-pay/src/main/kotlin/com/navi/pay/onboarding/account/add/model/network/FetchAccountsResponse.kt index b20c0dfd04..ac48e21ac1 100644 --- a/android/navi-pay/src/main/kotlin/com/navi/pay/onboarding/account/add/model/network/FetchAccountsResponse.kt +++ b/android/navi-pay/src/main/kotlin/com/navi/pay/onboarding/account/add/model/network/FetchAccountsResponse.kt @@ -11,7 +11,8 @@ import com.google.gson.annotations.SerializedName import com.navi.pay.common.model.view.PspType data class FetchAccountsResponse( - @SerializedName("bankAccounts") val accounts: List + @SerializedName("bankAccounts") val accounts: List, + @SerializedName("accountsAlreadyAdded") val accountsAlreadyAdded: Boolean, ) data class AccountItemResponse( diff --git a/android/navi-pay/src/main/kotlin/com/navi/pay/onboarding/account/add/model/view/AccountAdditionBottomSheetType.kt b/android/navi-pay/src/main/kotlin/com/navi/pay/onboarding/account/add/model/view/AccountAdditionBottomSheetType.kt index 2e69ba426b..e299f63eb3 100644 --- a/android/navi-pay/src/main/kotlin/com/navi/pay/onboarding/account/add/model/view/AccountAdditionBottomSheetType.kt +++ b/android/navi-pay/src/main/kotlin/com/navi/pay/onboarding/account/add/model/view/AccountAdditionBottomSheetType.kt @@ -19,6 +19,8 @@ sealed class AccountAdditionBottomSheetType { data object NoLinkedAccounts : AccountAdditionBottomSheetType() + data object AccountsAlreadyAdded : AccountAdditionBottomSheetType() + data class AddAccountSuccess( val titleText: String, val descriptionText: String? = null, diff --git a/android/navi-pay/src/main/kotlin/com/navi/pay/onboarding/account/add/ui/AccountAdditionBottomSheetContent.kt b/android/navi-pay/src/main/kotlin/com/navi/pay/onboarding/account/add/ui/AccountAdditionBottomSheetContent.kt index caf6025962..6396d7f119 100644 --- a/android/navi-pay/src/main/kotlin/com/navi/pay/onboarding/account/add/ui/AccountAdditionBottomSheetContent.kt +++ b/android/navi-pay/src/main/kotlin/com/navi/pay/onboarding/account/add/ui/AccountAdditionBottomSheetContent.kt @@ -26,7 +26,9 @@ import com.navi.pay.common.ui.TitleDescriptionWithLinearProgressBar import com.navi.pay.onboarding.account.add.model.view.AccountAdditionBottomSheetType import com.navi.pay.onboarding.account.add.model.view.BankUiModel import com.navi.pay.onboarding.account.common.model.view.AccountAdditionScreenContract +import com.navi.pay.onboarding.common.utils.getDescriptionTextIdForLinkedAccountAlreadyAddedAsPerAccountType import com.navi.pay.onboarding.common.utils.getDescriptionTextIdForNoLinkedAccountsAsPerAccountType +import com.navi.pay.onboarding.common.utils.getHeaderTextIdForLinkedAccountAlreadyAddedAsPerAccountType import com.navi.pay.onboarding.common.utils.getHeaderTextIdForNoLinkedAccountsAsPerAccountType @Composable @@ -88,6 +90,26 @@ fun AccountAdditionBottomSheetContent( }, ) } + is AccountAdditionBottomSheetType.AccountsAlreadyAdded -> { + BottomSheetContentWithIconHeaderDescButton( + iconId = CommonR.drawable.ic_exclamation_red_border, + headerTextId = + getHeaderTextIdForLinkedAccountAlreadyAddedAsPerAccountType( + accountType = state.enabledAccountTypes[state.selectedTabIndex] + ), + descriptionTextId = + getDescriptionTextIdForLinkedAccountAlreadyAddedAsPerAccountType( + accountType = state.enabledAccountTypes[state.selectedTabIndex] + ), + buttonTextId = R.string.np_okay_got_it, + isPrimaryTypeButton = true, + onButtonClicked = { + eventDispatcher( + AccountAdditionScreenContract.Event.OnLinkedAccountsAlreadyAddedCtaClicked + ) + }, + ) + } is AccountAdditionBottomSheetType.AddAccountSuccess -> { SuccessBottomSheetContent( title = bottomSheetType.titleText, diff --git a/android/navi-pay/src/main/kotlin/com/navi/pay/onboarding/account/add/viewmodel/AccountAdditionViewModel.kt b/android/navi-pay/src/main/kotlin/com/navi/pay/onboarding/account/add/viewmodel/AccountAdditionViewModel.kt index c14ef56769..b4f99f95b1 100644 --- a/android/navi-pay/src/main/kotlin/com/navi/pay/onboarding/account/add/viewmodel/AccountAdditionViewModel.kt +++ b/android/navi-pay/src/main/kotlin/com/navi/pay/onboarding/account/add/viewmodel/AccountAdditionViewModel.kt @@ -15,6 +15,7 @@ import androidx.lifecycle.viewModelScope import androidx.paging.PagingData import androidx.paging.cachedIn import com.navi.base.utils.BaseUtils +import com.navi.base.utils.EMPTY import com.navi.base.utils.ResourceProvider import com.navi.common.di.CoroutineDispatcherProvider import com.navi.common.network.ApiConstants.API_LIMIT_EXCEEDED @@ -306,7 +307,9 @@ constructor( return@safeLaunch } val fetchBankAccountResponse = fetchBankAccountApiResponse.data!!.accounts + val accountsAlreadyAdded = fetchBankAccountApiResponse.data!!.accountsAlreadyAdded handleFetchedAccounts( + accountsAlreadyAdded = accountsAlreadyAdded, fetchBankAccountResponse = fetchBankAccountResponse, selectedBank = selectedBank, selectedAccountType = selectedAccountType, @@ -405,8 +408,18 @@ constructor( fetchBankAccountResponse: List, selectedBank: BankUiModel, selectedAccountType: AccountType, + accountsAlreadyAdded: Boolean, ) { - if (fetchBankAccountResponse.isEmpty()) { + if (accountsAlreadyAdded) { + _bindingProgress.update { 0f } + onSearchQueryChanged(EMPTY) + updateBottomSheetUIState( + showBottomSheet = true, + bottomSheetStateChange = true, + bottomSheetUIState = AccountAdditionBottomSheetType.AccountsAlreadyAdded, + ) + return + } else if (fetchBankAccountResponse.isEmpty()) { _bindingProgress.update { 0f } updateBottomSheetUIState( showBottomSheet = true, diff --git a/android/navi-pay/src/main/kotlin/com/navi/pay/onboarding/account/common/model/view/AccountAdditionScreenContract.kt b/android/navi-pay/src/main/kotlin/com/navi/pay/onboarding/account/common/model/view/AccountAdditionScreenContract.kt index 029a5ec93a..845d01ef17 100644 --- a/android/navi-pay/src/main/kotlin/com/navi/pay/onboarding/account/common/model/view/AccountAdditionScreenContract.kt +++ b/android/navi-pay/src/main/kotlin/com/navi/pay/onboarding/account/common/model/view/AccountAdditionScreenContract.kt @@ -56,6 +56,8 @@ interface AccountAdditionScreenContract : data object OnZeroLinkedAccountsCtaClicked : Event() + data object OnLinkedAccountsAlreadyAddedCtaClicked : Event() + data class OnUpiGuidelinesContinueClicked(val accountEntity: LinkedAccountEntity) : Event() data class OnFetchedAccountSelected( diff --git a/android/navi-pay/src/main/kotlin/com/navi/pay/onboarding/common/utils/OnboardingUtils.kt b/android/navi-pay/src/main/kotlin/com/navi/pay/onboarding/common/utils/OnboardingUtils.kt index 3966ce3b86..99c2b16e07 100644 --- a/android/navi-pay/src/main/kotlin/com/navi/pay/onboarding/common/utils/OnboardingUtils.kt +++ b/android/navi-pay/src/main/kotlin/com/navi/pay/onboarding/common/utils/OnboardingUtils.kt @@ -41,9 +41,25 @@ fun getHeaderTextIdForNoLinkedAccountsAsPerAccountType(accountType: AccountType) AccountType.UPICREDIT -> R.string.credit_line_no_account_found_header } +fun getHeaderTextIdForLinkedAccountAlreadyAddedAsPerAccountType(accountType: AccountType): Int = + when (accountType) { + AccountType.SAVINGS -> R.string.np_bank_account_already_linked + AccountType.CREDIT -> R.string.np_rupay_credit_card_already_linked + AccountType.UPICREDIT -> R.string.np_credit_line_account_already_linked + } + fun getDescriptionTextIdForNoLinkedAccountsAsPerAccountType(accountType: AccountType): Int = when (accountType) { AccountType.SAVINGS -> R.string.no_banks_found_desc AccountType.CREDIT -> R.string.credit_card_bank_no_account_found_description AccountType.UPICREDIT -> R.string.credit_line_no_account_found_description } + +fun getDescriptionTextIdForLinkedAccountAlreadyAddedAsPerAccountType( + accountType: AccountType +): Int = + when (accountType) { + AccountType.SAVINGS -> R.string.np_bank_accounts_already_linked + AccountType.CREDIT -> R.string.np_rupay_credit_card_accounts_already_linked + AccountType.UPICREDIT -> R.string.np_rupay_credit_card_accounts_already_linked + } diff --git a/android/navi-pay/src/main/res/values/strings.xml b/android/navi-pay/src/main/res/values/strings.xml index d4a3687afa..13213ec08e 100644 --- a/android/navi-pay/src/main/res/values/strings.xml +++ b/android/navi-pay/src/main/res/values/strings.xml @@ -1111,4 +1111,10 @@ You have reached the daily limit for checking your balance. Please try again after some time. Amount exceeds UPI Lite limit UPI Lite can be used for payments up to ₹1000 only. Please choose a different payment option to continue. + Bank account already linked + Rupay Credit Card already linked + Credit Line already linked + This bank account linked to your phone number is already added to Navi UPI. + This Rupay Credit Card linked to your phone number is already added to Navi UPI. + This Credit Line linked to your phone number is already added to Navi UPI. \ No newline at end of file