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,10 +1553,14 @@ 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)
showEmojiPicker = true // Небольшая задержка перед показом эмодзи для плавного перехода
scope.launch {
delay(50)
showEmojiPicker = true
}
} }
} }
@@ -1761,26 +1766,36 @@ 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"
AppleEmojiPickerPanel( )
isDarkTheme = isDarkTheme,
onEmojiSelected = { emoji -> Box(
onValueChange(value + emoji)
},
onClose = {
showEmojiPicker = false
},
modifier = Modifier modifier = Modifier
.fillMaxWidth() .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 } // End of if (!isBlocked) for emoji picker
} }
} }