From 01e10f4680383e7a562414054c308a7bf27e9699 Mon Sep 17 00:00:00 2001 From: Ren Amamiya Date: Tue, 30 Jun 2026 09:20:56 +0700 Subject: [PATCH] update chat screen spacing --- .../src/androidMain/AndroidManifest.xml | 3 +- .../kotlin/su/reya/coop/screens/ChatScreen.kt | 73 +++++++++++-------- 2 files changed, 43 insertions(+), 33 deletions(-) diff --git a/composeApp/src/androidMain/AndroidManifest.xml b/composeApp/src/androidMain/AndroidManifest.xml index 58fb629..a25745c 100644 --- a/composeApp/src/androidMain/AndroidManifest.xml +++ b/composeApp/src/androidMain/AndroidManifest.xml @@ -36,7 +36,8 @@ + android:theme="@style/Theme.App.Starting" + android:windowSoftInputMode="adjustResize"> diff --git a/composeApp/src/androidMain/kotlin/su/reya/coop/screens/ChatScreen.kt b/composeApp/src/androidMain/kotlin/su/reya/coop/screens/ChatScreen.kt index 793fd9d..63a552c 100644 --- a/composeApp/src/androidMain/kotlin/su/reya/coop/screens/ChatScreen.kt +++ b/composeApp/src/androidMain/kotlin/su/reya/coop/screens/ChatScreen.kt @@ -7,10 +7,13 @@ import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.ime import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.union import androidx.compose.foundation.layout.widthIn import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items @@ -19,6 +22,7 @@ import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.Badge import androidx.compose.material3.BadgedBox import androidx.compose.material3.Button +import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi import androidx.compose.material3.FilledTonalButton import androidx.compose.material3.FilledTonalIconButton @@ -29,6 +33,7 @@ import androidx.compose.material3.LoadingIndicator import androidx.compose.material3.MaterialShapes import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Scaffold +import androidx.compose.material3.ScaffoldDefaults import androidx.compose.material3.SnackbarHost import androidx.compose.material3.Surface import androidx.compose.material3.Text @@ -81,6 +86,7 @@ import su.reya.coop.shared.nameFlow import su.reya.coop.shared.pictureFlow import su.reya.coop.short +@OptIn(ExperimentalMaterial3ExpressiveApi::class) @Composable fun ChatScreen(id: Long, screening: Boolean = false) { val snackbarHostState = LocalSnackbarHostState.current @@ -165,6 +171,7 @@ fun ChatScreen(id: Long, screening: Boolean = false) { } Scaffold( + contentWindowInsets = ScaffoldDefaults.contentWindowInsets.union(WindowInsets.ime), containerColor = MaterialTheme.colorScheme.surfaceContainer, snackbarHost = { SnackbarHost(snackbarHostState) }, topBar = { @@ -291,12 +298,14 @@ fun ChatScreen(id: Long, screening: Boolean = false) { Row( modifier = Modifier .fillMaxWidth() - .padding(16.dp), + .padding(horizontal = 16.dp, vertical = 8.dp), horizontalArrangement = Arrangement.spacedBy(8.dp), ) { Button( onClick = { navigator.goBack() }, - modifier = Modifier.weight(1f) + modifier = Modifier + .weight(1f) + .size(ButtonDefaults.MediumContainerHeight) ) { Text( text = "Reject", @@ -305,7 +314,9 @@ fun ChatScreen(id: Long, screening: Boolean = false) { } FilledTonalButton( onClick = { requireScreening = false }, - modifier = Modifier.weight(1f) + modifier = Modifier + .weight(1f) + .size(ButtonDefaults.MediumContainerHeight) ) { Text( text = "Accept", @@ -534,36 +545,34 @@ fun ChatInput( onValueChange: (String) -> Unit, onSend: () -> Unit ) { - Surface(modifier = Modifier.fillMaxWidth()) { - Row( - modifier = Modifier.padding(horizontal = 16.dp, vertical = 8.dp), - verticalAlignment = Alignment.Bottom - ) { - TextField( - value = value, - onValueChange = onValueChange, - placeholder = { Text("Message") }, - shape = RoundedCornerShape(28.dp), - colors = TextFieldDefaults.colors( - focusedIndicatorColor = Color.Transparent, - unfocusedIndicatorColor = Color.Transparent - ), - modifier = Modifier.weight(1f) + Row( + modifier = Modifier.padding(horizontal = 16.dp, vertical = 8.dp), + verticalAlignment = Alignment.Bottom + ) { + TextField( + value = value, + onValueChange = onValueChange, + placeholder = { Text("Message") }, + shape = RoundedCornerShape(28.dp), + colors = TextFieldDefaults.colors( + focusedIndicatorColor = Color.Transparent, + unfocusedIndicatorColor = Color.Transparent + ), + modifier = Modifier.weight(1f) + ) + Spacer(modifier = Modifier.size(8.dp)) + FilledTonalIconButton( + onClick = onSend, + modifier = Modifier.size(56.dp), + colors = IconButtonDefaults.filledTonalIconButtonColors( + containerColor = MaterialTheme.colorScheme.surfaceVariant, + contentColor = MaterialTheme.colorScheme.onSurfaceVariant + ) + ) { + Icon( + painter = painterResource(Res.drawable.ic_send), + contentDescription = "Send" ) - Spacer(modifier = Modifier.size(8.dp)) - FilledTonalIconButton( - onClick = onSend, - modifier = Modifier.size(56.dp), - colors = IconButtonDefaults.filledTonalIconButtonColors( - containerColor = MaterialTheme.colorScheme.surfaceVariant, - contentColor = MaterialTheme.colorScheme.onSurfaceVariant - ) - ) { - Icon( - painter = painterResource(Res.drawable.ic_send), - contentDescription = "Send" - ) - } } } }