refactor(ui): Improve EmojiPicker layout constraints (#4250)

Signed-off-by: James Rich <2199651+jamesarich@users.noreply.github.com>
This commit is contained in:
James Rich 2026-01-17 17:39:15 -06:00 committed by GitHub
parent 46a2c68830
commit d9bc79b396
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 30 additions and 38 deletions

View file

@ -1,5 +1,5 @@
/*
* Copyright (c) 2025 Meshtastic LLC
* Copyright (c) 2025-2026 Meshtastic LLC
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -14,16 +14,14 @@
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package org.meshtastic.core.ui.emoji
import androidx.activity.compose.BackHandler
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxHeight
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.material3.MaterialTheme
import androidx.compose.foundation.layout.wrapContentHeight
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.viewinterop.AndroidView
@ -37,28 +35,26 @@ fun EmojiPicker(
onDismiss: () -> Unit = {},
onConfirm: (String) -> Unit,
) {
Column(verticalArrangement = Arrangement.Bottom) {
BackHandler { onDismiss() }
AndroidView(
factory = { context ->
androidx.emoji2.emojipicker.EmojiPickerView(context).apply {
clipToOutline = true
setRecentEmojiProvider(
RecentEmojiProviderAdapter(
CustomRecentEmojiProvider(viewModel.customEmojiFrequency) { updatedValue ->
viewModel.customEmojiFrequency = updatedValue
},
),
)
setOnEmojiPickedListener { emoji ->
onDismiss()
onConfirm(emoji.emoji)
}
BackHandler { onDismiss() }
AndroidView(
factory = { context ->
androidx.emoji2.emojipicker.EmojiPickerView(context).apply {
clipToOutline = true
setRecentEmojiProvider(
RecentEmojiProviderAdapter(
CustomRecentEmojiProvider(viewModel.customEmojiFrequency) { updatedValue ->
viewModel.customEmojiFrequency = updatedValue
},
),
)
setOnEmojiPickedListener { emoji ->
onDismiss()
onConfirm(emoji.emoji)
}
},
modifier = Modifier.fillMaxWidth().background(MaterialTheme.colorScheme.background),
)
}
}
},
modifier = Modifier.fillMaxWidth().wrapContentHeight().verticalScroll(rememberScrollState()),
)
}
@Composable

View file

@ -22,12 +22,10 @@ import androidx.compose.foundation.border
import androidx.compose.foundation.clickable
import androidx.compose.foundation.combinedClickable
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.heightIn
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.material.icons.Icons
@ -159,15 +157,13 @@ internal fun MessageItem(
ActiveSheet.Emoji -> {
// Limit height of emoji picker so it doesn't look weird full screen
Box(modifier = Modifier.heightIn(max = 400.dp)) {
EmojiPicker(
onDismiss = { activeSheet = null },
onConfirm = { emoji ->
activeSheet = null
sendReaction(emoji)
},
)
}
EmojiPicker(
onDismiss = { activeSheet = null },
onConfirm = { emoji ->
activeSheet = null
sendReaction(emoji)
},
)
}
null -> {}