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,10 +1553,14 @@ private fun MessageInputBar(
showEmojiPicker = false
// Клавиатура откроется автоматически т.к. фокус остался
} else {
// Закрываем клавиатуру но оставляем фокус
keyboardController?.hide()
// Сразу показываем emoji panel (высота та же - нет прыжка)
showEmojiPicker = true
// Закрываем клавиатуру через IMM
val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
imm.hideSoftInputFromWindow(view.windowToken, 0)
// Небольшая задержка перед показом эмодзи для плавного перехода
scope.launch {
delay(50)
showEmojiPicker = true
}
}
}
@@ -1761,26 +1766,36 @@ 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))
) {
AppleEmojiPickerPanel(
isDarkTheme = isDarkTheme,
onEmojiSelected = { emoji ->
onValueChange(value + emoji)
},
onClose = {
showEmojiPicker = false
},
// Анимируем высоту панели
val animatedHeight by animateDpAsState(
targetValue = if (showEmojiPicker) emojiPanelHeight else 0.dp,
animationSpec = tween(durationMillis = 250, easing = FastOutSlowInEasing),
label = "EmojiPanelHeight"
)
Box(
modifier = Modifier
.fillMaxWidth()
.height(emojiPanelHeight)
)
}
.height(animatedHeight)
.clipToBounds()
) {
if (showEmojiPicker) {
AppleEmojiPickerPanel(
isDarkTheme = isDarkTheme,
onEmojiSelected = { emoji ->
onValueChange(value + emoji)
},
onClose = {
showEmojiPicker = false
},
modifier = Modifier
.fillMaxWidth()
.height(emojiPanelHeight)
)
}
}
} // End of if (!isBlocked) for emoji picker
}
}