fixup! Sticky avatar

This commit is contained in:
2026-04-21 19:20:07 +03:00
parent cab1ff93a4
commit a35f5196b1
@@ -123,8 +123,7 @@ private const val TIMELINE_TOP_PREFETCH_THRESHOLD = 4
private const val TIMELINE_BOTTOM_AUTOSCROLL_THRESHOLD = 3 private const val TIMELINE_BOTTOM_AUTOSCROLL_THRESHOLD = 3
private const val MAX_INITIAL_UNREAD_SEARCH_LIMIT = 500 private const val MAX_INITIAL_UNREAD_SEARCH_LIMIT = 500
private val TIMELINE_AVATAR_SIZE = 32.dp private val TIMELINE_AVATAR_SIZE = 32.dp
private val TIMELINE_AVATAR_START_PADDING = 8.dp private val MESSAGE_FIELD_TOP_PADDING = 8.dp
private val TIMELINE_AVATAR_BOTTOM_PADDING = 8.dp
private val simpleHtmlTags = setOf( private val simpleHtmlTags = setOf(
"a", "b", "blockquote", "br", "code", "del", "div", "em", "h1", "h2", "a", "b", "blockquote", "br", "code", "del", "div", "em", "h1", "h2",
@@ -320,7 +319,6 @@ fun Room(modifier: Modifier = Modifier, rid: String) {
timelineItems = timelineItems, timelineItems = timelineItems,
layoutInfo = listState.layoutInfo, layoutInfo = listState.layoutInfo,
avatarSizePx = with(density) { TIMELINE_AVATAR_SIZE.roundToPx() }, avatarSizePx = with(density) { TIMELINE_AVATAR_SIZE.roundToPx() },
bottomPaddingPx = with(density) { TIMELINE_AVATAR_BOTTOM_PADDING.roundToPx() },
viewportBottomLimitPx = listContainerHeightPx, viewportBottomLimitPx = listContainerHeightPx,
) )
} }
@@ -353,7 +351,7 @@ fun Room(modifier: Modifier = Modifier, rid: String) {
modifier = Modifier modifier = Modifier
.offset { .offset {
IntOffset( IntOffset(
x = with(density) { TIMELINE_AVATAR_START_PADDING.roundToPx() }, x = with(density) { MESSAGE_FIELD_TOP_PADDING.roundToPx() },
y = avatarState.yPx, y = avatarState.yPx,
) )
} }
@@ -367,7 +365,7 @@ fun Room(modifier: Modifier = Modifier, rid: String) {
Row(Modifier.fillMaxWidth()) { Row(Modifier.fillMaxWidth()) {
OutlinedTextField( OutlinedTextField(
modifier = Modifier modifier = Modifier
.padding(4.dp) .padding(MESSAGE_FIELD_TOP_PADDING)
.weight(1f), .weight(1f),
value = message, value = message,
onValueChange = { message = it }, onValueChange = { message = it },
@@ -776,7 +774,6 @@ private fun calculateStickyAvatarState(
timelineItems: List<TimelineUiItem>, timelineItems: List<TimelineUiItem>,
layoutInfo: androidx.compose.foundation.lazy.LazyListLayoutInfo, layoutInfo: androidx.compose.foundation.lazy.LazyListLayoutInfo,
avatarSizePx: Int, avatarSizePx: Int,
bottomPaddingPx: Int,
viewportBottomLimitPx: Int, viewportBottomLimitPx: Int,
): StickyAvatarState? { ): StickyAvatarState? {
val viewportBottom = if (viewportBottomLimitPx > 0) { val viewportBottom = if (viewportBottomLimitPx > 0) {
@@ -785,7 +782,7 @@ private fun calculateStickyAvatarState(
layoutInfo.viewportEndOffset layoutInfo.viewportEndOffset
} }
val viewportTop = layoutInfo.viewportStartOffset val viewportTop = layoutInfo.viewportStartOffset
val pinnedAvatarTop = viewportBottom - avatarSizePx - bottomPaddingPx val pinnedAvatarTop = viewportBottom - avatarSizePx
return layoutInfo.visibleItemsInfo return layoutInfo.visibleItemsInfo
.mapNotNull { visibleItem -> .mapNotNull { visibleItem ->