feat: Adjust emoji panel display logic in MessageInputBar for smoother user experience

This commit is contained in:
k1ngsterr1
2026-01-13 00:51:41 +05:00
parent 645f208918
commit da008439ba

View File

@@ -28,6 +28,7 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.draw.clipToBounds
import androidx.compose.ui.unit.IntOffset
import androidx.compose.ui.draw.scale
import androidx.compose.ui.draw.shadow
@@ -1552,12 +1553,16 @@ private fun MessageInputBar(
showEmojiPicker = false
// Клавиатура откроется автоматически т.к. фокус остался
} else {
// Закрываем клавиатуру но оставляем фокус
keyboardController?.hide()
// Сразу показываем emoji panel (высота та же - нет прыжка)
// Закрываем клавиатуру через IMM
val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(view.windowToken, 0)
// Небольшая задержка перед показом эмодзи для плавного перехода
scope.launch {
delay(50)
showEmojiPicker = true
}
}
}
// Функция отправки - НЕ закрывает клавиатуру (UX правило #6)
fun handleSend() {
@@ -1761,13 +1766,22 @@ private fun MessageInputBar(
}
} // End of else (not blocked)
// 🔥 APPLE EMOJI PICKER - с категориями и фоновой загрузкой
// 🔥 APPLE EMOJI PICKER - плавная анимация высоты
if (!isBlocked) {
AnimatedVisibility(
visible = showEmojiPicker,
enter = fadeIn(tween(150)),
exit = fadeOut(tween(100))
// Анимируем высоту панели
val animatedHeight by animateDpAsState(
targetValue = if (showEmojiPicker) emojiPanelHeight else 0.dp,
animationSpec = tween(durationMillis = 250, easing = FastOutSlowInEasing),
label = "EmojiPanelHeight"
)
Box(
modifier = Modifier
.fillMaxWidth()
.height(animatedHeight)
.clipToBounds()
) {
if (showEmojiPicker) {
AppleEmojiPickerPanel(
isDarkTheme = isDarkTheme,
onEmojiSelected = { emoji ->
@@ -1781,6 +1795,7 @@ private fun MessageInputBar(
.height(emojiPanelHeight)
)
}
}
} // End of if (!isBlocked) for emoji picker
}
}