Messages: refine a bit toolbar

This commit is contained in:
ganfra 2022-11-08 11:08:02 +01:00
parent 8b10c61704
commit 09fa6493b3
2 changed files with 39 additions and 15 deletions

View file

@ -18,8 +18,8 @@ import io.element.android.x.matrix.core.RoomId
fun LoginScreenNavigation(navigator: DestinationsNavigator) { fun LoginScreenNavigation(navigator: DestinationsNavigator) {
LoginScreen( LoginScreen(
onLoginWithSuccess = { onLoginWithSuccess = {
navigator.navigate(RoomListScreenNavigationDestination){ navigator.navigate(RoomListScreenNavigationDestination) {
popUpTo(LoginScreenNavigationDestination){ popUpTo(LoginScreenNavigationDestination) {
inclusive = true inclusive = true
} }
} }
@ -36,8 +36,8 @@ fun RoomListScreenNavigation(navigator: DestinationsNavigator) {
navigator.navigate(MessagesScreenNavigationDestination(roomId = roomId.value)) navigator.navigate(MessagesScreenNavigationDestination(roomId = roomId.value))
}, },
onSuccessLogout = { onSuccessLogout = {
navigator.navigate(LoginScreenNavigationDestination){ navigator.navigate(LoginScreenNavigationDestination) {
popUpTo(RoomListScreenNavigationDestination){ popUpTo(RoomListScreenNavigationDestination) {
inclusive = true inclusive = true
} }
} }
@ -46,8 +46,8 @@ fun RoomListScreenNavigation(navigator: DestinationsNavigator) {
@Destination @Destination
@Composable @Composable
fun MessagesScreenNavigation(roomId: String) { fun MessagesScreenNavigation(roomId: String, navigator: DestinationsNavigator) {
MessagesScreen(roomId) MessagesScreen(roomId, navigator::navigateUp)
} }

View file

@ -3,7 +3,6 @@
package io.element.android.x.features.messages package io.element.android.x.features.messages
import Avatar import Avatar
import androidx.compose.foundation.BorderStroke
import androidx.compose.foundation.clickable import androidx.compose.foundation.clickable
import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.* import androidx.compose.foundation.layout.*
@ -12,6 +11,8 @@ import androidx.compose.foundation.lazy.LazyListState
import androidx.compose.foundation.lazy.itemsIndexed import androidx.compose.foundation.lazy.itemsIndexed
import androidx.compose.foundation.lazy.rememberLazyListState import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.ArrowBack
import androidx.compose.material.ripple.rememberRipple import androidx.compose.material.ripple.rememberRipple
import androidx.compose.material3.* import androidx.compose.material3.*
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
@ -20,9 +21,11 @@ import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.layout.LastBaseline import androidx.compose.ui.layout.LastBaseline
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import com.airbnb.mvrx.compose.collectAsState import com.airbnb.mvrx.compose.collectAsState
import com.airbnb.mvrx.compose.mavericksViewModel import com.airbnb.mvrx.compose.mavericksViewModel
import io.element.android.x.core.data.LogCompositions import io.element.android.x.core.data.LogCompositions
@ -32,7 +35,10 @@ import io.element.android.x.features.messages.model.MessagesTimelineItemState
import io.element.android.x.features.messages.model.MessagesViewState import io.element.android.x.features.messages.model.MessagesViewState
@Composable @Composable
fun MessagesScreen(roomId: String) { fun MessagesScreen(
roomId: String,
onBackPressed: () -> Unit
) {
val viewModel: MessagesViewModel = mavericksViewModel(argsFactory = { roomId }) val viewModel: MessagesViewModel = mavericksViewModel(argsFactory = { roomId })
LogCompositions(tag = "MessagesScreen", msg = "Root") LogCompositions(tag = "MessagesScreen", msg = "Root")
val roomTitle by viewModel.collectAsState(MessagesViewState::roomName) val roomTitle by viewModel.collectAsState(MessagesViewState::roomName)
@ -44,7 +50,8 @@ fun MessagesScreen(roomId: String) {
roomAvatar = roomAvatar, roomAvatar = roomAvatar,
timelineItems = timelineItems().orEmpty(), timelineItems = timelineItems().orEmpty(),
hasMoreToLoad = hasMoreToLoad, hasMoreToLoad = hasMoreToLoad,
onReachedLoadMore = viewModel::loadMore onReachedLoadMore = viewModel::loadMore,
onBackPressed = onBackPressed
) )
} }
@ -55,6 +62,7 @@ fun MessagesContent(
timelineItems: List<MessagesTimelineItemState>, timelineItems: List<MessagesTimelineItemState>,
hasMoreToLoad: Boolean, hasMoreToLoad: Boolean,
onReachedLoadMore: () -> Unit, onReachedLoadMore: () -> Unit,
onBackPressed: () -> Unit
) { ) {
LogCompositions(tag = "MessagesScreen", msg = "Content") LogCompositions(tag = "MessagesScreen", msg = "Content")
val lazyListState = rememberLazyListState() val lazyListState = rememberLazyListState()
@ -62,13 +70,29 @@ fun MessagesContent(
topBar = { topBar = {
TopAppBar( TopAppBar(
navigationIcon = { navigationIcon = {
if (roomAvatar != null) { IconButton(onClick = onBackPressed) {
IconButton(onClick = {}) { Icon(
Avatar(roomAvatar) imageVector = Icons.Filled.ArrowBack,
} contentDescription = "Back"
)
} }
}, },
title = { Text(text = roomTitle ?: "") } 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 ->