From 34f94882f5d2077f33b863101e48a5f79f3cb595 Mon Sep 17 00:00:00 2001 From: callebtc <93376500+callebtc@users.noreply.github.com> Date: Mon, 24 Aug 2026 20:57:24 +0200 Subject: [PATCH] Restore Wear chat content space --- .../java/com/bitchat/watch/ui/ChatScaffold.kt | 8 ++-- .../bitchat/watch/ui/WearContentPadding.kt | 38 ++++++++----------- .../watch/ui/WearContentPaddingTest.kt | 12 ++++-- 3 files changed, 29 insertions(+), 29 deletions(-) diff --git a/wear/src/main/java/com/bitchat/watch/ui/ChatScaffold.kt b/wear/src/main/java/com/bitchat/watch/ui/ChatScaffold.kt index ffc3b0cf..eb0b75ef 100644 --- a/wear/src/main/java/com/bitchat/watch/ui/ChatScaffold.kt +++ b/wear/src/main/java/com/bitchat/watch/ui/ChatScaffold.kt @@ -190,7 +190,7 @@ private fun ChatBody( val palette = LocalBitchatPalette.current val context = LocalContext.current val transformationSpec = rememberTransformationSpec() - val headerBackdropHeight = if (LocalConfiguration.current.isScreenRound) 35.dp else 37.dp + val headerBackdropHeight = if (LocalConfiguration.current.isScreenRound) 49.dp else 37.dp // Slide-to-cancel: while recording, the finger's position is tracked globally; the // overlay's mic button reports its bounds and becomes the cancel target when the @@ -276,8 +276,10 @@ private fun ChatBody( // rows cannot scroll underneath either control. Its geometry is constant, // so showing or hiding the overlays never disturbs an in-flight gesture. verticalArrangement = Arrangement.Bottom, - contentPadding = scaffoldPadding - .withRoundScreenPadding(layoutDirection) + // Wear Material already supplies a responsive 5.2% horizontal inset. Keep it, + // but omit the scaffold's vertical inset because the viewport itself reserves + // the header and action-bar space. Stacking both made chat narrow and too high. + contentPadding = scaffoldPadding.horizontalOnly(layoutDirection) ) { if (messages.isEmpty()) { item { diff --git a/wear/src/main/java/com/bitchat/watch/ui/WearContentPadding.kt b/wear/src/main/java/com/bitchat/watch/ui/WearContentPadding.kt index 02737bce..765b9a6f 100644 --- a/wear/src/main/java/com/bitchat/watch/ui/WearContentPadding.kt +++ b/wear/src/main/java/com/bitchat/watch/ui/WearContentPadding.kt @@ -1,12 +1,9 @@ package com.bitchat.watch.ui import androidx.compose.foundation.layout.PaddingValues -import androidx.compose.runtime.Composable -import androidx.compose.ui.platform.LocalConfiguration import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.LayoutDirection import androidx.compose.ui.unit.dp -import kotlin.math.ceil /** * Preserve the responsive, shape-aware padding supplied by Wear Material while allowing a @@ -33,24 +30,21 @@ internal fun PaddingValues.withAdditionalPadding( ) } -@Composable -internal fun PaddingValues.withRoundScreenPadding( +/** + * Keep the responsive horizontal inset supplied by Wear Material without also reserving its + * vertical list padding. Chat owns its fixed header and action-bar clearances, so stacking the + * scaffold's vertical padding on top would unnecessarily shorten the message viewport. + */ +internal fun PaddingValues.horizontalOnly( layoutDirection: LayoutDirection -): PaddingValues = withAdditionalPadding( - layoutDirection = layoutDirection, - horizontal = additionalRoundScreenPadding( - screenWidthDp = LocalConfiguration.current.screenWidthDp, - isScreenRound = LocalConfiguration.current.isScreenRound - ) -) - -internal fun additionalRoundScreenPadding( - screenWidthDp: Int, - isScreenRound: Boolean -): Dp = if (isScreenRound) { - ceil(screenWidthDp * ROUND_SCREEN_ADDITIONAL_PADDING_FRACTION).toInt().dp -} else { - 0.dp +): PaddingValues { + val start = when (layoutDirection) { + LayoutDirection.Ltr -> calculateLeftPadding(layoutDirection) + LayoutDirection.Rtl -> calculateRightPadding(layoutDirection) + } + val end = when (layoutDirection) { + LayoutDirection.Ltr -> calculateRightPadding(layoutDirection) + LayoutDirection.Rtl -> calculateLeftPadding(layoutDirection) + } + return PaddingValues(start = start, end = end) } - -private const val ROUND_SCREEN_ADDITIONAL_PADDING_FRACTION = 0.10f diff --git a/wear/src/test/java/com/bitchat/watch/ui/WearContentPaddingTest.kt b/wear/src/test/java/com/bitchat/watch/ui/WearContentPaddingTest.kt index 055f062c..c9536ba0 100644 --- a/wear/src/test/java/com/bitchat/watch/ui/WearContentPaddingTest.kt +++ b/wear/src/test/java/com/bitchat/watch/ui/WearContentPaddingTest.kt @@ -24,9 +24,13 @@ class WearContentPaddingTest { } @Test - fun `round screens receive an additional ten percent inset`() { - assertEquals(20.dp, additionalRoundScreenPadding(192, isScreenRound = true)) - assertEquals(22.dp, additionalRoundScreenPadding(220, isScreenRound = true)) - assertEquals(0.dp, additionalRoundScreenPadding(192, isScreenRound = false)) + fun `horizontal only padding preserves width inset and restores vertical space`() { + val resolved = PaddingValues(start = 10.dp, top = 20.dp, end = 12.dp, bottom = 20.dp) + .horizontalOnly(LayoutDirection.Ltr) + + assertEquals(10.dp, resolved.calculateLeftPadding(LayoutDirection.Ltr)) + assertEquals(12.dp, resolved.calculateRightPadding(LayoutDirection.Ltr)) + assertEquals(0.dp, resolved.calculateTopPadding()) + assertEquals(0.dp, resolved.calculateBottomPadding()) } }