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