diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 4eb8478..6cd18bb 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -81,6 +81,20 @@
android:resource="@xml/bml_aid_list" />
+
+
+
+
+
+
+
+
+
= android.os.Build.VERSION_CODES.TIRAMISU)
+ intent.getParcelableExtra(Intent.EXTRA_STREAM, android.net.Uri::class.java)
+ else
+ @Suppress("DEPRECATION") intent.getParcelableExtra(Intent.EXTRA_STREAM)
+ if (uri != null) decodeQrFromSharedImage(uri) else null
+ } else null
+
val navDestination = when (intent?.action) {
"sh.sar.basedbank.OPEN_TRANSFER" -> R.id.nav_transfer
"sh.sar.basedbank.OPEN_SCAN_QR" -> R.id.nav_transfer
@@ -46,6 +79,7 @@ class MainActivity : AppCompatActivity() {
if (navDestination != -1) putExtra("nav_destination", navDestination)
if (autoScan) putExtra("auto_scan", true)
if (autoTapMode) putExtra("auto_tap_mode", true)
+ if (shareQrText != null) putExtra("share_qr_text", shareQrText)
})
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 1d00c8a..e46b770 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
@@ -238,16 +238,25 @@ class HomeActivity : AppCompatActivity() {
val navDest = intent.getIntExtra("nav_destination", -1)
val autoScan = intent.getBooleanExtra("auto_scan", false)
val autoTapMode = intent.getBooleanExtra("auto_tap_mode", false)
- if (navDest != -1) {
- val fragment = when {
- autoScan && navDest == R.id.nav_transfer -> TransferFragment.newInstanceWithAutoScan()
- autoTapMode && navDest == R.id.nav_pay_with_card -> CardsFragment.newInstanceWithAutoTapMode()
- else -> null
+ val shareQrText = intent.getStringExtra("share_qr_text")
+ when {
+ shareQrText != null -> {
+ show(DashboardFragment())
+ binding.navigationView.setCheckedItem(R.id.nav_dashboard)
+ routeSharedQrText(shareQrText)
+ }
+ navDest != -1 -> {
+ val fragment = when {
+ autoScan && navDest == R.id.nav_transfer -> TransferFragment.newInstanceWithAutoScan()
+ autoTapMode && navDest == R.id.nav_pay_with_card -> CardsFragment.newInstanceWithAutoTapMode()
+ else -> null
+ }
+ navigateTo(navDest, fragment)
+ }
+ else -> {
+ show(DashboardFragment())
+ binding.navigationView.setCheckedItem(R.id.nav_dashboard)
}
- navigateTo(navDest, fragment)
- } else {
- show(DashboardFragment())
- binding.navigationView.setCheckedItem(R.id.nav_dashboard)
}
}
@@ -436,6 +445,25 @@ fun applyNavLabelVisibility() {
.commit()
}
+ private fun routeSharedQrText(text: String) {
+ val bmlUrl = sh.sar.basedbank.util.PaymvQrParser.extractBmlGatewayUrl(text)
+ if (text.startsWith("https://ebanking.bankofmaldives.com.mv/qrpay/") || bmlUrl != null) {
+ navigateTo(R.id.nav_transfer, TransferFragment.newInstanceFromBmlQr(bmlUrl ?: text))
+ return
+ }
+ val qr = sh.sar.basedbank.util.PaymvQrParser.parse(text)
+ if (qr?.accountNumber != null) {
+ navigateTo(R.id.nav_transfer, TransferFragment.newInstanceFromQr(
+ accountNumber = qr.accountNumber,
+ displayName = qr.merchantName ?: qr.accountNumber,
+ amount = qr.amount,
+ remarks = qr.purpose
+ ))
+ } else {
+ Toast.makeText(this, R.string.transfer_qr_invalid, Toast.LENGTH_SHORT).show()
+ }
+ }
+
override fun onResume() {
super.onResume()
// Returning from LockActivity — refresh sessions since they may have expired.