From 982596f2a812a581b3b8f5aad1af1651f8c7fd05 Mon Sep 17 00:00:00 2001 From: Shihaam Abdul Rahman Date: Wed, 3 Jun 2026 20:01:55 +0500 Subject: [PATCH] fix bug that allowed user to bypass warning slide during onboarding --- .../basedbank/ui/onboarding/OnboardingActivity.kt | 12 ++++++++---- .../basedbank/ui/onboarding/OnboardingFragment.kt | 1 + 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/sh/sar/basedbank/ui/onboarding/OnboardingActivity.kt b/app/src/main/java/sh/sar/basedbank/ui/onboarding/OnboardingActivity.kt index a7261ab..3d12777 100644 --- a/app/src/main/java/sh/sar/basedbank/ui/onboarding/OnboardingActivity.kt +++ b/app/src/main/java/sh/sar/basedbank/ui/onboarding/OnboardingActivity.kt @@ -31,9 +31,14 @@ class OnboardingActivity : AppCompatActivity(), SecuritySetupFragment.Callback { ThemeHelper.applyAccent(this) super.onCreate(savedInstanceState) - // If security is already configured, onboarding is complete. Redirect to lock screen - // to prevent overwriting an existing PIN/pattern via direct activity launch. - if (CredentialStore(this).loadSecurityHash() != null) { + prefs = getSharedPreferences("prefs", MODE_PRIVATE) + + // Only redirect to the lock screen if onboarding is fully complete. Checking the + // security hash alone is not sufficient — the hash is written during the PIN/pattern + // setup step (page 1) which happens *before* the user clicks "Get Started", so a + // theme change or process restart mid-onboarding would otherwise trigger this guard + // and strand the user in the lock flow without finishing onboarding. + if (prefs.getBoolean("onboarding_done", false) && CredentialStore(this).loadSecurityHash() != null) { startActivity(Intent(this, LockActivity::class.java)) finish() return @@ -50,7 +55,6 @@ class OnboardingActivity : AppCompatActivity(), SecuritySetupFragment.Callback { val ta = obtainStyledAttributes(intArrayOf(android.R.attr.colorBackground)) window.statusBarColor = ta.getColor(0, if (isLight) android.graphics.Color.WHITE else android.graphics.Color.BLACK) ta.recycle() - prefs = getSharedPreferences("prefs", MODE_PRIVATE) val originalBottomPadding = binding.bottomBar.paddingBottom ViewCompat.setOnApplyWindowInsetsListener(binding.bottomBar) { view, insets -> val navBar = insets.getInsets(WindowInsetsCompat.Type.systemBars()) diff --git a/app/src/main/java/sh/sar/basedbank/ui/onboarding/OnboardingFragment.kt b/app/src/main/java/sh/sar/basedbank/ui/onboarding/OnboardingFragment.kt index af815a4..ba15a3d 100644 --- a/app/src/main/java/sh/sar/basedbank/ui/onboarding/OnboardingFragment.kt +++ b/app/src/main/java/sh/sar/basedbank/ui/onboarding/OnboardingFragment.kt @@ -59,6 +59,7 @@ class OnboardingFragment : Fragment() { private fun notifyScrolledToBottom() { if (scrolledToBottom) return + if (!isAdded) return scrolledToBottom = true parentFragmentManager.setFragmentResult(RESULT_SCROLLED_TO_BOTTOM, Bundle.EMPTY) }