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.