feat: Adjust emoji panel display logic in MessageInputBar for smoother user experience
This commit is contained in:
@@ -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
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user