diff --git a/app/src/main/java/com/rosetta/messenger/MainActivity.kt b/app/src/main/java/com/rosetta/messenger/MainActivity.kt index 8f435d9..ddcd181 100644 --- a/app/src/main/java/com/rosetta/messenger/MainActivity.kt +++ b/app/src/main/java/com/rosetta/messenger/MainActivity.kt @@ -38,6 +38,7 @@ import com.rosetta.messenger.ui.chats.ChatsListScreen import com.rosetta.messenger.ui.chats.ChatDetailScreen import com.rosetta.messenger.ui.chats.SearchScreen import com.rosetta.messenger.network.SearchUser +import com.rosetta.messenger.ui.components.EmojiCache import com.rosetta.messenger.ui.onboarding.OnboardingScreen import com.rosetta.messenger.ui.splash.SplashScreen import com.rosetta.messenger.ui.theme.RosettaAndroidTheme @@ -58,6 +59,9 @@ class MainActivity : ComponentActivity() { // πŸ”₯ Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ ProtocolManager для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ статусов ProtocolManager.initialize(this) + // πŸš€ ΠŸΡ€Π΅Π΄Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ эмодзи Π² Ρ„ΠΎΠ½Π΅ для ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎΠ³ΠΎ открытия ΠΏΠΈΠΊΠ΅Ρ€Π° + EmojiCache.preload(this) + setContent { val scope = rememberCoroutineScope() val isDarkTheme by preferencesManager.isDarkTheme.collectAsState(initial = true) diff --git a/app/src/main/java/com/rosetta/messenger/ui/chats/ChatDetailScreen.kt b/app/src/main/java/com/rosetta/messenger/ui/chats/ChatDetailScreen.kt index a2a1f92..834d7c7 100644 --- a/app/src/main/java/com/rosetta/messenger/ui/chats/ChatDetailScreen.kt +++ b/app/src/main/java/com/rosetta/messenger/ui/chats/ChatDetailScreen.kt @@ -247,7 +247,15 @@ fun ChatDetailScreen( // Высота эмодзи ΠΏΠ°Π½Π΅Π»ΠΈ - Π±Π΅Ρ€Ρ‘ΠΌ высоту ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ Ссли ΠΎΠ½Π° ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Π°, ΠΈΠ½Π°Ρ‡Π΅ 280dp val imeInsets = WindowInsets.ime val imeHeight = with(density) { imeInsets.getBottom(density).toDp() } - val emojiPanelHeight = if (imeHeight > 50.dp) imeHeight else 280.dp + + // πŸ”₯ Π—Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅ΠΌ высоту ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ ΠΊΠΎΠ³Π΄Π° ΠΎΠ½Π° ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Π° + var savedKeyboardHeight by remember { mutableStateOf(280.dp) } + LaunchedEffect(imeHeight) { + if (imeHeight > 50.dp) { + savedKeyboardHeight = imeHeight + } + } + val emojiPanelHeight = savedKeyboardHeight // πŸ”₯ Reply/Forward state val replyMessages by viewModel.replyMessages.collectAsState() @@ -1927,8 +1935,16 @@ private fun MessageInputBar( val imeHeight = with(density) { imeInsets.getBottom(density).toDp() } val isKeyboardVisible = imeHeight > 0.dp - // Высота ΠΏΠ°Π½Π΅Π»ΠΈ эмодзи = высота ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ (ΠΈΠ»ΠΈ 280dp ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ) - val emojiPanelHeight = if (imeHeight > 50.dp) imeHeight else 280.dp + // πŸ”₯ Π—Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅ΠΌ высоту ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ ΠΊΠΎΠ³Π΄Π° ΠΎΠ½Π° ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Π° + var savedKeyboardHeight by remember { mutableStateOf(280.dp) } + LaunchedEffect(imeHeight) { + if (imeHeight > 50.dp) { + savedKeyboardHeight = imeHeight + } + } + + // Высота ΠΏΠ°Π½Π΅Π»ΠΈ эмодзи = сохранённая высота ΠΊΠ»Π°Π²ΠΈΠ°Ρ‚ΡƒΡ€Ρ‹ + val emojiPanelHeight = savedKeyboardHeight // БостояниС ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΠΈ val canSend = remember(value) { value.isNotBlank() } diff --git a/app/src/main/java/com/rosetta/messenger/ui/components/AppleEmojiPicker.kt b/app/src/main/java/com/rosetta/messenger/ui/components/AppleEmojiPicker.kt index c021d08..8001ec9 100644 --- a/app/src/main/java/com/rosetta/messenger/ui/components/AppleEmojiPicker.kt +++ b/app/src/main/java/com/rosetta/messenger/ui/components/AppleEmojiPicker.kt @@ -36,7 +36,6 @@ import coil.request.ImageRequest import com.rosetta.messenger.ui.onboarding.PrimaryBlue import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch -import kotlinx.coroutines.runBlocking import kotlinx.coroutines.withContext /** @@ -608,15 +607,11 @@ fun AppleEmojiPickerPanel( var selectedCategory by remember { mutableStateOf(EMOJI_CATEGORIES[0]) } val gridState = rememberLazyGridState() - // πŸš€ ΠŸΡ€Π΅Π΄Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ эмодзи БИНΠ₯РОННО ΠΏΡ€ΠΈ создании ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π° - val emojisReady = remember { + // πŸš€ Π—Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ эмодзи АБИНΠ₯РОННО - Π±Π΅Π· Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ UI + LaunchedEffect(Unit) { if (!EmojiCache.isLoaded) { - // Π—Π°Π³Ρ€ΡƒΠΆΠ°Π΅ΠΌ синхронно для ΠΌΠ³Π½ΠΎΠ²Π΅Π½Π½ΠΎΠ³ΠΎ отобраТСния - runBlocking { - EmojiCache.loadEmojis(context) - } + EmojiCache.loadEmojis(context) } - true } // Π’Π΅ΠΊΡƒΡ‰ΠΈΠ΅ эмодзи для Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΉ ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΈ - ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ derivedStateOf для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ