From 41ce8a65addb6b9f777dd76995fd46dfaeb3acdb Mon Sep 17 00:00:00 2001 From: Shihaam Abdul Rahman Date: Sat, 26 Sep 2026 04:28:19 +0500 Subject: [PATCH] bml recipt dark theme support --- .../ui/home/TransferReceiptFragment.kt | 30 ++++++++++++- .../drawable-night/bottom_receipt_wave.xml | 15 +++++++ app/src/main/res/drawable/bml_icon.jpg | Bin 5826 -> 0 bytes .../main/res/layout/fragment_receipt_bml.xml | 40 +++++++++--------- .../res/layout/fragment_settings_about.xml | 2 +- app/src/main/res/values-night/colors.xml | 10 +++++ app/src/main/res/values/colors.xml | 8 ++++ 7 files changed, 82 insertions(+), 23 deletions(-) create mode 100644 app/src/main/res/drawable-night/bottom_receipt_wave.xml delete mode 100644 app/src/main/res/drawable/bml_icon.jpg create mode 100644 app/src/main/res/values-night/colors.xml 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 a278114..c2e2334 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 @@ -375,8 +375,13 @@ class TransferReceiptFragment : Fragment() { * applied to fit small viewports and doesn't pick up overlapping siblings. */ private fun captureReceiptBitmap(callback: (Bitmap?) -> Unit) { - val view = _receiptCard ?: run { callback(null); return } - if (view.width == 0 || view.height == 0) { callback(null); return } + val shown = _receiptCard ?: run { callback(null); return } + if (shown.width == 0 || shown.height == 0) { callback(null); return } + + // BML: the preview follows the app theme, but shared/saved images are always light + val view = if (arguments?.getString(ARG_BANK, "MIB") == "BML") { + inflateLightBmlCard(shown.width) + } else shown val bitmap = Bitmap.createBitmap(view.width, view.height, Bitmap.Config.ARGB_8888) val canvas = Canvas(bitmap) @@ -385,6 +390,27 @@ class TransferReceiptFragment : Fragment() { callback(bitmap) } + /** Inflates and lays out an offscreen BML receipt card with light-mode resources. */ + private fun inflateLightBmlCard(widthPx: Int): View { + val config = android.content.res.Configuration(resources.configuration).apply { + uiMode = (uiMode and android.content.res.Configuration.UI_MODE_NIGHT_MASK.inv()) or + android.content.res.Configuration.UI_MODE_NIGHT_NO + } + val lightCtx = android.view.ContextThemeWrapper(requireContext(), R.style.Theme_BasedBank).apply { + applyOverrideConfiguration(config) + } + val binding = FragmentReceiptBmlBinding.inflate(LayoutInflater.from(lightCtx)) + bindBml(binding) + val card = binding.receiptCard + (card.parent as? ViewGroup)?.removeView(card) + card.measure( + View.MeasureSpec.makeMeasureSpec(widthPx, View.MeasureSpec.EXACTLY), + View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED) + ) + card.layout(0, 0, card.measuredWidth, card.measuredHeight) + return card + } + private fun formatBmlTimestamp(raw: String): String { if (raw.isBlank()) return "" return try { diff --git a/app/src/main/res/drawable-night/bottom_receipt_wave.xml b/app/src/main/res/drawable-night/bottom_receipt_wave.xml new file mode 100644 index 0000000..b4982e5 --- /dev/null +++ b/app/src/main/res/drawable-night/bottom_receipt_wave.xml @@ -0,0 +1,15 @@ + + + + + + diff --git a/app/src/main/res/drawable/bml_icon.jpg b/app/src/main/res/drawable/bml_icon.jpg deleted file mode 100644 index e35d50d855e0a1a69dc6271c4cce3ca4479f8864..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5826 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 + android:background="@color/bml_receipt_bg"> @@ -47,7 +47,7 @@ android:layout_marginBottom="20dp" android:id="@+id/tvMessage" android:textSize="14sp" - android:textColor="#2D2D2D" + android:textColor="@color/bml_receipt_message" android:fontFamily="@font/nunito_sans" android:gravity="center" /> @@ -75,7 +75,7 @@ android:layout_gravity="center" android:layout_marginBottom="13dp" android:textSize="42sp" - android:textColor="#242424" + android:textColor="@color/bml_receipt_amount" android:fontFamily="@font/sofia_pro" android:gravity="center" /> @@ -109,66 +109,66 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -199,7 +199,7 @@ android:layout_height="wrap_content" android:orientation="vertical" android:gravity="center" - android:background="#F5F5F5" + android:background="@color/bml_receipt_footer" android:paddingVertical="22dp"> diff --git a/app/src/main/res/values-night/colors.xml b/app/src/main/res/values-night/colors.xml new file mode 100644 index 0000000..60bb8e2 --- /dev/null +++ b/app/src/main/res/values-night/colors.xml @@ -0,0 +1,10 @@ + + + + #191A1C + #DEDEE0 + #DEDEE0 + #DEDEE0 + #000000 + #3D3E40 + diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 184950d..bf9032e 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -5,4 +5,12 @@ #9AD141 #E85D04 #E8B547 + + + #FFFFFF + #2D2D2D + #242424 + #000000 + #F5F5F5 + #E9E9E9