From 0158d6dcd8582b384360e872e10dcf54ef9d852e Mon Sep 17 00:00:00 2001 From: Shihaam Abdul Rahman Date: Sat, 26 Sep 2026 21:28:29 +0500 Subject: [PATCH] Always show fullscreen recipt toggle --- .../ui/home/SettingsAppearanceFragment.kt | 6 ++++ .../ui/home/TransferReceiptFragment.kt | 28 +++++++++++++++---- .../layout/fragment_settings_appearance.xml | 28 +++++++++++++++++++ app/src/main/res/values/strings.xml | 2 ++ 4 files changed, 59 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/sh/sar/basedbank/ui/home/SettingsAppearanceFragment.kt b/app/src/main/java/sh/sar/basedbank/ui/home/SettingsAppearanceFragment.kt index fa70889..1fb9528 100644 --- a/app/src/main/java/sh/sar/basedbank/ui/home/SettingsAppearanceFragment.kt +++ b/app/src/main/java/sh/sar/basedbank/ui/home/SettingsAppearanceFragment.kt @@ -167,6 +167,12 @@ class SettingsAppearanceFragment : Fragment() { val isDark = prefs.getString("theme", "system") == "dark" updatePitchBlackState(isDark) + // Receipts + binding.switchFullscreenReceipt.isChecked = prefs.getBoolean("always_fullscreen_receipt", false) + binding.switchFullscreenReceipt.setOnCheckedChangeListener { _, checked -> + prefs.edit().putBoolean("always_fullscreen_receipt", checked).apply() + } + // Accent color val savedPreset = prefs.getString("accent_preset", ThemeHelper.PRESET_BLUE) binding.accentToggle.check(when (savedPreset) { diff --git a/app/src/main/java/sh/sar/basedbank/ui/home/TransferReceiptFragment.kt b/app/src/main/java/sh/sar/basedbank/ui/home/TransferReceiptFragment.kt index c6f67bf..13f0a48 100644 --- a/app/src/main/java/sh/sar/basedbank/ui/home/TransferReceiptFragment.kt +++ b/app/src/main/java/sh/sar/basedbank/ui/home/TransferReceiptFragment.kt @@ -168,6 +168,15 @@ class TransferReceiptFragment : Fragment() { view.findViewById(R.id.btnSave).setOnClickListener { saveReceipt() } + + val alwaysFullScreen = requireContext().getSharedPreferences("prefs", Context.MODE_PRIVATE) + .getBoolean("always_fullscreen_receipt", false) + if (alwaysFullScreen) { + // The normal page is skipped: keep it laid out (share/save capture its card) but hidden, + // and leave the receipt entirely when the full-screen view is closed + view.alpha = 0f + view.post { if (_receiptCard != null) showFullScreenReceipt(closePageOnDismiss = true) } + } } // ── Data binding ────────────────────────────────────────────────────────── @@ -483,11 +492,11 @@ class TransferReceiptFragment : Fragment() { return bm } - private fun showFullScreenReceipt() { + private fun showFullScreenReceipt(closePageOnDismiss: Boolean = false) { val ctx = requireContext() val bank = arguments?.getString(ARG_BANK, "MIB") ?: "MIB" - if (bank == "BML") { showBmlFullScreenReceipt(); return } - if (bank == "MIB") { showMibFullScreenReceipt(); return } + if (bank == "BML") { showBmlFullScreenReceipt(closePageOnDismiss); return } + if (bank == "MIB") { showMibFullScreenReceipt(closePageOnDismiss); return } val dialog = Dialog(ctx, android.R.style.Theme_Black_NoTitleBar_Fullscreen) val scrollView = android.widget.ScrollView(ctx).apply { @@ -529,6 +538,7 @@ class TransferReceiptFragment : Fragment() { android.content.res.Configuration.UI_MODE_NIGHT_MASK) == android.content.res.Configuration.UI_MODE_NIGHT_NO insetsCtrl.isAppearanceLightStatusBars = isLight + if (closePageOnDismiss) closeReceiptPage() } dialog.show() dialog.window?.let { win -> @@ -545,7 +555,7 @@ class TransferReceiptFragment : Fragment() { * edge-to-edge card right under it, BML-styled Save/Share buttons directly below the card. * Follows the app theme (light/dark). */ - private fun showBmlFullScreenReceipt() { + private fun showBmlFullScreenReceipt(closePageOnDismiss: Boolean) { val ctx = requireContext() val dialog = Dialog(ctx, R.style.Theme_BasedBank) val page = DialogReceiptFullscreenBmlBinding.inflate(layoutInflater) @@ -557,6 +567,7 @@ class TransferReceiptFragment : Fragment() { )) page.btnBack.setOnClickListener { dialog.dismiss() } + if (closePageOnDismiss) dialog.setOnDismissListener { closeReceiptPage() } page.btnSaveFull.setOnClickListener { saveReceipt() } page.btnShareFull.setOnClickListener { shareReceipt() } @@ -594,7 +605,7 @@ class TransferReceiptFragment : Fragment() { * (visible) status bar, a floating close button top-right just below the status bar, * and MIB-styled Share/Save buttons pinned to the bottom. Follows the app theme. */ - private fun showMibFullScreenReceipt() { + private fun showMibFullScreenReceipt(closePageOnDismiss: Boolean) { val ctx = requireContext() val dialog = Dialog(ctx, R.style.Theme_BasedBank) val page = DialogReceiptFullscreenMibBinding.inflate(layoutInflater) @@ -607,6 +618,7 @@ class TransferReceiptFragment : Fragment() { )) page.btnClose.setOnClickListener { dialog.dismiss() } + if (closePageOnDismiss) dialog.setOnDismissListener { closeReceiptPage() } page.btnShareFull.setOnClickListener { shareReceipt() } page.btnSaveFull.setOnClickListener { saveReceipt() } @@ -647,6 +659,12 @@ class TransferReceiptFragment : Fragment() { dialog.show() } + /** Pops this receipt off the back stack, returning to whatever screen opened it. */ + private fun closeReceiptPage() { + if (!isAdded || parentFragmentManager.isStateSaved) return + parentFragmentManager.popBackStack() + } + private fun copyOnLongClick(vararg views: android.widget.TextView) { for (tv in views) { tv.setOnLongClickListener { diff --git a/app/src/main/res/layout/fragment_settings_appearance.xml b/app/src/main/res/layout/fragment_settings_appearance.xml index c291af1..f6a76d6 100644 --- a/app/src/main/res/layout/fragment_settings_appearance.xml +++ b/app/src/main/res/layout/fragment_settings_appearance.xml @@ -304,6 +304,34 @@ + + + + + + + + + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 6f3cec4..bcd6185 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -157,6 +157,8 @@ Dark Pitch Black Accent Color + Receipts + Always show full screen receipt Blue Red Green