From 8e47101401be6e8d48c859f70fed8766ddb04552 Mon Sep 17 00:00:00 2001 From: Shihaam Abdul Rahman Date: Mon, 18 May 2026 04:53:40 +0500 Subject: [PATCH] refactor: extract BML/MIB product label parsing into dedicated parser utilities --- .../sar/basedbank/ui/home/AccountsAdapter.kt | 28 +++++++------------ .../sar/basedbank/util/BmlDashboardParser.kt | 28 +++++++++++++++++++ .../sh/sar/basedbank/util/MibAccountParser.kt | 18 ++++++++++++ app/src/main/res/layout/item_card.xml | 8 ++++++ 4 files changed, 64 insertions(+), 18 deletions(-) create mode 100644 app/src/main/java/sh/sar/basedbank/util/BmlDashboardParser.kt create mode 100644 app/src/main/java/sh/sar/basedbank/util/MibAccountParser.kt diff --git a/app/src/main/java/sh/sar/basedbank/ui/home/AccountsAdapter.kt b/app/src/main/java/sh/sar/basedbank/ui/home/AccountsAdapter.kt index 11a23eb..2355f86 100644 --- a/app/src/main/java/sh/sar/basedbank/ui/home/AccountsAdapter.kt +++ b/app/src/main/java/sh/sar/basedbank/ui/home/AccountsAdapter.kt @@ -13,6 +13,8 @@ import sh.sar.basedbank.api.mib.MibAccount import sh.sar.basedbank.databinding.ItemAccountBinding import sh.sar.basedbank.databinding.ItemCardBinding import sh.sar.basedbank.databinding.ItemDateHeaderBinding +import sh.sar.basedbank.util.BmlDashboardParser +import sh.sar.basedbank.util.MibAccountParser class AccountsAdapter( accounts: List, @@ -105,7 +107,11 @@ class AccountsAdapter( fun bind(account: MibAccount) { binding.tvAccountName.text = account.accountBriefName binding.tvAccountNumber.text = account.accountNumber - binding.tvPillType.text = friendlyAccountType(account.accountTypeName) + val label = if (account.profileType.startsWith("BML")) + BmlDashboardParser.productLabel(account.accountTypeName) + else + MibAccountParser.productLabel(account.accountTypeName) + binding.tvPillType.text = label binding.tvBalance.text = "${account.currencyName} ${account.availableBalance}" binding.root.setOnClickListener { onAccountClick(account) } binding.root.setOnLongClickListener { @@ -119,8 +125,9 @@ class AccountsAdapter( RecyclerView.ViewHolder(binding.root) { fun bind(account: MibAccount) { binding.ivCardBrand.setImageResource(cardBrandIcon(account.accountTypeName)) - binding.tvCardName.text = account.accountBriefName - binding.tvCardNumber.text = account.accountNumber + binding.tvCardName.text = account.accountBriefName + binding.tvCardNumber.text = account.accountNumber + binding.tvCardProduct.text = BmlDashboardParser.productLabel(account.accountTypeName) binding.layoutCardBalance.visibility = View.VISIBLE binding.tvCardBalance.text = "${account.currencyName} ${account.availableBalance}" @@ -148,21 +155,6 @@ class AccountsAdapter( Toast.makeText(context, "Account number copied", Toast.LENGTH_SHORT).show() } - private fun friendlyAccountType(raw: String): String { - val u = raw.trim().uppercase() - return when { - u == "SAVINGS ACCOUNT" || - u == "SAVING ACCOUNT" -> "Savings" - u == "CURRENT ACCOUNT" || - u == "CURRENT ACCOUNT(PERSONAL)" || - u == "CURRENT ACCOUNT(BUSINESS)" -> "Current" - u == "WADIAH RETAIL CURRENT ACCOUNT" || - u == "WADIAH BUSINESS CURRENT ACCOUNT" -> "Islamic Current" - u == "BML ISLAMIC SAVINGS ACCOUNT" -> "Islamic Savings" - else -> raw.trim() - } - } - private fun cardBrandIcon(productName: String): Int = when { productName.contains("AMEX", ignoreCase = true) || productName.contains("AMERICAN EXPRESS", ignoreCase = true) -> R.drawable.americanexpress diff --git a/app/src/main/java/sh/sar/basedbank/util/BmlDashboardParser.kt b/app/src/main/java/sh/sar/basedbank/util/BmlDashboardParser.kt new file mode 100644 index 0000000..fc37904 --- /dev/null +++ b/app/src/main/java/sh/sar/basedbank/util/BmlDashboardParser.kt @@ -0,0 +1,28 @@ +package sh.sar.basedbank.util + +object BmlDashboardParser { + + /** + * Returns a display-ready product label for a BML dashboard account or card. + * Known BML product names are mapped to short friendly labels. + * Everything else is title-cased (first letter of each word capitalised). + */ + fun productLabel(raw: String): String { + val u = raw.trim().uppercase() + return when { + u == "SAVINGS ACCOUNT" -> "Savings" + u == "CURRENT ACCOUNT" || + u == "CURRENT ACCOUNT(PERSONAL)" || + u == "CURRENT ACCOUNT(BUSINESS)" -> "Current" + u == "WADIAH RETAIL CURRENT ACCOUNT" || + u == "WADIAH BUSINESS CURRENT ACCOUNT" -> "Islamic Current" + u == "BML ISLAMIC SAVINGS ACCOUNT" -> "Islamic Savings" + else -> toTitleCase(raw) + } + } + + fun toTitleCase(input: String): String = + input.trim().lowercase().split(" ").joinToString(" ") { word -> + word.replaceFirstChar { it.uppercaseChar() } + } +} diff --git a/app/src/main/java/sh/sar/basedbank/util/MibAccountParser.kt b/app/src/main/java/sh/sar/basedbank/util/MibAccountParser.kt new file mode 100644 index 0000000..ed210c0 --- /dev/null +++ b/app/src/main/java/sh/sar/basedbank/util/MibAccountParser.kt @@ -0,0 +1,18 @@ +package sh.sar.basedbank.util + +object MibAccountParser { + + /** + * Returns a display-ready product label for a MIB (Faisanet) account type name. + * Known MIB accountTypeName values are mapped to short friendly labels. + * Everything else is returned trimmed as-is. + */ + fun productLabel(raw: String): String { + val u = raw.trim().uppercase() + return when { + u == "SAVING ACCOUNT" -> "Savings" + u == "CURRENT ACCOUNT" -> "Current" + else -> raw.trim() + } + } +} diff --git a/app/src/main/res/layout/item_card.xml b/app/src/main/res/layout/item_card.xml index f0c4e7c..1fc4493 100644 --- a/app/src/main/res/layout/item_card.xml +++ b/app/src/main/res/layout/item_card.xml @@ -46,6 +46,14 @@ android:layout_marginTop="2dp" android:fontFamily="monospace" /> + +