⎇ 5227fbf1abfb2a437968ebc63692560c3a929230
keyboard/src/main/java/com/rizoma/trazo/ui/EmojiGrid.kt
History
raw
Trazo: pulido v0.4 — háptica, palabra siguiente, emojis y ajustes
1package com.rizoma.trazo.ui
2
3import androidx.compose.foundation.clickable
4import androidx.compose.foundation.layout.Box
5import androidx.compose.foundation.layout.fillMaxWidth
6import androidx.compose.foundation.layout.height
7import androidx.compose.foundation.layout.padding
8import androidx.compose.foundation.lazy.grid.GridCells
9import androidx.compose.foundation.lazy.grid.GridItemSpan
10import androidx.compose.foundation.lazy.grid.LazyGridScope
11import androidx.compose.foundation.lazy.grid.LazyVerticalGrid
12import androidx.compose.foundation.lazy.grid.items
13import androidx.compose.material3.Text
14import androidx.compose.runtime.Composable
15import androidx.compose.ui.Alignment
16import androidx.compose.ui.Modifier
17import androidx.compose.ui.unit.dp
18import androidx.compose.ui.unit.sp
19import com.rizoma.trazo.model.Emojis
20import com.rizoma.trazo.ui.theme.Tenue
21
22/**
23 * Panel de emojis desplazable: primero "recientes" (si los hay), luego las categorías.
24 * Sustituye al grid 3x3 cuando la capa de emojis está activa.
25 */
26@Composable
27fun EmojiPad(
28 recents: List<String>,
29 onEmoji: (String) -> Unit,
30 modifier: Modifier = Modifier,
31) {
32 LazyVerticalGrid(
33 columns = GridCells.Fixed(8),
34 modifier = modifier.fillMaxWidth(),
35 ) {
36 if (recents.isNotEmpty()) {
37 header("recientes")
38 items(recents, key = { "r:$it" }) { EmojiCell(it, onEmoji) }
39 }
40 Emojis.categories.forEach { (name, list) ->
41 header(name)
42 items(list, key = { "$name:$it" }) { EmojiCell(it, onEmoji) }
43 }
44 }
45}
46
47private fun LazyGridScope.header(text: String) {
48 item(span = { GridItemSpan(maxLineSpan) }) {
49 Text(
50 text = text,
51 color = Tenue,
52 fontSize = 11.sp,
53 modifier = Modifier.padding(start = 10.dp, top = 10.dp, bottom = 2.dp),
54 )
55 }
56}
57
58@Composable
59private fun EmojiCell(emoji: String, onEmoji: (String) -> Unit) {
60 Box(
61 Modifier
62 .fillMaxWidth()
63 .height(42.dp)
64 .clickable { onEmoji(emoji) },
65 contentAlignment = Alignment.Center,
66 ) {
67 Text(text = emoji, fontSize = 24.sp)
68 }
69}