Skip to content

fix(splash): stop launch logo bleeding through transparent screens - #1314

Merged
bmc08gt merged 1 commit into
code/cashfrom
fix/splash-window-background-bleed
Aug 23, 2026
Merged

fix(splash): stop launch logo bleeding through transparent screens#1314
bmc08gt merged 1 commit into
code/cashfrom
fix/splash-window-background-bleed

Conversation

@bmc08gt

@bmc08gt bmc08gt commented Aug 23, 2026

Copy link
Copy Markdown
Collaborator

Problem

Users see the Flipcash "F" launch logo (white rounded-pill mark, no wordmark) stuck on screen over fully-interactive content — My Account settings, the Wallet tab, and chat threads — across the entire session. The logo appears centered on those screens but is absent on the You tab and Chat tab home.

Root cause

android:windowBackground in Theme.Code is set to @drawable/splash (a layer-list: splash_background color + ic_launcher_foreground centered). This drawable is never cleared after MainActivity.setContent {}. Once Compose renders its first frame the window background sits in the DecorView behind the Compose surface for the Activity's entire lifetime.

The outermost Compose root Box in App.kt had no background modifier, so whether the window drawable bled through depended on whether each screen's own root happened to paint a full-size opaque background:

  • You tab (MenuScreenContent) — uses CodeScaffold → Material Scaffold(backgroundColor = CodeTheme.colors.background) → opaque; "F" hidden.
  • My Account (MyAccountScreen) — bare Column(fillMaxSize) with no background modifier → transparent; "F" bleeds through.
  • Wallet (WalletScreen) — bare Column / LazyColumn with no background → transparent center; "F" bleeds through.
  • Chat tab (MessengerScreen) — paints its own opaque background; "F" hidden.

The logo is the window drawable (behind Compose), not a Compose element — navigator.replaceAll and all nav transitions have no effect on it.

Fix

Paint CodeTheme.colors.background (#19191A, identical to splash_background) on the single outermost root Box in App.kt that wraps both NewAppContent and AppContent. One change covers all screens on both nav paths.

-Box(modifier = semanticsModifier) {
+Box(modifier = semanticsModifier.fillMaxSize().background(CodeTheme.colors.background)) {

The cold-start splash (window background visible before the first Compose frame) is unchanged — the fix only prevents bleed-through after Compose takes the surface.

Safety

  • Haze/blur (hazeSource on the inner Box in NewAppContent): unaffected. Haze only samples Compose-layer pixels; its source node is a child of this root Box, not behind it. The backdrop color used by the nav bar blur (CodeTheme.colors.background) is unchanged.
  • Nav3 OverlayScene / bottom-sheets: unaffected. Their transparency is inter-Compose-layer (showing the screen behind them in the Compose hierarchy), which this change does not touch. The opaque root Box is below the entire NavDisplay.
  • No screen intentionally relies on seeing the window drawable: confirmed by searching all Kotlin source for R.drawable.splash, ic_launcher_foreground, windowIsTranslucent, and translucent-theme patterns — zero hits in non-build-artifact files.

The launch splash drawable (@drawable/splash, containing ic_launcher_foreground —
the white "F" logo) is set as android:windowBackground in Theme.Code and is never
cleared after setContent. The outermost Compose root Box in App.kt had no background
modifier, so any screen whose own root composable does not paint a full-size opaque
background (e.g. MyAccountScreen: bare Column with fillMaxSize but no background;
WalletScreen: bare Column and LazyColumn with no background) left the window
drawable visible behind it. Screens that do paint an opaque background
(CodeScaffold-backed MenuScreenContent / You tab, ChatScreen) happened to occlude it.

Fix: apply fillMaxSize + background(CodeTheme.colors.background) to the single
outermost root Box in App.kt that wraps both NewAppContent and AppContent nav paths.
CodeTheme.colors.background is Color(0xFF19191A), identical to splash_background,
so the only visual change is that the window drawable can no longer bleed through —
no color regression on any screen.

The cold-start splash (window background visible before first Compose frame) is
unchanged; the fix only prevents bleed-through after Compose takes the surface.
Haze blur sampling is unaffected: haze only samples Compose-layer pixels and its
hazeSource Box is a child of this root Box, not behind it.
Nav3 OverlayScene / bottom-sheet transparency is unaffected: those are
inter-Compose-layer transparencies, which this change does not touch.
@github-actions github-actions Bot added the type: fix Bug fix label Aug 23, 2026
@bmc08gt
bmc08gt merged commit f0ecb31 into code/cash Aug 23, 2026
3 checks passed
@bmc08gt
bmc08gt deleted the fix/splash-window-background-bleed branch August 23, 2026 21:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

type: fix Bug fix

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant