transfer ui wip 1 (list from)

This commit is contained in:
2026-05-12 23:50:09 +05:00
parent 69b7862e65
commit e875163487
7 changed files with 269 additions and 6 deletions

View File

@@ -25,9 +25,12 @@ class DashboardFragment : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
viewModel.accounts.observe(viewLifecycleOwner) { updateBalances(it) }
val wip = { Toast.makeText(requireContext(), R.string.work_in_progress, Toast.LENGTH_SHORT).show() }
binding.btnTransfer.setOnClickListener { wip() }
binding.btnPayMvQr.setOnClickListener { wip() }
binding.btnTransfer.setOnClickListener {
(requireActivity() as HomeActivity).showWithBackStack(TransferFragment())
}
binding.btnPayMvQr.setOnClickListener {
Toast.makeText(requireContext(), R.string.work_in_progress, Toast.LENGTH_SHORT).show()
}
}
override fun onResume() {

View File

@@ -88,6 +88,13 @@ class HomeActivity : AppCompatActivity() {
.commit()
}
fun showWithBackStack(fragment: Fragment) {
supportFragmentManager.beginTransaction()
.replace(R.id.contentFrame, fragment)
.addToBackStack(null)
.commit()
}
private fun autoRefresh(creds: CredentialStore.MibCredentials) {
binding.refreshIndicator.visibility = View.VISIBLE
val prefs = getSharedPreferences("mib_prefs", MODE_PRIVATE)

View File

@@ -0,0 +1,92 @@
package sh.sar.basedbank.ui.home
import android.content.Context
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ArrayAdapter
import android.widget.Toast
import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels
import sh.sar.basedbank.R
import sh.sar.basedbank.api.mib.MibAccount
import sh.sar.basedbank.databinding.FragmentTransferBinding
import sh.sar.basedbank.databinding.ItemAccountDropdownBinding
class TransferFragment : Fragment() {
private var _binding: FragmentTransferBinding? = null
private val binding get() = _binding!!
private val viewModel: HomeViewModel by activityViewModels()
private var selectedAccount: MibAccount? = null
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View {
_binding = FragmentTransferBinding.inflate(inflater, container, false)
return binding.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
viewModel.accounts.observe(viewLifecycleOwner) { accounts ->
setupAccountDropdown(accounts)
}
binding.btnTransfer.setOnClickListener {
Toast.makeText(requireContext(), R.string.work_in_progress, Toast.LENGTH_SHORT).show()
}
}
private fun setupAccountDropdown(accounts: List<MibAccount>) {
val adapter = AccountDropdownAdapter(requireContext(), accounts)
binding.actvFrom.setAdapter(adapter)
if (accounts.isNotEmpty() && selectedAccount == null) {
selectedAccount = accounts[0]
binding.actvFrom.setText(accounts[0].toDisplayString(), false)
}
binding.actvFrom.setOnItemClickListener { _, _, position, _ ->
selectedAccount = accounts[position]
binding.actvFrom.setText(accounts[position].toDisplayString(), false)
}
}
override fun onResume() {
super.onResume()
requireActivity().title = getString(R.string.transfer)
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
private fun MibAccount.toDisplayString() = "$accountBriefName · $accountNumber"
private inner class AccountDropdownAdapter(
context: Context,
private val accounts: List<MibAccount>
) : ArrayAdapter<String>(context, android.R.layout.simple_list_item_1, accounts.map { it.toDisplayString() }) {
private fun bindDropdown(convertView: View?, parent: ViewGroup, position: Int): View {
val itemBinding = if (convertView?.tag is ItemAccountDropdownBinding) {
convertView.tag as ItemAccountDropdownBinding
} else {
ItemAccountDropdownBinding.inflate(LayoutInflater.from(context), parent, false)
.also { it.root.tag = it }
}
val account = accounts[position]
itemBinding.tvDropdownAccountName.text = account.accountBriefName
itemBinding.tvDropdownAccountNumber.text = account.accountNumber
itemBinding.tvDropdownBalance.text = "${account.currencyName} ${account.availableBalance}"
return itemBinding.root
}
override fun getView(position: Int, convertView: View?, parent: ViewGroup) =
bindDropdown(convertView, parent, position)
override fun getDropDownView(position: Int, convertView: View?, parent: ViewGroup) =
bindDropdown(convertView, parent, position)
}
}