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 df1d560..dfa3ef5 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 @@ -393,9 +393,10 @@ class DashboardFragment : Fragment() { if (isMib) { Toast.makeText(requireContext(), R.string.mib_qr_nfc_not_supported, Toast.LENGTH_SHORT).show() } else { + val accountNumber = (item as CardItem.Bml).account.accountNumber (requireActivity() as HomeActivity).navigateTo( R.id.nav_pay_with_card, - CardsFragment.newInstanceWithAutoTapMode() + CardsFragment.newInstanceWithAutoTapMode(accountNumber) ) } } 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 448bb84..58dc99d 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 @@ -684,16 +684,26 @@ ViewCompat.setOnApplyWindowInsetsListener(binding.contentLayout) { v, insets -> updateCardInfo(currentCardPosition) } - // Auto-enter tap mode when launched from shortcut or NFC prompt + // Auto-enter tap mode when launched from shortcut, NFC prompt, or dashboard if (!autoTapModeTriggered && arguments?.getBoolean(ARG_AUTO_TAP_MODE) == true) { - val defaultCard = cards.filterIsInstance().firstOrNull() - if (defaultCard != null) { + val targetAccount = arguments?.getString(ARG_AUTO_TAP_ACCOUNT) + val targetCard = if (targetAccount != null) + cards.filterIsInstance().firstOrNull { it.account.accountNumber == targetAccount } + else + cards.filterIsInstance().firstOrNull() + if (targetCard != null) { autoTapModeTriggered = true + // Scroll to the target card first + val pos = cards.indexOf(targetCard) + if (pos >= 0) { + currentCardPosition = pos + binding.rvCards.scrollToPosition(pos) + } val prefs = requireContext().getSharedPreferences("prefs", Context.MODE_PRIVATE) if (prefs.getBoolean("biometrics_transfer_confirm", false)) { - showBiometricPromptForTap(defaultCard) + showBiometricPromptForTap(targetCard) } else { - setTapMode(true, defaultCard) + setTapMode(true, targetCard) } } } @@ -944,8 +954,12 @@ ViewCompat.setOnApplyWindowInsetsListener(binding.contentLayout) { v, insets -> companion object { private const val ARG_AUTO_TAP_MODE = "auto_tap_mode" - fun newInstanceWithAutoTapMode() = CardsFragment().apply { - arguments = Bundle().apply { putBoolean(ARG_AUTO_TAP_MODE, true) } + private const val ARG_AUTO_TAP_ACCOUNT = "auto_tap_account" + fun newInstanceWithAutoTapMode(accountNumber: String? = null) = CardsFragment().apply { + arguments = Bundle().apply { + putBoolean(ARG_AUTO_TAP_MODE, true) + if (accountNumber != null) putString(ARG_AUTO_TAP_ACCOUNT, accountNumber) + } } fun cardImageAsset(card: MibCard): String? = when (card.cardType) {