Add room list header.

This commit is contained in:
Benoit Marty
2022-10-28 17:38:31 +02:00
parent a2f0b1c541
commit 13eedb3cd3
2 changed files with 37 additions and 7 deletions

View File

@@ -4,9 +4,9 @@ import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.ExitToApp
import androidx.compose.material3.*
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.ui.Alignment
@@ -15,26 +15,33 @@ import androidx.compose.ui.unit.dp
import com.airbnb.mvrx.Success
import com.airbnb.mvrx.compose.collectAsState
import com.airbnb.mvrx.compose.mavericksViewModel
import io.element.android.x.ui.theme.components.Avatar
import org.matrix.rustcomponents.sdk.Room
@Composable
fun RoomListScreen(
viewModel: RoomListViewModel = mavericksViewModel(),
onRoomClicked: (String) -> Unit = { }
onRoomClicked: (String) -> Unit = { },
onLogoutClicked: () -> Unit = { },
) {
val state by viewModel.collectAsState()
RoomListContent(state, onRoomClicked)
RoomListContent(state, onRoomClicked, onLogoutClicked)
}
@Composable
fun RoomListContent(
state: RoomListViewState,
onRoomClicked: (String) -> Unit
onRoomClicked: (String) -> Unit,
onLogoutClicked: () -> Unit
) {
Surface(color = MaterialTheme.colorScheme.background) {
Column(
modifier = Modifier.fillMaxSize()
) {
RoomListTopBar(
state = state,
onLogoutClicked = onLogoutClicked
)
val rooms = state.rooms
if (rooms is Success) {
LazyColumn {
@@ -49,6 +56,30 @@ fun RoomListContent(
}
}
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun RoomListTopBar(state: RoomListViewState, onLogoutClicked: () -> Unit) {
TopAppBar(
title = {
Row(
modifier = Modifier.fillMaxWidth()
) {
val matrixUser = state.user
Avatar(data = matrixUser.avatarData)
Spacer(modifier = Modifier.width(8.dp))
Text("${matrixUser.username}")
}
},
actions = {
IconButton(
onClick = onLogoutClicked
) {
Icon(Icons.Default.ExitToApp, contentDescription = "logout")
}
}
)
}
@Composable
private fun RoomItem(
modifier: Modifier = Modifier,

View File

@@ -35,7 +35,6 @@ class RoomListViewModel(initialState: RoomListViewState) :
val client = getClient()
val url = client.avatarUrl()
val mediaSource = mediaSourceFromUrl(url)
mediaSource.url()
setState {
copy(
user = MatrixUser(