package sh.sar.basedbank import android.content.Intent import android.os.Bundle import androidx.appcompat.app.AppCompatActivity import sh.sar.basedbank.ui.home.HomeActivity import sh.sar.basedbank.ui.login.LoginActivity import sh.sar.basedbank.ui.onboarding.OnboardingActivity import sh.sar.basedbank.util.CredentialStore import sh.sar.basedbank.BasedBankApp import sh.sar.basedbank.R class MainActivity : AppCompatActivity() { private fun decodeQrFromSharedImage(uri: android.net.Uri): String? { return try { val bitmap = contentResolver.openInputStream(uri)?.use { android.graphics.BitmapFactory.decodeStream(it) } ?: return null val opts = de.markusfisch.android.zxingcpp.ZxingCpp.ReaderOptions( tryHarder = true, tryRotate = true, tryInvert = true, tryDownscale = true, maxNumberOfSymbols = 1, textMode = de.markusfisch.android.zxingcpp.ZxingCpp.TextMode.PLAIN ) val result = (de.markusfisch.android.zxingcpp.ZxingCpp.readBitmap( bitmap, 0, 0, bitmap.width, bitmap.height, 0, opts.apply { binarizer = de.markusfisch.android.zxingcpp.ZxingCpp.Binarizer.LOCAL_AVERAGE } ) ?: de.markusfisch.android.zxingcpp.ZxingCpp.readBitmap( bitmap, 0, 0, bitmap.width, bitmap.height, 0, opts.apply { binarizer = de.markusfisch.android.zxingcpp.ZxingCpp.Binarizer.GLOBAL_HISTOGRAM } ))?.firstOrNull()?.text bitmap.recycle() result } catch (_: Exception) { null } } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val prefs = getSharedPreferences("prefs", MODE_PRIVATE) val onboardingDone = prefs.getBoolean("onboarding_done", false) val securitySet = prefs.getString("security_method", null) != null val store = CredentialStore(this) val hasCredentials = store.hasMibCredentials() || store.hasBmlCredentials() || store.hasFahipayCredentials() || store.hasMfaisaCredentials() // Image shared via "Scan to Pay" — decode QR here while we still hold the URI permission val shareQrText: String? = if (intent?.action == Intent.ACTION_SEND && intent.type?.startsWith("image/") == true) { val uri: android.net.Uri? = if (android.os.Build.VERSION.SDK_INT >= 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 "sh.sar.basedbank.OPEN_PAY_WITH_CARD" -> R.id.nav_pay_with_card "sh.sar.basedbank.TAP_TO_PAY" -> R.id.nav_pay_with_card else -> -1 } val autoScan = intent?.action == "sh.sar.basedbank.OPEN_SCAN_QR" val autoTapMode = intent?.action == "sh.sar.basedbank.TAP_TO_PAY" val target = when { !onboardingDone -> OnboardingActivity::class.java !hasCredentials -> LoginActivity::class.java securitySet -> LockActivity::class.java // proceed() → HomeActivity else -> HomeActivity::class.java } // No lock screen configured — mark as unlocked so HomeActivity's guard passes if (target == HomeActivity::class.java) { (application as BasedBankApp).isUnlocked = true } startActivity(Intent(this, target).apply { 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() } }