From 71ca64644aa354055bb26498d3e4217ce0be66dd Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Wed, 12 Oct 2022 18:10:44 +0200 Subject: [PATCH] Add Logo --- .../x/ui/screen/login/LoginActivity.kt | 138 ++++++++++-------- .../main/res/drawable/element_logo_green.xml | 22 +++ .../x/ui/screen/roomlist/RoomListActivity.kt | 51 ++++++- 3 files changed, 148 insertions(+), 63 deletions(-) create mode 100644 libraries/ui/screens/login/src/main/res/drawable/element_logo_green.xml diff --git a/libraries/ui/screens/login/src/main/java/io/element/android/x/ui/screen/login/LoginActivity.kt b/libraries/ui/screens/login/src/main/java/io/element/android/x/ui/screen/login/LoginActivity.kt index 68dbd3aee9..2b196d0b1d 100644 --- a/libraries/ui/screens/login/src/main/java/io/element/android/x/ui/screen/login/LoginActivity.kt +++ b/libraries/ui/screens/login/src/main/java/io/element/android/x/ui/screen/login/LoginActivity.kt @@ -4,14 +4,14 @@ import android.app.Activity import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.Image +import androidx.compose.foundation.layout.* import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.material3.* import androidx.compose.runtime.getValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.res.painterResource import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.text.input.KeyboardType import androidx.compose.ui.unit.dp @@ -38,65 +38,83 @@ class LoginActivity : ComponentActivity() { .padding(16.dp), color = MaterialTheme.colorScheme.background ) { - Column( - modifier = Modifier.fillMaxSize() - ) { - val viewModel: LoginViewModel = mavericksViewModel() - val state by viewModel.collectAsState() - val isError = state.isLoggedIn is Fail - OutlinedTextField( - value = state.homeserver, - onValueChange = { - viewModel.handle(LoginActions.SetHomeserver(it)) - }, - keyboardOptions = KeyboardOptions( - keyboardType = KeyboardType.Uri, - ), - ) - OutlinedTextField( - value = state.login, - onValueChange = { - viewModel.handle(LoginActions.SetLogin(it)) - }, - keyboardOptions = KeyboardOptions( - keyboardType = KeyboardType.Text, - ), - ) - OutlinedTextField( - value = state.password, - onValueChange = { - viewModel.handle(LoginActions.SetPassword(it)) - }, - isError = isError, - keyboardOptions = KeyboardOptions( - keyboardType = KeyboardType.Password, - imeAction = ImeAction.Send, - ), - ) - if (isError) { - Text( - text = (state.isLoggedIn as? Fail)?.toString().orEmpty(), - color = MaterialTheme.colorScheme.error, - style = MaterialTheme.typography.bodySmall, - modifier = Modifier.padding(start = 16.dp) + Box(modifier = Modifier.fillMaxSize()) { + Column( + modifier = Modifier.fillMaxSize(), + ) { + val viewModel: LoginViewModel = mavericksViewModel() + val state by viewModel.collectAsState() + val isError = state.isLoggedIn is Fail + Image( + painterResource(id = R.drawable.element_logo_green), + contentDescription = null, + modifier = Modifier + .align(Alignment.CenterHorizontally) + .padding(40.dp) ) - } - VectorButton( - text = "Submit", - onClick = { - viewModel.handle(LoginActions.Submit) - }, - enabled = state.submitEnabled, - modifier = Modifier.align(Alignment.End) - ) - if (state.isLoggedIn is Loading) { - // FIXME This does not work, we never enter this if block - CircularProgressIndicator( - modifier = Modifier.align(Alignment.CenterHorizontally) + OutlinedTextField( + value = state.homeserver, + modifier = Modifier.fillMaxWidth(), + onValueChange = { + viewModel.handle(LoginActions.SetHomeserver(it)) + }, + keyboardOptions = KeyboardOptions( + keyboardType = KeyboardType.Uri, + ), ) - } - if (state.isLoggedIn is Success) { - openRoomList() + OutlinedTextField( + value = state.login, + modifier = Modifier + .fillMaxWidth() + .padding(top = 8.dp), + onValueChange = { + viewModel.handle(LoginActions.SetLogin(it)) + }, + keyboardOptions = KeyboardOptions( + keyboardType = KeyboardType.Text, + ), + ) + OutlinedTextField( + value = state.password, + modifier = Modifier + .fillMaxWidth() + .padding(top = 8.dp), + onValueChange = { + viewModel.handle(LoginActions.SetPassword(it)) + }, + isError = isError, + keyboardOptions = KeyboardOptions( + keyboardType = KeyboardType.Password, + imeAction = ImeAction.Send, + ), + ) + if (isError) { + Text( + text = (state.isLoggedIn as? Fail)?.toString().orEmpty(), + color = MaterialTheme.colorScheme.error, + style = MaterialTheme.typography.bodySmall, + modifier = Modifier.padding(start = 16.dp) + ) + } + VectorButton( + text = "Submit", + onClick = { + viewModel.handle(LoginActions.Submit) + }, + enabled = state.submitEnabled, + modifier = Modifier + .align(Alignment.End) + .padding(top = 16.dp) + ) + if (state.isLoggedIn is Loading) { + // FIXME This does not work, we never enter this if block + CircularProgressIndicator( + modifier = Modifier.align(Alignment.CenterHorizontally) + ) + } + if (state.isLoggedIn is Success) { + openRoomList() + } } } } diff --git a/libraries/ui/screens/login/src/main/res/drawable/element_logo_green.xml b/libraries/ui/screens/login/src/main/res/drawable/element_logo_green.xml new file mode 100644 index 0000000000..e9b119c969 --- /dev/null +++ b/libraries/ui/screens/login/src/main/res/drawable/element_logo_green.xml @@ -0,0 +1,22 @@ + + + + + + diff --git a/libraries/ui/screens/roomlist/src/main/java/io/element/android/x/ui/screen/roomlist/RoomListActivity.kt b/libraries/ui/screens/roomlist/src/main/java/io/element/android/x/ui/screen/roomlist/RoomListActivity.kt index 033bd8c96e..ff7cce00e7 100644 --- a/libraries/ui/screens/roomlist/src/main/java/io/element/android/x/ui/screen/roomlist/RoomListActivity.kt +++ b/libraries/ui/screens/roomlist/src/main/java/io/element/android/x/ui/screen/roomlist/RoomListActivity.kt @@ -1,21 +1,29 @@ package io.element.android.x.ui.screen.roomlist import android.os.Bundle +import android.widget.Toast import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.foundation.Image +import androidx.compose.foundation.border +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.foundation.shape.CircleShape 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.ui.Modifier +import androidx.compose.ui.draw.clip import androidx.compose.ui.unit.dp import coil.compose.rememberAsyncImagePainter import com.airbnb.mvrx.Success import com.airbnb.mvrx.compose.collectAsState import com.airbnb.mvrx.compose.mavericksViewModel import io.element.android.x.ui.theme.ElementXTheme +import org.matrix.rustcomponents.sdk.Room class RoomListActivity : ComponentActivity() { @@ -45,8 +53,16 @@ class RoomListActivity : ComponentActivity() { OptionMenu(state.value.user, viewModel) val rooms = state.value.rooms if (rooms is Success) { - rooms().forEach { - Text(text = "Room: ${it.name() ?: it.id()}") + LazyColumn { + items(rooms()) { room -> + RoomCompose(room) { + Toast.makeText( + this@RoomListActivity, + "Room $it clicked!", + Toast.LENGTH_SHORT + ).show() + } + } } } } @@ -58,6 +74,31 @@ class RoomListActivity : ComponentActivity() { } } + @Composable + private fun RoomCompose(room: Room, onClick: (String) -> Unit) { + Row( + modifier = Modifier + .fillMaxWidth() + .clickable { onClick.invoke(room.id()) }, + ) { + Image( + painter = rememberAsyncImagePainter(model = room.avatarUrl()), + contentDescription = null, + modifier = Modifier.size(32.dp), + ) + Spacer(modifier = Modifier.width(8.dp)) + Column( + modifier = Modifier + .fillMaxWidth() + .height(32.dp), + ) { + Text(text = "Room: ${room.name() ?: room.id()}") + Text(text = if (room.isDirect()) "Direct" else "Room") + } + + } + } + @OptIn(ExperimentalMaterial3Api::class) @Composable private fun OptionMenu(matrixUser: MatrixUser, viewModel: RoomListViewModel) { @@ -69,8 +110,12 @@ class RoomListActivity : ComponentActivity() { Image( painter = rememberAsyncImagePainter(matrixUser.avatarUrl), contentDescription = null, - modifier = Modifier.size(48.dp) + modifier = Modifier + .size(48.dp) + .clip(CircleShape) + .border(1.5.dp, MaterialTheme.colorScheme.primary, CircleShape) ) + Spacer(modifier = Modifier.width(8.dp)) Text("${matrixUser.username}") } },