Merge pull request #2673 from vitorpamplona/claude/fix-chatroom-list-reuse-Wkz10

Fix double padding in two-pane chat layout
This commit is contained in:
Vitor Pamplona
2026-04-30 17:46:45 -04:00
committed by GitHub
@@ -21,16 +21,19 @@
package com.vitorpamplona.amethyst.ui.screen.loggedIn.chats.rooms.twopane
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.systemBarsPadding
import androidx.compose.material3.windowsizeclass.WindowWidthSizeClass
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.unit.dp
import com.google.accompanist.adaptive.FoldAwareConfiguration
import com.google.accompanist.adaptive.HorizontalTwoPaneStrategy
import com.google.accompanist.adaptive.TwoPane
@@ -38,6 +41,7 @@ import com.google.accompanist.adaptive.calculateDisplayFeatures
import com.vitorpamplona.amethyst.commons.ui.feeds.FeedContentState
import com.vitorpamplona.amethyst.ui.components.getActivity
import com.vitorpamplona.amethyst.ui.layouts.DisappearingScaffold
import com.vitorpamplona.amethyst.ui.layouts.LocalDisappearingScaffoldPadding
import com.vitorpamplona.amethyst.ui.navigation.bottombars.AppBottomBar
import com.vitorpamplona.amethyst.ui.navigation.navs.INav
import com.vitorpamplona.amethyst.ui.navigation.routes.Route
@@ -92,20 +96,34 @@ fun MessagesTwoPane(
) { padding ->
TwoPane(
first = {
Box(Modifier.fillMaxSize().systemBarsPadding(), contentAlignment = Alignment.BottomEnd) {
ChatroomList(
knownFeedContentState,
newFeedContentState,
accountViewModel,
twoPaneNav,
)
// The chatroom-list pane owns its own TabRow, so it doesn't
// need the outer scaffold's top bar to layer over it. Apply
// the scaffold padding directly and reset
// LocalDisappearingScaffoldPadding to zero so descendants
// (e.g. the LazyColumn inside ChatroomListFeedView via
// rememberFeedContentPadding) don't add the bar inset a
// second time, which would otherwise show up as a gap
// between the TabRow and the first list item.
CompositionLocalProvider(LocalDisappearingScaffoldPadding provides PaddingValues(0.dp)) {
Box(Modifier.fillMaxSize().padding(padding), contentAlignment = Alignment.BottomEnd) {
ChatroomList(
knownFeedContentState,
newFeedContentState,
accountViewModel,
twoPaneNav,
)
Box(Modifier.padding(Size20dp), contentAlignment = Alignment.Center) {
ChannelFabColumn(nav)
Box(Modifier.padding(Size20dp), contentAlignment = Alignment.Center) {
ChannelFabColumn(nav)
}
}
}
},
second = {
// The chat-view pane brings its own DisappearingScaffold
// (with its own chat header), so it stays edge-to-edge under
// the outer search bar via systemBarsPadding instead of the
// scaffold padding.
Box(Modifier.fillMaxSize().systemBarsPadding()) {
twoPaneNav.innerNav.value?.let {
if (it is Route.Room) {