Browse Source

Add room list header.

feature/bma/flipper
Benoit Marty 2 years ago
parent
commit
7975ea16e4
  1. 43
      features/roomlist/src/main/java/io/element/android/x/features/roomlist/RoomListScreen.kt
  2. 1
      features/roomlist/src/main/java/io/element/android/x/features/roomlist/RoomListViewModel.kt

43
features/roomlist/src/main/java/io/element/android/x/features/roomlist/RoomListScreen.kt

@ -4,9 +4,9 @@ import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.* import androidx.compose.foundation.layout.*
import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.items
import androidx.compose.material3.MaterialTheme import androidx.compose.material.icons.Icons
import androidx.compose.material3.Surface import androidx.compose.material.icons.filled.ExitToApp
import androidx.compose.material3.Text import androidx.compose.material3.*
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
@ -15,26 +15,33 @@ import androidx.compose.ui.unit.dp
import com.airbnb.mvrx.Success import com.airbnb.mvrx.Success
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.ui.theme.components.Avatar
import org.matrix.rustcomponents.sdk.Room import org.matrix.rustcomponents.sdk.Room
@Composable @Composable
fun RoomListScreen( fun RoomListScreen(
viewModel: RoomListViewModel = mavericksViewModel(), viewModel: RoomListViewModel = mavericksViewModel(),
onRoomClicked: (String) -> Unit = { } onRoomClicked: (String) -> Unit = { },
onLogoutClicked: () -> Unit = { },
) { ) {
val state by viewModel.collectAsState() val state by viewModel.collectAsState()
RoomListContent(state, onRoomClicked) RoomListContent(state, onRoomClicked, onLogoutClicked)
} }
@Composable @Composable
fun RoomListContent( fun RoomListContent(
state: RoomListViewState, state: RoomListViewState,
onRoomClicked: (String) -> Unit onRoomClicked: (String) -> Unit,
onLogoutClicked: () -> Unit
) { ) {
Surface(color = MaterialTheme.colorScheme.background) { Surface(color = MaterialTheme.colorScheme.background) {
Column( Column(
modifier = Modifier.fillMaxSize() modifier = Modifier.fillMaxSize()
) { ) {
RoomListTopBar(
state = state,
onLogoutClicked = onLogoutClicked
)
val rooms = state.rooms val rooms = state.rooms
if (rooms is Success) { if (rooms is Success) {
LazyColumn { 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 @Composable
private fun RoomItem( private fun RoomItem(
modifier: Modifier = Modifier, modifier: Modifier = Modifier,

1
features/roomlist/src/main/java/io/element/android/x/features/roomlist/RoomListViewModel.kt

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

Loading…
Cancel
Save