From 09b4cd8f8b4c29583e02b3b9eebfc0c8383ab218 Mon Sep 17 00:00:00 2001 From: Liviu Timar <65943217+liviu-timar@users.noreply.github.com> Date: Fri, 6 Sep 2024 15:33:16 +0300 Subject: [PATCH] Fix edge to edge extra padding and overlapping content (#5398) --- .../chat/android/compose/ui/messages/MessagesScreen.kt | 7 +++++-- .../compose/ui/messages/attachments/AttachmentsPicker.kt | 4 +++- .../compose/ui/messages/composer/MessageComposer.kt | 4 ++-- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/messages/MessagesScreen.kt b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/messages/MessagesScreen.kt index 8863b5bc22b..ccc30f286d6 100644 --- a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/messages/MessagesScreen.kt +++ b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/messages/MessagesScreen.kt @@ -30,13 +30,14 @@ import androidx.compose.foundation.background import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.BoxScope import androidx.compose.foundation.layout.WindowInsets +import androidx.compose.foundation.layout.consumeWindowInsets import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.heightIn import androidx.compose.foundation.layout.ime import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.systemBarsPadding +import androidx.compose.foundation.layout.safeDrawingPadding import androidx.compose.foundation.layout.wrapContentHeight import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.MaterialTheme @@ -203,7 +204,9 @@ public fun MessagesScreen( Box( modifier = Modifier .fillMaxSize() - .systemBarsPadding() + .safeDrawingPadding() + // Explicitly consume IME inset (even if not needed), to avoid children applying it again on some devices. + .consumeWindowInsets(WindowInsets.ime) .testTag("Stream_MessagesScreen"), ) { Scaffold( diff --git a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/messages/attachments/AttachmentsPicker.kt b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/messages/attachments/AttachmentsPicker.kt index 6086ac3171b..8a50f53c2ba 100644 --- a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/messages/attachments/AttachmentsPicker.kt +++ b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/messages/attachments/AttachmentsPicker.kt @@ -27,6 +27,7 @@ import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.safeDrawingPadding import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.Card import androidx.compose.material.Icon @@ -92,8 +93,9 @@ public fun AttachmentsPicker( Box( modifier = Modifier - .fillMaxSize() .background(ChatTheme.attachmentPickerTheme.backgroundOverlay) + .safeDrawingPadding() + .fillMaxSize() .clickable( onClick = onDismiss, indication = null, diff --git a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/messages/composer/MessageComposer.kt b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/messages/composer/MessageComposer.kt index 3583ce3ac36..d34ccb76917 100644 --- a/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/messages/composer/MessageComposer.kt +++ b/stream-chat-android-compose/src/main/java/io/getstream/chat/android/compose/ui/messages/composer/MessageComposer.kt @@ -30,8 +30,8 @@ import androidx.compose.foundation.layout.RowScope import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height -import androidx.compose.foundation.layout.imePadding import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.safeDrawingPadding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width import androidx.compose.material.Checkbox @@ -218,7 +218,7 @@ public fun MessageComposer( val messageComposerState by viewModel.messageComposerState.collectAsState() MessageComposer( - modifier = modifier.imePadding(), + modifier = modifier.safeDrawingPadding(), onSendMessage = { text, attachments -> val messageWithData = viewModel.buildNewMessage(text, attachments)