diff --git a/app/src/main/java/dev/lonami/talaria/ui/ChatScreen.kt b/app/src/main/java/dev/lonami/talaria/ui/ChatScreen.kt index ef738d7..ff564d3 100644 --- a/app/src/main/java/dev/lonami/talaria/ui/ChatScreen.kt +++ b/app/src/main/java/dev/lonami/talaria/ui/ChatScreen.kt @@ -1,19 +1,22 @@ package dev.lonami.talaria.ui -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.* import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.text.KeyboardActions +import androidx.compose.foundation.text.KeyboardOptions +import androidx.compose.material.Button import androidx.compose.material.Card import androidx.compose.material.Text -import androidx.compose.runtime.Composable -import androidx.compose.runtime.collectAsState -import androidx.compose.runtime.getValue +import androidx.compose.material.TextField +import androidx.compose.runtime.* import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.lifecycle.viewmodel.compose.viewModel +import dev.lonami.talaria.R import dev.lonami.talaria.model.Message import dev.lonami.talaria.ui.theme.TalariaTheme @@ -37,16 +40,53 @@ fun MessageCard(message: Message) { } @Composable -fun MessageList(messages: List) { - LazyColumn { +fun MessageList(messages: List, modifier: Modifier) { + LazyColumn(modifier) { items(messages.size) { MessageCard(messages[it]) } } } +@Composable +fun MessageInputField( + messageText: String, + onMessageChanged: (String) -> Unit, + onSendMessage: () -> Unit +) { + Row { + TextField( + messageText, + placeholder = { Text(stringResource(R.string.write_message)) }, + keyboardOptions = KeyboardOptions( + imeAction = ImeAction.Send + ), + keyboardActions = KeyboardActions( + onDone = { onSendMessage() } + ), + modifier = Modifier.weight(1.0f), + onValueChange = onMessageChanged + ) + Button( + onClick = onSendMessage + ) { + Text(stringResource(R.string.send_message)) + } + } +} + @Composable fun ChatScreen(chatViewModel: ChatViewModel = viewModel()) { val chatUiState by chatViewModel.uiState.collectAsState() - MessageList(chatUiState.messages) + var messageText by remember { mutableStateOf("") } + + Column(modifier = Modifier.fillMaxSize()) { + MessageList(chatUiState.messages, modifier = Modifier.weight(1.0f)) + MessageInputField(messageText, onMessageChanged = { + messageText = it + }, onSendMessage = { + chatViewModel.sendMessage(messageText) + messageText = "" + }) + } } @Preview diff --git a/app/src/main/java/dev/lonami/talaria/ui/ChatUiState.kt b/app/src/main/java/dev/lonami/talaria/ui/ChatUiState.kt index 579b836..9f63a18 100644 --- a/app/src/main/java/dev/lonami/talaria/ui/ChatUiState.kt +++ b/app/src/main/java/dev/lonami/talaria/ui/ChatUiState.kt @@ -2,4 +2,4 @@ package dev.lonami.talaria.ui import dev.lonami.talaria.model.Message -data class ChatUiState(val messages: List = listOf()) +data class ChatUiState(val messages: MutableList = mutableListOf()) diff --git a/app/src/main/java/dev/lonami/talaria/ui/ChatViewModel.kt b/app/src/main/java/dev/lonami/talaria/ui/ChatViewModel.kt index baeef01..97880b4 100644 --- a/app/src/main/java/dev/lonami/talaria/ui/ChatViewModel.kt +++ b/app/src/main/java/dev/lonami/talaria/ui/ChatViewModel.kt @@ -2,6 +2,7 @@ package dev.lonami.talaria.ui import androidx.lifecycle.ViewModel import dev.lonami.talaria.data.MessageSource +import dev.lonami.talaria.model.Message import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow @@ -11,7 +12,11 @@ class ChatViewModel : ViewModel() { val uiState: StateFlow = _uiState.asStateFlow() private fun loadMessages() { - _uiState.value = ChatUiState(MessageSource.loadMessages()) + _uiState.value = ChatUiState(MessageSource.loadMessages().toMutableList()) + } + + fun sendMessage(message: String) { + _uiState.value.messages.add(Message("You", message)) } init { diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b22d459..50626ec 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -10,4 +10,6 @@ 12345 Login Profile Picture - \ No newline at end of file + Write a messageā€¦ + Send +