From dd620763ecd70a819d0797d692ffc4d58f7c8cfa Mon Sep 17 00:00:00 2001 From: Shihaam Abdul Rahman Date: Thu, 28 May 2026 14:06:49 +0500 Subject: [PATCH] new feature: add launcher shortcuts --- app/src/main/AndroidManifest.xml | 3 ++ .../java/sh/sar/basedbank/LockActivity.kt | 7 ++- .../java/sh/sar/basedbank/MainActivity.kt | 14 +++++- .../sh/sar/basedbank/ui/home/HomeActivity.kt | 15 +++++-- .../sar/basedbank/ui/home/TransferFragment.kt | 9 ++++ .../res/drawable/ic_shortcut_pay_card.xml | 6 +++ .../res/drawable/ic_shortcut_pay_card_fg.xml | 16 +++++++ .../main/res/drawable/ic_shortcut_scan_qr.xml | 6 +++ .../res/drawable/ic_shortcut_scan_qr_fg.xml | 16 +++++++ .../res/drawable/ic_shortcut_transfer.xml | 6 +++ .../res/drawable/ic_shortcut_transfer_fg.xml | 16 +++++++ app/src/main/res/xml/shortcuts.xml | 43 +++++++++++++++++++ 12 files changed, 152 insertions(+), 5 deletions(-) create mode 100644 app/src/main/res/drawable/ic_shortcut_pay_card.xml create mode 100644 app/src/main/res/drawable/ic_shortcut_pay_card_fg.xml create mode 100644 app/src/main/res/drawable/ic_shortcut_scan_qr.xml create mode 100644 app/src/main/res/drawable/ic_shortcut_scan_qr_fg.xml create mode 100644 app/src/main/res/drawable/ic_shortcut_transfer.xml create mode 100644 app/src/main/res/drawable/ic_shortcut_transfer_fg.xml create mode 100644 app/src/main/res/xml/shortcuts.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c77a086..87f112a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -30,6 +30,9 @@ + R.id.nav_transfer + "sh.sar.basedbank.OPEN_SCAN_QR" -> R.id.nav_transfer + "sh.sar.basedbank.OPEN_PAY_WITH_CARD" -> R.id.nav_pay_with_card + else -> -1 + } + val autoScan = intent?.action == "sh.sar.basedbank.OPEN_SCAN_QR" + val target = when { !onboardingDone -> OnboardingActivity::class.java !hasCredentials -> LoginActivity::class.java @@ -31,7 +40,10 @@ class MainActivity : AppCompatActivity() { (application as BasedBankApp).isUnlocked = true } - startActivity(Intent(this, target)) + startActivity(Intent(this, target).apply { + if (navDestination != -1) putExtra("nav_destination", navDestination) + if (autoScan) putExtra("auto_scan", true) + }) finish() } } 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 e8fd174..eaef1be 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 @@ -229,10 +229,19 @@ class HomeActivity : AppCompatActivity() { viewModel.hideAmounts.value = getSharedPreferences("prefs", MODE_PRIVATE).getBoolean("hide_amounts", false) - // Show dashboard on first create + // Show dashboard on first create, or navigate to shortcut destination if (savedInstanceState == null) { - show(DashboardFragment()) - binding.navigationView.setCheckedItem(R.id.nav_dashboard) + val navDest = intent.getIntExtra("nav_destination", -1) + val autoScan = intent.getBooleanExtra("auto_scan", false) + if (navDest != -1) { + val fragment = if (autoScan && navDest == R.id.nav_transfer) + TransferFragment.newInstanceWithAutoScan() + else null + navigateTo(navDest, fragment) + } else { + show(DashboardFragment()) + binding.navigationView.setCheckedItem(R.id.nav_dashboard) + } } onBackPressedDispatcher.addCallback(this, object : OnBackPressedCallback(true) { 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 1f7fb0b..9418aa6 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 @@ -151,6 +151,11 @@ class TransferFragment : Fragment() { private const val ARG_AMOUNT_PREFILL = "amount_prefill" private const val ARG_REMARKS_PREFILL = "remarks_prefill" private const val ARG_BML_QR_URL = "bml_qr_url" + private const val ARG_AUTO_SCAN = "auto_scan" + + fun newInstanceWithAutoScan() = TransferFragment().apply { + arguments = Bundle().apply { putBoolean(ARG_AUTO_SCAN, true) } + } fun newInstanceFromBmlQr(qrUrl: String, fromAccountNumber: String? = null) = TransferFragment().apply { arguments = Bundle().apply { @@ -253,6 +258,10 @@ class TransferFragment : Fragment() { arguments?.getString(ARG_REMARKS_PREFILL)?.let { binding.etRemarks.setText(it) } arguments?.getString(ARG_BML_QR_URL)?.let { lookupBmlQrMerchant(it) } + + if (arguments?.getBoolean(ARG_AUTO_SCAN, false) == true) { + qrLauncher.launch(Intent(requireContext(), QrScannerActivity::class.java)) + } } private fun lookupBmlQrMerchant(qrUrl: String) { diff --git a/app/src/main/res/drawable/ic_shortcut_pay_card.xml b/app/src/main/res/drawable/ic_shortcut_pay_card.xml new file mode 100644 index 0000000..d7c04ef --- /dev/null +++ b/app/src/main/res/drawable/ic_shortcut_pay_card.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/app/src/main/res/drawable/ic_shortcut_pay_card_fg.xml b/app/src/main/res/drawable/ic_shortcut_pay_card_fg.xml new file mode 100644 index 0000000..61f4b7e --- /dev/null +++ b/app/src/main/res/drawable/ic_shortcut_pay_card_fg.xml @@ -0,0 +1,16 @@ + + + + + + diff --git a/app/src/main/res/drawable/ic_shortcut_scan_qr.xml b/app/src/main/res/drawable/ic_shortcut_scan_qr.xml new file mode 100644 index 0000000..b9dd5cc --- /dev/null +++ b/app/src/main/res/drawable/ic_shortcut_scan_qr.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/app/src/main/res/drawable/ic_shortcut_scan_qr_fg.xml b/app/src/main/res/drawable/ic_shortcut_scan_qr_fg.xml new file mode 100644 index 0000000..e8cc08e --- /dev/null +++ b/app/src/main/res/drawable/ic_shortcut_scan_qr_fg.xml @@ -0,0 +1,16 @@ + + + + + + diff --git a/app/src/main/res/drawable/ic_shortcut_transfer.xml b/app/src/main/res/drawable/ic_shortcut_transfer.xml new file mode 100644 index 0000000..e7ace6b --- /dev/null +++ b/app/src/main/res/drawable/ic_shortcut_transfer.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/app/src/main/res/drawable/ic_shortcut_transfer_fg.xml b/app/src/main/res/drawable/ic_shortcut_transfer_fg.xml new file mode 100644 index 0000000..db83b8f --- /dev/null +++ b/app/src/main/res/drawable/ic_shortcut_transfer_fg.xml @@ -0,0 +1,16 @@ + + + + + + diff --git a/app/src/main/res/xml/shortcuts.xml b/app/src/main/res/xml/shortcuts.xml new file mode 100644 index 0000000..c8d5579 --- /dev/null +++ b/app/src/main/res/xml/shortcuts.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + +