Timeline: fix bad layouting

This commit is contained in:
ganfra 2022-11-23 20:07:24 +01:00
parent 72e0f07888
commit e2108fedf3

View file

@ -82,7 +82,7 @@ fun MessagesScreen(
val composerCanSendMessage by composerViewModel.collectAsState(MessageComposerViewState::isSendButtonVisible) val composerCanSendMessage by composerViewModel.collectAsState(MessageComposerViewState::isSendButtonVisible)
val composerText by composerViewModel.collectAsState(MessageComposerViewState::text) val composerText by composerViewModel.collectAsState(MessageComposerViewState::text)
val snackbarHostState = remember { SnackbarHostState() } val snackbarHostState = remember { SnackbarHostState() }
MessagesContent( MessagesScreenContent(
roomTitle = roomTitle, roomTitle = roomTitle,
roomAvatar = roomAvatar, roomAvatar = roomAvatar,
timelineItems = timelineItems().orEmpty(), timelineItems = timelineItems().orEmpty(),
@ -126,7 +126,7 @@ fun MessagesScreen(
} }
@Composable @Composable
fun MessagesContent( fun MessagesScreenContent(
roomTitle: String?, roomTitle: String?,
roomAvatar: AvatarData?, roomAvatar: AvatarData?,
timelineItems: List<MessagesTimelineItemState>, timelineItems: List<MessagesTimelineItemState>,
@ -144,41 +144,53 @@ fun MessagesContent(
snackbarHostState: SnackbarHostState, snackbarHostState: SnackbarHostState,
) { ) {
LogCompositions(tag = "MessagesScreen", msg = "Content") LogCompositions(tag = "MessagesScreen", msg = "Content")
val lazyListState = rememberLazyListState()
Scaffold( Scaffold(
topBar = { topBar = {
TopAppBar( MessagesTopAppBar(
navigationIcon = { roomTitle = roomTitle,
IconButton(onClick = onBackPressed) { roomAvatar = roomAvatar,
Icon( onBackPressed = onBackPressed
imageVector = Icons.Filled.ArrowBack,
contentDescription = "Back"
)
}
},
title = {
Row(verticalAlignment = Alignment.CenterVertically) {
if (roomAvatar != null) {
Avatar(roomAvatar)
Spacer(modifier = Modifier.width(8.dp))
}
Text(
fontSize = 16.sp,
fontWeight = FontWeight.SemiBold,
text = roomTitle ?: "Unknown room",
maxLines = 1,
overflow = TextOverflow.Ellipsis
)
}
}
) )
}, },
content = { padding -> content = { padding ->
MessagesContent(
modifier = Modifier.padding(padding),
timelineItems = timelineItems,
hasMoreToLoad = hasMoreToLoad,
onReachedLoadMore = onReachedLoadMore,
onSendMessage = onSendMessage,
onClick = onClick,
onLongClick = onLongClick,
composerFullScreen = composerFullScreen,
onComposerFullScreenChange = onComposerFullScreenChange,
onComposerTextChange = onComposerTextChange,
composerCanSendMessage = composerCanSendMessage,
composerText = composerText
)
},
snackbarHost = { SnackbarHost(snackbarHostState) },
)
}
@Composable
fun MessagesContent(
timelineItems: List<MessagesTimelineItemState>,
hasMoreToLoad: Boolean,
onReachedLoadMore: () -> Unit,
onSendMessage: (String) -> Unit,
onClick: (MessagesTimelineItemState.MessageEvent) -> Unit,
onLongClick: (MessagesTimelineItemState.MessageEvent) -> Unit,
composerFullScreen: Boolean,
onComposerFullScreenChange: () -> Unit,
onComposerTextChange: (CharSequence) -> Unit,
composerCanSendMessage: Boolean,
composerText: StableCharSequence?,
modifier: Modifier = Modifier
) {
val lazyListState = rememberLazyListState()
Column( Column(
modifier = Modifier modifier = modifier
.padding(padding)
.fillMaxSize() .fillMaxSize()
) { ) {
if (!composerFullScreen) { if (!composerFullScreen) {
@ -211,8 +223,39 @@ fun MessagesContent(
}, },
) )
} }
}
@Composable
fun MessagesTopAppBar(
roomTitle: String?,
roomAvatar: AvatarData?,
onBackPressed: () -> Unit,
) {
TopAppBar(
navigationIcon = {
IconButton(onClick = onBackPressed) {
Icon(
imageVector = Icons.Filled.ArrowBack,
contentDescription = "Back"
)
}
}, },
snackbarHost = { SnackbarHost(snackbarHostState) }, title = {
Row(verticalAlignment = Alignment.CenterVertically) {
if (roomAvatar != null) {
Avatar(roomAvatar)
Spacer(modifier = Modifier.width(8.dp))
}
Text(
fontSize = 16.sp,
fontWeight = FontWeight.SemiBold,
text = roomTitle ?: "Unknown room",
maxLines = 1,
overflow = TextOverflow.Ellipsis
)
}
}
) )
} }
@ -228,7 +271,7 @@ fun TimelineItems(
) { ) {
Box(modifier = modifier.fillMaxWidth()) { Box(modifier = modifier.fillMaxWidth()) {
LazyColumn( LazyColumn(
modifier = modifier.fillMaxWidth(), modifier = Modifier.fillMaxSize(),
state = lazyListState, state = lazyListState,
horizontalAlignment = Alignment.Start, horizontalAlignment = Alignment.Start,
verticalArrangement = Arrangement.Bottom, verticalArrangement = Arrangement.Bottom,
@ -253,6 +296,7 @@ fun TimelineItems(
} }
MessagesScrollHelper(lazyListState = lazyListState, timelineItems = timelineItems) MessagesScrollHelper(lazyListState = lazyListState, timelineItems = timelineItems)
} }
} }
private fun MessagesTimelineItemState.key(): String { private fun MessagesTimelineItemState.key(): String {
@ -490,7 +534,9 @@ internal fun BoxScope.MessagesScrollHelper(
} }
}, },
shape = CircleShape, shape = CircleShape,
modifier = Modifier.align(Alignment.BottomCenter).size(40.dp), modifier = Modifier
.align(Alignment.BottomCenter)
.size(40.dp),
containerColor = MaterialTheme.colorScheme.surfaceVariant, containerColor = MaterialTheme.colorScheme.surfaceVariant,
contentColor = MaterialTheme.colorScheme.onSurfaceVariant contentColor = MaterialTheme.colorScheme.onSurfaceVariant
) { ) {