diff --git a/features/roomlist/src/main/java/io/element/android/x/features/roomlist/RoomListScreen.kt b/features/roomlist/src/main/java/io/element/android/x/features/roomlist/RoomListScreen.kt index a5257184c5..a6ec323633 100644 --- a/features/roomlist/src/main/java/io/element/android/x/features/roomlist/RoomListScreen.kt +++ b/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.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, diff --git a/features/roomlist/src/main/java/io/element/android/x/features/roomlist/RoomListViewModel.kt b/features/roomlist/src/main/java/io/element/android/x/features/roomlist/RoomListViewModel.kt index 9e195b2da4..39c46a03f8 100644 --- a/features/roomlist/src/main/java/io/element/android/x/features/roomlist/RoomListViewModel.kt +++ b/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 url = client.avatarUrl() val mediaSource = mediaSourceFromUrl(url) - mediaSource.url() setState { copy( user = MatrixUser(