From 4f1f4440c7b3240f3c098147fc64284100f1d19a Mon Sep 17 00:00:00 2001 From: ashnohe Date: Fri, 13 Mar 2026 14:37:18 -0700 Subject: [PATCH 1/4] Refactor & simplify StatusBarProtection code sample to use inset size modifiers --- .../layouts/SystemBarProtectionSnippets.kt | 43 ++++++++----------- 1 file changed, 17 insertions(+), 26 deletions(-) diff --git a/compose/snippets/src/main/java/com/example/compose/snippets/layouts/SystemBarProtectionSnippets.kt b/compose/snippets/src/main/java/com/example/compose/snippets/layouts/SystemBarProtectionSnippets.kt index 429e7ffd1..4b739747d 100644 --- a/compose/snippets/src/main/java/com/example/compose/snippets/layouts/SystemBarProtectionSnippets.kt +++ b/compose/snippets/src/main/java/com/example/compose/snippets/layouts/SystemBarProtectionSnippets.kt @@ -20,7 +20,8 @@ import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.activity.enableEdgeToEdge -import androidx.compose.foundation.Canvas +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.WindowInsets @@ -29,6 +30,7 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.statusBars +import androidx.compose.foundation.layout.windowInsetsTopHeight import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.material3.Card import androidx.compose.material3.CardDefaults @@ -37,10 +39,8 @@ import androidx.compose.material3.Scaffold import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier -import androidx.compose.ui.geometry.Size import androidx.compose.ui.graphics.Brush import androidx.compose.ui.graphics.Color -import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextOverflow @@ -74,33 +74,24 @@ class SystemBarProtectionSnippets : ComponentActivity() { @Composable private fun StatusBarProtection( color: Color = MaterialTheme.colorScheme.surfaceContainer, - heightProvider: () -> Float = calculateGradientHeight(), ) { - - Canvas(Modifier.fillMaxSize()) { - val calculatedHeight = heightProvider() - val gradient = Brush.verticalGradient( - colors = listOf( - color.copy(alpha = 1f), - color.copy(alpha = .8f), - Color.Transparent - ), - startY = 0f, - endY = calculatedHeight - ) - drawRect( - brush = gradient, - size = Size(size.width, calculatedHeight), + Box(Modifier.fillMaxSize()) { + Spacer( + Modifier + .fillMaxWidth() + .windowInsetsTopHeight(WindowInsets.statusBars) + .background( + Brush.verticalGradient( + colors = listOf( + color.copy(alpha = 1f), + color.copy(alpha = 0.8f), + Color.Transparent + ) + ) + ) ) } } - -@Composable -fun calculateGradientHeight(): () -> Float { - val statusBars = WindowInsets.statusBars - val density = LocalDensity.current - return { statusBars.getTop(density).times(1.2f) } -} // [END android_compose_system_bar_protection] @Composable From f3cb8d0e3d4c5f3dbfba53a40daddd68150b8a71 Mon Sep 17 00:00:00 2001 From: Ash <83780687+ashnohe@users.noreply.github.com> Date: Wed, 18 Mar 2026 16:50:26 -0700 Subject: [PATCH 2/4] Update compose/snippets/src/main/java/com/example/compose/snippets/layouts/SystemBarProtectionSnippets.kt Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com> --- .../snippets/layouts/SystemBarProtectionSnippets.kt | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/compose/snippets/src/main/java/com/example/compose/snippets/layouts/SystemBarProtectionSnippets.kt b/compose/snippets/src/main/java/com/example/compose/snippets/layouts/SystemBarProtectionSnippets.kt index 4b739747d..edfdee1cb 100644 --- a/compose/snippets/src/main/java/com/example/compose/snippets/layouts/SystemBarProtectionSnippets.kt +++ b/compose/snippets/src/main/java/com/example/compose/snippets/layouts/SystemBarProtectionSnippets.kt @@ -82,12 +82,12 @@ private fun StatusBarProtection( .windowInsetsTopHeight(WindowInsets.statusBars) .background( Brush.verticalGradient( - colors = listOf( - color.copy(alpha = 1f), - color.copy(alpha = 0.8f), - Color.Transparent - ) + 0.0f to color.copy(alpha = 1f), + 0.42f to color.copy(alpha = 0.8f), // 0.5 / 1.2 + 0.83f to Color.Transparent, // 1.0 / 1.2 + 1.0f to Color.Transparent ) + ) ) } From 97faed1bad9c1fb7beae5c3c18b1dae845b6c9b4 Mon Sep 17 00:00:00 2001 From: ashnohe Date: Wed, 18 Mar 2026 17:02:52 -0700 Subject: [PATCH 3/4] ensure gradient draws to 1.2x status bar height --- .../layouts/SystemBarProtectionSnippets.kt | 22 +++++++++++++------ 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/compose/snippets/src/main/java/com/example/compose/snippets/layouts/SystemBarProtectionSnippets.kt b/compose/snippets/src/main/java/com/example/compose/snippets/layouts/SystemBarProtectionSnippets.kt index edfdee1cb..15e0e7e9d 100644 --- a/compose/snippets/src/main/java/com/example/compose/snippets/layouts/SystemBarProtectionSnippets.kt +++ b/compose/snippets/src/main/java/com/example/compose/snippets/layouts/SystemBarProtectionSnippets.kt @@ -41,6 +41,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Brush import androidx.compose.ui.graphics.Color +import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextOverflow @@ -75,19 +76,26 @@ class SystemBarProtectionSnippets : ComponentActivity() { private fun StatusBarProtection( color: Color = MaterialTheme.colorScheme.surfaceContainer, ) { + val density = LocalDensity.current + val statusBars = WindowInsets.statusBars + Box(Modifier.fillMaxSize()) { Spacer( Modifier .fillMaxWidth() - .windowInsetsTopHeight(WindowInsets.statusBars) + .height( + with(density) { + statusBars.getTop(this).times(1.2f).toDp() + } + ) .background( - Brush.verticalGradient( - 0.0f to color.copy(alpha = 1f), - 0.42f to color.copy(alpha = 0.8f), // 0.5 / 1.2 - 0.83f to Color.Transparent, // 1.0 / 1.2 - 1.0f to Color.Transparent + brush = Brush.verticalGradient( + colors = listOf( + color.copy(alpha = 1f), + color.copy(alpha = 0.8f), + Color.Transparent + ) ) - ) ) } From 6a24a6039aa5a7a4eb56566347cb8cc4615b64be Mon Sep 17 00:00:00 2001 From: ashnohe Date: Wed, 18 Mar 2026 17:42:30 -0700 Subject: [PATCH 4/4] refactor --- .../layouts/SystemBarProtectionSnippets.kt | 37 ++++++++----------- 1 file changed, 16 insertions(+), 21 deletions(-) diff --git a/compose/snippets/src/main/java/com/example/compose/snippets/layouts/SystemBarProtectionSnippets.kt b/compose/snippets/src/main/java/com/example/compose/snippets/layouts/SystemBarProtectionSnippets.kt index 15e0e7e9d..cc0697325 100644 --- a/compose/snippets/src/main/java/com/example/compose/snippets/layouts/SystemBarProtectionSnippets.kt +++ b/compose/snippets/src/main/java/com/example/compose/snippets/layouts/SystemBarProtectionSnippets.kt @@ -76,29 +76,24 @@ class SystemBarProtectionSnippets : ComponentActivity() { private fun StatusBarProtection( color: Color = MaterialTheme.colorScheme.surfaceContainer, ) { - val density = LocalDensity.current - val statusBars = WindowInsets.statusBars - - Box(Modifier.fillMaxSize()) { - Spacer( - Modifier - .fillMaxWidth() - .height( - with(density) { - statusBars.getTop(this).times(1.2f).toDp() - } - ) - .background( - brush = Brush.verticalGradient( - colors = listOf( - color.copy(alpha = 1f), - color.copy(alpha = 0.8f), - Color.Transparent - ) + Spacer( + modifier = Modifier + .fillMaxWidth() + .height( + with(LocalDensity.current) { + (WindowInsets.statusBars.getTop(this) * 1.2f).toDp() + } + ) + .background( + brush = Brush.verticalGradient( + colors = listOf( + color.copy(alpha = 1f), + color.copy(alpha = 0.8f), + Color.Transparent ) ) - ) - } + ) + ) } // [END android_compose_system_bar_protection]