From e875163487fcf79e177de6feaa60ace1f15e18a3 Mon Sep 17 00:00:00 2001 From: Shihaam Abdul Rahman Date: Tue, 12 May 2026 23:50:09 +0500 Subject: [PATCH] transfer ui wip 1 (list from) --- .../basedbank/ui/home/DashboardFragment.kt | 9 +- .../sh/sar/basedbank/ui/home/HomeActivity.kt | 7 ++ .../sar/basedbank/ui/home/TransferFragment.kt | 92 ++++++++++++++ app/src/main/res/layout/fragment_transfer.xml | 115 ++++++++++++++++++ .../main/res/layout/item_account_dropdown.xml | 40 ++++++ app/src/main/res/menu/drawer_menu.xml | 6 +- app/src/main/res/values/strings.xml | 6 + 7 files changed, 269 insertions(+), 6 deletions(-) create mode 100644 app/src/main/java/sh/sar/basedbank/ui/home/TransferFragment.kt create mode 100644 app/src/main/res/layout/fragment_transfer.xml create mode 100644 app/src/main/res/layout/item_account_dropdown.xml diff --git a/app/src/main/java/sh/sar/basedbank/ui/home/DashboardFragment.kt b/app/src/main/java/sh/sar/basedbank/ui/home/DashboardFragment.kt index 0b025f2..6c52b29 100644 --- a/app/src/main/java/sh/sar/basedbank/ui/home/DashboardFragment.kt +++ b/app/src/main/java/sh/sar/basedbank/ui/home/DashboardFragment.kt @@ -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() { diff --git a/app/src/main/java/sh/sar/basedbank/ui/home/HomeActivity.kt b/app/src/main/java/sh/sar/basedbank/ui/home/HomeActivity.kt index e93d68e..ea571b1 100644 --- a/app/src/main/java/sh/sar/basedbank/ui/home/HomeActivity.kt +++ b/app/src/main/java/sh/sar/basedbank/ui/home/HomeActivity.kt @@ -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) diff --git a/app/src/main/java/sh/sar/basedbank/ui/home/TransferFragment.kt b/app/src/main/java/sh/sar/basedbank/ui/home/TransferFragment.kt new file mode 100644 index 0000000..9254f95 --- /dev/null +++ b/app/src/main/java/sh/sar/basedbank/ui/home/TransferFragment.kt @@ -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) { + 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 + ) : ArrayAdapter(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) + } +} diff --git a/app/src/main/res/layout/fragment_transfer.xml b/app/src/main/res/layout/fragment_transfer.xml new file mode 100644 index 0000000..6c62e86 --- /dev/null +++ b/app/src/main/res/layout/fragment_transfer.xml @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/layout/item_account_dropdown.xml b/app/src/main/res/layout/item_account_dropdown.xml new file mode 100644 index 0000000..465de61 --- /dev/null +++ b/app/src/main/res/layout/item_account_dropdown.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + diff --git a/app/src/main/res/menu/drawer_menu.xml b/app/src/main/res/menu/drawer_menu.xml index ddb6b35..84fb545 100644 --- a/app/src/main/res/menu/drawer_menu.xml +++ b/app/src/main/res/menu/drawer_menu.xml @@ -5,9 +5,6 @@ - @@ -32,6 +29,9 @@ + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 2887185..82bea67 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -93,6 +93,12 @@ Accounts Available Balance + + From account + To account number + Amount + Remarks + No financing deals found Total