redesign contacts page

This commit is contained in:
2026-05-15 19:12:40 +05:00
parent b9be7cd1a3
commit 253e5400d8
3 changed files with 100 additions and 151 deletions
@@ -8,7 +8,6 @@ import android.graphics.Canvas
import android.graphics.Color
import android.graphics.Paint
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Toast
import androidx.recyclerview.widget.RecyclerView
@@ -25,14 +24,12 @@ class ContactsAdapter(
private var allContacts: List<MibBeneficiary> = emptyList()
private var displayed: List<MibBeneficiary> = emptyList()
private val imageCache = mutableMapOf<String, Bitmap>()
private val expandedPositions = mutableSetOf<Int>()
private var activeCategoryId: String? = null
private var searchQuery: String = ""
fun updateContacts(contacts: List<MibBeneficiary>) {
allContacts = contacts
expandedPositions.clear()
applyFilter()
}
@@ -46,7 +43,6 @@ class ContactsAdapter(
fun setFilter(categoryId: String?, query: String) {
activeCategoryId = categoryId
searchQuery = query
expandedPositions.clear()
applyFilter()
}
@@ -64,7 +60,30 @@ class ContactsAdapter(
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val binding = ItemContactBinding.inflate(LayoutInflater.from(parent.context), parent, false)
return ViewHolder(binding)
val holder = ViewHolder(binding)
binding.btnTransferContact.setOnClickListener {
val pos = holder.bindingAdapterPosition
if (pos != RecyclerView.NO_POSITION) onTransferClick(displayed[pos])
}
binding.btnEditContact.setOnClickListener {
Toast.makeText(it.context, R.string.work_in_progress, Toast.LENGTH_SHORT).show()
}
binding.btnDeleteContact.setOnClickListener {
val pos = holder.bindingAdapterPosition
if (pos != RecyclerView.NO_POSITION) onDeleteClick(displayed[pos])
}
binding.root.setOnLongClickListener {
val pos = holder.bindingAdapterPosition
if (pos == RecyclerView.NO_POSITION) return@setOnLongClickListener false
val account = displayed[pos].benefAccount
val clipboard = it.context.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
clipboard.setPrimaryClip(ClipData.newPlainText("account", account))
Toast.makeText(it.context, account, Toast.LENGTH_SHORT).show()
true
}
return holder
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
@@ -72,34 +91,7 @@ class ContactsAdapter(
val cachedImage = contact.customerImgHash?.let { hash ->
imageCache[hash] ?: run { onImageNeeded(hash); null }
}
holder.bind(contact, cachedImage, position in expandedPositions)
holder.binding.root.setOnClickListener {
val pos = holder.bindingAdapterPosition
if (pos == RecyclerView.NO_POSITION) return@setOnClickListener
if (pos in expandedPositions) expandedPositions.remove(pos) else expandedPositions.add(pos)
notifyItemChanged(pos)
}
holder.binding.root.setOnLongClickListener {
val ctx = it.context
val clipboard = ctx.getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
clipboard.setPrimaryClip(ClipData.newPlainText("account", contact.benefAccount))
Toast.makeText(ctx, contact.benefAccount, Toast.LENGTH_SHORT).show()
true
}
holder.binding.btnTransferContact.setOnClickListener {
onTransferClick(contact)
}
holder.binding.btnEditContact.setOnClickListener {
Toast.makeText(it.context, R.string.work_in_progress, Toast.LENGTH_SHORT).show()
}
holder.binding.btnDeleteContact.setOnClickListener {
onDeleteClick(contact)
}
holder.bind(contact, cachedImage)
}
override fun getItemCount() = displayed.size
@@ -107,10 +99,10 @@ class ContactsAdapter(
inner class ViewHolder(val binding: ItemContactBinding) :
RecyclerView.ViewHolder(binding.root) {
fun bind(contact: MibBeneficiary, photo: Bitmap?, expanded: Boolean) {
fun bind(contact: MibBeneficiary, photo: Bitmap?) {
binding.tvContactName.text = contact.benefNickName
binding.tvContactBank.text = contact.benefBankName
binding.tvContactAccount.text = "${contact.benefAccount} · ${contact.transferCyDesc}"
binding.tvContactAccount.text = contact.benefAccount
binding.tvRealName.text = "${contact.benefName} · ${contact.transferCyDesc} · ${contact.benefBankName}"
if (photo != null) {
binding.ivContactPhoto.setImageBitmap(photo)
@@ -119,12 +111,6 @@ class ContactsAdapter(
makeInitialsBitmap(contact.benefNickName, contact.bankColor)
)
}
binding.tvRealName.text = contact.benefName
val vis = if (expanded) View.VISIBLE else View.GONE
binding.dividerExpand.visibility = vis
binding.expandedSection.visibility = vis
}
private fun makeInitialsBitmap(name: String, colorHex: String): Bitmap {