remove bml linked cards from account ui, trasfer drop down and added a cards section to show master cards

This commit is contained in:
2026-05-14 05:24:29 +05:00
parent e4684ec017
commit 3ddf687c8b
3 changed files with 203 additions and 27 deletions
@@ -1,10 +1,14 @@
package sh.sar.basedbank.ui.home
import android.graphics.Color
import android.graphics.drawable.GradientDrawable
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import sh.sar.basedbank.api.mib.MibAccount
import sh.sar.basedbank.databinding.ItemAccountBinding
import sh.sar.basedbank.databinding.ItemCardBinding
import sh.sar.basedbank.databinding.ItemProfileHeaderBinding
class AccountsAdapter(accounts: List<MibAccount>) :
@@ -13,6 +17,7 @@ class AccountsAdapter(accounts: List<MibAccount>) :
private sealed class Item {
data class Header(val profileName: String, val profileType: String) : Item()
data class Account(val account: MibAccount) : Item()
data class Card(val account: MibAccount) : Item()
}
private val items: MutableList<Item> = buildItems(accounts).toMutableList()
@@ -30,28 +35,34 @@ class AccountsAdapter(accounts: List<MibAccount>) :
add(Item.Header(account.profileName, account.profileType))
lastProfile = account.profileName
}
add(Item.Account(account))
if (account.profileType == "BML_PREPAID") {
add(Item.Card(account))
} else {
add(Item.Account(account))
}
}
}
override fun getItemViewType(position: Int) = when (items[position]) {
is Item.Header -> TYPE_HEADER
is Item.Header -> TYPE_HEADER
is Item.Account -> TYPE_ACCOUNT
is Item.Card -> TYPE_CARD
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
val inflater = LayoutInflater.from(parent.context)
return if (viewType == TYPE_HEADER) {
HeaderViewHolder(ItemProfileHeaderBinding.inflate(inflater, parent, false))
} else {
AccountViewHolder(ItemAccountBinding.inflate(inflater, parent, false))
return when (viewType) {
TYPE_HEADER -> HeaderViewHolder(ItemProfileHeaderBinding.inflate(inflater, parent, false))
TYPE_CARD -> CardViewHolder(ItemCardBinding.inflate(inflater, parent, false))
else -> AccountViewHolder(ItemAccountBinding.inflate(inflater, parent, false))
}
}
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
when (val item = items[position]) {
is Item.Header -> (holder as HeaderViewHolder).bind(item)
is Item.Header -> (holder as HeaderViewHolder).bind(item)
is Item.Account -> (holder as AccountViewHolder).bind(item.account)
is Item.Card -> (holder as CardViewHolder).bind(item.account)
}
}
@@ -62,9 +73,10 @@ class AccountsAdapter(accounts: List<MibAccount>) :
fun bind(item: Item.Header) {
binding.tvProfileName.text = item.profileName
binding.tvProfileType.text = when (item.profileType) {
"BML" -> "Bank of Maldives"
"0" -> "Personal"
else -> "Business"
"BML" -> "Bank of Maldives"
"BML_PREPAID" -> "BML"
"0" -> "Personal"
else -> "Business"
}
}
}
@@ -80,8 +92,45 @@ class AccountsAdapter(accounts: List<MibAccount>) :
}
}
private inner class CardViewHolder(private val binding: ItemCardBinding) :
RecyclerView.ViewHolder(binding.root) {
fun bind(account: MibAccount) {
val brand = cardBrand(account.accountTypeName)
binding.tvCardBrand.text = brand.label
setBrandBackground(brand.color)
binding.tvCardName.text = account.accountBriefName
binding.tvCardNumber.text = account.accountNumber
val isPrepaid = account.profileType == "BML_PREPAID"
binding.layoutCardBalance.visibility = if (isPrepaid) View.VISIBLE else View.GONE
if (isPrepaid) {
binding.tvCardBalance.text = "${account.currencyName} ${account.availableBalance}"
}
}
private fun setBrandBackground(colorHex: String) {
val drawable = GradientDrawable().apply {
shape = GradientDrawable.RECTANGLE
cornerRadius = 100f
setColor(Color.parseColor(colorHex))
}
binding.tvCardBrand.background = drawable
}
}
companion object {
private const val TYPE_HEADER = 0
private const val TYPE_HEADER = 0
private const val TYPE_ACCOUNT = 1
private const val TYPE_CARD = 2
private data class Brand(val label: String, val color: String)
private fun cardBrand(productName: String): Brand = when {
productName.contains("AMEX", ignoreCase = true) ||
productName.contains("AMERICAN EXPRESS", ignoreCase = true) -> Brand("AMEX", "#016FD0")
productName.contains("VISA", ignoreCase = true) -> Brand("VISA", "#1A1F71")
productName.contains("MASTERCARD", ignoreCase = true) -> Brand("MC", "#FF5F00")
else -> Brand("CARD", "#555555")
}
}
}