From 85af93c63f3316223ae7cf5cea2f09f2c11e2124 Mon Sep 17 00:00:00 2001 From: Bryan Van Deusen Date: Fri, 29 May 2026 12:11:19 -0400 Subject: [PATCH] fix(android): place shell banners below the status bar ShellScaffold's banner column did not consume the status-bar inset while each screen's app bar did, so the update/connection banners drew under the status bar. Consume the inset once at the shell (statusBarsPadding) so banners sit below it; descendant screen app bars see the consumed inset and stop re-padding, matching Flutter's SafeArea(bottom:false). Co-Authored-By: Claude Opus 4.7 (1M context) --- .../fabledsword/minstrel/shared/widgets/ShellScaffold.kt | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/android/app/src/main/java/com/fabledsword/minstrel/shared/widgets/ShellScaffold.kt b/android/app/src/main/java/com/fabledsword/minstrel/shared/widgets/ShellScaffold.kt index 112b103a..423a5e9d 100644 --- a/android/app/src/main/java/com/fabledsword/minstrel/shared/widgets/ShellScaffold.kt +++ b/android/app/src/main/java/com/fabledsword/minstrel/shared/widgets/ShellScaffold.kt @@ -4,6 +4,7 @@ import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.statusBarsPadding import androidx.compose.material3.SnackbarHost import androidx.compose.material3.SnackbarHostState import androidx.compose.runtime.Composable @@ -61,7 +62,12 @@ fun ShellScaffold( snackbarHostState.showSnackbar(msg) } } - Column(modifier = modifier.fillMaxSize()) { + // Consume the status-bar inset once here so the banner stack sits + // below the status bar (mirrors Flutter's SafeArea(bottom:false)). + // statusBarsPadding consumes the inset for descendants, so the in- + // shell screens' app bars no longer re-pad for the status bar — + // avoiding a double inset while fixing banners drawing under it. + Column(modifier = modifier.fillMaxSize().statusBarsPadding()) { // Banner slot. VersionTooOldBanner appears when the server's // min_client_version exceeds our build; UpdateBanner softly // nudges an available (newer-than-installed) APK; and