From bc958e2df68e6bc632b6fc757a14d13230fbf0f0 Mon Sep 17 00:00:00 2001 From: Shihaam Abdul Rahman Date: Sat, 30 May 2026 22:29:28 +0500 Subject: [PATCH] fallback to use transfer if user scanned a paymv qr after selecting a card --- .../basedbank/ui/home/PayWithCardFragment.kt | 27 ++++++++++++++++++- .../sar/basedbank/ui/home/TransferFragment.kt | 18 +++++++++++++ app/src/main/res/values/strings.xml | 1 + 3 files changed, 45 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/sh/sar/basedbank/ui/home/PayWithCardFragment.kt b/app/src/main/java/sh/sar/basedbank/ui/home/PayWithCardFragment.kt index 1f5afbb..d526d8a 100644 --- a/app/src/main/java/sh/sar/basedbank/ui/home/PayWithCardFragment.kt +++ b/app/src/main/java/sh/sar/basedbank/ui/home/PayWithCardFragment.kt @@ -87,7 +87,32 @@ class CardsFragment : Fragment() { R.id.nav_transfer, TransferFragment.newInstanceFromBmlQr(bmlUrl ?: raw, pendingQrAccountNumber) ) } else { - Toast.makeText(requireContext(), R.string.transfer_qr_invalid, Toast.LENGTH_SHORT).show() + val qr = PaymvQrParser.parse(raw) + if (qr?.accountNumber != null) { + // PayMV QR — cards are not supported for this payment type. + // Navigate to transfer with the recipient pre-filled; use default account if configured. + Toast.makeText(requireContext(), R.string.card_qr_paymv_unsupported, Toast.LENGTH_SHORT).show() + val defaultFromNumber = store.getDefaultAccountNumber() + val fragment = if (defaultFromNumber != null) { + TransferFragment.newInstanceFromQrWithFrom( + accountNumber = qr.accountNumber, + displayName = qr.merchantName ?: qr.accountNumber, + amount = qr.amount, + remarks = qr.purpose, + fromAccountNumber = defaultFromNumber + ) + } else { + TransferFragment.newInstanceFromQr( + accountNumber = qr.accountNumber, + displayName = qr.merchantName ?: qr.accountNumber, + amount = qr.amount, + remarks = qr.purpose + ) + } + (requireActivity() as HomeActivity).navigateTo(R.id.nav_transfer, fragment) + } else { + Toast.makeText(requireContext(), R.string.transfer_qr_invalid, Toast.LENGTH_SHORT).show() + } } pendingQrAccountNumber = null } 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 index ae5e16a..709eeab 100644 --- a/app/src/main/java/sh/sar/basedbank/ui/home/TransferFragment.kt +++ b/app/src/main/java/sh/sar/basedbank/ui/home/TransferFragment.kt @@ -202,6 +202,24 @@ class TransferFragment : Fragment() { if (remarks != null) putString(ARG_REMARKS_PREFILL, remarks) } } + + fun newInstanceFromQrWithFrom( + accountNumber: String, + displayName: String, + amount: String?, + remarks: String?, + fromAccountNumber: String + ) = TransferFragment().apply { + arguments = Bundle().apply { + putString(ARG_ACCOUNT, accountNumber) + putString(ARG_NAME, displayName) + putString(ARG_SUBTITLE, accountNumber) + putString(ARG_COLOR, "#607D8B") + putString(ARG_FROM_ACCOUNT, fromAccountNumber) + if (amount != null) putString(ARG_AMOUNT_PREFILL, amount) + if (remarks != null) putString(ARG_REMARKS_PREFILL, remarks) + } + } } override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 11c1b7a..7dd66d0 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -241,6 +241,7 @@ Scan to Pay Pick image Invalid or unsupported QR code + PayMV QR is not supported for card payments — switching to transfer Camera permission required Camera access is needed to scan QR codes. Please grant the permission in Settings. Camera access is needed to take a photo. Please grant the permission in Settings.